From 76f5b492c7e0ff191da672e48258f6eaef0a2b76 Mon Sep 17 00:00:00 2001
From: Chris Hanson <org/chris-hanson/cph>
Date: Fri, 2 Nov 1990 02:07:08 +0000
Subject: [PATCH] Requires microcode version 11.50 or later.

Many changes to provide for smooth control of terminal state:

* Procedures `make-cmdl' and `push-cmdl' each take additional argument
  that specifies how to spawn a child CMDL object -- a good default
  for this argument is `make-cmdl'.  `make-cmdl' should not be used
  except by this "spawning" operation -- always use `(cmdl/spawn-child
  cmdl)' to do that.  Command loops should be extended to have generic
  operations for reading input, evaluating, writing results,
  prompting, etc.  This would simplify switching between the editor
  and user code.

* Command loops now temporarily switch input and output modes of
  terminals to appropriate values when doing input or output.  Thus
  REP loops and the debugger need not worry about what state the
  terminal is in -- the user can change it arbitrarily.

* New procedures `input-port/channel' and `output-port/channel' return
  a port's underlying channel if known, else #F.  This is not yet
  completely implemented, but since it is only used for terminals it
  is OK for now.

* New procedures `terminal-get-state' and `terminal-set-state' can be
  used to save and restore a terminal's state.

* Renamed procedures:
	terminal-buffered?	terminal-cooked-input?
	terminal-buffered	terminal-cooked-input
	terminal-nonbuffered	terminal-raw-input

* Eliminated procedure `make-repl'.  Most instances of this should
  have been `push-repl' instead.

* Eliminated procedures `input-port/immediate-mode' and
  `input-port/normal-mode'.  Eliminated output-port operations
  `raw-mode' and `cooked-mode'.  Eliminated port operation
  `baud-rate'.

* Eliminated ill-advised `fresh-line' operation on output ports.  This
  should be supplied directly by each type of port.
---
 v7/src/runtime/dbgcmd.scm  |  19 ++--
 v7/src/runtime/input.scm   |  17 +--
 v7/src/runtime/io.scm      |  25 +++--
 v7/src/runtime/output.scm  |  33 ++----
 v7/src/runtime/rep.scm     | 206 ++++++++++++++++++++++---------------
 v7/src/runtime/runtime.pkg |  25 ++---
 v7/src/runtime/version.scm |   4 +-
 v8/src/runtime/runtime.pkg |  25 ++---
 8 files changed, 181 insertions(+), 173 deletions(-)

