.ENABL LC .MCALL DIR$,GTSK$,RQST$ .MCALL SETUP SETUP ;ENDPROC AND PASS2 LOADER .MACRO ENDPASS SUB #16.,SP MOV SP,$$GTSK+G.TSBA DIR$ #$$GTSK MOV G.TSPC(SP),$$RQST+R.QSPC DIR$ #$$RQST EXIT$S $$GTSK: GTSK$ $$GTSK $$RQST: RQST$ PASS2,GEN,50,70,1 .ENDM .MACRO SYMBOL A,B STOI 256.*B+A,SYM,0 .ENDM .MACRO NXCHAR MARKS 0 CALL NEXTCH,2 .ENDM .MACRO ERROR N MARKS 0 LOADI N CALL ERROR,1 .ENDM .MACRO INSYMBOL MARKS 0 CALL INSYMB,1 .ENDM .MACRO ISSY X CMPIM X,SY,0,B .ENDM .MACRO ISOP X CMPIM X,OP,0,B .ENDM .MACRO ISSYM X,Y CMPIM 256.*Y+X,SYM,0 .ENDM .MACRO ANY D,L,N .IF GT,N-16. .GLOBL P$SANY $ZR 0 POINT D,L $XR 1 JSR PC,P$SANY .IFF LOAD D,L $TR 1 $GR CLR $$T0 SEC ROR $$T1 BCS .+6 INC $$T0 BR .-6 $FR 1 .ENDC .ENDM .PAGE MODULE PASCAL .NLIST BIN DATA SET0$ GENSET 50., DATA MAINNAME .ASCII <6>/.MAIN./ DATA MSG1 .ASCII <13><15>/PASCAL SPF:V0D/<015><012>/#/ DATA MSG2 .ASCII <15><12>/PASS1: / DATA MSG3 .ASCII / ERRORS/<015><012> .EVEN DATA CONIN ;FILE NAME BLOCK .ASCII /CMI/<0>/TI:/<0>/ /<0><0><0> .EVEN DATA CONOUT ;FILE NAME BLOCK .ASCII /CMO/<0>/TI:/<0>/ /<0><0><0> .EVEN DATA INTNAM ;INTERMEDIATE FILE NAME BLOCK .ASCII /INT/<0>/SY0:PASCAL.TMP;1/ .EVEN DATA LSTNAM ;LISTING FILE NAME BLOCK .ASCII /LST/<0>/SY0:PASCAL.PRT;1/ .EVEN DATA STDFIL ;STANDARD FILE NAMES .ASCII /OUTINP/ .EVEN DATA LETTERS ;LETTERS ! DIGITS GENSET 128.,<<48.,57.>,<65.,90.>,95.,<97.,122.>> DATA DIGITS ;DIGITS ONLY GENSET 128.,<<48.,57.>> .NLIST BEX ; KEYWORD TABLES DATA FRW .WORD 0,0,0,10.,28.,64.,94.,118.,132.,140.,149. DATA SRW .BYTE 0,0,0,5.,11.,20.,26.,30.,32.,33. DATA RW ; LOWER CASE RESERVED WORDS .ASCII /ifdointoof/ .ASCII /endforsetvardivmod/ .ASCII /thenelsecaseloopexitwithtypefilegoto/ .ASCII /beginwhileuntilarrayconstlabel/ .ASCII /repeatrecorddowntopacked/ .ASCII /forwardprogramfunctionprocedure/ DATA RWU ; UPPER CASE RESERVED WORDS .ASCII /IFDOINTOOF/ .ASCII /ENDFORSETVARDIVMOD/ .ASCII /THENELSECASELOOPEXITWITHTYPEFILEGOTO/ .ASCII /BEGINWHILEUNTILARRAYCONSTLABEL/ .ASCII /REPEATRECORDDOWNTOPACKED/ .ASCII /FORWARDPROGRAMFUNCTIONPROCEDURE/ .EVEN DATA RSYM ;SY AND OP VALUES OF RESERVED WORDS .BYTE IFSY,NOOP,DOSY,NOOP,RELOP,INOP,TOSY,NOOP,OFSY,NOOP .BYTE ENDSY,NOOP,FORSY,NOOP,SETSY,NOOP,VARSY,NOOP .BYTE MULOP,DIV,MULOP,IMOD .BYTE THENSY,NOOP,ELSESY,NOOP,CASESY,NOOP,LOOPSY,NOOP .BYTE EXITSY,NOOP,WITHSY,NOOP,TYPESY,NOOP .BYTE FILESY,NOOP,GOTOSY,NOOP .BYTE BEGINS,NOOP,WHILSY,NOOP,UNTILS,NOOP,ARRAYS,NOOP .BYTE CONSTS,NOOP,LABELS,NOOP .BYTE REPTSY,NOOP,RECRDS,NOOP,DOWNSY,NOOP,PACKSY,NOOP .BYTE FORWDS,NOOP,PROGSY,NOOP,PROCSY,NOOP,PROCSY,NOOP DATA STARS .ASCII /*******/ DATA BLANKS .ASCII / / STRGLGTH=75. ALFALENG=15. .PAGE PROC PASCAL,0,*,15000,4000 NL=12 BLANK=40 NIL=-1 STRL1=3 STRL2=4 STRL3=5 IDNLNT=6 IDNLEN=8. MAXLEV=15. DSPLMT=31. ASSIGN 0, ASSIGN , ASSIGN , ASSIGN , ASSIGN , ASSIGN , ASSIGN , ASSIGN 0, ASSIGN , ASSIGN , ASSIGN 0, TYPSET=1 VARSET=2 FLDSET=4 KONSET=10 PROSET=20 ASSIGN 0, ASSIGN , ASSIGN 0, ASSIGN 0, ASSIGN 0, ;FOLLOWING MUST BE ON WORD BOUNDARY ; SYM: RECORD SY:0..255; OP:0..255 END BYTE OP BYTE SY WORD SYM,0 WORD ID,38. ;15 BYTE IDENTIFIER + 1 BYTE LENGTH ;ALSO STORE STRINGS HERE WORD VAL,2 ;LAST CONSTANT VALUE FIELD V.C,0 FIELD V.I,2 FIELD V.P,2 FIELD V.S,1 FIELD V.A,2 WORD FWPTR WORD VARLST WORD LC ; LOCAL VARIABLE COUNTER WORD AC ; PARM COUNTER WORD DC ;DATA COUNTER BYTE TC ; TAG COUNTER BYTE PIN ; PROCEDURE INDEX COUNTER BYTE MAXPIN WORD LINENO ; LINE NUMBER WORD ERRTOT WORD ERRINX ;NO. ERRORS THIS LINE WORD ERRLIST,32. ;ERROR TABLE ERR.P=0 ;POSITION ERR.N=2 ;NUMBER .PAGE BYTE CH BYTE CHCNT BYTE SWITCH,26. ;OPTION SWITCHES LIST=SWITCH+11. ;SWITCH['L'] PRTABLS=SWITCH+19. ;SWITCH['T'] UPCASE=SWITCH+20. ;SWITCH['U'] BYTE PRTERR WORD INPUT,24. ;INPUT FILE BLOCK WORD OUTPUT,24. ;OUTPUT FILE BLOCK WORD SRC,84. ;SOURCE FILE BLOCK WORD LST,84. ;LISTING FILE BLOCK WORD INT,84. ;INTERMEDIATE FILE BLOCK WORD DISPLAY,96. FIELD D.FN,0 FIELD D.OC,2 FIELD D.CL,3 FIELD D.CD,4 FIELD D.VD,4 WORD TOP WORD LEVEL WORD DISX WORD INTPTR WORD REALPTR WORD CHARPTR WORD BOOLPTR WORD NILPTR WORD TEXTPTR WORD GATTR,4 ;ATTRIBUTES OF CURRENT EXPRESSION FIELD A.T,0 FIELD A.K,2 FIELD A.C,4 FIELD A.S,5 FIELD A.V,6 FIELD A.A,3 FIELD A.L,4 FIELD A.D,6 FIELD A.ID,4 WORD UDPTRS,5 ;ARRAY OF POINTERS TO UNDECLARED IDENTIFIERS .PAGE ; OFFSETS FOR STRUCTURE RECORD FIELD S.MK,0,4,1 FIELD S.FM,0,0,4 FIELD S.PK,0,6,1 FIELD S.SZ,2 FIELD S.SK,0,5,1 FIELD S.FC,4 FIELD S.RT,4 FIELD S.M.V,6 FIELD S.X.V,8. FIELD S.ET,4 FIELD S.ES,4 FIELD S.AT,4 FIELD S.IT,6 FIELD S.SF,8. FIELD S.FF,4 FIELD S.RV,6 FIELD S.FT,4 FIELD S.TF,4 FIELD S.FV,6 FIELD S.NV,4 FIELD S.SV,6 FIELD S.V.V,8. ; OFFSETS FOR IDENTIFIER RECORDS. FIELD I.N,0 FIELD I.L,2 FIELD I.R,4 FIELD I.T,6 FIELD I.NX,8. FIELD I.K,10.,0,3 FIELD I.C.C,12. FIELD I.C.I,14. FIELD I.C.P,14. FIELD I.C.S,13. FIELD I.C.A,14. FIELD I.VK,10.,3,1 FIELD I.VL,10.,4,4 FIELD I.VA,12. FIELD I.VS,14. FIELD I.F,12. FIELD I.FS,14. FIELD I.PF,10.,3,1 FIELD I.KE,11. FIELD I.PL,10.,4,4 FIELD I.FD,11.,0,1 FIELD I.EX,11.,1,1 FIELD I.PA,12. .PAGE WORD LCP ;LOCAL USE ONLY WORD LCP1 BEGIN FINIT INPUT,1,1 FINIT OUTPUT,1,1 FINIT LST,126.,1 FINIT SRC,126.,1 FINIT INT,126.,1 REWRITE OUTPUT,0,CONOUT RESET INPUT,0,CONIN REWRITE INT,0,INTNAM,0 REWRITE LST,0,LSTNAM,0 MARKS 0 CALL OPENFILES,1 STOI 25.,ERRTOT,0 LOOP ZEROS LOAD ERRTOT,0 STODX SWITCH,0,B DECM ERRTOT,0 WHILE GE ENDLOOP ONEM LIST,0,B ZEROM ERRINX,0 ONEM PRTABLS,0,B ONEM PRTERR,0,B ZEROM ERRTOT,0 ZEROM LINENO,0 ZEROM MAXPIN,0,B ZEROM CHCNT,0,B STOI NL,CH,0,B ZEROM LEVEL,0 ZEROM TOP,0 STOI NIL,DISPLAY+D.FN,0 ZEROM DISPLAY+D.OC,0 MARKS 0 CALL INITTABLES,1 STOI NIL,LCP INSYMBOL ISSY PROGSY IF EQ INSYMBOL ISSY IDENT IF EQ MARKS 0 LOADI PROC LOADI NIL LOADI NIL POINT LCP CALL NEWID,1 INSYMBOL ELSE ERROR 2. ENDIF ISSY SEMICOLON IF EQ INSYMBOL ELSE ERROR 14. ENDIF ENDIF CMPIM NIL,LCP IF EQ POINT MAINNAME,0 POINT ID,0 LOADI 7 FILL B MARKS 0 LOADI PROC LOADI NIL LOADI NIL POINT LCP CALL NEWID,1 ENDIF LOAD LCP BICP I.EX LOAD LCP BISP I.PF LOAD LEVEL,0 LOAD LCP INSP I.PL ZEROS LOAD LCP STODP I.PA ; ONEM LEVEL,0 ONEM TOP,0 STOI NIL,DISPLAY+6+D.FN,0 ZEROM DISPLAY+6+D.OC,0 ; POINT STDFIL,0 ;DECLARE STANDARD FILE NAMES POINT ID+1,0 LOADI 3 FILL B STOI 3,ID,0,B MARKS 0 LOADI VARS LOAD TEXTPTR LOADI NIL POINT LCP1 CALL NEWID,1 LOAD LCP1 BICP I.VK LOADI 1 LOAD LCP1 INSP I.VL LOADI 10. STODR LCP1,,I.VA LOADI 64. STODR LCP1,,I.VS POINT STDFIL+3,0 POINT ID+1,0 LOADI 3 FILL B STOI 3,ID,0,B MARKS 0 LOADI VARS LOAD TEXTPTR LOADI NIL POINT LCP1 CALL NEWID,1 LOAD LCP1 BICP I.VK LOADI 1 LOAD LCP1 INSP I.VL LOADI 74. STODR LCP1,,I.VA LOADI 64. STODR LCP1,,I.VS ; MARKS 0 LOAD LCP CALL BLOCK,1 ISSY PERIOD IF NE ERROR 21. LOOP TSTM SRC+2,0,B ;EOF ON SOURCE UNTIL NE INSYMBOL ENDLOOP ENDIF CMPIM NL,CH,0,B IF NE LOADI NL WRITEC LST,0 ENDIF MARKS 0 CALL ENDOFLINE,1 CLOSE INT CLOSE SRC POINT MSG2,0 LOADI 9. WRITES OUTPUT,0 LOAD ERRTOT,0 WRITEJ OUTPUT,0 POINT MSG3,0 LOADI 9. WRITES OUTPUT,0 CLOSE LST CLOSE INPUT CLOSE OUTPUT ENDPASS .PAGE PROC OPENFILES,1 ;OPENFILES FOR SOURCE AND LISTING WORD NAMEBK,18. WORD COUNT BYTE CHAR BEGIN POINT MSG1,0 LOADI 19. WRITES OUTPUT,0 LOADI <" > STON NAMEBK+8. STON NAMEBK+10. STON NAMEBK+12. STON NAMEBK+14. STON NAMEBK+16. STOD NAMEBK+18. ZEROM COUNT LOOP READC INPUT,0 STON CHAR,,B CMPSI NL UNTIL EQ CMPIM 177,CHAR,,B IF EQ DECM COUNT LOAD COUNT LOADX NAMEBK+8.,,B WRITEC OUTPUT,0 LOADI 40 LOAD COUNT STODX NAMEBK+8.,,B ELSE CMPIM 13.,COUNT IF GE LOAD CHAR,,B LOAD COUNT STODX NAMEBK+8.,,B INCM COUNT ENDIF ENDIF ENDLOOP LOAD NAMEBK+8. STODR INT,0 PUT INT,0,2 LOAD NAMEBK+10. STODR INT,0 PUT INT,0,2 LOAD NAMEBK+12. STODR INT,0 PUT INT,0,2 STOI <"SY>,NAMEBK+4 STOI <"0:>,NAMEBK+6 LOADI <"PA> STOD NAMEBK LOADI <'S> STOD NAMEBK+2. LOAD COUNT CMPSI 13. IF LT LOADI <' > LOAD COUNT STODX NAMEBK+8.,,B ENDIF RESET SRC,0,NAMEBK ENDPROC .PAGE PROC ENDOFLINE,1,* WORD LASTPOS WORD FREEPOS WORD CURRPOS WORD CURRNMR WORD K BEGIN TSTM ERRINX,0 IF GT INCM ERRTOT,0 POINT STARS,0 LOADI 7. WRITES LST,0 ZEROM LASTPOS ONEM FREEPOS ONEM K LOOP LOAD K CMPSM ERRINX,0 WHILE LE LOAD K ASHS L,1 LOADX ERRLIST+ERR.P,0 STOD CURRPOS LOAD K ASHS L,1 LOADX ERRLIST+ERR.N,0 STOD CURRNMR LOAD CURRPOS CMPSM LASTPOS IF EQ LOADI <',> WRITEC LST,0 ELSE LOOP LOAD FREEPOS CMPSM CURRPOS WHILE LT LOADI <' > WRITEC LST,0 INCM FREEPOS ENDLOOP LOADI <'^> WRITEC LST,0 MOVE CURRPOS,,LASTPOS ENDIF LOAD CURRNMR LOADI 3 WRITEI LST,0 LOADI 4 ADDSM FREEPOS INCM K ENDLOOP LOADI NL WRITEC LST,0 ZEROM ERRINX,0 ENDIF TSTM SWITCH+15.,0,B IF NE LOADI 14 ;FORM FEED WRITEC LST,0 ZEROM SWITCH+15.,0,B ENDIF TSTM LIST,0,B IF NE LOAD LEVEL,0 LOADI 4 WRITEI LST,0 POINT BLANKS,0 LOADI 4 WRITES LST,0 ENDIF ZEROM CHCNT,0,B ENDPROC .PAGE PROC ERROR,1,* PARM FERRNR BEGIN CMPIM 6.,ERRINX,0 IF LT STOI 255.,ERRLIST+<4*7.>+ERR.N,0 STOI 7.,ERRINX,0 ELSE INCM ERRINX,0 LOAD FERRNR LOAD ERRINX,0 ASHS L,1 STODX ERRLIST+ERR.N,0 ENDIF LOAD CHCNT,0,B LOAD ERRINX,0 ASHS L,1 STODX ERRLIST+ERR.P,0 ENDPROC .PAGE PROC SKIP,1,* PARM UNTIL,4 BEGIN LOOP LOAD SY,0,B INSMV UNTIL,,4 UNTIL TRUE MARKS 0 CALL INSYMB,1 ENDLOOP ENDPROC .PAGE PROC INSYMB,1,* DIGMAX=6 MAX10=32767. WORD I WORD J WORD K WORD LAST ;BOOLEANS BYTE GETNUCHAR BYTE MAXSTR BYTE FOUNDID ;POINTER TO CONSTANT STRUCTURE WORD LVP ;ARRAYS BYTE DIGIT,DIGMAX ; OF 0..9 ; BEGIN ; INITIAL LOOP TO SKIP BLANKS AND COMMENTS LOOP LOOP CMPIM 32.,CH,0,B ;CHECK FOR BLANK WHILE GE CMPIM NL,CH,0,B IF EQ MARKS 0 CALL ENDOFLINE,1 ENDIF NXCHAR ENDLOOP CMPIM 123.,CH,0,B ;CHECK FOR START OF COMMENT WHILE EQ NXCHAR CMPIM '$,CH,0,B IF EQ MARKS 0 CALL OPTIONS,2 ENDIF LOOP CMPIM NL,CH,0,B IF EQ MARKS 0 CALL ENDOFLINE,1 ENDIF CMPIM 125.,CH,0,B ;CHECK FOR END OF COMMENT UNTIL EQ NXCHAR ENDLOOP NXCHAR ENDLOOP TSTM SRC+2,0,B ;CHECK FOR EOF SOURCE IF NE SYMBOL ENDSY,NOOP ;IF EOF THEN FAKE ENDSY ELSE * ONEM GETNUCHAR,,B ;GIGANTIC CASE STATEMENT LOAD CH,0,B SUBIS 32. CASE 96. CENTRY <<33.,58.>,63.,<65.,90.>>,* ;LETTERS ZEROM K LOOP CMPIM ALFALENG,K IF GT LOAD CH,0,B LOAD K STODX ID+1,0,B INCM K ENDIF NXCHAR LOAD CH,0,B INSMV LETTERS,0,8. UNTIL FALSE ENDLOOP MOVE K,,ID,0,B ZEROM FOUNDID,,B CMPIM 10.,K IF GE LOAD K LOADX FRW,0 STOD I LOAD K INCS LOADX FRW,0 STOD LAST LOAD K LOADX SRW,0,B STOD J LOOP LOAD FOUNDID,,B WHILE FALSE LOAD I CMPSM LAST WHILE LT TSTM SWITCH+20.,0,B ;SWITCH['U'] IF NE LOAD I POINTX RWU,0,B POINT ID+1,0 LOAD K MATCH B IF TRUE ONEM FOUNDID,,B ELSE LOAD K ADDSM I INCM J ENDIF ELSE LOAD I POINTX RW,0,B POINT ID+1,0 LOAD K MATCH B IF TRUE ONEM FOUNDID,,B ELSE LOAD K ADDSM I INCM J ENDIF ENDIF ENDLOOP ENDIF LOAD FOUNDID,,B IF TRUE LOAD J LOADX RSYM,0 STOD SYM,0 ELSE SYMBOL IDENT,NOOP ENDIF ZEROM GETNUCHAR,,B CENTRY <<16.,25.>>,* ;DIGITS SYMBOL INTCON,NOOP ZEROM I LOOP INCM I CMPIM DIGMAX,I IF GE LOAD CH,0,B LOAD I STODX DIGIT,,B ENDIF NXCHAR LOAD CH,0,B INSMV DIGITS,0,8. UNTIL FALSE ENDLOOP ZEROM VAL+V.I,0 ONEM K LOOP LOAD K CMPSM I WHILE LE CMPIM MAX10,VAL+V.I,0 IF GE LOAD VAL+V.I,0 ASHS L,1 DUP ASHS L,2 ADDSS ;SIMULATE MULTIPLY BY 10 LOAD K LOADX DIGIT,,B SUBIS 48. ADDSS STOD VAL+V.I,0 ELSE ERROR 203. ZEROM VAL+V.I,0 ;CONSTANT OVERFLOW, START OVER ENDIF INCM K ENDLOOP CMPIM <'.>,CH,0,B IF EQ ;POSSIBLE REAL NUMBER NXCHAR CMPIM <'.>,CH,0,B IF EQ STOI <':>,CH,0,B ELSE ;FRACTIONAL PART SYMBOL REALCONST,NOOP LOOP LOAD CH,0,B INSMV DIGITS,0,8. WHILE TRUE NXCHAR ENDLOOP ENDIF ENDIF CMPIM <'E>,CH,0,B IF EQ ;EXPONENT NXCHAR SYMBOL REALCONST,NOOP CMPIM <'+>,CH,0,B IF EQ NXCHAR ELSE CMPIM <'->,CH,0,B IF EQ NXCHAR ENDIF ENDIF LOOP LOAD CH,0,B INSMV DIGITS,0,8. WHILE TRUE NXCHAR ENDLOOP ENDIF ZEROM GETNUCHAR,,B CENTRY 7.,* ;STRING QUOTE ZEROM I SYMBOL STRCON,NOOP ZEROM MAXSTR,,B LOOP LOOP NXCHAR TSTM MAXSTR,,B IF EQ INCM I LOAD CH,0,B LOAD I STODX ID,0,B CMPIM STRGLGTH,I IF LT ERROR 205. ;STRING TOO LONG ONEM MAXSTR,,B ENDIF ENDIF CMPIM <''>,CH,0,B UNTIL EQ ENDLOOP NXCHAR CMPIM <''>,CH,0,B UNTIL NE ENDLOOP LOAD I DECS STOD ID,0,B ZEROM GETNUCHAR,,B CENTRY 26.,* ; COLON NXCHAR CMPIM <'=>,CH,0,B IF EQ SYMBOL BECOMES,NOOP ELSE SYMBOL COLON,NOOP ZEROM GETNUCHAR,,B ENDIF CENTRY 14. ; PERIOD NXCHAR CMPIM <'.>,CH,0,B IF EQ SYMBOL COLON,NOOP ELSE SYMBOL PERIOD,NOOP ZEROM GETNUCHAR,,B ENDIF CENTRY <0,2,4,5,31.,60.,62.,64.,91.,93.,95.> SYMBOL OTHERSY,NOOP CENTRY 1 ; OR ! SYMBOL ADDOP,OROP CENTRY 3 ; NOT EQUAL # SYMBOL RELOP,NEOP CENTRY 6 ; AND & SYMBOL MULOP,ANDOP CENTRY 8. ; LEFT PARENTHESIS ( SYMBOL LPARENT,NOOP CENTRY 9. ; RIGHT PARENTHESIS ) SYMBOL RPARENT,NOOP CENTRY 10. ; MULTIPLY * SYMBOL MULOP,MUL CENTRY 11. ; ADD + SYMBOL ADDOP,PLUS CENTRY 12. ; COMMA , SYMBOL COMMA,NOOP CENTRY 13. ; MINUS - SYMBOL ADDOP,MINUS CENTRY 15. ; REAL DIVIDE / SYMBOL MULOP,DIV CENTRY 27. ; SEMICOLON ; SYMBOL SEMICOLON,NOOP CENTRY 28. ; LESS THAN < OR <= NXCHAR CMPIM <'=>,CH,0,B IF EQ SYMBOL RELOP,LEOP ELSE SYMBOL RELOP,LTOP ZEROM GETNUCHAR,,B ENDIF CENTRY 29. ; EQUAL = SYMBOL RELOP,EQOP CENTRY 30. ; GREATER THAN > OR >= NXCHAR CMPIM <'=>,CH,0,B IF EQ SYMBOL RELOP,GEOP ELSE ZEROM GETNUCHAR,,B SYMBOL RELOP,GTOP ENDIF CENTRY 32. ; "ARROW" (DEREFERENCE) @ SYMBOL ARROW,NOOP CENTRY 59. ; LEFT BRACKET SYMBOL LBRACK,NOOP CENTRY 61. ; RIGHT BRACKET SYMBOL RBRACK,NOOP CENTRY 92. ; JOIN SYMBOL JOINSY,NOOP CENTRY 94. ; NOT SYMBOL NOTSY,NOOP ENDCASE TSTM GETNUCHAR,,B IF NE NXCHAR ENDIF ENDIF ;IF EOF(SRC) ENDPROC ; INSYMBOL .PAGE PROC NEXTCH,2 BEGIN TSTM SRC+2,0,B ;EOF ON SRC FILE? IF EQ ;NO READC SRC,0 STOD CH,0,B LOAD LIST,0,B IF TRUE LOAD CH,0,B WRITEC LST,0 ENDIF INCM CHCNT,0,B ELSE ;UNEXPECTED EOF STOI 177,CH,0,B ;DEL -> CH ENDIF ENDPROC PROC OPTIONS,2 BYTE LCH BYTE TEMP WORD COUNT COMMA=54 BEGIN LOOP NXCHAR CMPIM <'A>,CH,0,B IF LE CMPIM <'Z>,CH,0,B IF GE MOVE CH,0,LCH,,B NXCHAR ZEROM TEMP,,B CMPIM <'+>,CH,0,B IF EQ INCM TEMP,,B ENDIF LOAD TEMP,,B LOAD LCH,,B SUBIS <'A> STODX SWITCH,0,B NXCHAR ENDIF ENDIF CMPIM COMMA,CH,0,B UNTIL NE ENDLOOP ENDPROC .END PASCAL