%EXTERNALROUTINE PSPROG2(%STRING(63) S) %EXTERNALSTRINGFNSPEC DATE %INTEGER I, J, K, SS, NBIP %STRING(15) ST49,ST50,ST51 %EXTERNALROUTINESPEC DEFINE(%STRING(63)S) %INTEGERARRAY SYMBOL(1300:3000), CC(0:300) %INTEGER CNEXT, DNEXT, CNUM, DNUM, ALT, DEF, ASL, NIDFLAG %INTEGERARRAY KK, DWORD(1001:1200), DLETT(0:1000) %ROUTINESPEC READ STRING(%INTEGER TERMINATOR) %ROUTINESPEC RECORD(%INTEGERARRAYNAME WORD, LETT, %C %INTEGERNAME NUM, NEXT) %ROUTINESPEC LOOK UP(%INTEGERARRAYNAME WORD, LETT, %C %INTEGER FIRST, LAST, INSERT) %ROUTINESPEC PDDICT %ROUTINESPEC PRINT STR(%INTEGERARRAYNAME CC, %INTEGER PTR) %UNLESS S->ST49.(",").ST50.(",").ST51 %THEN %C PRINTSTRING("PARAMS?????") %AND NEWLINE %AND %RETURN DEFINE('ST49,'.ST49) DEFINE('ST50,'.ST50) DEFINE('ST51,'.ST51) SELECT INPUT(49) SELECT OUTPUT(51) ASL=1300 CNEXT=0 DNEXT=0 CNUM=0 NIDFLAG=0 DNUM=1000 READ(NBIP) L1: READ SYMBOL(I) %IF I=68 %THEN ->L3; !'D' %IF I=80 %THEN ->L4; !'P' %IF I=69 %THEN ->L5; !'E' ->L1 L3: READ SYMBOL(I) READSTRING(')') RECORD(DWORD, DLETT, DNUM, DNEXT) ->L1 L4: NEWLINES(2) PRINTSYMBOL(I) READSYMBOL(I) PRINTSYMBOL(I) READ STRING(')') PRINT STR(CC, 0) PRINTSYMBOL(')') LOOK UP(DWORD, DLETT, 1001+NBIP, DNUM, 0) KK(I)=ASL DEF=ASL ALT=ASL+1 ASL=ASL+2 L6: READ SYMBOL(I) PRINTSYMBOL(I) %IF I='(' %THEN ->L7; ! %IF I=M'''' %THEN ->LLIT; !'''OR EQUIVALENT ! %IF I=44 %THEN ->L9; !',' ! %IF I=59 %THEN ->L10; ! %IF I=48 %THEN ->L11; !'0' ! %IF I='*' %THEN I=999 %AND ->L12 ->L6 L7: READ STRING(')') PRINT STR(CC, 0) PRINTSYMBOL(')') LOOK UP(DWORD, DLETT, 1001, DNUM, 0) L12: SYMBOL(ASL)=I ASL=ASL+1 ->L6 LLIT: READ STRING(M'''') PRINT STR(CC, 0) PRINTSYMBOL(M'''') %CYCLE I=1,1,CC(0) SYMBOL(ASL)=CC(I) ASL=ASL+1 %REPEAT ->L6 L9: SYMBOL(ALT)=ASL ALT=ASL ASL=ASL+1 ->L6 L10: SYMBOL(ALT)=ASL SYMBOL(DEF)=ASL ->L1 L11: I=1000 ->L12 L5: PDDICT %CYCLE I=1300, 1, ASL-1 %IF 1001+NBIP<=SYMBOL(I)<=DNUM %C %THEN SYMBOL(I)=KK(SYMBOL(I)) %REPEAT SS=KK(DNUM) NEWLINE %CYCLE K=1, 1, 2 SELECT OUTPUT(50) %IF K=2 PRINTSTRING('! PRODUCED FROM '.ST49.' BY PSPROG2S ON '.DATE) PRINTSTRING(" %CONSTINTEGERARRAY SYMBOL(1300:") WRITE(ASL-1, 1); PRINTSTRING(")=") %CYCLE I=1300, 1, ASL-1 WRITE(SYMBOL(I), 5) J=',' J=';' %IF I=ASL-1 PRINTSYMBOL(J) NEWLINE %IF (I-1299)-((I-1299)//10)*10=1 %REPEAT NEWLINE PRINTSTRING("%CONSTINTEGER SS=") WRITE(SS, 1) NEWLINE %RETURN %UNLESS NIDFLAG=0 %REPEAT SELECT OUTPUT(99) PRINTSTRING("NO ERRORS ") %RETURN %ROUTINE READ STRING(%INTEGER TERMINATOR) %INTEGER UNDER; UNDER=0 J=0 L1: READ SYMBOL(I) %IF I='%' %THEN UNDER=128 %AND ->L1 %IF 'A'<=I<='Z' %THEN I=I+UNDER %ELSE UNDER=0 %IF I=32 %THEN ->L1; !'_' ! %IF I=TERMINATOR %THEN CC(0)=J %AND %RETURN J=J+1 CC(J)=I ->L1 %END %ROUTINE RECORD(%INTEGER %ARRAY %NAME WORD,LETT, %C %INTEGER %NAME NUM,NEXT) NUM=NUM+1 WORD(NUM)=NEXT %CYCLE I=0, 1, CC(0) LETT(NEXT+I)=CC(I) %REPEAT NEXT=NEXT+CC(0)+1 %END %ROUTINE LOOK UP(%INTEGERARRAYNAME WORD, LETT, %C %INTEGER FIRST, LAST, INSERT) I=FIRST %WHILE I<=LAST %CYCLE J=WORD(I) %CYCLE K=0, 1, LETT(J) %IF LETT(J+K)#CC(K) %THEN ->LNXT %REPEAT %RETURN LNXT: I=I+1 %REPEAT %IF INSERT=0 %THEN %START PRINTSTRING(" ****************PHRASE NOT IN DICTIONARY*********** ") PRINT STR(CC, 0) NIDFLAG=NIDFLAG+1 %RETURN %FINISH RECORD(WORD, LETT, CNUM, CNEXT) ! INSERT INTO C DICTIONARY I=CNUM %END %ROUTINE PRINT STR(%INTEGERARRAYNAME CC, %INTEGER PTR) %INTEGER I, J, K SS=CC(PTR); K=SS %IF CC(PTR+1)>128 %THEN SS=SS+1 %AND PRINT SYMBOL('%') %CYCLE I=1, 1, K PRINT SYMBOL(CC(PTR+I)) %REPEAT %END %ROUTINE PDDICT %INTEGER J NEWLINES(4) PRINTSTRING(" KEY TO MAIN TABLE (SYMBOL) ") %CYCLE J=1001, 1, DNUM %IF J<=1000+NBIP %THEN WRITE(J, 4) %ELSE WRITE(KK(J), 4) SPACES(2) PRINT STR(DLETT, DWORD(J)) SPACES(17-SS) NEWLINE %IF (J-1000)&3=0 %REPEAT %END %END %ENDOFFILE