*20 /NEXTCH ROUTINE: READS IN NEXT CHAR /FROM SOURCE TAPE, ENTERING NEW TBLK /AS NEEDED; SKIPS CONT MARK (47) /SOURCE FILE BUFFERED IN 17000-17377 /B-REG. 17=HALF-WORD POINTER TO TEXT /RETURNS WITH CHAR IN AC; CHAR CAN ALSO /BE HAD AFTER RETURN VIA LDH 17 PMODE *20 LMODE NEXTCH, LDF 7 LDA 0 STC RTRN1 /SET RETURN JUMP /CHECK FOR CTRL/A: INTERRUPT IF FOUND KST JMP .+7 IOB 6036 /KRB SAE I 201 SKP JMP SYSTEM /SYSTEM MONITOR /CHECK FOR END OF SOURCE BUFFER - IF /FOUND, READ IN NEXT TAPE BLOCK LDA 17 SAE I 7377 JMP TBLK+1 LDA I /NEW TBLK NEEDED 6000 ADD TBLK STC .+2 /2ND LTAPE INSTR RDC /RDC OR RDC U 0 SET I 17 /RESET POINTER 6777 LDA I 1 ADM I /INCR TBLK TBLK, 0 LDH I 17 /NEXT CHAR AZE I /0=FILE END JMP EOFILE SAE I 47 /CON"T MARK? JMP RTRN1-1 /CHAR O.K. LDA I 1 ADM I SGMNT, 0 /INCR SEGMENT SNS 5 /PRINT IF SW 5 JMP NEXTCH+4 PDP PMODE JMS I CRLF JMS I TAB LINC LMODE JMP NEXTCH+4 /IGNORE CON"T SNS 5 /PRINT CHAR? RTRN1, HLT /RETURN JUMP PDP PMODE TAD M40 SPA TAD C100 TAD C240 JMS I TIPE LINC LMODE LDH 17 /RESTORE CHAR JMP RTRN1 /INITIALIZATION REQUIRED: /SET TBLK=STARTING TAPE BLOCK OF SOURCE /SET 17=6001 AND READ IN FIRST TBLK /SET RDC OR RDC U AT TBLK-7 / /TEMPORARY CHECKOUT SECTION BELOW SYSTEM, HLT EOFILE, HLT PMODE M40, -40 C100, 100 C240, 240 TIPE, TYPE TYPE, 0 TLS TSF JMP .-1 CLA JMP I TYPE CRLF, CARRET CARRET, 0 CLA TAD C212 JMS I TIPE TAD C215 JMS I TIPE JMP I CARRET C212, 212 C215, 215 TAB, TABOUT TABOUT, 0 CLA TAD C311 JMS I TIPE JMP I TABOUT C311, 311 /NEXSYM SUBR: READS NEXT SYMBOL FROM /SOURCE (VIA NEXTCH) AND LEAVES IT IN /SYMBUF ON UP IN PACKED ASCII FORM WITH /A TRAILING 00. A SYMBOL IS EITHER AN /IDENTIFIER (SYMCOD=1), A SINGLE CHAR OP/(+-,:*^/><;)( ETC SYMCOD=0), A NUMERICL /CONSTANT (NOT EVALUATED BY NEXSYM, JUST /SAVED AS CHAR STRING, SYMCOD=-2,-3,-4) /TEXT CONSTANT (".....", SYMCOD=-1) /DEPENDING ON WHETHER THE TERMINATOR FOR /THE SYMBOL WAS (POSSIBLY) PART OF THE /NEXT SYMBOL, IN WHICH CASE IT MUST BE /SAVED (SAVECH>0 VIA EXIT2) OR NOT /(SAVECH=0 VIA EXIT1) LMODE NEXSYM, LDA 0 STC RTRN2 /SETUP RET.JUMP SET I 10 SYMBUF-4000 /AD-1/2 SYMBOL LDA I SAVECH, 0 /LEAD CHAR YET AZE I /DECODED? JMP NEXTCH /NO: FETCH IT ADA I LM32, -32 APO I /=LETTER? JMP RTRN2+1 /NOT LEAD LETTER ADA I C32, 32 /RESTORE CHAR SKP /SYMBOL IS IDENT ID, LDH 17 /RESTORE CHAR JMP STOSYM /SAVE IT JMP NEXTCH /GET NEXT CHAR ADD LM32 APO /LETTER? JMP ID /YES:STILL IN ID ADA I LM26, -26 APO /DIGIT? TEST 1 JMP EXIT2-2 /NO END OF ID ADA I LM10, -10 APO /DIGIT?TEST 2 JMP ID /YES:STILL IN ID /END OF IDENT.:STORE SYMCOD=1 AND RETURN/VIA EXIT2, SAVING CURRENT CHAR AS LEAD /CHAR FOR NEXT SYMBOL IN SAVECH LDA I C1, 1 EXIT2, STC SYMCOD LDH 17 STC SAVECH JMP STOSYM /SAVE TRAILING 0 RTRN2, HLT /RETURN JUMP /LEAD CHAR NOT LETTER: NOT AN IDENT. /CHECK FOR NUMERICAL CONSTANT, TEXT /CONSTANT, OR SINGLE CHAR OP ADD LM26 APO /DIGIT TEST 1 JMP C60-1 ADD LM10 /TEST 2 APO JMP CONST-2 /DIGIT:ENCODE /STILL MIGHT BE CONST IF LEADING "." ADA I /RESTORE AC C10, 10 /AFTER TEST 2 ADA I C60, 60 /AFTER TEST 1 SHD I 5600 /PERIOD? JMP CONST /NOT A NUM. CONST;WILL BE TEXT CONS IF " SAE I 42 /QUOTE JMP OPCHAR /MUST BE OP CHAR /ITS A TEXT CONSTANT;STORE EVERYTHING /BETWEEN QUOTES (BUT NOT QUOTES) EQUOTE, JMP NEXTCH SHD I 4200 /QUOTE JMP EXIT1-2 JMP STOSYM JMP EQUOTE LDA I -1 /QUOTE CODE EXIT1, STC SYMCOD JMP RTRN2-2 /SAVECH=0,EXIT /SECTION ENCODES (BUT DOES NOT EVALUATE) /NUMERICAL CONSTANTS. ENTER AT CONST-2 /OCCURS WITH LEAD DIGIT, AT CONST WITH /LEAD "." STRING OF DIGITS FOLLOWED BY /"O" = OCTAL INTEGER; COSTANT FOLLOWED /BY "E" IS INTERPRETED IN EXP. FORMAT ADA I /RESTORE AC C70, 70 CONST, JMP STOSYM /SAVE CHAR JMP NEXTCH ADA I LM60, -60 APO /DIGIT TEST 1 JMP .+6 ADD LM10 APO I /TEST 2 JMP .+3 LDH 17 /IS DIGIT:RESTOR JMP CONST LDH 17 /RESORE CHAR SHD I /NOT DIGIT:="."? 5600 JMP CONST SHD I /= "E"? 0500 JMP LM3-1 /EXP. FORM. CON. SHD I 1700 /= "O"? JMP LM4-1 /OCTAL INTEGER /CHAR NOT DIGIT,".","O","E":MUST BE END /OF SYMBOL;MUST TAKE EXIT2 (SAVECH>0) /WITH SYMCOD=-2 (NORMAL CONSTANT) LDA I LM2, -2 JMP EXIT2 /EXPONENTIALLY FORMATTED CONSTANT;EXP. /PART READ UNDER SUBSEQUENT CONTROL LDA I LM3, -3 JMP EXIT1 /DONT SAVECH /OCTAL CONSTANT (INTEGER): SYMCOD=-3 LDA I LM4, -4 JMP EXIT1 /DONT SAVECH /PROGRAM GETS HERE ONLY IF SYMBOL IS /SINGLE-CHAR OPERATOR OPCHAR, JMP STOSYM /SAVE IT CLR /SYMCOD=0 JMP EXIT1 /DONT SAVECH /SUBR STORES PACKED ASCII CHAR AS PART /OF CURRENT SYMBOL ARRAY. POINTER IS /B-REG 10 STOSYM, STH I 10 LDA 10 SAE I SYMBUF+20 /CURRENT LIMIT JMP /ON CHARS/SYMBOL DJR /SAVE TRACE JMP SYMERR /TOO MANY CHARS /NOTE: SYMBUF+20 MEANS LIMIT=40 CHARS/ SYMERR, HLT SYMCOD, 0 SYMBUF, 0 / / / /FOLLOWING SECTION IS TEMPORARY FOR /DEBUGGING PURPOSES *SYMBUF+100 START, CLR LDF 7 RSW ADA I 6000 STC .+2 RDC U 0 SET I 17 7001 RSW ADA I 1 STC TBLK SYMBOL, JMP NEXSYM PDP PMODE JMS I CRLF LINC LMODE SET I 10 SYMBUF-4000 CHR, LDA I JMP CHTEST STC RTRN1 LDH I 10 JMP RTRN1+1 CHTEST, LDH 10 AZE JMP CHTEST-2 ADD C240 STC 1 ADD SYMCOD ADA I C265, 265 STC 2 PDP PMODE TAD 1 JMS I TIPE TAD 2 JMS I TIPE LINC LMODE JMP SYMBOL