core: Support switching of input stream.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 2 Nov 2016 17:25:18 +0000 (18:25 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 12 Dec 2016 19:33:49 +0000 (20:33 +0100)
* mes.c (g_stdin): New global.
  (getchar): New function, use g_stdin.
  (ungetchar): Use g_stdin.
  (main): Initialize g_stdin to stdin.

mes.c

diff --git a/mes.c b/mes.c
index ca099aaaa6e7dfe93f643553167f38377316d786..74980c7ed39e75cb17526d46b4b36dee806903dc 100644 (file)
--- a/mes.c
+++ b/mes.c
@@ -893,10 +893,17 @@ display_helper (FILE* f, scm *x, bool cont, char const *sep, bool quote)
 
 // READ
 
+FILE *g_stdin;
+int
+getchar ()
+{
+  return getc (g_stdin);
+}
+
 int
 ungetchar (int c)
 {
-  return ungetc (c, stdin);
+  return ungetc (c, g_stdin);
 }
 
 int
@@ -1179,6 +1186,7 @@ main (int argc, char *argv[])
 {
   if (argc > 1 && !strcmp (argv[1], "--help")) return puts ("Usage: mes < FILE\n");
   if (argc > 1 && !strcmp (argv[1], "--version")) return puts ("Mes 0.1\n");
+  g_stdin = stdin;
   scm *a = mes_environment ();
   display_ (stderr, load_file_env (a));
   fputs ("", stderr);