public static int Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledEx);
            CommandLine cmd = new CommandLine(args);

            if (cmd.Length < 2)
            {
                Console.WriteLine("");
                Console.WriteLine("GamePower Compiler v1.0");
                Console.WriteLine("");
                Console.WriteLine("Usage: gpc.exe -i <input.prg> -o <output.js>");
                Console.WriteLine("");
                Console.WriteLine("Notes: If the -o argument is not passed, the output file will be created");
                Console.WriteLine("in the caller folder with the .js extension.");
                return -1;
            }

            try
            {
                String filename = cmd["i"];
                FileInfo fi = new FileInfo(filename);
                String inFile = filename;
                String outFile = cmd.ContainsArg("o") ? cmd["o"] : String.Empty;
                GPCompiler Compiler = new GPCompiler();

                String[] lines;
                lines = File.ReadAllLines(filename, cmd.ContainsArg("msdos") ? Encoding.GetEncoding(437) : Encoding.Default);

                List<String> JSOutput = Compiler.Convert(lines.ToList());
                List<String> PreOutput = new List<String>();
                List<String> Output = new List<String>();

                Output.AddRange(PreOutput);
                Output.Add("");
                Output.AddRange(JSOutput);
                Output.Add("");
                Output.Add(Compiler.GPEngineVarName + ".Init(" + Compiler.ProgramProcess + ");");

                String Compiled = String.Join(Environment.NewLine, Output.ToArray());

                String OutputFilename = cmd.ContainsArg("o") ? cmd["o"] : fi.Directory.FullName + fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length) + ".js";
                using (StreamWriter sw = new StreamWriter(OutputFilename)) { sw.WriteLine(Compiled); }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.Message);
                Console.Error.WriteLine(e.StackTrace);
                return -1;
            }

            return 0;
        }