;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 123.178 ;;; Reason: ;;; Some Telnet Servers have bugs: VMS Excelan doesn't trouble to respond ;;; to DO ECHO with WILL ECHO, yet it still echoes. 4.2BSD Unix responds ;;; to DONT ECHO with WONT ECHO, yet continues to echo. Our Telnet needs ;;; the ability to toggle local echo regardless of what the state of the ;;; ECHO option is. Thus: Network-E toggles local echo. The old usage ;;; of this command is available with Network-Control-E, which toggles ;;; remote echo by sending a Telnet DO or DONT command. ;;; Written 7-Jan-88 15:09:51 by pld at site Gigamos Cambridge ;;; while running on Jack Flanders from band 2 ;;; with Experimental System 123.177, Experimental Local-File 73.3, Experimental FILE-Server 22.1, Experimental Unix-Interface 11.0, Experimental Tape 18.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, microcode 1754, SDU Boot Tape 3.12, SDU ROM 8. ; From modified file DJ: L.NETWORK; SUPDUP.LISP#312 at 7-Jan-88 15:11:27 #8R SUPDUP#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SUPDUP"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; SUPDUP  " (DEFMETHOD (BASIC-NVT :HANDLE-ESCAPE) (&AUX CH XPOS YPOS command) (UNWIND-PROTECT (PROGN (MULTIPLE-VALUE (XPOS YPOS) (TV:SHEET-READ-CURSORPOS SELF)) (PUT-DOWN-STRING SELF "CMND-->") (SETQ CH (CHAR-UPCASE (SEND SELF :TYI))) (SELECTQ CH ((#/CALL #/P) (TV:DESELECT-AND-MAYBE-BURY-WINDOW SELF)) (#/A (unless (NULL CONNECTION) (setq command '(SEND SELF :SEND-IF-HANDLES :SEND-IP)))) ((#/B #/BREAK) (SEND SELF :SET-SUPER-IMAGE-MODE NIL) (BREAK "BREAK") (SEND SELF :SET-SUPER-IMAGE-MODE T)) (#/C ;C = Change escape character. (PUT-DOWN-STRING SELF "Change escape character to -->") (SEND SELF :SET-SUPER-IMAGE-MODE NIL) (SETQ ESCAPE-CHAR (CHAR-UPCASE (SEND SELF :TYI))) (SEND SELF :SET-SUPER-IMAGE-MODE T)) (#/D ;D = Disconnect, ask for new host to connect to. (IF (NULL CONNECTION) (THROW 'NVT-DONE "(Already disconnected.)") (SEND SELF :DISCONNECT) (THROW 'NVT-DONE "Disconnected"))) (#/E (unless (null connection) (setq command '(send self :send-if-handles :toggle-local-echo)))) (#/Control-Shift-E (unless (null connection) (setq command '(send self :send-if-handles :toggle-remote-echo)))) (#/N (SEND SELF :SET-SUPER-IMAGE-MODE NIL)) (#/L ;L = Logout. (IF (NULL CONNECTION) (QUIT) (setq command '(progn (SEND SELF :LOGOUT) (QUIT "Logout"))))) (#/Q ;Q = Quit. (QUIT)) (#/M ;M = More. (IF (NOT (NULL CONNECTION)) (SEND SELF :SEND-IF-HANDLES :USER-SET-MORE-P (NOT (SEND SELF :MORE-P))))) (#/I ;I = Imlac. (IF (NOT (NULL CONNECTION)) (SEND SELF :SEND-IF-HANDLES :TOGGLE-IMLAC-SIMULATION))) (#/O (SEND SELF :SEND-IF-HANDLES :TOGGLE-OVERPRINTING)) (#/V (send self :send-if-handles :toggle-verbose-mode)) (#/Y (let* ((node (zwei:history-latest-element zwei:*kill-history*)) (string (if (arrayp node) node (zwei:string-interval node nil nil t)))) (dotimes (i (array-length string)) (send self :force-kbd-input (aref string i))))) ((#/HELP #/?) ; or ? = Help (SI:WITH-HELP-STREAM (WINDOW :LABEL "Help for Network commands") (SEND WINDOW :CLEAR-WINDOW) (FORMAT WINDOW "After typing the Escape character, which is ~:C, you can type these commands:~%" ESCAPE-CHAR) (FORMAT WINDOW " CALL -- Do a local CALL (return to top window). BREAK-- Enter a breakpoint. ~:[~;A -- Send an ATTN (in Telnet, a New Telnet /"Interrupt Process/"). ~]~ C -- Change the SUPDUP escape character. D -- Disconnect and connect to new host. ~:[~;E -- Toggle local echo ~]~ ~:[~;C-E -- Toggle remote echo ~]~ ~:[~;I -- Toggle imlac simulation. ~]~ L -- Log out of remote host, and break the connection. ~:[~;M -- Toggle more processing. ~]~ ~:[~;O -- Toggle overprinting (for servers that expect non-overprinting terminals). ~]~ P -- Return to top window, but don't break connection. Q -- Disconnect and return to top window. ~:[~;V -- Toggle verbose mode ~]~ Y -- Send the most recently killed string through the connection. Help -- Type this cruft. " (GET-HANDLER-FOR SELF :SEND-IP) (GET-HANDLER-FOR SELF :TOGGLE-LOCAL-ECHO) (GET-HANDLER-FOR SELF :TOGGLE-REMOTE-ECHO) (GET-HANDLER-FOR SELF :TOGGLE-IMLAC-SIMULATION) (GET-HANDLER-FOR SELF :USER-SET-MORE-P) (GET-HANDLER-FOR SELF :TOGGLE-OVERPRINTING) (get-handler-for self :toggle-verbose-mode)) (FORMAT WINDOW "~4A -- Send ~:C through~%" (FORMAT NIL "~:C" ESCAPE-CHAR) ESCAPE-CHAR))) (#/RUBOUT) ; = Do nothing. (OTHERWISE (COND ((= CH ESCAPE-CHAR) (SEND SELF :NET-OUTPUT-TRANSLATED CH) (LOCK-OUTPUT (SEND STREAM :FORCE-OUTPUT))) (T (TV:BEEP)))))) (TV:SHEET-FORCE-ACCESS (SELF T) (PUT-DOWN-STRING SELF "") ;Clear the bottom line. (TV:SHEET-SET-CURSORPOS SELF XPOS YPOS)) (when command (eval command)))) )) ; From modified file DJ: L.NETWORK; SUPDUP.LISP#312 at 7-Jan-88 15:11:43 #8R SUPDUP#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SUPDUP"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; SUPDUP  " (defmethod (basic-telnet :toggle-local-echo) () (telnet-echo (not echo-flag))) ))