Пример #1
0
        static int HandleEofOrErrorIfNonConsoleShell(List <String> scriptFilename, bool success, bool nonDebugNonGuiExitOnError,
                                                     GrShell shell, GrShellDriver driver,
                                                     ref TextReader reader, ref bool showPrompt, ref bool readFromConsole)
        {
            if (readFromConsole || (!driver.Eof && success))
            {
                return(0);
            }

            if (nonDebugNonGuiExitOnError && !success)
            {
                return(-1);
            }

            if (scriptFilename.Count != 0)
            {
                TextReader newReader;
                try
                {
                    newReader = new StreamReader((String)scriptFilename[0]);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Unable to read file \"" + scriptFilename[0] + "\": " + e.Message);
                    return(-1);
                }
                scriptFilename.RemoveAt(0);
                shell.ReInit(newReader);
                driver.Eof = false;
                reader.Close();
                reader = newReader;
            }
            else
            {
                shell.ReInit(WorkaroundManager.Workaround.In);
                driver.tokenSources.Pop();
                driver.tokenSources.Push(shell.token_source);
                showPrompt      = true;
                readFromConsole = true;
                driver.Eof      = false;
                reader.Close();
            }

            return(0);
        }
Пример #2
0
        public bool Include(String filename, String from, String to)
        {
            try
            {
                if (showIncludes)
                {
                    impl.debugOut.WriteLine("Including " + filename);
                }

                TextReader reader = null;
                if (filename.EndsWith(".gz", StringComparison.InvariantCultureIgnoreCase))
                {
                    FileStream filereader = new FileStream(filename, FileMode.Open, FileAccess.Read);
                    reader = new StreamReader(new GZipStream(filereader, CompressionMode.Decompress));
                }
                else
                {
                    reader = new StreamReader(filename);
                }
                if (from != null || to != null)
                {
                    reader = new FromToReader(reader, from, to);
                }

                using (reader)
                {
                    SimpleCharStream    charStream  = new SimpleCharStream(reader);
                    GrShellTokenManager tokenSource = new GrShellTokenManager(charStream);
                    tokenSources.Push(tokenSource);

                    try
                    {
                        grShell.ReInit(tokenSource);

                        while (!Quitting && !Eof)
                        {
                            if (!grShell.ParseShellCommand())
                            {
                                impl.errOut.WriteLine("Shell command parsing failed in include of \"" + filename + "\" (at nesting level " + tokenSources.Count + ")");
                                return(false);
                            }
                        }
                        Eof = false;
                    }
                    finally
                    {
                        if (showIncludes)
                        {
                            impl.debugOut.WriteLine("Leaving " + filename);
                        }

                        tokenSources.Pop();
                        grShell.ReInit(tokenSources.Peek());
                    }
                }
            }
            catch (Exception e)
            {
                impl.errOut.WriteLine("Error during include of \"" + filename + "\": " + e.Message);
                return(false);
            }

            return(true);
        }