static void CreateFileString(string sData, string sOutpuFilename, string sFileId, int iSegmentIndex, int iSegmentCount, int iDataCols = 14) { Pdf417CodeOptions xOptions = new Pdf417CodeOptions(); xOptions.m_bMacroPDF = true; xOptions.m_sMacroPDFFileID = sFileId; xOptions.m_iMacroPDFSegmentIdx = iSegmentIndex; xOptions.m_iMacroPDFSegmentCount = iSegmentCount; xOptions.m_iDataColumns = iDataCols; xOptions.m_iDataRows = 0; xOptions.m_fY2XRatio = 4; CodeEncoder bcPdf417 = CodeEncoder.CreateCode(CodeType.Pdf417, new TextPayload(sData), xOptions, //CodeRenderer.Create( CodeRenderType.Png , new PngRenderOptions( 128 , 128 , sOutpuFilename + ".png" ) ) ); CodeRenderer.Create(CodeRenderType.Svg, new SvgRenderOptions() { m_bHorizontalOptimization = false })); File.WriteAllText(sOutpuFilename + ".svg", bcPdf417.Renderer.GetStringData()); }
public byte[] CompileProgram() { var astCompiler = new AstCompiler(_programAst); var emitter = astCompiler.CreateEmitter(); var vmCodeEmitter = new HappyPenguinCodeEmitter(); emitter.EmitCode(vmCodeEmitter); //This will emit code to the code emitter object vmCodeEmitter.Emit(OpCode.Halt); //Add a final halt var compiledProgram = vmCodeEmitter.GetEmittedCode(); var codeEncoder = new CodeEncoder(); byte[] compiledProgramBytes; using (var outStream = new MemoryStream()) { codeEncoder.EncodeCodeToStream(compiledProgram, outStream); compiledProgramBytes = compiledProgramBytes = outStream.ToArray(); } return(compiledProgramBytes); }
private static void Main(string[] args) { /* * if (args.Length == 0) * { * Console.WriteLine("No input file specified"); * return; * } * * var sourcePath = args[0]; */ var codeEmitter = new HappyPenguinCodeEmitter(); /* * codeEmitter.Emit(OpCode.PushA); * codeEmitter.Emit(OpCode.Load, 0xFF, 0xFF); * codeEmitter.Emit(OpCode.Load, 0xFFFF); * codeEmitter.Emit(OpCode.Load, 0xAF, 0xAF); * codeEmitter.Emit(OpCode.Load, 0xAFAF); * codeEmitter.Emit(OpCode.Return); */ //The # represents the programCounter number of the below program codeEmitter.Emit(OpCode.Nop); //0. codeEmitter.Emit(OpCode.MovReg, (byte)RegisterId.A, 0x44); //1. Set A to 0x44 codeEmitter.Emit(OpCode.DupA, 0xFFAA); //2. Copy the data in A to 0xFFAA in memory codeEmitter.Emit(OpCode.LoadB, 0xFFAA); //3. Copy the data at 0xFFAA from A to B codeEmitter.Emit(OpCode.PushA); //4. Push A's value onto the stack codeEmitter.Emit(OpCode.MovReg, (byte)RegisterId.A, 0x33); //5. Set A to 0x33 codeEmitter.Emit(OpCode.XchangeAB); //6. Exchange the values of A and B codeEmitter.Emit(OpCode.PopA); //7. Pop the stored value of A from the stack back into A codeEmitter.Emit(OpCode.MovReg, (byte)RegisterId.A, 0x22); //8. Set A to 0x22 codeEmitter.Emit(OpCode.CompareReg, (byte)RegisterId.A, (byte)RegisterId.B); //9. Compare A and B codeEmitter.Emit(OpCode.JumpZ, 0xE); //10. Jump to PC=0x if the registers in the previous comparison were equal codeEmitter.Emit(OpCode.DupA, 0xFFAA); //11. Copy the data in A to 0xFFAA in memory codeEmitter.Emit(OpCode.LoadB, 0xFFAA); //12. Copy the data at 0xFFAA from A to B codeEmitter.Emit(OpCode.Jump, 0x9); //13. Jump back to line 0x9 to do comparison again codeEmitter.Emit(OpCode.Nop); //14. Jump target from 10. codeEmitter.Emit(OpCode.Jump, 0x14); //15. Jump to after function codeEmitter.Emit(OpCode.PopA); //16. Retrieve A parameter codeEmitter.Emit(OpCode.Nop); //17. Temporary placeholder codeEmitter.Emit(OpCode.Nop); //18. Temporary placeholder codeEmitter.Emit(OpCode.Return); //19. Return from function codeEmitter.Emit(OpCode.Nop); //20. Jump target from 14. codeEmitter.Emit(OpCode.MovReg, (byte)RegisterId.A, 0x4); //21. Set A to 0x4 codeEmitter.Emit(OpCode.ShiftLeft, (byte)RegisterId.A, 0x2); //22. Do a simple multiply by 4 with shifting codeEmitter.Emit(OpCode.PushA); //23. Store A codeEmitter.Emit(OpCode.PopB); //24. Restore B from stack codeEmitter.Emit(OpCode.ShiftRight, (byte)RegisterId.A, 0x2); //25. Undo the multiply codeEmitter.Emit(OpCode.CompareReg, (byte)RegisterId.A, (byte)RegisterId.B); //26. Compare A and B codeEmitter.Emit(OpCode.JumpZ, 0x1D); //27. Jump to PC=1d if the registers in the previous comparison were equal codeEmitter.Emit(OpCode.Fault, 0x1); //28. Fault with code 0x1 codeEmitter.Emit(OpCode.Nop); //29. Jump target codeEmitter.Emit(OpCode.MovReg, (byte)RegisterId.A, 0x11); //30. Load 0x11 into A as the call target codeEmitter.Emit(OpCode.PushA); //31. Push the A register onto the stack as the call target codeEmitter.Emit(OpCode.Call); //32. Call the function from the address on the stack codeEmitter.Emit(OpCode.Halt); //End of program. Halt. var vmProgram = codeEmitter.GetEmittedCode(); var codeEncoder = new CodeEncoder(); using (var outputFileStream = File.Open("testprogram.🐧", FileMode.Create)) { var outStream = new MemoryStream(); codeEncoder.EncodeCodeToStream(vmProgram, outStream); outStream.Position = 0; var loadedProgram = codeEncoder.ReadCodeFromStream(outStream); outStream.Position = 0; outStream.CopyTo(outputFileStream); } var executor = new ProgramExecutor(vmProgram); executor.InitializeMachine(); executor.ExecuteCode(); //Dump memory /* * for (int i = 0; i < executor.Memory.Length; i++) * { * Console.Write($"{executor.Memory[i]} "); * } */ }
static void Main(string[] args) { // quick and easy code encode string dummyText = @"A barcode (also bar code) is an optical, machine-readable representation of data; the data usually describes something about the object that carries the barcode. Traditional barcodes systematically represent data by varying the widths and spacings of parallel lines, and may be referred to as linear or one-dimensional (1D). Later, two-dimensional (2D) variants were developed, using rectangles, dots, hexagons and other geometric patterns, called matrix codes or 2D barcodes, although they do not use bars as such. Initially, barcodes were only scanned by special optical scanners called barcode readers."; CodeEncoder bc128 = CodeEncoder.CreateCode(CodeType.Code128, new TextPayload("7560001000234"), null, CodeRenderer.Create(CodeRenderType.Svg, new SvgRenderOptions() { m_iPixelPerModuleY = 20 })); //CodeRenderer.Create( CodeRenderType.Xaml) ); File.WriteAllText("test_code128.svg", bc128.Renderer.GetStringData()); // //string sTest128 = CodeDecoder.Decode(bc128.Data).Text; // quick and easy code encode CodeEncoder bcAztec = CodeEncoder.CreateCode(CodeType.Aztec, new TextPayload(dummyText), null, CodeRenderer.Create(CodeRenderType.Png, new PngRenderOptions(128, 128))); File.WriteAllBytes("test_aztec.png", bcAztec.Renderer.GetByteData()); // //string sTestAztec = CodeDecoder.Decode(bcAztec.Data).Text; string sTestAztecPng = CodeDecoder.Decode(File.ReadAllBytes("test_aztec.png")).Text; // multiple code render and data acquire CodeEncoder bcQRCode = CodeEncoder.CreateCode(CodeType.QR, new TextPayload(dummyText), null, CodeRenderer.Create(CodeRenderType.Png, new PngRenderOptions(256, 256))); File.WriteAllBytes("test_qr.png", bcQRCode.Renderer.GetByteData()); // //string sTestsQR=CodeDecoder.Decode( bcQRCode.Data ).Text; string sTestQRPng = CodeDecoder.Decode(File.ReadAllBytes("test_qr.png")).Text; // custom render CodeRenderer xSvgOutput = CodeRenderer.Create(CodeRenderType.Svg, new SvgRenderOptions()); xSvgOutput.Render(bcQRCode.Data); File.WriteAllText("test.svg", xSvgOutput.GetStringData()); // acquire data byte[] sPngData = bcQRCode.Renderer.GetByteData(); string sSvgData = xSvgOutput.GetStringData(); // SwissQR - payload Contact _contact = new Contact("John Doe", "3003", "Bern", "CH", "Parlamentsgebäude", "1"); Iban _iban = new Iban("CH2609000000857666015", Iban.IbanType.Iban); Reference _reference = new Reference(Reference.ReferenceType.QRR, "990005000000000320071012303", Reference.ReferenceTextType.QrReference); Currency _currency = Currency.CHF; decimal _amount = 100.25m; SwissQrCodePayload dataQR = new SwissQrCodePayload(_iban, _currency, _contact, _reference, null, _amount, null, null); CodeEncoder bcQRSwiss = CodeEncoder.CreateCode(CodeType.SwissQR, dataQR, null, CodeRenderer.Create(CodeRenderType.Png, new PngRenderOptions(256, 256))); File.WriteAllBytes("test_swissqr.png", bcQRSwiss.Renderer.GetByteData()); // //string sQRSwiss = CodeDecoder.Decode(bcQRSwiss.Data).Text; string sQRSwissPng = CodeDecoder.Decode(File.ReadAllBytes("test_swissqr.png")).Text; // MacroPDF417 SplitFile("~pdf417dump.cab.txt", "NetCore.seg", "001899017"); }