; -*- Mode:Lisp; Package:lambda; Base:8; readtable: ZL -*- ; ** (c) Copyright 1980 Massachusetts Institute of Technology ** ; ** (c) Enhancements Copyright 1984,1985,1986 - Lisp Machine, Inc. (DEFVAR LAM-GETSYL-UNRCH NIL) (DEFVAR LAM-GETSYL-UNRCH-TOKEN NIL) (DEFUN LAM-GETSYL-RCH NIL (PROG (CH) (COND (LAM-GETSYL-UNRCH (SETQ CH LAM-GETSYL-UNRCH) (SETQ LAM-GETSYL-UNRCH NIL)) (T (COND (LAM-LOW-LEVEL-FLAG (LAM-REPLACE-STATE))) (DO-FOREVER (SETQ CH (FUNCALL STANDARD-INPUT ':ANY-TYI)) (COND ((ATOM CH) (RETURN NIL)) ((EQ (CAR CH) :TYPEOUT-EXECUTE) (HANDLE-TYPEOUT-EXECUTE CH STANDARD-INPUT)))) (COND ((< (LOGAND CH 377) 200) (FORMAT STANDARD-OUTPUT "~C" CH))))) X (RETURN CH))) ;Returns: for digits, a number. ;for other alphanumerics, a symbol. ;Otherwise, a symbol whose name starts with "#". (DEFUN LAM-GETSYL-READ-TOKEN (&OPTIONAL FORCE-SYMBOL) (PROG (TOK CH TERM-TOKEN) (COND (LAM-GETSYL-UNRCH-TOKEN (SETQ TOK LAM-GETSYL-UNRCH-TOKEN) (SETQ LAM-GETSYL-UNRCH-TOKEN NIL) (RETURN TOK))) L (SETQ CH (LAM-GETSYL-RCH)) (COND ((= CH #\RUBOUT) (OR TOK (RETURN '*RUB*)) ;OVER-RUBOUT (SETQ TOK (CDR TOK)) (CURSORPOS 'X) (GO L)) ((OR ( #/A CH #/Z) ( #/0 CH #/9) (= CH #/.)) (GO ALPHA-NUM)) (( #/a CH #/z) (SETQ CH (CHAR-UPCASE CH)) (GO ALPHA-NUM)) ((MEMQ CH '(#/- #/%)) (GO ALPHA-NUM))) ;DROP THRU ON "SCO" (SETQ TERM-TOKEN (INTERN (STRING-APPEND "#" (STRING-UPCASE (FORMAT:OUTPUT NIL (FORMAT:OCHAR CH ':EDITOR)))) (SYMBOL-PACKAGE 'FOO))) SEP X (COND (TOK (SETQ TOK (NREVERSE TOK)) (SETQ TOK (COND ((OR FORCE-SYMBOL (EQUAL TOK '(#/.)) (DO L TOK (CDR L) (NULL L) (OR (AND (<= #/0 (CAR L)) (<= (CAR L) #/9)) (= (CAR L) #/-) (= (CAR L) #/+) (= (CAR L) #/.) (= (car l) #/%) (RETURN T)))) (inhibit-style-warnings (IMPLODE TOK))) ;HAS LETTERS IN IT (T (READLIST TOK)))) ;A NUMBER (DIGITS, PLUS, MINUS) (SETQ LAM-GETSYL-UNRCH-TOKEN TERM-TOKEN) (RETURN TOK)) (TERM-TOKEN (RETURN TERM-TOKEN)) (T (GO L))) ALPHA-NUM (SETQ TOK (CONS CH TOK)) (GO L)))