mescc: Support open, read.
[mes.git] / module / language / c99 / compiler.mes
index df66d847b054cf36fcf65f24898bdb7cbb377e3c..f160dceac67c72e8a5e9878d204876fc6add47b2 100644 (file)
@@ -941,6 +941,39 @@ strlen (char const* s)
                 parse-c99)))
     ast))
 
+(define getchar
+  (let* ((ast (with-input-from-string
+                  "
+int
+getchar ()
+{
+  char c;
+  int r = read (g_stdin, &c, 1);
+  //int r = read (0, &c, 1);
+  if (r < 1) return -1;
+  return c;
+}
+"
+;;paredit:"
+                parse-c99)))
+    ast))
+
+(define putchar
+  (let* ((ast (with-input-from-string
+                  "
+int
+putchar (int c)
+{
+  //write (STDOUT, s, strlen (s));
+  //int i = write (STDOUT, s, strlen (s));
+  write (1, (char*)&c, 1);
+  return 0;
+}
+"
+;;paredit:"
+                parse-c99)))
+    ast))
+
 (define eputs
   (let* ((ast (with-input-from-string
                   "
@@ -964,7 +997,7 @@ eputs (char const* s)
 int
 fputs (char const* s, int fd)
 {
- int i = strlen (s);
 int i = strlen (s);
   write (fd, s, i);
   return 0;
 }
@@ -1010,11 +1043,15 @@ strcmp (char const* a, char const* b)
 (define i386:libc
   (list
    (cons "exit" (list i386:exit))
+   (cons "open" (list i386:open))
+   (cons "read" (list i386:read))
    (cons "write" (list i386:write))))
 
 (define libc
   (list
    strlen
+   getchar
+   putchar
    eputs
    fputs
    puts