Improve performance problem introduced in last revision.
authorChris Hanson <org/chris-hanson/cph>
Tue, 25 Apr 1989 03:54:38 +0000 (03:54 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 25 Apr 1989 03:54:38 +0000 (03:54 +0000)
v7/src/edwin/xterm.scm

index ddd61e62d46ba647b764aa7f6f69ca5280d2e026..0ded5db8b279fd430a3c3b11d0afe8dd209f3b1c 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/xterm.scm,v 1.3 1989/04/25 02:00:36 cph Exp $
+;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/xterm.scm,v 1.4 1989/04/25 03:54:38 cph Exp $
 ;;;
 ;;;    Copyright (c) 1989 Massachusetts Institute of Technology
 ;;;
           (string-length (xterm-input-port-state/buffer state)))
        true
        (let ((buffer
-              (xterm-screen/read-chars (xterm-input-port-state/screen state)
-                                       interval)))
+              (let ((screen (xterm-input-port-state/screen state)))
+                (if (zero? interval)
+                    (xterm-screen/read-chars screen 0)
+                    (let loop ((interval interval))
+                      (let ((result
+                             (xterm-screen/read-chars screen interval)))
+                        (if (integer? result)
+                            (loop result)
+                            result)))))))
          (and buffer
               (begin
                 (check-for-interrupts! state buffer 0)
              (string-ref buffer 0)))))))
 
 (define (xterm-screen/read-chars screen interval)
-  (let ((xterm (screen-xterm screen)))
-    (let loop ((interval interval))
-      (let ((result (xterm-read-chars xterm interval)))
-       (if (and (not (screen-in-update? screen))
-                (xterm-screen/process-events! screen))
-           (update-screen! screen false))
-       (if (integer? result)
-           (loop result)
-           result)))))
+  (let ((result (xterm-read-chars (screen-xterm screen) interval)))
+    (if (and (not (screen-in-update? screen))
+            (xterm-screen/process-events! screen))
+       (update-screen! screen false))
+    result))
 
 (define (xterm-screen/process-events! screen)
   (let ((xterm (screen-xterm screen)))