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); }
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); }