private static void MTAThread(object obj)
        {
            MTAParameters p = obj as MTAParameters;

            if (p != null)
            {
                p.result = Run(p.args, p.engine);
            }
        }
        static int Main(string[] rawArgs)
        {
            ArrayList args = new ArrayList(); //??? new List<string>(args);

            foreach (string arg in rawArgs)
            {
                args.Add(arg);
            }
            Options options = ParseOptions(args);

            if (Options.PrintVersionAndExit)
            {
                Console.WriteLine(PythonEngine.VersionString);
                return(0);
            }

            PythonEngine engine = new PythonEngine(options);

            try {
                if (TabCompletion)
                {
                    UseSuperConsole(engine);
                }
                else
                {
                    engine.MyConsole = new BasicConsole();
                }

                if (Options.WarningFilters != null)
                {
                    engine.Sys.warnoptions = IronPython.Runtime.List.Make(Options.WarningFilters);
                }

                engine.Sys.SetRecursionLimit(Options.MaximumRecursion);

                if (mta)
                {
                    MTAParameters           p      = new MTAParameters(engine, args);
                    System.Threading.Thread thread = new System.Threading.Thread(MTAThread);
                    thread.SetApartmentState(System.Threading.ApartmentState.MTA);
                    thread.Start(p);
                    thread.Join();
                    return(p.result);
                }
                else
                {
                    return(Run(args, engine));
                }
            } finally {
                engine.Shutdown();
            }
        }