mirror of
https://github.com/PDP-10/its.git
synced 2026-01-23 19:07:45 +00:00
232 lines
6.6 KiB
Common Lisp
232 lines
6.6 KiB
Common Lisp
;;; -*- LISP -*-î
|
|
î
|
|
(EVAL-WHEN (EVAL COMPILE) (LOAD '((LIBLSP) TTY FASL)))î
|
|
î
|
|
(DECLARE (SPECIAL INITIAL-TTY-SPECIFICATIONS SMART-TTY))î
|
|
î
|
|
(DECLARE (*LEXPR WHERE-TTY-SHOULD-BE))î
|
|
î
|
|
(COND ((NOT (BOUNDP 'SMART-TTY))î
|
|
(SETQ SMART-TTY (NOT (NOT (MEMQ 'CURSORPOS (STATUS FILEM TYO)))))))î
|
|
î
|
|
(DEFUN SMART-TTY? () SMART-TTY)î
|
|
î
|
|
(DEFUN BACK-UP-AND-OVERSTRIKE (POS)î
|
|
(LET ((INITIAL-POS (CDR (CURSORPOS))))î
|
|
(COND ((= INITIAL-POS POS)î
|
|
(TYO 10. TYO))î
|
|
((> INITIAL-POS POS)î
|
|
(DO ((I INITIAL-POS (1- I)))î
|
|
((= I POS) T)î
|
|
(TYO 8. TYO)î
|
|
(TYO 92. TYO)î
|
|
(TYO 8. TYO)))î
|
|
(Tî
|
|
(TYO 10. TYO)î
|
|
(DO ((I INITIAL-POS (1+ I)))î
|
|
((= I POS) T)î
|
|
(TYO 32. TYO))))))î
|
|
î
|
|
(DEFUN FANCY-RUBOUT (POS CHAR)î
|
|
; ((LAMBDA (CURRENT) ;debugging codeî
|
|
; (CURSORPOS 23. 0. TYO)î
|
|
; (PRINC (LIST 'POS= POS 'ASCII= CHAR) TYO)î
|
|
; (PRINC '| --MORE--| TYO)î
|
|
; (TYI TYI)î
|
|
; (CURSORPOS 23. 0. TYO)î
|
|
; (CURSORPOS 'L TYO)î
|
|
; (CURSORPOS (CAR CURRENT) (CDR CURRENT) TYO))î
|
|
; (CURSORPOS))î
|
|
(COND ((= CHAR 10.)î
|
|
(CURSORPOS 'U TYO)î
|
|
(CURSORPOS 'L TYO))î
|
|
((= CHAR 13.)î
|
|
(CURSORPOS (1- (CAR (CURSORPOS))) POS)î
|
|
(CURSORPOS 'L TYO))î
|
|
(Tî
|
|
(CURSORPOS NIL POS TYO)î
|
|
(CURSORPOS 'L TYO))))î
|
|
î
|
|
(DEFUN READER$RUBOUT (POS SMART-FLAG CHAR)î
|
|
(COND (SMART-FLAG (FANCY-RUBOUT POS CHAR))î
|
|
(T (BACK-UP-AND-OVERSTRIKE POS))))î
|
|
î
|
|
(DEFUN REDISPLAY (LINE PROMPT) (REDISPLAY1 LINE PROMPT))î
|
|
î
|
|
(DEFUN REDISPLAY1 (LINE PROMPT)î
|
|
(COND ((ANDî
|
|
(SMART-TTY?)î
|
|
(EQ (CAR (WHERE-TTY-SHOULD-BE)) (CAR (CURSORPOS))))î
|
|
(CURSORPOS NIL 0. TYO)î
|
|
(CURSORPOS 'L TYO))î
|
|
(T (CURSORPOS 'A TYO)))î
|
|
(COND (PROMPT (PRINC PROMPT TYO))î
|
|
(T (CURSORPOS NIL (CDAR (LAST LINE)) TYO)))î
|
|
(DO ((L (REVERSE LINE) (CDR L)))î
|
|
((NULL L))î
|
|
(COND ((ATOM (CAR L))î
|
|
(CURSORPOS NIL (LINEL TYO) TYO)î
|
|
(PRINC '- TYO)î
|
|
(TERPRI TYO))î
|
|
(Tî
|
|
(RPLACD (CAR L) (CDR (CURSORPOS TYO)))î
|
|
(TYO (CAAR L) TYO))))î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS TYO)))î
|
|
î
|
|
(DEFUN SCROD-DISPLAY () (NOT (EQUAL (WHERE-TTY-SHOULD-BE) (CURSORPOS TYO))))î
|
|
î
|
|
(DEFUN WHERE-TTY-SHOULD-BE Xî
|
|
(COND ((ZEROP X) (GET 'INPUT-LINE 'WHERE-TTY-SHOULD-BE))î
|
|
((= X 1.) (PUTPROP 'INPUT-LINE (ARG 1) 'WHERE-TTY-SHOULD-BE))î
|
|
(T (BREAK |(Wrong Number of Args to WHERE-TTY-SHOULD-BE)|))))î
|
|
î
|
|
(DEFUN ONE-LINE-ONLY (LINE)î
|
|
(DO ((L LINE (CDR L))î
|
|
(A NIL))î
|
|
((NULL L) (REVERSE A))î
|
|
(COND ((OR (EQ (CAR L) '<CR>)î
|
|
(MEMBER (CAAR L) '(13. 10.)))î
|
|
(RETURN (REVERSE A)))î
|
|
(T (SETQ A (CONS (CAR L) A))))))î
|
|
î
|
|
(DEFUN RUBBING-OUT @î
|
|
(COND ((ZEROP @) (GET 'INPUT-LINE 'RUBBING-OUT))î
|
|
(T (PUTPROP 'INPUT-LINE (ARG 1) 'RUBBING-OUT))))î
|
|
î
|
|
(SSTATUS TTYINT 23. NIL)î
|
|
î
|
|
(DEFUN READER$DELETE (LINE PROMPT)î
|
|
(PROG (POS CHAR)î
|
|
(COND ((NULL LINE)î
|
|
(PRINC (ASCII 7.) TYO)î
|
|
(RETURN NIL)))î
|
|
(COND ((ATOM (CAR LINE))î
|
|
(CURSORPOS (1- (CAR (CURSORPOS))) (1- (LINEL TYO)) TYO)î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS))î
|
|
(SETQ LINE (CDR LINE))))î
|
|
(SETQ POS (CDAR LINE))î
|
|
(SETQ CHAR (CAAR LINE))î
|
|
(SETQ LINE (CDR LINE))î
|
|
(COND ((SCROD-DISPLAY) (REDISPLAY LINE PROMPT))î
|
|
(Tî
|
|
(READER$RUBOUT POS (SMART-TTY?) CHAR)))î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS))î
|
|
(RUBBING-OUT T)î
|
|
(RETURN LINE)))î
|
|
î
|
|
(DEFUN ADD (CHAR LINE PROMPT)î
|
|
(PROG (POS)î
|
|
(SETQ POS (CDAR LINE))î
|
|
(COND ((SCROD-DISPLAY) (REDISPLAY LINE PROMPT)))î
|
|
(COND ((> (+ (FLATC (ASCII CHAR)) (CDR (CURSORPOS)))î
|
|
(LINEL TYO))î
|
|
(CURSORPOS NIL (LINEL TYO) TYO)î
|
|
(PRINC '- TYO)î
|
|
(TERPRI TYO)î
|
|
(SETQ LINE (CONS '<CR> LINE))))î
|
|
(SETQ LINE (CONS (CONS CHAR (CDR (CURSORPOS))) LINE))î
|
|
(COND ((RUBBING-OUT) (UPDATE-DISPLAY)))î
|
|
(RUBBING-OUT NIL)î
|
|
(TYO CHAR TYO)î
|
|
(RETURN LINE)))î
|
|
î
|
|
(DEFUN UPDATE-DISPLAY ()î
|
|
(COND ((NOT (SMART-TTY?)) (TYO 10. TYO))))î
|
|
î
|
|
(DEFUN CLEAR-SCREEN ()î
|
|
(CURSORPOS 'C TYO))î
|
|
î
|
|
(DEFUN LINE-READ-A-NUMBER (PROMPT TYPE)î
|
|
(PROG (NUM)î
|
|
TOPî
|
|
(SETQ NUM (READER PROMPT '(13.)))î
|
|
(SETQ NUMî
|
|
(CARî
|
|
(ERRSET (READLIST (DELETE '| | NUM))î
|
|
NIL)))î
|
|
(COND ((NUMBERP NUM)î
|
|
(RETURN (COND (TYPE (FUNCALL TYPE NUM))î
|
|
(T NUM))))î
|
|
(Tî
|
|
(CURSORPOS 'A TYO)î
|
|
(PRINC '|Data must be numeric. Please retry.| TYO)î
|
|
(CURSORPOS 'A TYO)î
|
|
(GO TOP)))))î
|
|
î
|
|
(DEFUN READER (PROMPT TERMINAL)î
|
|
(DO-WITH-TTY-OFFî
|
|
(PROG (TEMP)î
|
|
(PRINC PROMPT TYO)î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS))î
|
|
(SETQ TEMPî
|
|
(DO ((C (TYI TYI) (TYI TYI))î
|
|
(LINE NIL))î
|
|
((MEMBER C TERMINAL) LINE)î
|
|
(COND ((= C 127.)î
|
|
(SETQ LINE (READER$DELETE LINE PROMPT)))î
|
|
((= C 12.)î
|
|
(CLEAR-SCREEN)î
|
|
(REDISPLAY LINE PROMPT))î
|
|
((= C 18.)î
|
|
; ((LAMBDA (TEMP)î
|
|
; (CURSORPOS 12. 0. TYO)î
|
|
; (PRINT (LIST 'LINE= LINEî
|
|
; 'ONE= (ONE-LINE-ONLY LINE)))î
|
|
; (CURSORPOS (CAR TEMP) (CDR TEMP) TYO))î
|
|
; (CURSORPOS))î
|
|
(REDISPLAY (ONE-LINE-ONLY LINE) NIL))î
|
|
((= C 21.)î
|
|
(SETQ LINE (READER$FLUSH-LINE LINE PROMPT)))î
|
|
((= C 23.)î
|
|
(SETQ LINE (READER$DELETE-WORD LINE PROMPT)))î
|
|
(T (SETQ LINE (ADD C LINE PROMPT))))î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS))))î
|
|
(SETQ TEMPî
|
|
(DO ((L TEMP (CDR L))î
|
|
(A NIL))î
|
|
((NULL L) A)î
|
|
(COND ((NOT (ATOM (CAR L)))î
|
|
(SETQ A (CONS (ASCII (CAAR L)) A))))))î
|
|
(RETURN TEMP))))î
|
|
î
|
|
(DEFUN READER$DELETE-WORD (LINE PROMPT)î
|
|
(READER$FLUSH-ALPHA (READER$FLUSH-NON-ALPHA LINE PROMPT) PROMPT))î
|
|
î
|
|
(DEFUN READER$FLUSH-NON-ALPHA (LINE PROMPT)î
|
|
(DO ((L LINE))î
|
|
((OR (NULL L) (AND (NOT (ATOM (CAR L))) (ALPHAP (CAAR L)))) L)î
|
|
(SETQ L (READER$DELETE L PROMPT))î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS))))î
|
|
î
|
|
(DEFUN READER$FLUSH-ALPHA (LINE PROMPT)î
|
|
(DO ((L LINE))î
|
|
((OR (NULL L) (ATOM (CAR L)) (NOT (ALPHAP (CAAR L)))) L)î
|
|
(SETQ L (READER$DELETE L PROMPT))î
|
|
(WHERE-TTY-SHOULD-BE (CURSORPOS))))î
|
|
î
|
|
(DEFUN READER$FLUSH-LINE (LINE PROMPT)î
|
|
(DO ((L (AND LINE (READER$DELETE LINE PROMPT))î
|
|
(READER$DELETE L PROMPT)))î
|
|
((OR (NULL L)î
|
|
(AND (NOT (ATOM (CAR L))) (= (CAAR L) 13.)))î
|
|
L)))î
|
|
î
|
|
(DEFUN ALPHAP (X)î
|
|
(AND (NUMBERP X)î
|
|
(OR (AND (> X 64.) (< X 91.))î
|
|
(AND (> X 96.) (< X 123.)))))î
|
|
î
|
|
(DEFUN READ-ALTMODE (PROMPT)î
|
|
(IMPLODE (READER PROMPT '(27.))))î
|
|
î
|
|
(DEFUN READ-<CR> (PROMPT)î
|
|
(IMPLODE (READER PROMPT '(13.))))î
|
|
î
|
|
(DEFUN READ-SPACE (PROMPT)î
|
|
(IMPLODE (READER PROMPT '(32.))))î
|
|
î
|
|
(DEFUN R ()î
|
|
(CURSORPOS 'A TYO)î
|
|
(READER '|> | '(13.)))î
|
|
î
|
|
(DEFPROP READER T LOADED) |