core: Remove last_pair, list_ref, string_ref.
[mes.git] / posix.c
diff --git a/posix.c b/posix.c
index 042fc942f1f3d3514d468c8cb3c79052d6b09a1e..e0d6631178897051e7ab650e619af3569c3b8bc7 100644 (file)
--- a/posix.c
+++ b/posix.c
 #include <fcntl.h>
 
 char const*
-string_to_cstring (scm *s)
+string_to_cstring (SCM s)
 {
   static char buf[1024];
   char *p = buf;
-  s = s->string;
-  while (s != &scm_nil)
+  s = STRING (s);
+  while (s != cell_nil)
     {
-      *p++ = s->car->value;
-      s = s->cdr;
+      *p++ = VALUE (car (s));
+      s = cdr (s);
     }
   *p = 0;
   return buf;
 }
 
-scm *
-open_input_file (scm *file_name)
+SCM
+force_output (SCM p) ///((arity . n))
 {
-  return make_number (open (string_to_cstring (file_name), O_RDONLY));
+  int fd = 1;
+  if (TYPE (p) == PAIR && TYPE (car (p)) == NUMBER) fd = VALUE (car (p));
+  FILE *f = fd == 1 ? stdout : stderr;
+  fflush (f);
+  return cell_unspecified;
 }
 
-scm *
+SCM
+open_input_file (SCM file_name)
+{
+  return MAKE_NUMBER (open (string_to_cstring (file_name), O_RDONLY));
+}
+
+SCM
 current_input_port ()
 {
-  return make_number (fileno (g_stdin));
+  return MAKE_NUMBER (fileno (g_stdin));
 }
 
-scm *
-set_current_input_port (scm *port)
+SCM
+set_current_input_port (SCM port)
 {
-  g_stdin = fdopen (port->value, "r");
+  g_stdin = VALUE (port) ? fdopen (VALUE (port), "r") : stdin;
+  return current_input_port ();
 }