/PAGE 33 ERROR1, JMS ETYPO /TYPE ERROR CODE DCA TEM2 /SAVE SYMBOL ADDRESS AS A POINTER TAD I TEM2 /GET FIRST WORD OF SYMBOL AND MASK /GET RID OF UNDEFINED BIT DCA I TEM2 /SYMBOL IS DEFINED FOR FUTURE REFERENCE TAD I TEM2 /GET IT BACK IN THE AC JMS I EEE /TYPE OUT THE FIRST WORD OF THE SYMBOL ISZ TEM2 /INCREMENT THE POINTER TO THE 2ND WORD TAD I TEM2 /PICK UP THE 2ND WORD JMS I EEE /TYPE IT OUT ISZ TEM2 /MOVE THE POINTER TO THE THIRD WORD TAD I TEM2 /PICK UP THE THIRD WORD JMS I EEE /TYPE IT OUT ECOMON, JMS I EEE /TYPE TWO SPACES TAD ATCODE /GET "AT" JMS I EEE /TYPE IT JMS I EEE /TYPE TWO SPACES TAD AACT /GET THE ABSOLUTE ADDRESS COUNTER JMS I OCTI /TYPE IT OUT TAD C377 /TYPE A RUBOUT JMS I DDD JMP I TEM1 /EXIT ERROR2, JMS ETYPO /TYPE THE ERROR CODE JMS I OCTI /TYPE THE VALUE OF IC, PO, OR PU JMP ECOMON /TYPE "AT" AND AACT ETYPO, 0 /SUBROUTINE TO TYPE ERROR CODE TAD TBLEAD /ADD ERROR CODE TO TABLE POINTER DCA TEM2 /SAVE POINTER TO CODE IN TEMP POP /GET EXIT ADDRESS FROM PDL DCA TEM1 /SAVE IT, ERROR ADDRESS NOW AVAILABLE TAD PF /WHICH PASS IS THIS? SZA CLA /ERROR PRINTOUTS ONLY ON PASS1 JMP ERROUT /OTHERWISE, EXIT FROM ERROR ROUTINE TAD C377 /TYPE A RUBOUT IN CASE OF IR JMS I DDD TAD CRLF /CARRIAGE RETURN, LINE FEED JMS I EEE TAD I TEM2 /GET THE ERROR CODE LETTERS JMS I EEE /TYPE THE ERROR CODE JMS I EEE /TYPE TWO SPACES POP /GET SYMBOL ADDRESS OR IC, IL, IO VALUE JMP I ETYPO /EXIT WITH IT IN THE AC ERROUT, POP /CLEAR JUNK OFF THE PUSHDOWN LIST CLA JMP I TEM1 /EXIT /PAGE 34 /PASS3 ROUTINE /ASSEMBLY LISTING ON ASR33 IF SW11 DOWN, 75A IF UP /LENGTH: 80 REGISTERS POUT, CLA OSR /GET SWITCH REGISTER CLL RAR /WAS BIT 11 SET? SNL CLA JMP PART1 /NO TAD BBB /YES, RESET PRINT POINTER DCA DDD /FOR 75A PUNCH DCA TCNT /ZERO CHARACTER COUNTER PART1, TAD CRLF /CARRIAGE RETURN, LINE FEED JMS I EEE TAD INFO /ANY INFORMATION ON THIS LINE? SZA CLA JMP PART2 /YES TAD M6 /NO, TYPE 12 SPACES DCA TEM3 JMS I EEE ISZ TEM3 JMP .-2 JMP .+7 /DON'T TYPE AACT PART2, TAD AACT /VALID INFO, TYPE AACT JMS I OCTI JMS I EEE /TYPE 2 SPACES TAD BINW /TYPE ASSEMBLED VALUE JMS I OCTI JMS I EEE /TYPE TWO SPACES TAD CHAR /WAS IT A CR? TAD M215 SZA TAD M56 /IS IT ;?? SZA CLA JMP I TABIT-1 /NO: RETURN CLA CMA /YES: PUT STATEMENT DCA I AUTOC /DELIMITER IN BUFFER PART3, TAD TBUF /SET BUFFER DCA AUTOC PART4, TAD I AUTOC /GET CHARACTER TAD M211 /TAB? SNA JMP I TABIT /YES, TYPE TAB RUBOUT OR TAB STOP TAD M1 /LINE FEED? SNA JMP PART4 /YES, IGNORE IT TAD M2 /FORM FEED? SNA JMP FFEED /YES, TYPE FORM FEED TAD M1 /CARRIAGE RETURN? SZA JMP .+3 DCA TCNT /ZERO COUNTER FOR NUMBER OF CHARACTERS JMP PART4 /YES /PAGE 35 TAD C215 /RESTORE ORIGINAL CHARACTER SPA /RUBOUT JMP PART5 /YES, ALL DONE SZA /IGNORE CHARRIAGE RETURN JMS I DDD /NO, TYPE OR PUNCH CHARACTER ISZ TCNT /COUNT A CHARACTER JMP PART4 PART5, CLA /ALL DONE TAD TBUF /RESET BUFFER DCA AUTOC TAD LOPUNI /RESET PUNCH POINTER DCA DDD JMP I .+1 MOUT /RETURN TO MAIN TABIT, TAB TCNT, 0 M56, -56 FFEED, TAD M6 /TYPE SIX BLANK LINES DCA TEM3 TAD CRLF JMS I EEE ISZ TEM3 JMP .-3 TAD C214 /TYPE FORM FEED JMS I DDD TAD M6 /TYPE SIX MORE BLANK LINES DCA TEM3 TAD CRLF JMS I EEE ISZ TEM3 JMP .-3 JMP PART4 /RETURN TBLEAD, TABLE-1 /POINTER FOR ERROR CODES ATCODE, 0124 /AT L16, /PAGE 36 *2000 /ROUTINE TO HANDLE ORIGINS /LENGTH: 13 REGISTERS STAR, PUSHJ /ORIGIN SETTING, GO ASSEMBLE EXPRESSION CSYM /ADDRESS FOR PUSHJ HANDLER TAD BINW /PICK UP ASSEMBLED BINARY WORD DCA AACT /RESET ABSOLUTE ADDRESS COUNTER DCA INFO /SAY NO TO MAIN CMA /WHICH PASS IS THIS? TAD PF /DO NOT PUNCH ON PASS1 OR PASS3 SZA CLA POPJ /EXIT ON PASS1 OR PASS3 CLL CML /SET LINK FOR ORIGIN PUNCH IN BINP TAD AACT /PICK UP ORIGIN JMS I PUNI /GO PUNCH IT POPJ /EXIT PSHLST, 0 /PUSH DOWN LIST *.+13 /PAGE 37 /CHECK ROUTINE /DISTINGUISHES BETWEEN NUMBERS, LETTERS, SPECIAL CHARACTERS /NUMBERS HAVE CODES BETWEEN 260 AND 271 /LETTERS HAVE CODES BETWEEN 301 AND 332 /ANY CHARACTER NOT A NUMBER OR A LETTER IS A SPECIAL CHARACTER /HOWEVER, SPECIAL CHARACTERS ARE MEANT TO INCLUDE ONLY /PLUS, MINUS, COMMA, EQUAL, STAR, PERIOD, SPACE, RETURN, DOLLAR /EXIT TO SPSHUL IF CHAR IS A SPECIAL CHARACTER /EXIT TO CALLING ADDRESS+1 IF CHAR IS NUMBER /EXIT TO CALLING ADDRESS +2 IF CHAR IS LETTER /LENGTH: 23 REGISTERS NCHEK, 0 TAD CHAR /IS CHAR < 260? TAD M260 /GET CHAR-260 SPA JMP I SPECI /CHAR<260,SPECIAL CHARACTER TAD M12 /IS CHAR<272? SPA /FORM CHAR-272 JMP NUMBEX /YES, 260