diff --git a/v7/src/runtime/dbgcmd.scm b/v7/src/runtime/dbgcmd.scm
index 8821408c0..fff8fd9fe 100644
--- a/v7/src/runtime/dbgcmd.scm
+++ b/v7/src/runtime/dbgcmd.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/dbgcmd.scm,v 14.9 1990/09/12 02:47:19 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/dbgcmd.scm,v 14.10 1990/11/02 02:06:08 cph Rel $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -64,17 +64,10 @@ MIT in each case. |#
 (define (letter-commands command-set message prompt state)
   (with-standard-proceed-point
    (lambda ()
-     (let ((state (vector command-set prompt state))
-	   (cmdl (nearest-cmdl)))
-       (let ((input-port (cmdl/input-port cmdl)))
-	 (input-port/immediate-mode input-port
-	   (lambda ()
-	     (make-cmdl cmdl
-			input-port
-			(cmdl/output-port cmdl)
-			letter-commands/driver
-			state
-			message))))))))
+     (push-cmdl letter-commands/driver
+		(vector command-set prompt state)
+		message
+		make-cmdl))))
 
 (define (letter-commands/driver cmdl)
   (let ((command-set (vector-ref (cmdl/state cmdl) 0))
@@ -119,7 +112,7 @@ MIT in each case. |#
   (hook/leaving-command-loop thunk))
 
 (define (default/leaving-command-loop thunk)
-  (input-port/normal-mode (cmdl/input-port (nearest-cmdl)) thunk))
+  (thunk))
 
 (define (debug/read-eval-print environment from to prompt)
   (leaving-command-loop
diff --git a/v7/src/runtime/input.scm b/v7/src/runtime/input.scm
index f970a134f..4cb3c6bd3 100644
--- a/v7/src/runtime/input.scm
+++ b/v7/src/runtime/input.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/input.scm,v 14.8 1990/10/03 01:29:12 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/input.scm,v 14.9 1990/11/02 02:06:16 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -165,17 +165,10 @@ MIT in each case. |#
 (define (input-port/discard-chars port delimiters)
   ((input-port/operation/discard-chars port) port delimiters))
 
-(define (input-port/normal-mode port thunk)
-  (let ((operation (input-port/custom-operation port 'NORMAL-MODE)))
-    (if operation
-	(operation port thunk)
-	(thunk))))
-
-(define (input-port/immediate-mode port thunk)
-  (let ((operation (input-port/custom-operation port 'IMMEDIATE-MODE)))
-    (if operation
-	(operation port thunk)
-	(thunk))))
+(define (input-port/channel port)
+  (let ((operation (input-port/custom-operation port 'CHANNEL)))
+    (and operation
+	 (operation port))))
 
 (define eof-object
   "EOF Object")
diff --git a/v7/src/runtime/io.scm b/v7/src/runtime/io.scm
index 90cde5eeb..80d6a392d 100644
--- a/v7/src/runtime/io.scm
+++ b/v7/src/runtime/io.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/io.scm,v 14.9 1990/10/16 21:03:07 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/io.scm,v 14.10 1990/11/02 02:06:23 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -264,21 +264,30 @@ MIT in each case. |#
 
 ;;;; Terminal Primitives
 
-(define (terminal-raw-output channel)
-  ((ucode-primitive terminal-raw-output 1) (channel-descriptor channel)))
+(define (terminal-get-state channel)
+  ((ucode-primitive terminal-get-state 1) (channel-descriptor channel)))
 
-(define (terminal-cooked-output channel)
-  ((ucode-primitive terminal-cooked-output 1) (channel-descriptor channel)))
+(define (terminal-set-state channel state)
+  ((ucode-primitive terminal-set-state 2) (channel-descriptor channel) state))
 
-(define (terminal-buffered? channel)
+(define (terminal-cooked-input? channel)
   ((ucode-primitive terminal-buffered? 1) (channel-descriptor channel)))
 
-(define (terminal-buffered channel)
+(define (terminal-cooked-input channel)
   ((ucode-primitive terminal-buffered 1) (channel-descriptor channel)))
 
-(define (terminal-nonbuffered channel)
+(define (terminal-raw-input channel)
   ((ucode-primitive terminal-nonbuffered 1) (channel-descriptor channel)))
 
+(define (terminal-cooked-output? channel)
+  ((ucode-primitive terminal-cooked-output? 1) (channel-descriptor channel)))
+
+(define (terminal-cooked-output channel)
+  ((ucode-primitive terminal-cooked-output 1) (channel-descriptor channel)))
+
+(define (terminal-raw-output channel)
+  ((ucode-primitive terminal-raw-output 1) (channel-descriptor channel)))
+
 (define (terminal-flush-input channel)
   ((ucode-primitive terminal-flush-input 1) (channel-descriptor channel)))
 
diff --git a/v7/src/runtime/output.scm b/v7/src/runtime/output.scm
index 0923f89a0..9be5c4981 100644
--- a/v7/src/runtime/output.scm
+++ b/v7/src/runtime/output.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/output.scm,v 14.7 1990/09/13 23:08:23 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/output.scm,v 14.8 1990/11/02 02:06:32 cph Rel $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -54,7 +54,6 @@ MIT in each case. |#
 			       (copier %output-port/copy)
 			       (print-procedure output-port/unparse))
   state
-  start-of-line?
   (operation/write-char false read-only true)
   (operation/write-string false read-only true)
   (operation/flush-output false read-only true)
@@ -68,7 +67,6 @@ MIT in each case. |#
 (define (output-port/copy port state)
   (let ((result (%output-port/copy port)))
     (set-output-port/state! result state)
-    (set-output-port/start-of-line?! result false)
     result))
 
 (define (output-port/custom-operation port name)
@@ -101,7 +99,7 @@ MIT in each case. |#
 	     (operation 'WRITE-STRING default-operation/write-string))
 	    (flush-output
 	     (operation 'FLUSH-OUTPUT default-operation/flush-output)))
-	(%make-output-port state false write-char write-string flush-output
+	(%make-output-port state write-char write-string flush-output
 			   operations
 			   (append '(WRITE-CHAR WRITE-STRING FLUSH-OUTPUT)
 				   (map car operations)))))))
@@ -119,23 +117,12 @@ MIT in each case. |#
   false)
 
 (define (output-port/write-char port char)
-  (set-output-port/start-of-line?! port (char=? #\newline char))
   ((output-port/operation/write-char port) port char))
 
 (define (output-port/write-string port string)
   (let ((length (string-length string)))
     (if (positive? length)
-	(begin
-	  (set-output-port/start-of-line?!
-	   port
-	   (char=? #\newline (string-ref string (-1+ length))))
-	  ((output-port/operation/write-string port) port string)))))
-
-(define (output-port/fresh-line port)
-  (if (not (output-port/start-of-line? port))
-      (begin
-	(set-output-port/start-of-line?! port true)
-	((output-port/operation/write-char port) port #\newline))))
+	((output-port/operation/write-string port) port string))))
 
 (define (output-port/flush-output port)
   ((output-port/operation/flush-output port) port))
@@ -146,6 +133,11 @@ MIT in each case. |#
 	     (operation port)))
       79))
 
+(define (output-port/channel port)
+  (let ((operation (output-port/custom-operation port 'CHANNEL)))
+    (and operation
+	 (operation port))))
+
 (define *current-output-port*)
 
 (define-integrable (current-output-port)
@@ -191,15 +183,6 @@ MIT in each case. |#
     (output-port/flush-output port))
   unspecific)
 
-(define (fresh-line #!optional port)
-  (let ((port
-	 (if (default-object? port)
-	     (current-output-port)
-	     (guarantee-output-port port))))
-    (output-port/fresh-line port)
-    (output-port/flush-output port))
-  unspecific)
-
 (define (write-char char #!optional port)
   (let ((port
 	 (if (default-object? port)
diff --git a/v7/src/runtime/rep.scm b/v7/src/runtime/rep.scm
index 63679bbaa..762cdeb26 100644
--- a/v7/src/runtime/rep.scm
+++ b/v7/src/runtime/rep.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/rep.scm,v 14.14 1990/06/20 20:29:50 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/rep.scm,v 14.15 1990/11/02 02:06:39 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -63,13 +63,15 @@ MIT in each case. |#
     (let loop ((message "Cold load finished"))
       (with-standard-proceed-point
        (lambda ()
-	 (make-repl false
-		    user-repl-environment
-		    user-repl-syntax-table
-		    user-initial-prompt
+	 (make-cmdl false
 		    console-input-port
 		    console-output-port
-		    (cmdl-message/standard message))))
+		    repl-driver
+		    (make-repl-state user-initial-prompt
+				     user-repl-environment
+				     user-repl-syntax-table)
+		    (cmdl-message/standard message)
+		    make-cmdl)))
       (loop "Reset!"))))
 
 ;;;; Command Loops
@@ -79,14 +81,16 @@ MIT in each case. |#
   (level false read-only true)
   (driver false read-only true)
   (proceed-continuation false read-only true)
+  (spawn-child false read-only true)
   continuation
   input-port
   output-port
   state)
 
-(define (make-cmdl parent input-port output-port driver state message)
+(define (make-cmdl parent input-port output-port driver state message
+		   spawn-child)
   (if (and parent (not (cmdl? parent)))
-      (error "MAKE-CMDL: illegal parent" parent))
+      (error:illegal-datum parent 'MAKE-CMDL))
   (let ((cmdl
 	 (%make-cmdl parent
 		     (let loop ((parent parent))
@@ -95,6 +99,7 @@ MIT in each case. |#
 			   1))
 		     driver
 		     (current-proceed-continuation)
+		     spawn-child
 		     false
 		     input-port
 		     output-port
@@ -122,14 +127,15 @@ MIT in each case. |#
   (if (not *nearest-cmdl*) (error "NEAREST-CMDL: no cmdl"))
   *nearest-cmdl*)
 
-(define (push-cmdl driver state message)
-  (let ((cmdl (nearest-cmdl)))
-    (make-cmdl cmdl
-	       (cmdl/input-port cmdl)
-	       (cmdl/output-port cmdl)
-	       driver
-	       state
-	       message)))
+(define (push-cmdl driver state message spawn-child)
+  (let ((parent (nearest-cmdl)))
+    ((cmdl/spawn-child parent) parent
+			       (cmdl/input-port parent)
+			       (cmdl/output-port parent)
+			       driver
+			       state
+			       message
+			       spawn-child)))
 
 (define (cmdl/base cmdl)
   (let ((parent (cmdl/parent cmdl)))
@@ -145,9 +151,15 @@ MIT in each case. |#
 (define hook/cmdl-prompt)
 
 (define (default/cmdl-prompt cmdl prompt)
-  (write-string
-   (string-append "\n\n" (number->string (cmdl/level cmdl)) " " prompt " ")
-   (cmdl/output-port cmdl)))
+  (use-output-port cmdl
+    (lambda (output-port)
+      (write-string
+       (string-append "\n\n"
+		      (number->string (cmdl/level cmdl))
+		      " "
+		      prompt
+		      " ")
+       output-port))))
 
 (define ((cmdl-message/standard string) cmdl)
   (hook/cmdl-message cmdl string))
@@ -155,21 +167,25 @@ MIT in each case. |#
 (define hook/cmdl-message)
 
 (define (default/cmdl-message cmdl string)
-  (write-string (string-append "\n" string) (cmdl/output-port cmdl)))
+  (use-output-port cmdl
+    (lambda (output-port)
+      (write-string (string-append "\n" string) output-port))))
 
 (define ((cmdl-message/strings . strings) cmdl)
-  (let ((port (cmdl/output-port cmdl)))
-    (for-each (lambda (string)
-		(write-string (string-append "\n" string) port))
-	      strings)))
+  (use-output-port cmdl
+    (lambda (output-port)
+      (for-each (lambda (string)
+		  (write-string (string-append "\n" string) output-port))
+		strings))))
 
 (define ((cmdl-message/null) cmdl)
   cmdl
   false)
 
 (define ((cmdl-message/active thunk) cmdl)
-  (with-output-to-port (cmdl/output-port cmdl)
-    thunk))
+  (use-output-port cmdl
+    (lambda (output-port)
+      (with-output-to-port output-port thunk))))
 
 (define ((cmdl-message/append . messages) cmdl)
   (for-each (lambda (message) (message cmdl)) messages))
@@ -254,31 +270,25 @@ MIT in each case. |#
 
 ;;;; REP Loops
 
-(define-structure (repl-state (conc-name repl-state/))
+(define-structure (repl-state
+		   (conc-name repl-state/)
+		   (constructor make-repl-state
+				(prompt environment syntax-table)))
   prompt
   environment
   syntax-table
-  reader-history
-  printer-history)
+  (reader-history (make-repl-history reader-history-size))
+  (printer-history (make-repl-history printer-history-size)))
 
-(define (make-repl parent environment syntax-table prompt input-port
-		   output-port message)
-  (input-port/normal-mode input-port
-    (lambda ()
-      (make-cmdl parent
-		 input-port
-		 output-port
-		 repl-driver
-		 (make-repl-state prompt
-				  environment
-				  syntax-table
-				  (make-repl-history reader-history-size)
-				  (make-repl-history printer-history-size))
-		 (cmdl-message/append
-		  message
-		  (cmdl-message/active
-		   (lambda ()
-		     (hook/repl-environment (nearest-repl) environment))))))))
+(define (push-repl environment message prompt)
+  (push-cmdl repl-driver
+	     (make-repl-state prompt environment (nearest-repl/syntax-table))
+	     (cmdl-message/append
+	      message
+	      (cmdl-message/active
+	       (lambda ()
+		 (hook/repl-environment (nearest-repl) environment))))
+	     make-cmdl))
 
 (define (repl-driver repl)
   (fluid-let ((hook/error-handler default/error-handler))
@@ -355,16 +365,6 @@ MIT in each case. |#
 	(repl/syntax-table repl)
 	user-initial-syntax-table)))
 
-(define (push-repl environment message prompt)
-  (let ((parent (nearest-cmdl)))
-    (make-repl parent
-	       environment
-	       (nearest-repl/syntax-table)
-	       prompt
-	       (cmdl/input-port parent)
-	       (cmdl/output-port parent)
-	       message)))
-
 (define (read-eval-print environment message prompt)
   (with-standard-proceed-point
    (lambda ()
@@ -406,7 +406,7 @@ MIT in each case. |#
   unspecific)
 
 (define (default/repl-read repl)
-  (let ((s-expression (read (cmdl/input-port repl))))
+  (let ((s-expression (read-internal (cmdl/input-port repl))))
     (repl-history/record! (repl/reader-history repl) s-expression)
     s-expression))
 
@@ -420,12 +420,13 @@ MIT in each case. |#
 
 (define (default/repl-write repl object)
   (repl-history/record! (repl/printer-history repl) object)
-  (let ((port (cmdl/output-port repl)))
-    (if (undefined-value? object)
-	(write-string "\n;No value" port)
-	(begin
-	  (write-string "\n;Value: " port)
-	  (write object port)))))
+  (use-output-port repl
+    (lambda (output-port)
+      (if (undefined-value? object)
+	  (write-string "\n;No value" output-port)
+	  (begin
+	    (write-string "\n;Value: " output-port)
+	    (write object output-port))))))
 
 ;;;; History
 
@@ -456,7 +457,6 @@ MIT in each case. |#
 ;;; User Interface Stuff
 
 (define user-repl-environment)
-(define user-repl-syntax-table)
 
 (define (pe)
   (let ((environment (nearest-repl/environment)))
@@ -470,7 +470,10 @@ MIT in each case. |#
 	(environment (->environment environment)))
     (set! user-repl-environment environment)
     (set-repl-state/environment! (cmdl/state repl) environment)
-    (hook/repl-environment repl environment)
+    (use-output-port repl
+      (lambda (output-port)
+	output-port
+	(hook/repl-environment repl environment)))
     environment))
 
 (define (ve environment)
@@ -478,7 +481,10 @@ MIT in each case. |#
 	(environment (->environment environment)))
     (set-repl-state/environment! (cmdl/state repl) environment)
     (set-repl-state/prompt! (cmdl/state repl) "Visiting->")
-    (hook/repl-environment repl environment)
+    (use-output-port repl
+      (lambda (output-port)
+	output-port
+	(hook/repl-environment repl environment)))
     environment))
 
 (define (->environment object)
@@ -501,6 +507,8 @@ MIT in each case. |#
 	   (if (not package)
 	       (error "->ENVIRONMENT: Not an environment" object))
 	   (package/environment package)))))
+
+(define user-repl-syntax-table)
 
 (define (gst syntax-table)
   (guarantee-syntax-table syntax-table)
@@ -562,10 +570,9 @@ MIT in each case. |#
   (read-char-internal (cmdl/input-port cmdl)))
 
 (define (default/prompt-for-confirmation cmdl prompt)
-  (let ((input-port (cmdl/input-port cmdl))
-	(output-port (cmdl/output-port cmdl)))
-    (input-port/immediate-mode input-port
-      (lambda ()
+  (let ((input-port (cmdl/input-port cmdl)))
+    (use-output-port cmdl
+      (lambda (output-port)
 	(let loop ()
 	  (newline output-port)
 	  (write-string prompt output-port)
@@ -584,18 +591,51 @@ MIT in each case. |#
 		   (loop)))))))))
 
 (define (default/prompt-for-expression cmdl prompt)
-  (let ((input-port (cmdl/input-port cmdl))
-	(output-port (cmdl/output-port cmdl)))
-    (newline output-port)
-    (write-string prompt output-port)
-    (write-string ": " output-port)
-    (input-port/normal-mode input-port
+  (use-output-port cmdl
+    (lambda (output-port)
+      (newline output-port)
+      (write-string prompt output-port)
+      (write-string ": " output-port)))
+  (read-internal (cmdl/input-port cmdl)))
+
+(define (use-output-port cmdl user)
+  (let ((output-port (cmdl/output-port cmdl)))
+    (terminal-bind terminal-cooked-output (output-port/channel output-port)
       (lambda ()
-	(read input-port)))))
+	(user output-port)))))
+
+(define (read-internal input-port)
+  (terminal-bind terminal-cooked-input (input-port/channel input-port)
+    (lambda ()
+      (read input-port))))
 
 (define (read-char-internal input-port)
-  (let loop ()
-    (let ((char (read-char input-port)))
-      (if (char=? char char:newline)
-	  (loop)
-	  char))))
\ No newline at end of file
+  (terminal-bind terminal-raw-input (input-port/channel input-port)
+    (lambda ()
+      (let loop ()
+	(let ((char (read-char input-port)))
+	  (if (char=? char char:newline)
+	      (loop)
+	      char))))))
+
+(define (terminal-bind operation terminal thunk)
+  (if (and terminal
+	   (channel-type=terminal? terminal))
+      (let ((outside-state)
+	    (inside-state false))
+	(dynamic-wind
+	 (lambda ()
+	   (set! outside-state (terminal-get-state terminal))
+	   (if inside-state
+	       (begin
+		 (terminal-set-state terminal inside-state)
+		 (set! inside-state)
+		 unspecific)
+	       (operation terminal)))
+	 thunk
+	 (lambda ()
+	   (set! inside-state (terminal-get-state terminal))
+	   (terminal-set-state terminal outside-state)
+	   (set! outside-state)
+	   unspecific)))
+      (thunk)))
\ No newline at end of file
diff --git a/v7/src/runtime/runtime.pkg b/v7/src/runtime/runtime.pkg
index 772cba1e5..e2996782d 100644
--- a/v7/src/runtime/runtime.pkg
+++ b/v7/src/runtime/runtime.pkg
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/runtime.pkg,v 14.81 1990/10/17 03:30:37 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/runtime.pkg,v 14.82 1990/11/02 02:06:48 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -782,6 +782,7 @@ MIT in each case. |#
 	  current-input-port
 	  eof-object?
 	  guarantee-input-port
+	  input-port/channel
 	  input-port/char-ready?
 	  input-port/copy
 	  input-port/custom-operation
@@ -795,8 +796,6 @@ MIT in each case. |#
 	  input-port/operation/peek-char
 	  input-port/operation/read-char
 	  input-port/operation/read-string
-	  input-port/immediate-mode
-	  input-port/normal-mode
 	  input-port/peek-char
 	  input-port/read-char
 	  input-port/read-string
@@ -1175,14 +1174,13 @@ MIT in each case. |#
 	  close-output-port
 	  current-output-port
 	  display
-	  fresh-line
 	  guarantee-output-port
 	  make-output-port
 	  newline
+	  output-port/channel
 	  output-port/copy
 	  output-port/custom-operation
 	  output-port/flush-output
-	  output-port/fresh-line
 	  output-port/operation
 	  output-port/operation-names
 	  output-port/state
@@ -1375,7 +1373,6 @@ MIT in each case. |#
 	  output-buffer/write-char-block
 	  output-buffer/write-string-block)
   (export (runtime console-output)
-	  channel-type=terminal?
 	  channel-write-char-block
 	  channel-write-string-block
 	  make-output-buffer
@@ -1385,24 +1382,23 @@ MIT in each case. |#
 	  output-buffer/size
 	  output-buffer/write-char-block
 	  output-buffer/write-string-block
-	  terminal-cooked-output
-	  terminal-output-baud-rate
-	  terminal-raw-output
 	  tty-output-channel)
   (export (runtime console-input)
 	  channel-type=file?
-	  channel-type=terminal?
 	  input-buffer/buffered-chars
 	  input-buffer/channel
 	  input-buffer/char-ready?
 	  input-buffer/peek-char
 	  input-buffer/read-char
 	  make-input-buffer
-	  terminal-buffered
-	  terminal-buffered?
-	  terminal-input-baud-rate
-	  terminal-nonbuffered
 	  tty-input-channel)
+  (export (runtime rep)
+	  channel-type=terminal?
+	  terminal-cooked-input
+	  terminal-cooked-output
+	  terminal-get-state
+	  terminal-raw-input
+	  terminal-set-state)
   (initialization (initialize-package!)))
 
 (define-package (runtime program-copier)
@@ -1497,7 +1493,6 @@ MIT in each case. |#
 	  in
 	  initial-top-level-repl
 	  make-cmdl
-	  make-repl
 	  nearest-cmdl
 	  nearest-repl
 	  nearest-repl/environment
diff --git a/v7/src/runtime/version.scm b/v7/src/runtime/version.scm
index edd868b26..a6629d0ef 100644
--- a/v7/src/runtime/version.scm
+++ b/v7/src/runtime/version.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/version.scm,v 14.99 1990/10/16 21:03:42 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/version.scm,v 14.100 1990/11/02 02:07:08 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -45,7 +45,7 @@ MIT in each case. |#
 		     '()))
   (add-system! microcode-system)
   (add-event-receiver! event:after-restore snarf-microcode-version!)
-  (add-identification! "Runtime" 14 99))
+  (add-identification! "Runtime" 14 100))
 
 (define microcode-system)
 
diff --git a/v8/src/runtime/runtime.pkg b/v8/src/runtime/runtime.pkg
index 9bad373da..41e3f0d03 100644
--- a/v8/src/runtime/runtime.pkg
+++ b/v8/src/runtime/runtime.pkg
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/runtime.pkg,v 14.81 1990/10/17 03:30:37 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/runtime.pkg,v 14.82 1990/11/02 02:06:48 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -782,6 +782,7 @@ MIT in each case. |#
 	  current-input-port
 	  eof-object?
 	  guarantee-input-port
+	  input-port/channel
 	  input-port/char-ready?
 	  input-port/copy
 	  input-port/custom-operation
@@ -795,8 +796,6 @@ MIT in each case. |#
 	  input-port/operation/peek-char
 	  input-port/operation/read-char
 	  input-port/operation/read-string
-	  input-port/immediate-mode
-	  input-port/normal-mode
 	  input-port/peek-char
 	  input-port/read-char
 	  input-port/read-string
@@ -1175,14 +1174,13 @@ MIT in each case. |#
 	  close-output-port
 	  current-output-port
 	  display
-	  fresh-line
 	  guarantee-output-port
 	  make-output-port
 	  newline
+	  output-port/channel
 	  output-port/copy
 	  output-port/custom-operation
 	  output-port/flush-output
-	  output-port/fresh-line
 	  output-port/operation
 	  output-port/operation-names
 	  output-port/state
@@ -1375,7 +1373,6 @@ MIT in each case. |#
 	  output-buffer/write-char-block
 	  output-buffer/write-string-block)
   (export (runtime console-output)
-	  channel-type=terminal?
 	  channel-write-char-block
 	  channel-write-string-block
 	  make-output-buffer
@@ -1385,24 +1382,23 @@ MIT in each case. |#
 	  output-buffer/size
 	  output-buffer/write-char-block
 	  output-buffer/write-string-block
-	  terminal-cooked-output
-	  terminal-output-baud-rate
-	  terminal-raw-output
 	  tty-output-channel)
   (export (runtime console-input)
 	  channel-type=file?
-	  channel-type=terminal?
 	  input-buffer/buffered-chars
 	  input-buffer/channel
 	  input-buffer/char-ready?
 	  input-buffer/peek-char
 	  input-buffer/read-char
 	  make-input-buffer
-	  terminal-buffered
-	  terminal-buffered?
-	  terminal-input-baud-rate
-	  terminal-nonbuffered
 	  tty-input-channel)
+  (export (runtime rep)
+	  channel-type=terminal?
+	  terminal-cooked-input
+	  terminal-cooked-output
+	  terminal-get-state
+	  terminal-raw-input
+	  terminal-set-state)
   (initialization (initialize-package!)))
 
 (define-package (runtime program-copier)
@@ -1497,7 +1493,6 @@ MIT in each case. |#
 	  in
 	  initial-top-level-repl
 	  make-cmdl
-	  make-repl
 	  nearest-cmdl
 	  nearest-repl
 	  nearest-repl/environment
-- 
2.25.1