// PAL1 LAST MODIFIED DN FRIDAY. 12 JUNE 1970 // AT 5:37:14.52 BY R MABEE >>> FILENAME 'PAL1' // // ********** // * * // * PAL1 * // * * // ********** // >>> GET 'PALHD' >>> EJECT // PAL1A MANIFEST $( EMPTY=0; SIMPLE=1; IGNORABLE=2; OTHERS=3 DOTK = 4; CAPITAL = 6; DIGIT = 7 $) LET NEXTSYMB() BE $(1 LET DIG = FALSE SYMBP := 0 UNLESS CHKIND = EMPTY GOTO M L: RCH() M: CHKIND := KIND() SWITCHON CHKIND INTO $( CASE IGNORABLE: RCH() REPEATWHILE CH='*S' GOTO M DIGITRDR: CASE DIGIT: SYMBP := SYMBP+1 DIG := TRUE SYMBV*(SYMBP) := CH RCH() CHKIND := KIND() SWITCHON CHKIND INTO $( CASE DIGIT: GOTO DIGITRDR CASE CAPITAL: GOTO IDRDR CASE DOTK: GOTO NUMBEG DEFAULT: SYMB := NUMBER RETURN $) IDRDR: CASE CAPITAL: SYMBP := SYMBP+1 SYMBV*(SYMBP) := CH RCH() CHKIND := KIND() IF CHKIND GE 5 DO $( IF CHKIND = DIGIT DO DIG := TRUE GOTO IDRDR $) SYMB := DIG -* NAME, LOOKUPWORD() RETURN NUMBEG: SYMBP := SYMBP + 1 SYMBV*(SYMBP) := CH RCH() CHKIND := KIND() IF CHKIND = DIGIT GOTO NUMBERDR REPORT(5, 1, 'INCORRECT REAL') SYMB := NUMBER RETURN NUMBERDR: SYMBP := SYMBP + 1 SYMBV*(SYMBP) := CH RCH() CHKIND := KIND() IF CHKIND = DIGIT GOTO NUMBERDR SYMB := NUMBER RETURN CASE DOTK: CHKIND, SYMB := EMPTY, OCT; RETURN CASE SIMPLE: CHKIND := EMPTY $) SWITCHON CH INTO $( CASE ';': SYMB := SEQ; RETURN CASE ',': SYMB := COMMA; RETURN CASE '+': SYMB := M_PLUS; RETURN CASE '(': SYMB := BRA; RETURN CASE ')': SYMB := KET; RETURN CASE '=': SYMB := VALDEF; RETURN CASE '&': SYMB := M_LOGAND; RETURN CASE '$': SYMB := NOSHARE; RETURN CASE '|': SYMB := BAR; RETURN CASE '<': SYMB := M_LS; RETURN CASE '>': SYMB := M_GR; RETURN CASE '%': SYMB := PERCENT; RETURN CASE '^': SYMB := M_NOT; RETURN CASE '**': RCH() IF CH = '**' DO $( SYMB, CHKIND := M_POWER, EMPTY RETURN $) SYMB := M_MULT RETURN CASE '=': RCH() IF CH='=' DO $( SYMB, CHKIND := ASS, EMPTY RETURN $) SYMB := COLON RETURN CASE '-': RCH() IF CH='**' LOGOR CH='>' DO $( SYMB, CHKIND := COND, EMPTY RETURN $) SYMB := M_MINUS RETURN CASE '/': RCH() IF CH='/' DO $( RCH() IF CH='*N' GOTO L $) REPEAT SYMB := M_DIV RETURN CASE '*'': SYMBP := 0 NSCH: $( RCH() IF CH='**' DO $( RCH() SYMBP := SYMBP + 1 SYMBV*(SYMBP) := CH='T' -* '*T', CH='S' -* '*S', CH='N' -* '*N', CH GOTO NSCH $) IF CH='*'' DO $( SYMB, CHKIND := STRINGCONST, EMPTY RETURN $) IF CH='*N' LOGOR CH=ENDOFSTREAMCH DO $( REPORT(5, 2, 'UNCLOSED QUOTE') SYMB, CHKIND := STRINGCONST, EMPTY RETURN $) SYMBP := SYMBP + 1 SYMBV*(SYMBP) := CH GOTO NSCH $) CASE '#': IF LINEP NE 1 GOTO CONTERR WRITECH(OUTPUT, '*B') CASE ENDOFSTREAMCH: SYMB := END RETURN CONTERR: DEFAULT: REPORT(5, 4, 'CHARACTER OUT OF CONTEXT') GOTO L $)1 AND KIND() = VALOF $(1 SWITCHON CH INTO $( CASE 'A':CASE 'B':CASE 'C':CASE 'D':CASE 'E'; CASE 'F':CASE 'G':CASE 'H':CASE 'I':CASE 'J': CASE 'K':CASE 'L':CASE 'M':CASE 'N':CASE 'O': CASE 'P':CASE 'Q':CASE 'R':CASE 'S':CASE 'T': CASE 'U':CASE 'V':CASE 'W':CASE 'X':CASE 'Y': CASE 'Z':CASE '_': RESULTIS CAPITAL CASE '0':CASE '1':CASE '2':CASE '3':CASE '4': CASE '5':CASE '6':CASE '7':CASE '8':CASE '9': RESULTIS DIGIT CASE '*N':CASE '*S':CASE '*T':CASE 0: RESULTIS IGNORABLE CASE ';';CASE ',':CASE '+':CASE '(': CASE ')':CASE '=';CASE '&':CASE '$': CASE '>':CASE '<':CASE '|':CASE '%': CASE '^': RESULTIS SIMPLE CASE '.': RESULTIS DOTK DEFAULT: RESULTIS OTHERS $)1 AND RCH() BE $(1 IF CH='*N' DO $( LINEP := 0; COLUMN(OUTPUT, 21) $) READCH(INPUT, LVCH) LINEP := LINEP+1 IF LINEP > LINET DO $( WRITECH(OUTPUT, '*T') // SEPARATE COLUMNS 72 AND 73 $( WRITECH(OUTPUT, CH) READCH(INPUT, LVCH) $) REPEATUNTIL CH='*N' IF TIME_EXCEEDED DO TIMEOVFL() $) WRITECH(OUTPUT, CH) $)1 >>> EJECT // PAL1B LET LOOKUPWORD() = VALOF $(1 LET I, V2, V3, V4, V5, V6 = SYMBP, SYMBV*(2), SYMBV*(3), SYMBV*(4), SYMBV*(5), SYMBV*(6) SWITCHON SYMBV*(1) INTO $( DEFAULT: RESULTIS NAME CASE 'A': RESULTIS I=3 & V2='N' & V3='D' -* M_AND, I=3 & V2='U' & V3='G' -* M_AUG, NAME CASE 'D': RESULTIS I=3 & V2='E' & V3='F' -* DEF, I=5 & V2='U' & V3='M' & V4='M' & V5='Y' -* M_DUMMY, I=2 & V2='O' -* M_DO, NAME CASE 'E': RESULTIS I=2 & V2='Q' -* M_EQ, NAME CASE 'F': RESULTIS I=5 & V2='A' & V3='L' & V4='S' & V5='E' -* M_FALSE, I=2 & V2='N' -* LAMBDA, NAME CASE 'G': RESULTIS I=2 & V2='R' -* M_GR, I=2 & V2='E' -* M_GE, I=4 & V2='O' & V3='T' & V4='O' -* M_GOTO, NAME CASE 'I': RESULTIS I=2 & V2='F' -* M_IF, I=4 & V2='F' & V3='S' & V4='O' -* IFSO, I=5 & V2='F' & V3='N' & V4='O' & V5='T' -* IFNOT, I=2 & V2='N' -* IN, NAME CASE 'L': RESULTIS I=3 & V2='E' & V3='T' -* M_LET, I=2 & V2='S' -* M_LS, I=2 & V2='E' -* H_LE, NAME CASE 'N': RESULTIS I=3 & V2='O' & V3='T' -* M_NOT, I=2 & V2='E' -* M_NE, I=3 & V2='I' & V3='L' -* M_NIL, NAME CASE 'O': RESULTIS I=2 & V2='R' -* M_LOGOR, NAME CASE 'R': RESULTIS I=3 & V2='E' & V3='C' -* REC, I=3 & V2='E' & V3='S' -* M_RES, NAME CASE 'T': RESULTIS I=4 & V2='R' & V3='U' & V4='E' -* M_TRUE, I=4 & V2='E' & V3='S' & V4='T' -* M_TEST, NAME CASE 'V': RESULTIS I=5 & V2='A' & V3='L' & V4='O' & V5='F' -* M_VALOF, NAME CASE 'W': RESULTIS I=5 & V2='H' & V3='E' & V4='R' & V5='E' -* WHERE, I=5 & V2='H' & V3='I' & V4='L' & V5='E' -* M_WHILE, I=6 & V2='I' & V3='T' & V4='H' & V5='I' & V6='N' -* WITHIN, NAME $)1