static void Main(string[] args) { Console.WriteLine("Virtual eXecuter Assembler by Claus Andersen"); Console.WriteLine("Version: 0.10 - June 14th 2008"); Console.WriteLine(""); try { List <string> sourceFiles; string outputDirectory = Directory.GetCurrentDirectory(); bool generatePreprocessorFiles = false; bool generateMapFiles = false; bool generateListFiles = false; #region Parse command line Dictionary <string, List <string> > options = CommandLineParser.Run(args); if (options == null || options.Count == 0 || options.ContainsKey("default") == false || options["default"].Count == 0) { Help(); Quit(); return; } sourceFiles = options["default"]; if (options.ContainsKey("o") && options["o"] != null && options["o"].Count == 1) { outputDirectory = options["o"][0]; Directory.CreateDirectory(outputDirectory); } if (options.ContainsKey("p")) { generatePreprocessorFiles = true; } if (options.ContainsKey("m")) { generateMapFiles = true; } if (options.ContainsKey("l")) { generateListFiles = true; } if (sourceFiles == null || sourceFiles.Count == 0) { Help(); Quit(); return; } if (options.ContainsKey("w")) { waitWhenExiting = true; } #endregion foreach (string sourceFile in sourceFiles) { string sourceFileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile); string sourceFileDirectory = Path.GetFullPath(sourceFile).Remove(sourceFile.LastIndexOf("\\")); string partFile = outputDirectory + "\\" + sourceFileNameWithoutExtension + ".part"; string preprocessorFile = outputDirectory + "\\" + sourceFileNameWithoutExtension + ".pre"; string mapFile = outputDirectory + "\\" + sourceFileNameWithoutExtension + ".map"; string listFile = outputDirectory + "\\" + sourceFileNameWithoutExtension + ".list"; StreamReader sourceFileReader = new StreamReader(sourceFile); FileStream partFileWriter = File.Create(partFile); StreamWriter preprocessorFileWriter = new StreamWriter(preprocessorFile); preprocessorFileWriter.AutoFlush = true; StreamWriter mapFileWriter = new StreamWriter(mapFile); mapFileWriter.AutoFlush = true; StreamWriter listFileWriter = new StreamWriter(listFile); listFileWriter.AutoFlush = true; Preprocessor pre = new Preprocessor(); StreamReader preprocessorReader = pre.Run(sourceFileReader, sourceFileDirectory); /* * if (generateListFiles) * { * Informer.Instance.SetListFile(listFileName); * } * * if (mapFileName != "") * { * Informer.Instance.SetMapFile(mapFileName); * } */ Assembler asm = new Assembler(); asm.FindLabels(preprocessorReader); asm.GenerateCode(preprocessorReader); XmlSerializer serializer = new XmlSerializer(typeof(Assembler)); serializer.Serialize(partFileWriter, asm); // asm.GenerateExecutable(outputFile); sourceFileReader.Close(); partFileWriter.Close(); preprocessorFileWriter.Close(); mapFileWriter.Close(); listFileWriter.Close(); } } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } Quit(); }
static void Main(string[] args) { Console.WriteLine("Virtual eXecuter Assembler by Claus Andersen"); Console.WriteLine("Version: 0.03 - June 22nd 2008"); Console.WriteLine(""); try { #region Parse command line Dictionary <string, List <string> > options = CommandLineParser.Run(args); if (options == null || options.Count == 0) { Help(); Quit(); return; } if (options.ContainsKey("default")) { sourceFileName = options["default"][0]; if (File.Exists(sourceFileName) == false) { Console.WriteLine("The specified source file does not exist"); Quit(); return; } outputFileName = Path.ChangeExtension(sourceFileName, ".vxx"); } if (options.ContainsKey("o")) { outputFileName = options["o"][0]; } if (options.ContainsKey("l")) { if (options["l"].Count == 0) { listFileName = Path.ChangeExtension(sourceFileName, ".lst"); } else if (options["l"].Count == 1) { listFileName = options["l"][0]; } else { Console.WriteLine("More than one list file was specified"); } } if (options.ContainsKey("m")) { if (options["m"].Count == 0) { mapFileName = Path.ChangeExtension(sourceFileName, ".map"); } else if (options["m"].Count == 1) { mapFileName = options["m"][0]; } else { Console.WriteLine("More than one map file was specified"); } } if (sourceFileName == "") { Help(); Quit(); return; } if (options.ContainsKey("w")) { waitWhenExiting = true; } #endregion outputFile = File.Create(outputFileName); if (listFileName != "") { Informer.Instance.SetListFile(listFileName); } if (mapFileName != "") { Informer.Instance.SetMapFile(mapFileName); } Assembler asm = new Assembler(); StreamReader preprocessedSourceFile = asm.Preprocessor(sourceFileName); asm.FindLabels(preprocessedSourceFile); asm.GenerateCode(preprocessedSourceFile); asm.GenerateExecutable(outputFile); preprocessedSourceFile.Close(); outputFile.Close(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } Quit(); }