;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for Kermit version 36.2 ;;; Reason: ;;; Don't scroll up the H19 status line. ;;; Written 19-Jul-88 12:59:29 by pld (Peter L. DeWolf) at site Gigamos Cambridge ;;; while running on Cthulhu from band 3 ;;; with System 125.6, ZWEI 125.2, ZMail 73.0, Local-File 75.0, File-Server 24.0, Unix-Interface 13.0, Tape 24.0, Lambda-Diag 17.0, Experimental Kermit 36.0, microcode 1761, SDU Boot Tape 3.14, SDU ROM 8. ; From modified file DJ: L.NETWORK.KERMIT; TERM.LISP#69 at 19-Jul-88 12:59:38 #10R KERMIT#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; TERM  " (DEFSUBST TERMINAL-END-OF-PAGE-EXCEPTION () (SEND *TERMINAL* :HOME-CURSOR) (cond (*wrap-around-instead-of-scrolling-flag* (send *terminal* :clear-eol)) (t (SEND *TERMINAL* :DELETE-LINE) (TERMINAL-SET-CURSORPOS 0 (- (TERMINAL-CHARACTER-HEIGHT) 2)) (send *terminal* :insert-line)))) )) ; From modified file DJ: L.NETWORK.KERMIT; TERM.LISP#69 at 19-Jul-88 12:59:42 #10R KERMIT#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; TERM  " (DEFSUBST TERMINAL-CR () (MULTIPLE-VALUE-BIND (IGNORE Y) (TERMINAL-READ-CURSORPOS) (TERMINAL-SET-CURSORPOS 0 Y) (AND *AUTO-LF-ON-CR-FLAG* (COND ((EQ Y (- (TERMINAL-CHARACTER-HEIGHT) 2)) (TERMINAL-END-OF-PAGE-EXCEPTION)) (T (TERMINAL-SET-CURSORPOS 0 (1+ Y))))) (if (and *wrap-around-instead-of-scrolling-flag* *auto-cr-on-lf-flag*) (send *terminal* ':clear-eol)) NIL)) )) ; From modified file DJ: L.NETWORK.KERMIT; TERM.LISP#69 at 19-Jul-88 12:59:46 #10R KERMIT#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; TERM  " (DEFSUBST TERMINAL-LINEFEED () (MULTIPLE-VALUE-BIND (X Y) (TERMINAL-READ-CURSORPOS) (COND ((and (fixp y) (>= Y (- (TERMINAL-CHARACTER-HEIGHT) 2))) (TERMINAL-END-OF-PAGE-EXCEPTION)) (T (TERMINAL-SET-CURSORPOS (IF *AUTO-CR-ON-LF-FLAG* 0 X) (1+ Y)))) (if (and *wrap-around-instead-of-scrolling-flag* (not *auto-cr-on-lf-flag*)) (send *terminal* ':clear-eol)) NIL)) )) ; From modified file DJ: L.NETWORK.KERMIT; TERM.LISP#69 at 19-Jul-88 12:59:54 #10R KERMIT#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; TERM  " (DEFUN READ-CHAR-FROM-SERIAL-STREAM-TO-TERMINAL () (LET ((KEYSTROKE (SERIAL-TYI))) (when (not keystroke) (return-from READ-CHAR-FROM-SERIAL-STREAM-TO-TERMINAL :eof)) (when (eq keystroke #o377) ;; telnet IAC which can only be seen if *serial-stream-mask* is set to #o377 (return-from READ-CHAR-FROM-SERIAL-STREAM-TO-TERMINAL (handle-telnet-iac))) (COND (*INPUT-FLOW-CONTROL* ;; of course, instead of doing this we might just as well work a bit ;; on speeding up the terminal emulation itself so that we wouldnt fall ;; behind at 9600 baud. but we make it fine at 1200 baud already, the ;; most usual operating speed over dial up lines. It is losers in the field ;; who want to flow-control. On the other hand would also be nice to have ;; a termcap entry for this "terminal" that had sufficient padding. ;; the worlds slowest and most expensive H19. ;; With a unibus channel of 5k characters we never fall behind, which is ;; the solution I prefer. On the other hand it should be the microcode ;; that implements hardware and software flow control on input. ;; But even that may lose depending on the uart's silo characterists. (MULTIPLE-VALUE-BIND (AMOUNT MAX) ;; a reasonable optimization regardless of flow control nonsense ;; is to look ahead and process all easy characters if available, ;; collect them into a string and do a string out. (SEND *SERIAL-STREAM* :INPUT-CHARACTERS-AVAILABLE) (COND ((EQ *INPUT-FLOW-CONTROL* :CATCHING-UP) (COND ((< (* 3 AMOUNT) (* 1 MAX)) ;; less than 1/3 full, must be catching up now, so let 'em rip. (SEND *SERIAL-STREAM* :TYO #o21) (SETQ *INPUT-FLOW-CONTROL* :READY)))) ((> (* 3 AMOUNT) (* 2 MAX)) ;; if more than 2/3 full we must be falling behind, so make 'em stop. (SETQ *INPUT-FLOW-CONTROL* :CATCHING-UP) (SEND *SERIAL-STREAM* :TYO #o23)))))) (COND (*tek-in-graphics-mode* (COND ((eq keystroke *tek-pad*)) ((EQ KEYSTROKE *TEK-PRINTMODE*) (SETQ *TEK-IN-GRAPHICS-MODE* NIL)) ((EQ KEYSTROKE *CR*) (SETQ *TEK-IN-GRAPHICS-MODE* NIL) (SEND *SERIAL-STREAM* :UNTYI KEYSTROKE)) ((EQ KEYSTROKE *TEK-GRAPHMODE*) (setq *tek-firstp* t)) ((EQ KEYSTROKE #\ALT) (escape-dispatch)) ((EQ KEYSTROKE #O12) (TERMINAL-LINEFEED)) ((>= KEYSTROKE #O40) (SEND *SERIAL-STREAM* :UNTYI KEYSTROKE) (MULTIPLE-VALUE-BIND (X Y) (get-tek-vector) (COND (*tek-firstp* (SETQ *tek-firstp* NIL) (TEK-MOVE X Y)) ('ELSE (TEK-DRAW X Y))))))) ((AND *TEK-EMULATIONP* (EQ KEYSTROKE *TEK-GRAPHMODE*)) (setq *tek-in-graphics-mode* t) (setq *tek-firstp* t)) ((EQ KEYSTROKE #O33) ;ASCII [ESCAPE] (ESCAPE-DISPATCH)) ((< #O31 KEYSTROKE #O200) (AND *LOGFILE* TURN-ON-LOGGING? (SEND *LOGFILE* ':TYO KEYSTROKE)) ;LOGFILE KLUDGE (COND (*INSERT-FLAG* (TERMINAL-INSERT-CHAR))) (LET ((STORE (TERMINAL-ERASE-ALUF))) (TERMINAL-SET-ERASE-ALUF (IF *REVERSE-VIDEO-FLAG* TV:ALU-IOR TV:ALU-ANDCA)) (TERMINAL-CLEAR-CHAR) (TERMINAL-SET-ERASE-ALUF STORE)) (TERMINAL-TYO KEYSTROKE) (when (>= (TERMINAL-READ-CURSORPOS) (TERMINAL-CHARACTER-WIDTH)) (TERMINAL-CR) (terminal-linefeed))) (T (SELECTQ KEYSTROKE (0) (#O7 (TERMINAL-BEEP)) (#O10 (TERMINAL-BACKSPACE)) (#O11 (TERMINAL-TAB) (AND *LOGFILE* TURN-ON-LOGGING? (SEND *LOGFILE* ':TYO #O211))) (#O12 (TERMINAL-LINEFEED) (if *auto-clear-eol-on-linefeed-flag* (terminal-clear-eol))) (#O15 (TERMINAL-CR) (AND *TEK-EMULATIONP* (TEK-RESET-MEMORY)) (AND *LOGFILE* TURN-ON-LOGGING? (SEND *LOGFILE* ':TYO #O215))) (T (terminal-tyo keystroke) (COND (*TERMINAL-DEBUG-MODE* (FORMAT INTERACTION-PANE "~%Unrecognized /"control character/": ~O [~:@C]" KEYSTROKE KEYSTROKE)))) ))))) ))