*20 /NEXTCH ROUTINE: READS IN NEXT CHAR /FROM SOURCE TAPE, ENTERING NEW TBLK /AS NEEDED; SKIPS CONT MARK (47) /SOURCE FILE BUFFERED IN 07000-07377 /B-REG. 7=HALF-WORD POINTER TO TEXT /RETURNS WITH CHAR IN AC; CHAR CAN ALSO /BE HAD AFTER RETURN VIA LDH 7 PMODE PAGE NEXTCH, 0 LINC LMODE LDF 3 /CHECK FOR END OF SOURCE BUFFER - IF /FOUND, READ IN NEXT TAPE BLOCK LDA 7 SAE I 7377 JMP NXCHAR LDA I /NEW TBLK NEEDED 1 ADM I TBLK, 0 LDA I 6000 ADD TBLK STC .+2 /2ND LTAPE INSTR RDC /COULD BE RDC U 0 SET I 7 6777 NXCHAR, LDH I 7 AZE I JMP EOFILE /0=END SOURCE SAE I 47 /47=LINE CON"T JMP EXIT1 /USE CHAR LDA I /IGNORE CON"T 1 ADM SGMNT /INCR. LINE SEGM JMP NEXTCH+3 /GET NEXT CHAR EXIT1, PDP PMODE JMP I NEXTCH /RETURN CH IN AC / /END OF NEXTCH SUBR /INIT. REQUIRED FOR IT IS TO DEFINE TBLK /READ IN INIT TBLK INTO 7000-7377 AND /TO SET 7=7001 / /NEXSYM SUBR: READS NEXT SYMBOL FROM /SOURCE (VIA NEXTCH) AND LEAVES IT IN /SYMBUF ON UP IN PACKED ASCII FORM WITH /3 TRAILING 00"S; SYMBUF IN TOP OF CORE /ABOVE END OF STACK IN FIELD 1 (LDF 7). /A SYMBOL IS EITHER AN ALPHANUMERIC NAME /(SYMCOD=0), A NUMERICAL CONSTANT /(SYMCOD=-2 REGULAR, -3 IN E FORMAT,-4 /IN OCTAL FORMAT), A TEXT CONSTANT /("...", SYMCOD=-1) OR A SINGLE CHAR /SYMBOL (+,-;()<> ETC, SYMCOD=ASCII>0 /RETURNS WITH SYMCOD IN AC. NOTE THAT /NUMERICAL CONSTANTS NOT EVALUATED BY /THIS ROUTINE, JUST STORED AS STRINGS. / /SAVECH=0 MEANS LEAD CHAR OF SYMBOL /NOT YET READ BY NEXTCH;SAVECH>0 MEANS /LEAD CHAR READ BY NEXTCH & =SAVECH / NEXSYM, 0 CLA TAD SYMBF1 /AD-1 SYM BUFFER DCA 10 TAD SAVECH SNA />0:= LEAD CHAR JMS NEXTCH TAD M40 /X-40 SNA JMP .-3 /SKIP LEAD BLNKS TAD C5 /X-33 SMA /=LETTER? JMP NONAME /NO: NOT NAME NAME, TAD C33 /RESTORE X JMS STOCHR /X INTO SYMBUF JMS NEXTCH TAD M33 /X-33 SPA /ANOTHER LETTER? JMP NAME TAD M25 /X-60 SPA /DIGIT? TEST 1 JMP ENDNAM /NO: END OF NAME TAD M13 /X-73 SMA /DIGIT? TEST 2 JMP ENDNAM+2 TAD C73 /DIGIT: RESTORE JMP NAME+1 ENDNAM, TAD C60 /RESTORE X SKP TAD C73 /RESTORE X DCA SAVECH /LEAD NEXT SYMB EXIT2, DCA SYMCOD /NAME:CODE=0 JMS STOCHR JMS STOCHR JMS STOCHR /3 TRAILING 00"S TAD SYMCOD JMP I NEXSYM /EXIT AC=SYMCOD NONAME, TAD M25 /X-60:NOT NAME SPA /LEAD DIGIT? JMP CHLEAD-2 TAD M13 /X-73:DIG TEST 2 SMA JMP CHLEAD /NOT LET OR DIG CONST, TAD C73 /RESTORE DIGIT JMS STOCHR JMS NEXTCH TAD M60 /X-60 SPA /ANOTHER DIGIT? JMP CHCONS /="."/"E"/"O"? TAD M13 /X-73 SPA /DIGIT TEST 2 JMP CONST TAD C73 /END:RESTORE X DCA SAVECH /SAVE LEAD STA CLL RAL /CONS: CODE=-2 JMP EXIT2 CHCONS, TAD C4 /X-56 SZA /="." ? JMP .+3 TAD C56 /RESTORE PERIOD JMP CONST+1 /PART OF CONSTAN TAD C51 /X-5 SZA /= "E" FORMAT? JMP .+4 DCA SAVECH /DONT SAVE LEAD STA CLL RTL /E CONS:CODE=-3 JMP EXIT2 TAD M12 /X-17 SZA /= "O" FORMAT? JMP .+4 DCA SAVECH /DONT SAVE LEAD TAD M4 /O CONS:CODE=-4 JMP EXIT2 TAD C17 /END CONS:RESTOR JMP CHCONS-3 TAD C4 /X-56 SKP CHLEAD, TAD C17 /X-56 SNA /= "." ? JMP CHCONS+3 /START OF CONST TAD C14 /X-42:SYMBL NOT SZA /NAME/CONS:TEXT? JMP OPCHAR /NO:MUST BE SING EQUOTE, JMS NEXTCH /TEXT:DONT SAVE" TAD M42 /SAVE IF NOT = " SNA JMP .+4 TAD C42 /RESTORE,SAVE X JMS STOCHR JMP EQUOTE DCA SAVECH /DONT SAVE "NOR STA /LEAD NEXT SYMB. JMP EXIT2 /TEXT:CODE=-1 OPCHAR, TAD C42 /SINGLE CHAR OP: DCA SYMCOD /RESTORE CODE=X DCA SAVECH /DONT SAVE LEAD JMP EXIT2+1 /DONT ENCODE X / /END NEXSYM SUBR /BELOW IS STOCHR SUBR CALLED BY NEXSYM /WHICH SAVES (UNLESS SINGLE CHAR OP) /PACKED ASCII ENCODED SYMBOL IN SYMBUF / STOCHR, 0 LINC LMODE XSK 10 /TOO MANY CHARS JMP .+3 /IN SYMBOL:OUT AZE I /OF CORE? JMP SYMERR /YES:SKIP SYMBOL LDF 7 /SYMBUF IN LDF 7 STH I 10 /STORE HALF WORD PDP PMODE JMP I STOCHR / /END OF NEXSYM PACKAGE /INITIALIZATION REQUIRED: NONE