Implement support for stderr.
authorChris Hanson <org/chris-hanson/cph>
Wed, 9 May 2018 04:45:21 +0000 (21:45 -0700)
committerChris Hanson <org/chris-hanson/cph>
Wed, 9 May 2018 04:45:21 +0000 (21:45 -0700)
src/microcode/nttty.c
src/microcode/ostty.h
src/microcode/prostty.c
src/microcode/uxtty.c

index 78f2aa32b94352107dc5aa4beb3f3b3799464b59..82529fe70a91bd43825bde1e1998d32d2485b511 100644 (file)
@@ -33,8 +33,7 @@ USA.
 \f
 /* Standard Input and Output */
 
-static Tchannel input_channel;
-static Tchannel output_channel;
+static Tchannel tty_channel;
 
 HANDLE master_tty_window = 0;
 
@@ -47,13 +46,19 @@ static char * tty_command_clear;
 Tchannel
 OS_tty_input_channel (void)
 {
-  return (input_channel);
+  return (tty_channel);
 }
 
 Tchannel
 OS_tty_output_channel (void)
 {
-  return (output_channel);
+  return (tty_channel);
+}
+
+Tchannel
+OS_tty_error_channel (void)
+{
+  return (tty_channel);
 }
 
 unsigned int
@@ -85,9 +90,8 @@ OS_tty_command_clear (void)
 void
 NT_initialize_tty (void)
 {
-  input_channel = (NT_open_handle (master_tty_window));
-  (CHANNEL_INTERNAL (input_channel)) = 1;
-  output_channel = input_channel;
+  tty_channel = (NT_open_handle (master_tty_window));
+  (CHANNEL_INTERNAL (tty_channel)) = 1;
   Screen_GetSize (master_tty_window, (&tty_y_size), (&tty_x_size));
   tty_command_beep = ALERT_STRING;
   tty_command_clear = "\014";
index cc2a8ad6065304c7776ae04b5207f7d328ea11fb..ed0b4f840671dd2144022c030228528b8f7ed24f 100644 (file)
@@ -31,6 +31,7 @@ USA.
 
 extern Tchannel OS_tty_input_channel (void);
 extern Tchannel OS_tty_output_channel (void);
+extern Tchannel OS_tty_error_channel (void);
 extern unsigned int OS_tty_x_size (void);
 extern unsigned int OS_tty_y_size (void);
 extern const char * OS_tty_command_beep (void);
index 19c6b4bdbf9a021641f35ecf91287876aac096d6..54b40e3f80233a741243eaaafbdf7201559f21f6 100644 (file)
@@ -47,6 +47,13 @@ DEFINE_PRIMITIVE ("TTY-OUTPUT-CHANNEL", Prim_tty_output_channel, 0, 0,
   PRIMITIVE_RETURN (long_to_integer (OS_tty_output_channel ()));
 }
 
+DEFINE_PRIMITIVE ("TTY-ERROR-CHANNEL", Prim_tty_error_channel, 0, 0,
+  "Return the standard error channel.")
+{
+  PRIMITIVE_HEADER (0);
+  PRIMITIVE_RETURN (long_to_integer (OS_tty_error_channel ()));
+}
+
 DEFINE_PRIMITIVE ("TTY-X-SIZE", Prim_tty_x_size, 0, 0,
   "Return the display width in character columns.")
 {
index a1ceeee1cecd39d2c67a61496403ecd7b59f44fe..7551f72ca0a2d82a0fe31ca29a86f965b76d0b3a 100644 (file)
@@ -44,6 +44,7 @@ extern void tputs (const char *, int, void (*) (char));
 
 static Tchannel input_channel;
 static Tchannel output_channel;
+static Tchannel error_channel;
 
 static int tty_x_size;
 static int tty_y_size;
@@ -65,6 +66,12 @@ OS_tty_output_channel (void)
   return (output_channel);
 }
 
+Tchannel
+OS_tty_error_channel (void)
+{
+  return (error_channel);
+}
+
 unsigned int
 OS_tty_x_size (void)
 {
@@ -218,6 +225,8 @@ UX_initialize_tty (void)
   (CHANNEL_INTERNAL (input_channel)) = 1;
   output_channel = (OS_open_fd (STDOUT_FILENO));
   (CHANNEL_INTERNAL (output_channel)) = 1;
+  error_channel = (OS_open_fd (STDERR_FILENO));
+  (CHANNEL_INTERNAL (error_channel)) = 1;
   tty_size_synchronized_p = false;
   UX_synchronize_tty_size ();
   tty_command_beep = ALERT_STRING;