public void Assemble()
        {
            if (Options.InputFiles.Count == 0)
            {
                return;
            }

            if (Options.PrintVersion && DisplayingBanner != null)
            {
                Console.WriteLine(DisplayingBanner.Invoke(this, true));
                if (Options.ArgsPassed > 1)
                {
                    Console.WriteLine("Additional options ignored.");
                }
                return;
            }

            if (Options.Quiet)
            {
                Console.SetOut(TextWriter.Null);
            }

            if (DisplayingBanner != null)
            {
                Console.WriteLine(DisplayingBanner.Invoke(this, false));
            }

            DateTime asmTime = DateTime.Now;

            var source = Preprocess();

            if (Log.HasErrors == false)
            {
                FirstPass(source);

                if (Log.HasErrors == false)
                {
                    SecondPass();

                    if (Log.HasErrors == false)
                    {
                        SaveOutput();

                        ToListing();
                    }
                }
            }
            PrintStatus(asmTime);
        }
Ejemplo n.º 2
0
        public void Assemble()
        {
            if (Assembler.Options.PrintVersion && DisplayingBanner != null)
            {
                Console.WriteLine(DisplayingBanner.Invoke(this, true));
                if (Assembler.Options.ArgsPassed > 1)
                {
                    Console.WriteLine("Additional options ignored.");
                }
                return;
            }

            if (Assembler.Options.InputFiles.Count == 0)
            {
                return;
            }

            if (Assembler.Options.Quiet)
            {
                Console.SetOut(TextWriter.Null);
            }

            if (DisplayingBanner != null)
            {
                Console.WriteLine(DisplayingBanner.Invoke(this, false));
            }

            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var source = Preprocess();

            if (Assembler.Log.HasErrors == false)
            {
                DoPasses(source);

                if (Assembler.Log.HasErrors == false)
                {
                    SaveOutput();
                    ToListing();
                }
            }
            stopwatch.Stop();

            PrintStatus(stopwatch);
        }
Ejemplo n.º 3
0
        void ToListing()
        {
            if (string.IsNullOrEmpty(Assembler.Options.ListingFile) && string.IsNullOrEmpty(Assembler.Options.LabelFile))
            {
                return;
            }

            string listing;

            if (!string.IsNullOrEmpty(Assembler.Options.ListingFile))
            {
                listing = GetListing();
                using (StreamWriter writer = new StreamWriter(Assembler.Options.ListingFile))
                {
                    var exec         = Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly().Location);
                    var argstring    = string.Join(" ", Assembler.Options.Arguments);
                    var bannerstring = DisplayingBanner != null?DisplayingBanner.Invoke(this, false) : string.Empty;

                    writer.WriteLine(";; {0}", bannerstring.Split(new char[] { '\n', '\r' }).First());
                    writer.WriteLine(";; {0} {1}", exec, argstring);
                    writer.WriteLine(";; {0:f}\n", DateTime.Now);
                    writer.WriteLine(";; Input files:\n");

                    _sourceHandler.FileRegistry.ToList().ForEach(f => writer.WriteLine(";; {0}", f));

                    writer.WriteLine();
                    writer.Write(listing);
                }
            }
            if (!string.IsNullOrEmpty(Assembler.Options.LabelFile))
            {
                listing = GetLabelsAndVariables();
                using (StreamWriter writer = new StreamWriter(Assembler.Options.LabelFile, false))
                {
                    writer.WriteLine(";; Input files:\n");
                    _sourceHandler.FileRegistry.ToList().ForEach(f => writer.WriteLine(";; {0}", f));
                    writer.WriteLine();
                    writer.WriteLine(listing);
                }
            }
        }