//StdOut - output //StdIn - input //StdError - errors and messages //0 - D, A or Doc, assemble, disassemble or doc generation //1 - language (assembly or disassembly only) //2 - disassembly mode (disassembly only) //3 - offset to disassemble (disassembly only) //4 - priority to disassemble (disassembly only) //5 - length to disassemble (disassembly only) //flags: -addEndGuards // -raws:Folder or file // -rawsExt:extension // -output:File // -input:File // -error:File // -docHeader:File // -docFooter:File private static void Main(string[] args) { if (args.Length == 0) { return; } var messageLog = new MessageLog(1000); //var cmd = HandleFlags(flags, messageLog); var cmd = new CommandLineArgs(); var error = cmd.SetArgs(args); if (!error.CausedError) { try { Run(messageLog, cmd); } catch (Exception e) { messageLog.AddError(e.Message); } } if (cmd.errorFile != null) { using (var writer = new StreamWriter(cmd.errorFile)) { messageLog.WriteToStream(writer); } } else { messageLog.WriteToStream(Console.Error); } messageLog.Clear(); }
private static void Run(MessageLog messageLog, CommandLineArgs cmd) { if (stringComparer.Compare(cmd.operation, "doc") == 0) { MakeDoc(cmd.outputFile, cmd.rawsFolder, cmd.rawsExtension, cmd.isDirectory, cmd.docHeader, cmd.docFooter); } else if (stringComparer.Compare(cmd.operation, "plusplus") == 0) { #if !DEBUG throw new NotImplementedException(); #endif LoadCodes(cmd.rawsFolder, cmd.rawsExtension, cmd.isDirectory, false); EACodeLanguage language; if (languages.TryGetValue(cmd.language, out language)) { HighlightingHelper.GetNotepadPlusPluslanguageDoc(language, cmd.outputFile); } } else if (stringComparer.Compare(cmd.operation, "prognotepad") == 0) { LoadCodes(cmd.rawsFolder, cmd.rawsExtension, cmd.isDirectory, false); HighlightingHelper.GetProgrammersNotepadlanguageDoc(languages.Values, cmd.outputFile); } else { LoadCodes(cmd.rawsFolder, cmd.rawsExtension, cmd.isDirectory, false); if (languages.ContainsKey(cmd.language)) { if (stringComparer.Compare(cmd.operation, "A") == 0) { Assemble(cmd.inputFile, cmd.outputFile, cmd.language, messageLog); } else if (stringComparer.Compare(cmd.operation, "D") == 0) { Disassemble( cmd.inputFile, cmd.outputFile, cmd.language, cmd.addEndGuards, cmd.disassemblyMode.Value, cmd.offset.Value, cmd.priority.HasValue ? cmd.priority.Value : Priority.none, cmd.size.HasValue ? cmd.size.Value : 0, messageLog); } else messageLog.AddError("{0} is not a valid operation.", cmd.operation); } else messageLog.AddError("{0} is not a valid language", cmd.language); } }
public void PrintAll(MessageLog messageLog) { string message; using (StringWriter writer = new StringWriter()) { messageLog.WriteToStream(writer); message = writer.ToString(); } using (TextShower shower = new TextShower(message)) { shower.Text = ""; shower.ShowDialog(); } }
void MainForm_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.Alt && (e.KeyCode == Keys.P)) { var messageLog = new MessageLog(); Core.Program.Preprocess(textFile, binaryFile, GetChosenGame(), messageLog); PrintAll(messageLog); } }
public MainForm() { InitializeComponent(); this.OffsetControl.Maximum = 0x20000000; this.LengthControl.Maximum = 0x20000000; this.MinimumSize = this.Size; #if DEBUG this.KeyPreview = true; this.KeyDown += new KeyEventHandler(MainForm_KeyDown); #endif this.Move += new EventHandler((x, y) => FormHelpers.ClingToScreenEndges(x as Form, 20)); this.Load += new EventHandler(MainForm_Load); this.assemblyBackgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler( (sender, args) => { var messageLog = new MessageLog(); var tuple = args.Argument as Tuple<string, string, string>; #if DEBUG try { #endif Core.Program.Assemble(tuple.Item1, tuple.Item2, tuple.Item3, messageLog); #if DEBUG } catch (Exception e) { messageLog.AddError("Exception: " + e.ToString()); } #endif args.Result = messageLog; }); this.assemblyBackgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler( (sender, args) => PrintAll(args.Result as MessageLog)); this.disassemblyBackgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler( (sender, args) => { var messageLog = new MessageLog(); var tuple = args.Argument as Tuple<string, string, string, int, int, DisassemblyMode, bool>; Priority priority; if (tuple.Item6 == DisassemblyMode.Block || tuple.Item6 == DisassemblyMode.ToEnd) { if (!GetPriority(out priority)) { return; } } else priority = Priority.none; try { Core.Program.Disassemble(tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item7, tuple.Item6, tuple.Item4, priority, tuple.Item5, messageLog); } catch (Exception e) { messageLog.AddError("Exception: " + e.ToString()); } args.Result = messageLog; }); this.disassemblyBackgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler( (sender, args) => PrintAll(args.Result as MessageLog)); }
private void disassembleButton_Click(object sender, EventArgs e) { string game = GetChosenGame(); DisassemblyMode mode = GetChosenMode(); if (textFile == null || binaryFile == null) { MessageBox.Show("Choose both files"); } else if (!File.Exists(binaryFile)) { MessageBox.Show("ROM file doesn't exist."); } else if (!Nintenlord.Event_Assembler.Core.Program.CodesLoaded) { MessageBox.Show("Raws not loaded"); } else { #if DEBUG var messageLog = new MessageLog(); Priority priority; if (mode == DisassemblyMode.Block || mode == DisassemblyMode.ToEnd) { if (!GetPriority(out priority)) { return; } } else priority = Priority.none; Core.Program.Disassemble(binaryFile, textFile, game, this.checkBoxEnder.Checked, mode, (int)OffsetControl.Value, priority, (int)LengthControl.Value, messageLog); PrintAll(messageLog); #else disassemblyBackgroundWorker.RunWorkerAsync(Tuple.Create(binaryFile, textFile, game, (int)OffsetControl.Value, (int)LengthControl.Value, mode, this.checkBoxEnder.Checked)); #endif } }
private void assembleButton_Click(object sender, EventArgs e) { string game = GetChosenGame(); if (textFile == null || binaryFile == null) { MessageBox.Show("Choose both files"); } else if (!File.Exists(textFile)) { MessageBox.Show("Text file doesn't exist."); } else if (!Nintenlord.Event_Assembler.Core.Program.CodesLoaded) { MessageBox.Show("Raws not loaded"); } else { #if DEBUG var messageLog = new MessageLog(); Core.Program.Assemble(textFile, binaryFile, game, messageLog); PrintAll(messageLog); #else assemblyBackgroundWorker.RunWorkerAsync(Tuple.Create(textFile, binaryFile, game)); #endif } }