;;; -*- Fonts:CPTFONT,TR12I; Mode: LISP; Package: SERIAL; Base: 8. -*- ;1;;This file contains methods, etc. specific to the H19 terminal type.* ;1;; It does not support the ANSI mode features.* ;1;; It does support making the display window any desired size.* ;1;;The basic serial terminal stuff is in SERIAL; TERMINAL.LISP.* (defflavor h19 () (basic-serial-terminal) :initable-instance-variables) (defmethod (h19 :after :init) (ignore) ;1We don't need the init-plist.* (setq current-terminal-flavor 'h19)) (defvar bad-escapes nil) (DEFMETHOD (H19 :ESCAPE-DISPATCH) () (LET* ((KEYSTROKE (SEND SELF ':GET-CHAR)) (METHOD (GETHASH KEYSTROKE ESCAPE-DISPATCH-TABLE))) (IF METHOD (SEND SELF METHOD) (push keystroke bad-escapes)))) (def-escape h19 #/[ t :eat-temp (let (i1 i2 flag) (setq I1 (send self ':get-char)) (setq I2 (send self ':get-char)) (cond ((= i1 #/?) (setq flag t) (send self ':get-char)) ((or (> i2 #/9) (< i2 0)) (setq i1 (- i1 #/0))) (t (setq i1 (+ (* 10. (- i1 #/0)) (- i2 #/0))) (setq i2 (send self ':get-char)))) (if (not flag) (selectq i2 (#/L (dotimes (count i1) (send self ':insert-line))) (#/M (dotimes (count i1) (send self ':delete-line))))))) (DEF-ESCAPE H19 #H NIL :HOME-CURSOR) (DEF-ESCAPE H19 #p T :REVERSE-VIDEO (SETQ REVERSE-VIDEO-FLAG T)) (DEF-ESCAPE H19 #q T :NORMAL-VIDEO (SETQ REVERSE-VIDEO-FLAG NIL)) (DEF-ESCAPE H19 #x T :EAT-MODE (SEND MODEM-STREAM ':TYI)) (DEF-ESCAPE H19 #y NIL :EAT-MODE) (DEF-ESCAPE H19 #C T :CURSOR-FORWARD (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (IF ( (CAR X-Y) 79.) (SEND SELF ':SET-CURSORPOS (1+ (CAR X-Y)) (CADR X-Y) ':CHARACTER)))) (DEF-ESCAPE H19 #D T :CURSOR-BACKWARDS (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (IF ( (CAR X-Y) 0) (SEND SELF ':SET-CURSORPOS (1- (CAR X-Y)) (CADR X-Y) ':CHARACTER)))) (DEF-ESCAPE H19 #B T :CURSOR-DOWN (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (IF ( (CADR X-Y) (- (self-character-height) 2)) (SEND SELF ':SET-CURSORPOS (CAR X-Y) (1+ (CADR X-Y)) ':CHARACTER)))) (DEF-ESCAPE H19 #A T :CURSOR-UP (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (IF ( (CADR X-Y) 0) (SEND SELF ':SET-CURSORPOS (CAR X-Y) (1- (CADR X-Y)) ':CHARACTER)))) (DEF-ESCAPE H19 #I T :REVERSE-INDEX (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (IF (ZEROP (CAR X-Y)) (PROGN (SEND SELF ':SET-CURSORPOS 0 (- (self-character-height) 2) ':CHARACTER) (SEND SELF ':DELETE-LINE) (SEND SELF ':SET-CURSORPOS (CAR X-Y) (CADR X-Y) ':CHARACTER) (SEND SELF ':INSERT-LINE)) (SEND SELF ':CURSOR-UP)))) (DEF-ESCAPE H19 #n T :REPORT-CURSOR (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (SEND MODEM-STREAM ':TYO #ALTMODE) (SEND MODEM-STREAM ':TYO #Y) (SEND MODEM-STREAM ':TYO (+ 32. (CADR X-Y))) (SEND MODEM-STREAM ':TYO (+ 32. (CAR X-Y))))) (DEF-ESCAPE H19 #J NIL :CLEAR-EOF) (DEFVAR CURSOR-SAVE '(0 0)) (DEF-ESCAPE H19 #j T :SAVE-POS (SETQ CURSOR-SAVE (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (DEF-ESCAPE H19 #k T :RESTORE-POS (SEND SELF ':SET-CURSORPOS (CAR CURSOR-SAVE) (CADR CURSOR-SAVE) ':CHARACTER)) (DEF-ESCAPE H19 #Y T :SET-POS (LET ((Y (SEND SELF ':get-char)) (X (SEND SELF ':get-char))) (SEND SELF ':SET-CURSORPOS (- X 32.) (- Y 32.) ':CHARACTER))) (DEF-ESCAPE H19 #E NIL :CLEAR-SCREEN) (DEF-ESCAPE H19 #b T :CLEAR-BOD (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (DOTIMES (LINE (1- (CADR X-Y))) (SEND SELF ':SET-CURSORPOS 0 LINE ':CHARACTER) (SEND SELF ':CLEAR-EOL)) (SEND SELF ':SET-CURSORPOS 0 (CADR X-Y) ':CHARACTER) (DOTIMES (DUMMY (CAR X-Y)) (SEND SELF ':CLEAR-CHAR) (send self ':CURSOR-FORWARD))) (SEND SELF ':CURSOR-BACKWARDS)) (DEF-ESCAPE H19 #l T :CLEAR-LINE (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (SEND SELF ':SET-CURSORPOS 0 (CADR X-Y) ':CHARACTER) (SEND SELF ':CLEAR-EOL) (SEND SELF ':SET-CURSORPOS (CAR X-Y) (CADR X-Y) ':CHARACTER))) (DEF-ESCAPE H19 #o t :ERASE-BOL (LET ((X-Y (MULTIPLE-VALUE-LIST (SEND SELF ':READ-CURSORPOS ':CHARACTER)))) (SEND SELF ':SET-CURSORPOS 0 (CADR X-Y) ':CHARACTER) (DOTIMES (DUMMY (CAR X-Y)) (SEND SELF ':CLEAR-CHAR) (send self ':CURSOR-FORWARD))) (SEND SELF ':CURSOR-BACKWARDS)) (DEF-ESCAPE H19 #K NIL :CLEAR-EOL) (DEF-ESCAPE H19 #L T :INSERT-ONE-LINE (SEND SELF ':SAVE-POS-1) (SEND SELF ':SET-CURSORPOS 0 (- (self-character-height) 2) ':CHARACTER) (SEND SELF ':DELETE-LINE) (SEND SELF ':RESTORE-POS-1) (SEND SELF ':INSERT-LINE) (SEND SELF ':GOTO-BEG-OF-LINE)) (DEF-ESCAPE H19 #M T :DELETE-ONE-LINE (SEND SELF ':DELETE-LINE) (SEND SELF ':SAVE-POS-1) (SEND SELF ':SET-CURSORPOS 0 (- (self-character-height) 2) ':CHARACTER) (SEND SELF ':INSERT-LINE) (SEND SELF ':RESTORE-POS-1) (SEND SELF ':GOTO-BEG-OF-LINE)) (DEF-ESCAPE H19 #N NIL :DELETE-CHAR) (DEF-ESCAPE H19 #@ T :ENTER-INSERT-MODE (SETQ INSERT-FLAG T)) (DEF-ESCAPE H19 #O T :EXIT-INSERT-MODE (SETQ INSERT-FLAG NIL)) (compile-flavor-methods h19)