public bool ExportAssembly(Project project) { var failReason = project.LogWriterSettings.Validate(fs); if (failReason != null) { logger.Error($"invalid assembly build settings {failReason}"); return(false); } var lc = new LogCreator { Settings = project.LogWriterSettings, Data = new LogCreatorByteSource(project.Data), }; logger.Debug("Building...."); var result = lc.CreateLog(); if (!result.Success) { logger.Error($"Failed to build, error was: {result.OutputStr}"); return(false); } logger.Info("Successfully exported assembly output."); return(true); }
private void WriteAssemblyOutput(LogWriterSettings settings, bool showProgressBarUpdates = false) { var lc = new LogCreator() { Settings = settings, Data = Project.Data, }; LogCreator.OutputResult result = null; DoLongRunningTask(delegate { result = lc.CreateLog(); }, "Exporting assembly source code..."); ProjectView.OnExportFinished(result); }
/// <summary> /// Exports the conversation at <paramref name="inputFilePath"/> as JSON to <paramref name="outputFilePath"/>. /// </summary> /// <param name="inputFilePath"> /// The input file path. /// </param> /// <param name="outputFilePath"> /// The output file path. /// </param> /// <exception cref="ArgumentException"> /// Thrown when a path is invalid. /// </exception> /// <exception cref="Exception"> /// Thrown when something bad happens. /// </exception> public void ExportConversation(string inputFilePath, string outputFilePath, ConversationEditor editor, LogCreator logCreator) { var conversationReader = new ConversationReader(inputFilePath); Conversation conversation = conversationReader.ReadConversation(); editor.EditConversation(conversation); var outputLog = logCreator.CreateLog(conversation); LogWriter logWriter = new LogWriter(); logWriter.WriteToOutput(outputLog, outputFilePath); Console.WriteLine("Conversation exported from '{0}' to '{1}'", inputFilePath, outputFilePath); }
public static LogCreatorOutput.OutputResult ExportAssembly(Data inputRom, Action <LogCreator> postInitHook = null) { var logCreator = new LogCreator { Data = new LogCreatorByteSource(inputRom), Settings = new LogWriterSettings { OutputToString = true, Structure = LogWriterSettings.FormatStructure.SingleFile } }; postInitHook?.Invoke(logCreator); return(logCreator.CreateLog()); }
private bool BuildAssembly(string projectFileName) { var(project, warning) = new ProjectFileManager().Open(projectFileName); if (project == null) { return(false); } if (!string.IsNullOrEmpty(warning)) { WriteObject($"ERROR: {warning}"); return(false); } WriteDebug($"Loaded project, rom is: {project.AttachedRomFilename}"); var failReason = project.LogWriterSettings.Validate(); if (failReason != null) { WriteObject($"ERROR: invalid assembly build settings {failReason}"); return(false); } var lc = new LogCreator() { Settings = project.LogWriterSettings, Data = project.Data, }; WriteCommandDetail("Building...."); var result = lc.CreateLog(); if (!result.Success) { WriteObject($"Failed to build, error was: {result.OutputStr}"); } return(true); }
public void TestAFewLines() { var expectedRaw = // label: instructions ;PC |rawbytes|ia " lorom ; | | ; \r\n" + " ; | | ; \r\n" + " ; | | ; \r\n" + " ORG $808000 ; | | ; \r\n" + " ; | | ; \r\n" + " CODE_808000: LDA.W Test_Data,X ;808000|BD5B80 |80805B; \r\n" + " STA.W $0100,X ;808003|9D0001 |800100; \r\n" + " Test22: DEX ;808006|CA | ; \r\n" + " BPL CODE_808000 ;808007|10F7 |808000; \r\n" + " ; | | ; \r\n" + " Test_Data = $80805B ; | | ; \r\n"; var expectedOut = ParseAll(expectedRaw); var inputData = new Data { Labels = new ObservableDictionary <int, Label> { { 0x808000 + 0x06, new Label { Name = "Test22" } }, { 0x808000 + 0x5B, new Label { Name = "Test_Data", Comment = "Pretty cool huh?" } }, // the CODE_XXXXXX labels are autogenerated }, RomMapMode = RomMapMode.LoRom, RomSpeed = RomSpeed.FastRom, RomBytes = { // -------------------------- // highlighting a particular section here // we will use this for unit tests as well. // CODE_808000: LDA.W Test_Data,X new RomByte { Rom = 0xBD, TypeFlag = Data.FlagType.Opcode, MFlag = true, Point = Data.InOutPoint.InPoint, DataBank = 0x80, DirectPage = 0x2100 }, new RomByte { Rom = 0x5B, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100 }, // Test_Data new RomByte { Rom = 0x80, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100 }, // Test_Data // STA.W $0100,X new RomByte { Rom = 0x9D, TypeFlag = Data.FlagType.Opcode, MFlag = true, DataBank = 0x80, DirectPage = 0x2100 }, new RomByte { Rom = 0x00, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100 }, new RomByte { Rom = 0x01, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100 }, // DEX new RomByte { Rom = 0xCA, TypeFlag = Data.FlagType.Opcode, MFlag = true, DataBank = 0x80, DirectPage = 0x2100 }, // BPL CODE_808000 new RomByte { Rom = 0x10, TypeFlag = Data.FlagType.Opcode, MFlag = true, Point = Data.InOutPoint.OutPoint, DataBank = 0x80, DirectPage = 0x2100 }, new RomByte { Rom = 0xF7, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100 }, // ------------------------------------ } }; var settings = new LogWriterSettings(); settings.SetDefaults(); settings.OutputToString = true; settings.Structure = LogCreator.FormatStructure.SingleFile; var lc = new LogCreator() { Data = inputData, Settings = settings, }; var result = lc.CreateLog(); Assert.True(result.LogCreator != null); Assert.True(result.OutputStr != null); Assert.True(result.ErrorCount == 0); var actualOut = ParseAll(result.OutputStr); Assert.Equal(expectedOut.Count, actualOut.Count); for (var i = 0; i < expectedOut.Count; ++i) { Assert.Equal(expectedOut[i], actualOut[i]); } Assert.True(expectedOut.SequenceEqual(actualOut)); }