Change console-input-port so that it always buffers the input.
authorChris Hanson <org/chris-hanson/cph>
Thu, 21 Jun 1990 22:11:52 +0000 (22:11 +0000)
committerChris Hanson <org/chris-hanson/cph>
Thu, 21 Jun 1990 22:11:52 +0000 (22:11 +0000)
Because of this change there is no need to use the special terminal
input primitives -- these should be flushed from the microcode.
All buffered input channels now support the `interval' argument of the
`char-ready?' operation.

v7/src/runtime/io.scm
v7/src/runtime/runtime.pkg
v7/src/runtime/version.scm
v8/src/runtime/runtime.pkg

index b8ba7b9a9420c546146e4ea85ad8b690e1e09e81..f980f624dd1edfd87863c6940ecae093fcdb9984 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/io.scm,v 14.6 1990/06/20 20:29:20 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/io.scm,v 14.7 1990/06/21 22:11:38 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -261,13 +261,6 @@ MIT in each case. |#
   ((ucode-primitive file-set-position 2) (channel-descriptor channel)
                                         position))
 
-(define (terminal-read-char channel)
-  ((ucode-primitive terminal-read-char 1) (channel-descriptor channel)))
-
-(define (terminal-char-ready? channel delay)
-  ((ucode-primitive terminal-char-ready? 2) (channel-descriptor channel)
-                                           delay))
-
 (define (terminal-buffered? channel)
   ((ucode-primitive terminal-buffered? 1) (channel-descriptor channel)))
 
@@ -503,17 +496,24 @@ MIT in each case. |#
           (and (not (negative? n))
                (+ (input-buffer/chars-available buffer) n))))))
 
-(define (input-buffer/char-ready? buffer)
-  (char-ready? buffer
-    (lambda (buffer)
-      (case (channel-blocking? (input-buffer/channel buffer))
-       ((#F)
-        (input-buffer/fill buffer))
-       ((#T)
-        (with-channel-blocking (input-buffer/channel buffer)
-                               false
-                               (lambda () (input-buffer/fill buffer))))
-       (else false)))))
+(define (input-buffer/char-ready? buffer interval)
+  (let ((fill
+        (if (positive? interval)
+            (lambda ()
+              (let ((timeout (+ (real-time-clock) interval)))
+                (let loop ()
+                  (cond ((input-buffer/fill buffer) true)
+                        ((< (real-time-clock) timeout) (loop))
+                        (else false)))))
+            (lambda ()
+              (input-buffer/fill buffer)))))
+    (char-ready? buffer
+      (lambda (buffer)
+       (let ((channel (input-buffer/channel buffer)))
+         (case (channel-blocking? channel)
+           ((#F) (fill))
+           ((#T) (with-channel-blocking channel false fill))
+           (else false)))))))
 
 (define (char-ready? buffer fill)
   (let ((end-index (input-buffer/end-index buffer)))
index ae19583545e8f71c1a37146d81910d28170ebd2e..2a265820850aba66b0d419fce1d1011a47ec6c63 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/runtime.pkg,v 14.67 1990/06/20 20:29:56 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/runtime.pkg,v 14.68 1990/06/21 22:11:42 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -1318,15 +1318,16 @@ MIT in each case. |#
          output-buffer/write-string-block
          tty-output-channel)
   (export (runtime console-input)
+         channel-type=file?
          channel-type=terminal?
+         input-buffer/channel
          input-buffer/char-ready?
+         input-buffer/peek-char
          input-buffer/read-char
          make-input-buffer
          terminal-buffered
          terminal-buffered?
-         terminal-char-ready?
          terminal-nonbuffered
-         terminal-read-char
          tty-input-channel)
   (initialization (initialize-package!)))
 
index 329dfc37b4febd0eb74436729233611a925a2541..cc0a8dec4141ae69ca31fb92d259575ad611f20f 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/version.scm,v 14.82 1990/06/20 20:37:44 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/version.scm,v 14.83 1990/06/21 22:11:52 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 82))
+  (add-identification! "Runtime" 14 83))
 
 (define microcode-system)
 
index a4dc7ab867e558ccb1db9151db06c7895916d67c..074e826c8b6a3289ae46494325d7765ecf7d6d9a 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/runtime.pkg,v 14.67 1990/06/20 20:29:56 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/runtime.pkg,v 14.68 1990/06/21 22:11:42 cph Exp $
 
 Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
 
@@ -1318,15 +1318,16 @@ MIT in each case. |#
          output-buffer/write-string-block
          tty-output-channel)
   (export (runtime console-input)
+         channel-type=file?
          channel-type=terminal?
+         input-buffer/channel
          input-buffer/char-ready?
+         input-buffer/peek-char
          input-buffer/read-char
          make-input-buffer
          terminal-buffered
          terminal-buffered?
-         terminal-char-ready?
          terminal-nonbuffered
-         terminal-read-char
          tty-input-channel)
   (initialization (initialize-package!)))