mlibc: New library layout; remove duplication.
[mes.git] / src / posix.c
index abb4ac705d220e7820c342b8ffca83a7452aa8cc..c404f8b81cb4632147346f2c9e1bc1827dac0e8e 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 #include <fcntl.h>
+#include <unistd.h>
 
 int
 ungetchar (int c)
@@ -58,8 +59,9 @@ write_byte (SCM x) ///((arity . n))
 {
   SCM c = car (x);
   SCM p = cdr (x);
-  int fd = 1;
-  if (TYPE (p) == TPAIR && TYPE (car (p)) == TNUMBER) fd = VALUE (car (p));
+  int fd = g_stdout;
+  if (TYPE (p) == TPAIR && TYPE (car (p)) == TNUMBER && VALUE (CAR (p)) != 1)
+    fd = VALUE (CAR (p));
   char cc = VALUE (c);
   write (fd, (char*)&cc, 1);
 #if !__MESC__
@@ -94,12 +96,6 @@ getenv_ (SCM s) ///((name . "getenv"))
   return p ? MAKE_STRING (cstring_to_list (p)) : cell_f;
 }
 
-SCM
-open_input_file (SCM file_name)
-{
-  return MAKE_NUMBER (open (string_to_cstring (file_name), O_RDONLY));
-}
-
 SCM
 access_p (SCM file_name, SCM mode)
 {
@@ -112,6 +108,12 @@ current_input_port ()
   return MAKE_NUMBER (g_stdin);
 }
 
+SCM
+open_input_file (SCM file_name)
+{
+  return MAKE_NUMBER (open (string_to_cstring (file_name), O_RDONLY));
+}
+
 SCM
 set_current_input_port (SCM port)
 {
@@ -119,6 +121,29 @@ set_current_input_port (SCM port)
   return current_input_port ();
 }
 
+SCM
+current_output_port ()
+{
+  return MAKE_NUMBER (g_stdout);
+}
+
+SCM
+open_output_file (SCM x) ///((arity . n))
+{
+  SCM file_name = car (x);
+  x = cdr (x);
+  int mode = S_IRUSR|S_IWUSR;
+  if (TYPE (x) == TPAIR && TYPE (car (x)) == TNUMBER) mode = VALUE (car (x));
+  return MAKE_NUMBER (open (string_to_cstring (file_name), O_WRONLY|O_CREAT|O_TRUNC,mode));
+}
+
+SCM
+set_current_output_port (SCM port)
+{
+  g_stdout = VALUE (port) ? VALUE (port) : STDOUT;
+  return current_output_port ();
+}
+
 SCM
 force_output (SCM p) ///((arity . n))
 {