$(1) PREQ . DO STATEMENT 085200 . 085300 DO* S,H2 B11,DO30 085400 SZ FD4 DO FLAG 085500 S B4,DO10 085600 L,M B4,DOPAR FOR GABC 085700 TNZ FRD IS THIS DO IN THE RANGE OF DO 085800 J DO301 NO 085900 LMJ B11,PERR YES 086000 FORM6 01,37,0 086100 J DO300 086200 DO301 S R15,DOIV . SET INDUCTION VARIABLE FLAG LMJ B11,GIT J DO31 EOS 086400 TNE,M A2,4 ITEM = INT COUNT 086500 J DO302 YES 086600 SZ DOIV L A4,(100000) . GET PHONEY LABEL S A4,DLAB . SAVE J DO304A . CONTINUE DO302 L A4,GITV SZ DOIV TLE A4,(100000) J DO303 LMJ B11,PERR YES 087200 FORM6 011,39,GITV 087300 DO303 TZ MACNO SLJ MCLABL S A4,DLAB TNZ,S2 FLD2,A0 J DO304 NO 087800 LMJ B11,PERR YES 087900 FORM6 010,58,GXX 088000 L FNXT,R8 RESET NEXT DO304 LMJ B11,GIT GET INDUCTION VAR 088200 J DO31 EOS 088300 DO304A TNE,M A2,3 . IS ITEM = VAR NAME? J DO305 YES 088500 LMJ B11,ERR4 NO 088600 J DO300 DO NOT CONTINUE 088700 DO305 L A0,N1FIX . ASSUME INTEGER I.V. S A0,TYPEIV . SAVE AWAY LMJ B11,GINTVD . GET REAL OR INTEGER VAR J DO310 ITEM = PARAMETER 088900 J DO306 . INTEGER VARIABLE L A0,N1FLT . FLOATING RETURN S A0,TYPEIV . SAVE DO306 . S A1,0,B4 L(SYM(I)) IN TABLE (1), (DOPAR) 089000 L FNXT,R8 RESET NEXT L A0,GXX PUT X IN A0 089100 TE,M A0,044 X = '=' 089200 LMJ B11,ERR2 NO 089300 LMJ B11,GABC GET A,B, OR C IF DO LIST 089400 TZ FEOS 089500 J DO308 EOS 089600 LMJ B11,PERR NOT END OF STATEMENT 089700 FORM6 0,4,0 089800 DO308 L,M B4,DOPAR 089900 LMJ B11,DTAB ENTER DO INFO IN TABLES 090000 DO300 L B4,DO10 090050 J *DO30 DO31 LMJ B11,PERR 090100 FORM6 0,4,0 090200 J DO300 090300 . 090500 DO310 LMJ B11,PERR 090600 FORM6 011,247,GITV INDEX IS A PARAMETER VAR. J DO300 090800 . 090900 . OUTPUT DO ITEMS AND MAKE TABLE ENTRYS 091600 . 091700 DTAB* S,H2 B11,DU30 LMJ B11,DTAB 091800 L,H2 A0,0,B4 L,XH2 A1,2,A0 JP A1,DU40A S A0,SYMV LMJ B11,PERR FORM6 032,40,SYMV J DU30 DU40A L,H1 A0,CRMLEV 091810 TNE A0,DL 091820 J DU303 091830 S B5,DU11 RETURN (0,A) IN B4 091900 S B6,DU12 (1,B) IN B9 092000 S A6,DU13 092100 L B5,PL P IN B5 092200 A,M B5,2 092300 L,M A0,0,B5 TG,M A0,MLOOP J DU30 TABLE OVERFLOW S B5,PL 092400 . SHORT . PUSH LREF DOWN FOR THIS DO LEVEL. SHORT . SHORT TZ LRFOFL . IF LREF OVERFLOWED, SHORT J DU40D . BYPASS. SHORT TZ DL . IF AT ZERO LEVEL, SHORT J DU40B . WE MUST FLOP OVER SHORT L,M A0,LREFIX . TO STACK AREA. SHORT S A0,LREFIP SHORT J DU40C SHORT DU40B . SHORT L A0,LREFIX . NOT AT ZERO LEVEL. SHORT L A1,LRSTKL . MAKE TRANSITION ENTRY IN STACK AREASHORT S A1,0,A0 SHORT TLEM,H2 A0,LREFI . TEST FOR TABLE OVERFLOW. SHORT J $+3 . YES SHORT S A0,LREFIX . NO. SHORT J DU40C SHORT SLJ LRFXIT . GO FILE ERROR. SHORT DU40C SZ LRSTKL SHORT DU40D. SHORT . SHORT L B6,DL L IN B6 092500 A,M B6,1 092600 S B6,DL 092700 L,H2 A0,CRMLEV 092750 TLE A0,B6 092760 S,H2 B6,CRMLEV 092770 S,H2 B1,DU15 (SEQ OF STATEMENT) 092800 A,M B1,1 S+1 IN S 092900 S B1,A6 SB INTO A6 093000 L,H2 A0,FLF . LOGICAL IF NEST LEVEL S,H2 A0,LGDOTS,B6 . SAVE AS FUNCTION OF DO LEVEL L A0,(0400000) GENERATE LABEL 093100 OR A0,A6 093200 S A1,GITV GEN LABEL IN GITV 093300 LMJ B11,GLS 093600 J DU301 093700 SLJ BUG ERROR 093800 DU301 S,H2 A1,DU16 SYM(GEN LABEL) FOR F30 093900 SZ,S3 DU16 L,M A0,21 TE A0,ST S,S3 R15,DU16 SET S3=1 IF NOT DO STATEMENT L A2,(0107000000) SET MODE (C=7,T=0,D=1) 093910 OR A2,B5 MODE AND P 094000 OR A3,2,A1 A1 = SY OR (I) 094100 S A4,2,A1 PL 094200 L,H2 A0,0,B4 SYM (I) IS IN TABLE (1) 094400 S,H1 A6,3,A1 PUT SB IN SYM (GL) 094300 L A3,B5 . SIMULATE S,T3 B5,2,A0 S,S6 A3,2,A0 . PUT P IN PB(I) SSL A3,6 S,S5 A3,2,A0 L,XH2 A2,2,A0 094600 OR A2,(0400000) SET INDUCTION BIT S,H2 A3,2,A0 095200 . UPDATE LOOP TABLE AND DOTAB 095300 L A2,DLAB LABEL IN DLAB 095400 S,H1 A2,DOTAB,B6 095500 S,H2 B5,DOTAB,B6 PLATEAU 095600 S,H1 A6,LOOP,B5 SB IN LOOP 095700 L A2,3,B4 INC IS IN TABLE+3 095800 TEP A2,(4,0) IS INCREMENT MINUS A A2,(0400000) -YES, SET SIGN BIT TNZ,S1 3,B4 . TEST FOR EXPRESSION L A2,(0777777) . FLAG FOR PHASE THAT EXPRESSION PRESENT S,H2 A2,LOOP,B5 INC IN LOOP 095900 L,S1 A2,3,B4 . COMPUTE F1 AND F2 LSSL A2,6 A,S2 A2,3,B4 . SIMULATE L,T1 A2,3,B4 TNE,M A2,0301 096100 SZ A2 096200 TZ FC4 THIS DO BEGIN IMM AFTER OUTER DO 096300 A,M A2,0400 F3 096400 TZ FF5 CALL OR FUNCT REF IN RANGE THIS DO096500 A,M A2,02000 1 TO F5 096600 SZ LOOP+1,B5 INITIALIZE IN CASE LOOP NEVER FINISHED S,S4 A2,LOOP+1,B5 . SYN (I) IN A0 SSL A2,6 S,S3 A2,LOOP+1,B5 . SIMULATE S,T2 A2,LOOP+1,B5 SA,H2 A0,LOOP+1,B5 SYM TO LOOP+1 096750 S R15,FC4 SET FC4 096800 SZ FF5 RESET FF5 096900 SZ FD4 ZERO IN FD4 097000 S A0,SLOUT,B9 SYM (I) IN A0 097100 S,H1 B5,SLOUT,B9 P IN B5 097200 L,M A2,ID8 ID8 = BEGIN DO 097300 S,S1 A2,SLOUT,*B9 097400 L A2,1,B4 A 097500 S A2,SLOUT,*B9 097600 L A2,2,B4 B 097700 S A2,SLOUT,*B9 097800 L A2,3,B4 C 097900 S A2,SLOUT,*B9 098000 L A1,3,A0 . LAST DEFINITION POINT SSA A1,18 . SIMULATE L,XH1 S,H1 B1,3,A0 UPDATE DP1 098200 A A1,(02100000) 098300 SSC A1,21 098400 A,M A1,0,A0 098500 AN,H2 A1,CRISYM 098510 S A1,SLOUT,*B9 DEFINITION POINT ITEM 098520 L A2,DU15 STS ALREADY IN SLOUT+5 098600 S A2,SLOUT,*B9 ST TYPE ITEM 098700 L A2,DU16 098800 S A2,SLOUT,*B9 GENERATED LABEL ITEM 098900 L B5,DU11 099100 L B6,DU12 099200 A,M B1,1 L A6,DU13 099300 LMJ B11,SCANDF . LOOK FOR GENERALIZED EXPRESSIONS L A0,(0470000,0) A,H2 A0,DU15 SEQUENCE NUMBER S A0,SLOUT,*B9 J *DU30 DU303 LMJ B11,PERR 099410 FORM6 02,108,0 099420 J DU30 099430 . 099500 . 183600 . GET ABC OF DO LIST 173200 . 173300 GABC* S,H2 B11,GA30 (A LMJ B11,GABC 173400 S A6,GA11 173500 SZ A6 0 IN K (AX1 RETURN 173600 SZ GA10 FLAG = INTEGER CONSTANTS 173620 A B4,(1,0) 173700 GA40 SZ GA12 0 IN SIGN 173800 LMJ B11,SGX3 LMJ B11,GX GET SIGN IF ANY 173900 J GA70 EOS 174000 TNE,M A0,'-' 174100 J GA401 MINUS 174200 TE,M A0,'+' PLUS 174300 J GA403 174400 GA402 LMJ B11,GX 174500 J GA70 EOS 174600 GA403 L,S1 A1,FLD1,A0 BRANCH ON X 174700 JZ A1,GA404 X=ALPHA-NUMERIC 174800 TNE,M A1,3 174900 J GA405 X=COMMA 175000 TNE,M A0,'$' J GA406J TE,M A0,'(' . TEST START OF EXPRESSION TNE,M A0,'.' . TEST FOR FLOATING POINT NUMBER J GA404 GA407 LMJ B11,ERR2 GA404 SZ FNXT SET NEXT LMJ B11,GIT GET A,B,C 175210 J GA70 EOS 175300 TNZ FEOS TNE,M A0,',' ONLY VALID SEPARATOR J $+3 TE,M A0,')' J GARSN GO RSCAN EXPRESSION TNE,M A2,3 175400 J GA90 ITEM=VAR NAME 175500 TNE,M A2,4 175600 J GA80 ITEM=INT CONST 175700 J GARSN GA404J LMJ B11,PERR FORM6 011,187,0 GA406 L,M A2,1 176000 S A2,GITV 1 IN ITEM 176100 L,M A2,4 176200 J GA80 176300 GA406J TE,M A6,0 TEST FOR $ AS FIRST ARGUMENT J GA407 SZ 0,*B4 SZ LSTPAR FLAG N1LST THAT $ WAS FOUND OK. L,M A6,1 L,M A5,0 LMJ B11,GX J GA70 J GA903 . 176400 GA405 SZ FNXT SET NEXT TZ A6 J GA406 176600 J GA407 . 176700 GA401 S R15,GA12 X=MINUS SIGN 176800 J GA402 176900 GARSN S,H1 B5,GEICFL SAVE LOCATON IN STRING L A0,ST TNE,M A0,58 J GA404J . NO GEN DOS IN DATA STATEMENTS LMJ B11,RGX3 S R15,GA10 SHOW EXPRESSION S,H2 R15,GEICFL MAKE COMMA A SEPARAOTR S R15,FEB SR R15,SBSCRP DO LOOP LIMIT IN LIST S R15,PARFLG L A0,(0370000,0) A A0,A6 SET TO SAVE INIT,FIN OR INC S A0,STRING,*B5 L A0,TYPEIV . GET CONVERSION TO PROPER TYPE S A0,STRING,*B5 L A0,LIST S A0,('SVLIST') SZ LIST LMJ B11,SCAR L A0,('SVLIST') S A0,LIST L A0,(0102000,0) A,H2 A0,TYPEIV . INDICATE TYPE OF CONVERSION S A0,STRING,*B5 L A0,(0400000,0) A6=1 INIT, 2=FIN,3=INC A A0,A6 S A0,STRING,*B5 L,M A0,0,B5 AN,H1 A0,GEICFL COMPUTE NUMBER ITMS IN STRING S,H1 A0,('SPADEF') LMJ B11,PRQEST GO SAVE SPACE FOR STRING SLJ SYMOF SSL A0,18 SPADEF CONTAINS DEFINTION OF DYNAMIC S,H2 A0,('SPADEF') SPACE FOR STRING A A0,(1,0) LXM,H1 B5,GEICFL L,H1 R1,('SPADEF') TRANSFER EXPRESSION TO DYNAMIC STORAGE A,M B5,STRING BT A0,0,*B5 LXM,H1 B5,GEICFL L A0,PARFLG TZ FSCLN L,M A0,-2 . SPECIAL CHARACTER FOR SEMICOLON S A0,GXX SZ FNXT TZ LIST S R8,FNXT SZ FEB SZ SBSCRP SZ GEICFL SZ PARFLG L A5,('SPADEF') J GA903 SCANDF*. THIS SECTION SCANS SLOUT AND REPLACES ALL ITEMS . WITH A ZERO ID WITH THE CORRESPONDING POLISH . STRING WHICH WAS SAVED IN DYNAMIC STORAGE IN SYM TABLE . THE ITEM WITH THE ZERO ID HAS A WORD COUNT INH1 AND A . LOCATION IN H2 S A10,('SVA10 ') S B7,('SVB7 ') L,M A10,0,B9 PRESENT NUMBER IN SLOUT L B7,(1,0) SCANDA TZ,S1 SLOUT,*B7 J SCANDB L,H1 R1,SLOUT-1,B7 COUNT L,H2 A0,SLOUT-1,B7 A A0,(1,0) A,M B9,SLOUT BT B9,0,*A0 TRANSFER POLISH BACK TO SLOUT AN,M B9,SLOUT L,H2 A1,SLOUT-1,B7 LOCATION L,H1 A0,SLOUT-1,B7 LENGTH LMJ A3,SYMFRE RETURN SPACE L A0,SLOUT-1,B9 S A0,SLOUT-1,B7 SCANDB L,M A0,0,B7 TE A0,A10 J SCANDA L A10,('SVA10 ') L B7,('SVB7 ') S,H2 B11,SCANSV LMJ B11,PSDP J *SCANSV . 177000 . 177100 GA60 TZ FEOS IS THIS END OF ST 177200 J GA70 YES 177300 L FNXT,R8 RESET NEXT L A0,GXX GET X 177410 TNE,M A0,',' X IS IN A0 177500 J GA602 X IS COMMA 177600 TNE,M A0,')' 177700 J GA71 X IS ) LMJ B11,ERR2 X=OTHER 177900 GA602 TLE,M A6,3 K.LT.3 178000 J GA40 YES 178100 LMJ B11,PERR NO 178200 FORM6 0,76,0 178300 GA604 LMJ B11,GX 178400 J GA70 178500 TE,M A0,')' 178600 J GA604 178700 GA70 L,M A0,21 TNE A0,ST IS THIS A 'DO' STATEMENT J GA71 -YES LMJ B11,PERR -NO, THEN ) IS MISSING FORM6 0,79,0 NO. ( NOT EQUAL TO ) GA71 TNE,M A6,2 J GA702 K=2 178900 TNE,M A6,3 179000 J GA703 K=3 179100 LMJ B11,PERR K=0,1 179200 FORM6 2,76,0 J GA300 179400 GA701 L A0,GA15 CONST ITEM IN GA15 FAR C 179500 S A0,1,*B4 179600 L A0,B4 TEST INDEX AGAINST TABLE LENGTH AN,M A0,DOPAR (DOPAR=P1TAB2 IN N1MN) TLE A0,(1,DOPARL-1) J GA300 OK LMJ B11,PERR TABLE FULL FORM6 012,93,GA18 FATAL J PH500 GA300 L A6,GA11 179700 J *GA30 RETURN . ITEM=VAR NAME 179900 GA90 LMJ B11,GINTVD J GA91 PARAMETER J $+2 NORMAL INTEGER RETURN J GARSN FLOATING RETURN SR R15,GA10 VARIABLE-SET NOT INTEGER FLAG L,XH2 A4,2,A1 GET I BIT 180200 JP A4,GA901 180300 L R2,(0777777770000) IND VAR 180400 MLU A4,GA16 180500 J GA902 180600 GA901 S,H2 A1,GA17 NON IND VAR 180700 L A5,GA17 180800 GA902 TZ GA12 IS IT NEG 180900 A A5,(4,0) YES 181000 GA903 S A5,1,*B4 NO - PLACE IN TABLE 181100 A,M A6,1 181200 J GA60 181300 . 181400 GA91 L A4,3,A1 ITEM=PARAMETER - GET PARAM 181500 JN A4,GA911 S A4,GITV 181600 J GA801 181700 GA911 SNA A4,GITV L A4,GA12 XOR,M A4,1 S A5,GA12 . 181800 GA80 L A4,GITV 181900 GA801 AND A4,(0777777774000) 182000 JZ A5,GA802 182100 LMJ B11,SLT SEARCH 182200 + CRIHL 182300 LMJ B11,SLTI INSERT 182400 L,M A4,013 182500 SZ,S2 2,A1 EQ,CM,F,D=0 182600 S,S3 A4,2,A1 T,C = INTEGER CONSTANT 182700 S,H2 A1,GA14 182800 L A5,GA14 182900 J GA902 183000 GA802 L,H1 A5,GA13 183100 SSC A5,18 183200 A A5,A4 183300 J GA902 183400 GA702 TZ GA10 CONST. ONLY 183501 J GA701 SET + 1 183502 LA A0,B4 A 183503 AN,M A0,1 183504 LMJ B11,GA709 GET PROPER CONST VALUE 183505 L A5,A1 A,M A0,1 183507 LMJ B11,GA709 183508 TG A1,A5 J GA701 A LTE B 183510 L A0,(030104,1) -1 J GA701+1 183512 GA703 TZ GA10 CONSTS. ONLY 183513 J GA300 NO 183514 LA A0,B4 183515 AN,M A0,2 A 183516 LMJ B11,GA709 GET SIGNED ITEM 183517 L A5,A1 183518 A,M A0,1 B 183519 LMJ B11,GA709 183520 TNE A5,A1 J GA300 TG A5,A1 J GA720 A LTE B 183522 AND A2,0,B4 183523 JZ A3,GA300 SIGN IS +, OK 183525 XOR A2,0,B4 CHANGE SIGN 183527 S A3,0,B4 183529 GA710 LMJ B11,PERR 183533 FORM6 0,112,0 112=INCREMENT=BAD SIGN 183534 J GA300 EXIT 183535 GA720 AND A2,0,B4 183536 JNZ A3,GA300 SIGN IS -, OK 183538 XOR A2,0,B4 CHANGE SIGN 183540 S A3,0,B4 183542 J GA710 183544 . SELECT PROPER SIGNED VALUE TO A4 FROM A0 183543 GA709 L A2,(4,0) 183544 AND A2,0,A0 183546 L,H2 A1,0,A0 183548 TNZ,S2 0,A0 183550 L A1,0,A1 183552 TZ A3 LN A1,A1 183556 J 0,B11 183558 $(2) . DO CONSTANTS 091100 . 091200 DO30 J $-$ SAVES EXIT DU30 J $-$ GA30 J $-$ SCANSV J $-$ DO10 +0 SAVE B4 . 091400 . DTAB CONSTANTS 099700 . 099800 DU11 +0 SAVE B5 P DU12 +0 SAVE B6 L DU13 +0 SAVE A6 SB DU15 FORM2 ID1,21,3,0 ST = 21, ID = ST TYPE, N = 3 100200 DU16 FORM2 ID10,0,0,0 F30 GEN LABEL ITEM 100210 . 100300 . GABC CONSTANTS 183800 . 183900 GA10 + 0 0, INT. CONSTS/NOT 0, VAR 183950 GA11 +0 SAVE(A6) GA12 +0 SIGN GA13 FORM2 ID7,1,0,$ I+=CONST,F=1,0,$=CONST 184200 GA14 FORM2 ID7,0,0,$ ID=CONST,F=0,0,$=SIGNED LOC SYM 184300 GA15 FORM2 ID7,1,0,1 ID=CONST,F=1,0,1 (B=0,1) 184400 GA16 FORM6 ID5,0,0 ID=IND VAR, $=B,PB 184500 GA17 FORM6 ID6,0,$ ID=NON IND V $=B,SYM 184600 . 184700 END