コード例 #1
0
        //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();
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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
            }
        }
コード例 #7
0
 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
     }
 }