* TAPE 2 OF 5 - BEGIN * DN63 CRA IM = 0 STA IM JMP DN67 GO TO DN67 (18) DN64 LDA K101 STA TID DN66 LDA K101 STA NT NAME TAG = 1 (CONSTANT) LDA K102 IU=VAR STA IU LDA K103 STA IM IM = LOG JST CH00 DN67 JST FN00 FINISH OPERATOR DN68 LDA F6 IF F6 = 0, SNZ GO TO DN70 (21) JMP DN70 DN69 LDA K10 STA TC TC = . DN70 CRA STA F6 F6 = SXF = 0 STA SXF LDA IM (A) = IM JMP* DN00 RETURN DN72 LDA F1 IF F1 = 0, GO TO DN74 SNZ JMP DN74 LDA F1 ELSE, TC = F1 STA TC JMP DN58 GO TO DN58 (14) DN74 LDA TC IF TC = -, GO TO DN82 SUB K12 SNZ JMP DN82 ADD K102 CHECK FOR TC = + SNZ JMP DN82 LDA DFL IF DFL = NON-ZERO SZE JMP DN63 GO TO DN63 (15) LDA TC CAS K43 JMP *+3 JMP DN78 JMP DN80 CAS K62 JMP DN80 NOP DN78 LDA K101 IM < INT STA IM DN80 LDA TC PACK TC TO ID JST PACK JST CH00 INPUT CHAR LDA DFL IF DFL IS NOT ZERO, SZE GO TO DN67 (18) JMP DN67 LDA NTID IF NTID = 6, GO TO DN67 SUB K106 SZE JMP DN80 JMP DN67 DN82 JST FN00 STA F1 F1 = CONVERTED TC JMP DN06 GO TO DN06 (2) DN84 LDA F1 IF F1 = -, SUB K102 GO TO DN85(13) SZE JMP DN85 CRA SUB TID COMPLEMENT THREE WORDS AT TID SZE JMP DN8A SUB TID+1 SZE JMP DN8B JMP DN8C DN8A STA TID LDA K123 SUB TID+1 DN8B STA TID+1 LDA K123 DN8C SUB TID+2 STA TID+2 DN85 LDA SXF IF SXF = 0, GO T0 DN67 (18) SNZ JMP DN67 ELSE, LDA IM IF IM NOT = REA, SUB K102 SZE GO TO DN67 (18) JMP DN67 LDA F6 ELSE, SNZ IF F6 = 0, GO TO DN87 JMP DN87 LDA K105 STA IM IM = CPX LDA TID INTERCHANGE IMA TIDB 3 CELLS STA TID TID LDA TID+1 WITH IMA TIDB+1 3 CELLS STA TID+1 OF LDA TID+2 TIDB IMA TIDB+2 STA TID+2 JST IP00 )-INPUT OPERATOR JMP DN70 GO TO DN70 (21) DN87 LDA TC IF TC = , SUB K5 SZE JMP DN67 TID-BAR = TID LDA TID F6 = 1 STA TIDB GO TO DN01 (1) LDA TID+1 STA TIDB+1 ELSE, GO TO DN67 (18) LDA TID+2 STA TIDB+2 LDA K101 STA F6 JMP DN01 DN90 LDA F2 IF F2= 0, GO TO DN9A (10) SNZ JMP DN9A LDA F3 F3 = - F3 TCA STA F3 DN9A LDA F3 F4 = F3 - F4 SUB F4 STA F4 LDA K12 F2 = EXP, BIAS + MANTISSA STA F2 LDA TID IF TID = 0, ADD TID+1 ADD TID+2 GO TO DN85(13) SNZ JMP DN85 DN9C LDA TID+2 LGL 1 NORMALIZE ID SPL JMP DN9D ID IS NORMALIZED JST SFT DAC ID * F2 = F2 - = SHIFTS LDA F2 SUB K101 STA F2 JMP DN9C CONTINUE NORMALIZE LOOP DN9D LDA F4 CAS ZERO JMP DN9E JMP DN9G FINISHED E FACTOR LOOP IRS F4 NOP F4 = F4 +1 LDA K155 DIVIDE LOOP COUNTER STA TIDN JST SRT DAC TID JST SRT DAC TID DND1 JST SFT DAC TID LDA TID+2 SUB K156 10 AT B=4 SMI STA TID+2 SMI IRS TID IRS TIDN JMP DND1 REDUCE DIVIDE COUNTER JST SFT DAC TID LDA TID+2 ANA K157 STA TID+2 JMP DN9C DN9E SUB K101 STA F4 F4 = F4-1 LDA F2 F2 = F2+4 ADD K104 STA F2 JST SRT DAC ID JST MOV3 JST SRT ID = ID*10 DAC ID JST SRT DAC ID JST AD3 ADD THREE WORD INTEGERS JMP DN9C * CONVERT THREE WORD INTEGER TO INTERNAL FORMAT DN9G LDA TID+2 IAB LDA F2 LRS 8 SNZ JMP *+3 JST ER00 BCI 1,CE CONSTANT'S EXPONENT OVER 8 BITS (OVERFLOW) IAB IMA TID+2 IAB LDA TID+1 LGL 1 LRR 8 STA TID+1 LRR 9 LDA TID PACK UP TRIPLE PRECISION LGL 1 LRR 7 REAL CONSTANT STA TID LDA F2 LGR 8 SZE JMP DN69 GO TO DN69 (20) JMP DN84 ELSE. GO TO DN84 (12) DN9H STA IM LDA SPF SUB K102 SZE LDA K106 SUB K124 ADD TID SMI JMP DN70 LDA TID STA HOLF HOLF=NO.OF HOLLERITH CHARS, STA F3 TCA SNZ JMP DN9K FIELD WIDTH OF ZERO STA F2 F2= -1(1 CHAR) OR -2(2 CHAR) JST BLNK SET ID,ID+1(ID+2 TO ZERO DAC TID DN9J JST IC00 INPUT COLUMN (INCLUDING BLANKS) JST PACK PACK CHARACTERS 2 PER WORD IRS F2 REDUCE CHARACTER COUNT JMP DN9J INPUT AND PACK MORE CHARACTERS LDA F3 F3= 0 IF 2 CHAR. HAVE BEEN INPUT ANA K101 SNZ JMP *+3 LDA K8 ='240 (SP) JST PACK SHIFT A SPACE INTO THE LAST WORD IRS IM DN9M JST CH00 INPUT THE TERMINATING CHARACTER JMP DN67 FINISH OPERATOR AND EXIT DN9K JST ER00 BCI 1,HF DN9N LDA K105 SET .NOT. OPERATOR (TC=5) STA TC SET .NOT. OPERATOR (TC=5) CRA STA IM IM=0 = UNDEFINED JMP DN68 DNX1 BSS 3 DNX2 DAC ** OVERFLOW FLAG JMP* *-1 * * * ************ * *INPUT ITEM* * ************ * INPUTS AND ASSIGNS ITEM (IF ONE EXISTS) * II00 DAC ** JST DN00 INPUT DNA SNZ IF (A) = 0 JMP* II00 RETURN JST AS00 NO, ASSIGN ITEM LDA IM JMP* II00 RETURN (A) = IM * * * *************** * *INPUT OPERAND* * *************** * EXIT WITH ITEM MODE IN A (TC SET TO . IF NO * OPERAND) * OP00 DAC ** INPUT OPERAND JST II00 INPUT ITEM SZE IF IM = 0, SKIP JMP* OP00 ELSE (A) = IM, RETURN LDA K10 TC = . STA TC (A) = 0 CRA JMP* OP00 RETURN * * * ************ * *INPUT NAME* * ************ * INPUT OPERAND AND ENSURE THAT IT IS A NAME * NA00 DAC ** INPUT NAME JST OP00 INPUT OPERAND LDA NT IF NT = 1, SNZ JMP NA10 JST ER00 PZE 9 NA10 LDA IM (A) = IM JMP* NA00 RETURN * * * *************** * *INPUT INTEGER* * *************** * INPUT ITEM AND ENSURE THAT IT IS AN INTEGER CONSTANT * GREATER THAN ZERO * IG00 DAC ** INPUT INTEGER JST DN00 INPUT - DNA LDA F1 SZE IF F1 = 0, JMP IG20 AND NT = 1, LDA NT AND IM = INT, SNZ AND TID L2**15, JMP IG20 GO TO IG10 LDA IM LSE, GO TO IG20 SUB K101 SZE JMP IG20 LDA TID+1 SZE JMP IG20 LDA TID+2 SZE JMP IG20 IG10 LDA TID JMP* IG00 IG20 JST ER00 ERROR BCI 1,IN INTEGER REQUIRED * * * *********************** * *INPUT INTEGER VAR/CON* * *********************** * IV00 DAC ** JST OP00 INPUT OPERAND JST IT00 INTER TEST JST TV00 TAG VARIABLE JMP* IV00 EXIT * * * ************************ * *INPUT INTEGER VARIABLE* * ************************ * IR00 DAC ** INPUT INT VAR JST IV00 INPUT INT VAR/CON JST NC00 NON-CONSTANT TEST JMP* IR00 RETURN * * * ************************ * *INPUT STATEMENT NUMBER* * ************************ * NUMBER IS FORMED AS SPECIAL NAME , NOT CONVERTED * TO NUMERIC * IS00 DAC ** IS04 CRA STA NT STA IM STA IU IU = IM = IT = 0 STA NTID PUT LEADING 'S' IN STATEMENT NO, LDA K79 JST PACK IS10 JST ID00 INPUT DIGIT SZE JMP IS20 NOT A DIGIT GO TO IS20 LDA NTID SUB K106 SMI JMP IS22 LDA TC JST PACK PACK TC TO ID - LEGAL ST, NO, CHAR LDA TID CAS K79X JMP IS10 JMP IS04 IGNORE LEAD ZERO ON ST. NO, JMP IS10 IS20 LDA NTID SUB K101 SMI JMP IS25 IS22 JST ER00 BCI 1,ST ILLEGAL STATEMENT NUMBER FORMAT IS25 JST AS00 ASSIGN ITEM JST STXA LDA DP+1,1 ANA K111 STA DP+1,1 IU = 0 LDA AF ADDRESS FIELD IS CAS XST LE XST - ALREADY ASSIGNED JMP* IS00 JMP* IS00 OK - OTHERWISE LDA AT MUST HAVE STR-ABS OTHERWISE CAS K102 JMP *+2 JMP* IS00 !!! JST ER00 BCI 1,RN REFERENCE TO A SPECIFICATION STMNT NUMBER K79 OCT 337 K79X OCT 157660 * SY00 DAC ** INPUT SYMBOL LDA K101 STA NTF NTF NOT 0 - DON'T SET IU IN AS00 JST NA00 INPUT NAME JMP* SY00 EXIT * * ************************ * *EXAMINE NEXT CHARACTER* * ************************ * CHECK NEXT CHAR FOR DIGIT (BACKUP ONE COL, THEN EXIT) * XN00 DAC ** JST ID00 INPUT DIGIT JST UC00 UNINPUT COLUMM JMP* XN00 K1 BCI 3,TRUE. K2 BCI 3,FALSE. K3 OCT 247 KNOT BCI 3,NOT. CONSTANT FOR .NOT. TEST K11 OCT 304 0D K14 OCT 310 0H K62 OCT 316 0N K64 OCT 336 0) * * * ******************** * *ALL CHARACTER TEST* * ******************** * TS00 DAC ** TEST (A) AGAINST TC SUB TC SNZ JMP* TS00 RETURN JST ER00 TO ERROR TEST BCI 1,CH IMPROPER TERMINATING CHARACTER * * * ******************* * *)- INPUT OPERATOR* * ******************* * IP00 DAC ** LDA K4 TEST - ) JST TS00 JST CH00 INPUT CHAR JST FN00 FINISH OPERATOR LDA B B = B-16 SUB K109 STA B CRA (A) = 0 JMP* IP00 RETURN * * * * B1 COMMA OR C/R TST B1 LDA K134 IF TC = ','(CONVERTED TO 17) SUB TC SNZ JMP* A9T2 GO TO SIDSW JMP A1 ELSE, GO TO C/R TEST * * NR00 DAC ** NON-REL TEST LDA AT SUB K101 IF AT = 1 GO TO ERROR- SZE TEST JMP* NR00 RETURN JST ER00 ERROR TEST ROUTINE BCI 1,MS MULTIPLY DEFINED STATEMENT NUMBER * * * *************** * *NO USAGE TEST* * *************** * NU00 DAC ** N0 USAGE TEST LDA IU SNZ IF IU NOT = 0, TO ERROR JMP* NU00 RETURN JST ER00 ERROR TEST BCI 1,NU NAME ALREADY BEING USED * * * ******************* * *NON-CONSTANT TEST* * ******************* * NC00 DAC ** NON CONSTANT TEST LDA NT SNZ IF NT NOT = 0, TO ERROR TEST JMP* NC00 RETURN JST ER00 ERROR TEST BCI 1,NC CONSTANT MUST BE PRESENT * * * ********************* * *NON SUBPROGRAM TEST* * ********************* * NS00 DAC ** NON SUBPROGRAM TEST LDA IU SUB K101 IF IU = 1, GO TO- SZE ERROR TEST JMP* NS00 RETURN JST ER00 ERROR TEST BCI 1,NS SUBPROGRAM NAME NOT ALLOWED * * * ********** * *ARR TEST* * ********** * AT00 DAC ** ARRAY TEST LDA IU SUB K103 IF IU = 3, GO TO SNZ JMP* AT00 RETURN JST ER00 ERROR TEST BCI 1,AR ITEM NOT AN ARRAY NAME * * * ************** * *INTEGER TEST* * ************** * IT00 DAC ** INTEGER TEST LDA IM SUB K101 IF IM = 1, GO TO- SNZ ERROR ROUTINE, ELSE JMP* IT00 RETURN JST ER00 TO ERROR TEST BCI 1,IT ITEM NOT AN INTEGER * * TA00 DAC ** LDA AT STRING-ABS TEST SUB K102 SNZ JMP* TA00 JST ER00 BCI 1,NR ITEM NOT A RELATIVE VARIABLE * * * * * * * * AD3 DAC ** ADD TWO THREE WORD INTEGERS, LDA TID ADD DNX1 CSA STA TID LDA TID+1 ACA ADD DNX1+1 CSA STA TID+1 LDA TID+2 ACA ADD DNX1+2 STA TID+2 JMP* AD3 * * * *********************** * *ASSIGN INDEX REGISTER* * *********************** * STXA DAC ** LDA A STA 0 JMP* STXA STXI DAC ** LDA I STA 0 JMP* STXI K153 OCT 16 IM00 DAC ** STA T1IM MULTIPLY A BY B LDA K120 =-15 STA T2IM CRA RCB C BIT = 0 IM10 LRL 1 LOW BIT OF B INTO C SRC SKIP IF B = 0 ADD T1IM IRS T2IM JMP IM10 LLL 14 JMP* IM00 RETURN, RESULT IN A T1IM PZE 0 T2IM PZE 0 * * NF00 DAC ** CONSTRUCT EXTERNAL NAME LDA K80 ENTRY FOR FORTRAN GENERATER STA NAMF LDA K81 SUBROUTINE CALLS, STA NAMF+2 JMP* NF00 K80 BCI 1,F$ K81 BCI 1, KM92 DEC 1 001 = INT DEC 2 010 = REA DEC 1 011 = LOG DEC 0 - - DEC 4 101 = CPX DEC 3 110 = DSL OCT 3 111 = HOL * * BLNK DAC ** CLEAR A 3/36 JST SAV AREA TO ZEROS LDA* BLNK STA XR CRA CLEAR 3 WORDS OF MEMORY STA 1,1 PARAMETER INPUT ADDRESS TO 0 STA 2,1 STA 0,1 JST RST IRS BLNK JMP* BLNK EXIT * * MOV3 DAC ** MOVE 3-WORDS LDA TID TO TEMO STORE STA DNX1 LDA TID+1 STA DNX1+1 LDA TID+2 STA DNX1+2 JMP* MOV3 * * * * CIB DAC ** COMPARE IBUF TO A CONSTANT JST SAV SAVE INDEX LDA* CIB +DDR OF CON+3,0 STA CIBZ CRA SUB K103 XR=-3 STA XR CIBB LDA IBUF+3,1 SUB* CIBZ SZE JMP CIBD IRS XR JMP CIBB CIBC IRS CIB JST RST RESTORE INDEX JMP* CIB CIBD IRS CIB JMP CIBC CIBZ DAC ** * * * * SAV DAC ** SAVE INDEX REGISTER STA SAVY STACKED IN PUSH DOWN LIST LDA XR STA* SAV9 IRS SAV9 LDA SAVY JMP* SAV RST DAC ** RESTORE INDEX REGISTER STA SAVY LDA SAV9 UNSTACK PUSH DOWN LIST SUB K101 STA SAV9 LDA* SAV9 STA XR LDA SAVY JMP* RST SAVY PZE 0 SAV9 DAC SAVX IS INITIATED BY A092 SAVX BSS 20 * * PACK DAC ** PLACE CHARACTER IN A STA PAK7 LDA NTID INTO ID - UPDATE 3 WORDS OF PAK1 SNZ JMP PAK4 ID LRL 1 ADD PAK9 STA PAK8 LDA PAK7 IAB SPL JMP PAK3 LLL 24 ADD K8 PAK2 STA* PAK8 IRS NTID JMP* PACK PAK3 LLL 8 LDA* PAK8 LGR 8 LLL 8 JMP PAK2 PAK4 LDA PAK6 STA TID STA TID+1 STA TID+2 STA TID+3 LDA NTID JMP PAK1+2 PAK6 BCI 1, PAK7 DAC ** PAK8 DAC ** PAK9 DAC TID * * * *************** * *ERROR ROUTINE* * *************** * ER00 DAC ** ERROR ROUTINE LDA SAV9 STA SAVX LDA ER93 =-35 STA 0 SET INDEX LDA ER91 (*)(*) STA PRI+35,1 SET ** INTO PRINT BUFFER IRS 0 SET COMPLETE PRINT BUFFER TO ******** JMP *-2 LDA CC ARS 1 CC = CC/2 SUB K101 =1 SPL CRA STA XR LDA EBAR (NEGATIVE IF NOT WITHIN AN EQUIVALENCE ST.) SPL SKIP IF PROCESSING AN EQUIVALENCE STATEMENT JMP *+3 LDA KAEQ ='142721 (=(E)(Q) ) STA PRI+1,1 LDA* ER00 STA PRI,1 SET ERROR TYPE LETTERS INTO THE BUFFER CALL F4$SYM PRINT THE BUFFER DAC PRI JST PRSP SET PRINT BUFFER TO SPACES LDA TC ER20 CAS CRET INPUT CHARACTERS UNTIL C/R JMP *+2 JMP C7 GO TO STATEMENT INPUT JST CH00 JMP ER20 ER91 BCI 1,** ER93 OCT 177735 -35 * * SRT DAC ** JST SAV LDA* SRT SHIFT RIGHT ONE PLACE STA XR TRIPLE PRECISION LDA 0,1 IAB LDA 1,1 LRS 1 LGL 1 IAB STA 0,1 LDA 2,1 LRS 1 STA 2,1 IAB STA 1,1 JST RST IRS SRT JMP* SRT * * SFT DAC ** TRIPLE PRECISION JST SAV SHIFT LEFT ONE PLACE LDA* SFT STA XR LDA 0,1 IAB LDA 1,1 LLS 1 CSA STA 1,1 IAB STA 0,1 ACA LRS 1 LDA 2,1 LLS 1 CSA STA 2,1 JST RST IRS SFT JMP* SFT * LIST DAC ** JST PRSP SR2 JMP *+3 CALL F4$SYM PRINT BLANK LINE DAC PRI CALL F4$SYM PRINT SOURCE INPUT LINE DAC CI JMP* LIST * ************* * *ASSIGN ITEM* * ************* * CHECKS ASSIGNMENT AREA OF DATA POOL (A0 TO ABAR) * FOR ITEM DEFINED BY ID, IM, IU, ETC. * IF FOUND, EXIT WITH POINTER AND * ASSIGNMENTS DATA SET, OTHERWISE * ASSIGN THE ITEM. * * * T0AS PZE 0 AS00 DAC ** CRA STA A A = A (0) AS04 JST STXA JST NXT GET NEXT ENTRY JMP AS30 AT END, GO TO AS30 LDA NT SUB NTA NT = NT(A) SZE JMP AS04 NO, G0 TO AS04 LDA TID SUB TIDA SZE JMP AS04 TID = TID(A) LDA TID+1 SUB TIDA+1 SZE JMP AS04 NO, GO TO AS04 LDA TID+2 SUB TIDA+2 SZE JMP AS04 LDA NT IF NT (A) .NE. 0, SNZ GO TO AS10 JMP AS16 GO TO AS16 (4) AS10 LDA IM IF IM .NE. IM (A), SUB IMA GO TO AS04 (1) SZE JMP AS04 LDA IU IF IU = 0, SNZ OR NOT EQUAL IU (A) JMP AS04 GO T0 AS04 (1) SUB IUA SZE JMP AS04 ELSE, LDA IM SUB K105 GO TO AS16 (4) SZE JMP AS16 JST NXT ELSE, GET NEXT ENTRY JMP AS30 LDA TIDA IF IU (A) = TIDB SUB TIDB GO TO AS16 (4) SZE ELSE, GO TO AS04 (1) JMP AS04 LDA TIDA+1 SUB TIDB+1 SZE JMP AS04 LDA TIDA+2 SUB TIDB+2 SZE JMP AS04 LDA A SUB K105 STA A AS16 LDA IUA IF IU (A) .NE. 0 ADD NTF SZE JMP AS18 GO TO AS18 (5) LDA SPF IF SPF = 0, GO TO AS18 (5) SNZ JMP AS18 LDA TC IF TC = ( SUB K17 SZE JMP AS19 JST TG00 TAG SUBPROGRAM AS18 CRA SET NTF TO 0 STA NTF SET NTF TO 0 JST FA00 GO TO FETCH ASSIGNS JST STXA LDA IM JMP* AS00 RETURN AS19 JST TV00 TAG VARIABLE JMP AS18 AS30 JST BUD BUILD ASSIGNMENT ENTRY LDA NT IF NT = 1 SZE JMP AS32 OR IV = VAR, LDA IU SUB K102 SZE JMP AS40 AMD AS32 LDA IM IF IM = CPX, SUB K105 SZE JMP AS40 STA IU MOVE 1ST PART OF LDA TIDB COMPLEX ENTRY TO STA TID TID AND BUILD LDA TIDB+1 ASSIGNMENT ENTRY STA TID+1 LDA TIDB+2 STA TID+2 LDA A ADD K105 STA A JST BUD LDA A SUB K105 RESTORE A STA A AS40 LDA ABAR SUB A TO = -(ABAR-A+5) ADD K105 GIVING NO. OF WORDS TO MOVE TABLES UP TCA STA T0AS TCA ADD DO CO=DO+TO STA DO LDA IFLG IF IFLG = 0, THERE IS NO EXPRESSION TABLE SNZ JMP AS60 GO TO AS60 LDA I SUB T0AS STA I I = I - T0(T0 IS NEGATIVE) AOA AS41 CAS L CHECK AGAINST BOTTOM OF TRIAD TABLE NOP JMP AS50 ADD '104 =DP,1 STA AS91 AS91 = NEW TABLE TOP ADD T0AS STA AS92 AS92 SUB T0AS COMPUTE SIZE OF FLOATING TABLES SUB '104 =DP,1 SUB DO SNZ IF ZERO, ASSIGN TABLE ONLY, JMP AS16 TCA STA T0AS CRA STA XR AS46 LDA* AS92 END-5 STA* AS91 END (MOVE TABLES UP) LDA 0 SUB K101 =1 STA 0 REDUCE INDEX IRS T0AS = NO, OF WORDS TO MOVE JMP AS46 JMP AS16 AS50 JST ER00 BCI 1,MO DATA POOL OVERFLOW AS60 LDA DO ADD D JMP AS41 AS91 DAC 0 AS92 DAC ** * * * * * **************** * *TAG SUBPROGRAM* * **************** * TAG ITEM AS A SUBPROGRAM, CHECK TO SEE IF * NAME IS IN IMPLICIT MODE TABLE AND SET * MODE ACCORDINGLY * TG00 DAC ** LDA IU SUB K101 IF IU = SUB SNZ JMP* TG00 RETURN, ELSE JST NU00 NO * USAGE TEST LDA TG22 =-21 STA 0 SET INDEX TG04 LDA ID+1 CHARACTERS 3 AND 4 CAS TGT2+21,1 IMPLICIT MODE SUBR. NAME TABLE JMP *+2 JMP TG10 TG06 IRS 0 JMP TG04 NOT DONE WITH TABLE TG08 LDA K101 =1 (IU=SUBR.) STA IU JST STXA LDA DP+1,1 IU(A) = SUB LGL 1 SSM LGR 1 STA DP+1,1 JMP* TG00 RETURN * TG10 LDA ID CHARACTERS 1 AND 2 ANA K111 ='37777 ADD HBIT ='140000 SUB TGT1+21,1 SZE JMP TG06 CONTINUE SEARCH LDA ID+2 CHARACTERS 5 AND 6 SUB TGT3+21,1 SZE JMP TG06 CONTINUE SEARCH LDA TGT1+21,1 LGR 8 ANA K107 =7 (=3 IF CPX, 4 IF DBL) ADD K102 =2 (=5 IF CPX, 6 IF DBL) JST DM00 DEFINE IM JMP TG08 * TG22 OCT 177753 =-21 * *...........IMPLICIT MODE SUBROUTINE NAME TABLE TGT1 BCI 6,DECEDLCLDLDS BCI 6,CSDCCCDSCSDA BCI 6,DADMDADMDMDS BCI 3,DBCMCO TGT2 BCI 6,XPXPOGOGOGIN BCI 6,INOSOSQRQRTA BCI 6,TAODBSAXINIG BCI 3,LEPLNJ TGT3 BCI 6, 10 / BCI 6, T T N / BCI 6,N2 1 1 N / BCI 3, X G / * * TIDA BSS 3 TIDB BSS 3 * * - TV00 TAG VARIABLE TV00 DAC ** LDA IU IF IU = 'VAR', SUB K102 SNZ JMP* TV00 RETURN JST NU00 ELSE, NO USAGE TEST JST STXA LDA DP+1,1 ANA K111 IU (A) = 'VAR' SSM STA DP+1,1 JMP* TV00 RETURN * * * * * * ************** * *FETCH ASSIGN* * ************** * SET ASSIGNMENT DATA FROM ASSIGN (EXCEPT ID) * EXPAND DIMENSION INFO IF ARRAY * FA00 DAC ** JST STXA LDA DP,1 LRL 15 STA NT NT=NT(A) CRA LLL 3 STA AT AT=AT(A) CRA LLL 3 IM = IM(A) STA IM STA 0 LDA KM92-1,1 STA D0 D0 = NUMBER OF WORDS ALS 2 ADD D0 STA X X = POINTER TO CONSTANT NUMBER OF WORDS JST STXA LDA DP+1,1 LRL 14 STA IU SUB K103 IF IU NOT 'ARR' SNZ JMP FA10 CRA LLL 14 AF = GF(A) STA AF JMP* FA00 FA10 LLL 14 STA 0 INDEX = GF(A) LDA DP+4,1 STA X1 POINTER OF DIMENSION 1 LDA DP+3,1 STA X2 POINTER OF DIMENSION 2 LDA DP+2,1 STA X3 POINTER OF DIMENSION 3 LDA DP+1,1 ANA K111 ='37777 STA AF AF = GF(GF(A)) LDA DP,1 LGR 9 ANA K107 =7 STA ND NUMBER OF DIMENSIONS STA 0 LDA K101 =1 STA D2 STA D3 JMP* FA91-1,1 FA22 LDA X3 FETCH 3RD DIMENSION SIZE STA XR JST FA40 STA D3 STORE D3 FA24 LDA X2 STA XR JST FA40 STA D2 D2 = 2ND DIMENSION SIZE FA26 LDA X1 STA XR JST FA40 STA D1 D1 = 1ST DIMENSION SIZE JST STXA EXIT WITH AF IN A LDA AF JMP* FA00 FA40 DAC ** LDA DP,1 IM OF SUBSCRIPT VALUE SSP LGR 12 SUB K105 =5 SZE SKIP IF DUMMY SUBSCRIPT LDA DP+4,1 FETCH VALUE OF SUBSCRIPT JMP* FA40 FA91 DAC FA26 DAC FA24 DAC FA22 * * * ************ * *FETCH LINK* * ************ * EXPAND LINK FIELD AND FETCH ASSIGNS FOR THE * LINKED ITEM * FL00 DAC ** JST STXA LDA DP,1 A = 5 * CL(A) ANA K118 STA FLT1 ALS 2 ADD FLT1 (FLT1 ALSO USED BY ASSIGN SPEC) STA A JST FA00 FETCH ASSIGN JST KT00 D0 = = WDS /ITEM LDA A SUB F (A) = A-F JMP* FL00 RETURN * * * ******************* * *D0=WORDS FOR LINK* * ******************* * D = ITEM MODE SIZE TIMES THE TOTAL SIZE IF * THE ITEM IS AN ARRAY * KT00 DAC ** LDA IU IF IU NOT 'ARR' SUB K103 SZE JMP* KT00 RETURN LDA D0 IAB D0 = D0 * D1 * D2 * D3 LDA D1 JST IM00 MULTIPLY A BY B IAB LDA D2 JST IM00 MULTIPLY A BY B IAB LDA D3 JST IM00 MULTIPLY A BY B STA D0 JMP* KT00 RETURN * * * * *********** * *DEFINE IM* * *********** * IM SUBA = IM (SET FROM A REG) * DM00 DAC ** STA IM IM = (A) JST STXA ESTABLISH A LDA DP,1 LRL 9 LGR 3 IM(A) = IM LGL 3 ADD IM LLL 9 STA DP,1 JMP* DM00 * * * *********** * *DEFINE AF* * *********** * AF SUBA = AF (SET FROM A REG) * DA00 DAC ** STA AF AF = (A) LRL 14 JST STXA DA10 LDA DP+1,1 IF IU (A) NOT ARR LGR 14 CAS K103 GF (A) : AF JMP *+2 JMP DA20 ELSE, GF (GF (A)) = AF LLL 14 STA DP+1,1 JMP* DA00 RETURN DA20 LDA DP+1,1 ANA K111 STA GFA STA 0 JMP DA10 NXT DAC ** GET NEXT ENTRY LDA A FROM ASSIGNMENT ADD K105 =5 STA A STA 0 CAS ABAR JMP* NXT NOP IRS NXT LDA DP,1 LRL 15 STA NTA NT(A) = NT FROM (A) CRA LLL 3 STA ATA AT(A) = AT FROM (A) CRA LLL 3 STA IMA IM(A) = IM FROM (A) CRA LLL 9 STA CLA CL(A) = CL FROM (A) LDA DP+1,1 LRL 14 STA IUA IU(A) = IU FROM (A) CRA LLL 14 STA GFA GF(A) = GF FROM (A) LDA DP+2,1 STA TIDA+2 TID(A) = TID FROM (A) LDA DP+3,1 STA TIDA+1 LDA DP+4,1 STA TIDA LRL 15 STA DTA DT(A) = DT FROM (A) CRA LLL 1 STA TTA TT(A) = TT FROM (A) LDA NTA NT(A) = NT FROM (A) SZE JMP* NXT LDA DP+4,1 SSM ALR 1 SSM ARR 1 STA TIDA JMP* NXT * * BUD DAC ** BUILD ASSIGNMENT JST STXA STA ABAR LDA TID TABLE ENTRY STA DP+4,1 LDA TID+1 STA DP+3,1 LDA TID+2 STA DP+2,1 LDA IU STA IUA LGL 14 STA DP+1,1 LDA NT LGL 3 ADD K102 AT = STR/+BS LGL 3 ADD IM LRL 16 STA CL LDA K102 STA AT LDA A CL(A) = A/5 SUB K105 SPL JMP *+3 IRS CL JMP *-4 LLL 25 ADD CL STA DP,1 SPL JMP* BUD LDA DT LGL 1 ADD TT LGL 14 IMA DP+4,1 ANA K111 ADD DP+4,1 STA DP+4,1 JMP* BUD * * * * * * ************ * *DEFINE AFT* * ************ * AT SUBA = AT (FROM B REG), THEN DEFINE AF * AF00 DAC ** IAB STA AF90 JST STXA LDA AF90 LGL 12 IMA DP,1 ANA AF91 ADD DP,1 STA DP,1 AT(A) = CONTENTS OF B INPUT IAB JST DA00 DEFINE AF JMP* AF00 AF90 PZE 0 AF91 OCT 107777 * * * ***************** * *DEFINE LOCATION* * ***************** * SET AF = RPL, AT = REL LO00 DAC ** LDA K101 REL IAB LDA RPL JST AF00 DEFINE AF JMP* LO00 * ************************* * *ASSIGN INTEGER CONSTANT* * ************************* * IM (INTEGER), IU(VARIABLE) , ASSIGN SPECIAL AI00 DAC ** CRA STA ID+1 STA ID+2 LDA K101 (B) = INT IAB LDA K102 (A) = VAR JST AA00 ASSIGN SPECIAL JMP* AI00 RETURN * * * **************** * *ASSIGN SPECIAL* * **************** * B REG TO IM, A REG TO IU, 1 TO NT (CONSTANT), THEN * ASSIGN ITEM AA00 DAC ** STA IU IU = (A) IAB STA IM IM = (B) LDA K101 STA NT NT = 1 JST AS00 ASSIGN ITEM JMP* AA00 RETURN * * * ********** * *JUMP * * *ILL TERM* * ********** * * CLEAR LAST OP FLAG FOR NO PATH TESTING * B6 CRA STA LSTP LSTP = 0 * SET ILLEGAL DO TERM FLAG C5 LDA K101 STA LSTF LSTF =1 A1 LDA CRET JST TS00 IF TC NOT C/R, ERROR JMP C6 * * * ********** * *CONTINUE* * ********** * WRAPUP LOGICAL IF, CHECK TRACE STOP AND SEARCH * DO TABLE FOR DO TERMINATION C6 LDA LIF SZE IF LIF NON-ZERO, JMP C6H GO TO C6A LDA LSTN IF LSTN NON-ZERO, SZE GO TO JMP C6C C6B STA LSTF LSTF = 0 JMP C7 GO TO STATEMENT INPUT C6C SUB TRF TRACE FLAG SNZ SMP IF NOT END OF TRACE ZONE STA TRF SET TRF TO ZERO (TURN FLAG OFF) LDA DO START OF DO TABLE ADD D C6D STA I I = DO + D JST STXI SUB DO SNZ JMP C6B GO TO C6B - FINISHED DO LDA DP-4,1 SUB LSTN SZE JMP C6E LDA LSTF SZE JMP C6K JST DQ00 DO TERMINATION LDA D SUB K105 STA D D = D-5 LDA LSTF C6E STA LSTF LDA I SUB K105 JMP C6D I = I-5 - CONTINUE DO LOOP C6H LDA IFF STA A SNZ JMP C6J LLL 16 LDA OMI5 (A) = JMP INSTRUCTION JST OB00 OUTPUT OA CRA STA IFF IFF = 0 C6J STA A A = U LDA LIF STA LSTP SET TO NON-ZERO TO PREVENT DATA ERROR MSG JST OS00 OUTPUT STRING - RPL JMP C6A * C6K JST ER00 BCI 1,DT * * * * ***************** * *STATEMENT INPUT* * ***************** * SET UP PROCESSING OF NEXT SOURCE STATEMENT * PROCESS STATEMENT NUMBER IF PRESENT * WRAPUP ANY OUTSTANDING ARITHMETIC IF C7 CRA STA LSTN LSTN = 0 STA IFLG IFLG = 0 STA LIF LIF = 0 LDA L0 L = L (0) STA L LDA CI CHECK CARD COLUMN 1 LGR 8 FOR $ CHARACTER SUB K15 *($) SNZ JMP CCRD CONTROL CARD JST XN00 EXAMINE NEXT CHAR SZE JMP C71 JST IS00 INPUT STATEMENT = LDA A STA LSTN LSTN = A STA LSTP C71 LDA IFF CHECK FOR IFF=0 LDA IFF IF IFF = 0, SNZ JMP C7B GO TO C7B SUB LSTN IF = LSTN SZE JMP C7C C7A STA IFF IFF = 0 C7B JST C7LT LINE TEST JMP C8 C7C LDA IFF IFF = A STA A LRL 32 LDA K201 (A) = JMP INSTRUCTION JST OB00 OUTPUT OA CRA JMP C7A GO TO C7A C7LT DAC ** LINE TEST LDA CI+2 CI = BLANK ANA K116 LIST LINE ADD K8 RETURN STA CI+2 LDA TC SUB HC2 IF TC : SPECIAL SZE JMP C7LU JST LIST JMP* C7LT C7LU JST ER00 CONSTRUCTION ERROR BCI 1,SC STATEMENT NO. ON A CONTINUATION CARD * * * * ************************ * *CONTROL CARD PROCESSOR* * ************************ CCRD JST FS00 FLUSH BUFFER IF NECESSARY JST LIST LIST CARD LDA CI WORD CONTAINING COLUMN 1 LGL 12 SNZ LDA CCRK ='030000 (EOJ CODE = 3) LGR 6 TRUNCATE TO A DIGIT STA OCI LDA K106 =6 STA OCNT SET BUFFER WORD COUNT TO 3 JST FS00 FLUSH BUFFER LDA CI LGL 12 CHECK COLUMN 1 FOR CONTROL CODE 0 SZE JMP ER20 SKIP TO NEXT CARD (NOT CONTROL CARD) CALL F4$END CLOSE-OUT I/0 DEVICES AND STOP JMP A0 RESTART NEW COMPILATION CCRK OCT 030000 EOJ CONTROL CODE * * **************** * *STATEMENT SCAN* * **************** * DETERMINE THE CLASS OF THE STATEMENT * IF AN = IS FOUND WITH A FOLLOWING , * THE STATEMENT IS A DO * IF NO FOLLOWING COMMA, THE PAREN FLAG * IS TESTED, IF NO PARENS, THE STATEMENT * IS ARITHMETIC ASSIGNMENT * IF PARENS WERE DETECTED AND THE FIRST * NAME IS AN ARRAY, THE STATEMENT IS * ARITHMETIC ASSIGNMENT * OTHERWISE, IT IS A STATEMENT FUNCTION * IF NO = IS FOUND, THE STATEMENT IS * PROCESSED FURTHER IN STATEMENT ID C8T1 PZE 0 C8 LDA CC SAVE CC STA C8X9 LDA K101 STA C8T1 T (1) = 1 CRA STA ICSW ICSW = SIR C8A JST CH00 INPUT CHARACTER C8B LDA TC IF TC = ) SUB K4 SZE JMP C8C JST CH00 INPUT CHAR C8B2 LDA DFL IF DFL NOT ZERO SZE JMP C8B GO TO C8B C8B4 LDA C8X9 RESTORE CC STA CC LDA K101 IPL STA ICSW ICSW = IPL JMP A9 GO TO STATEMENT ID C8C LDA TC IF TC NOT (, SUB K17 SZE JMP C8D GO TO C8D LDA C8T1 T1 = T1 - 1 SUB K101 STA C8T1 C8C4 SZE IF T1 = 0 JMP C8B4 JST DN00 INPUT DNA JMP C8B2 GO TO C8B2 C8D LDA TC IF TC = , CAS K134 ='17 ('FINISHED' CODE FOR COMMA) JMP *+2 JMP C8D2 TC = COMMA SUB K5 SZE JMP C8E C8D2 LDA C8T1 GO TO C8C4, JMP C8C4 C8E LDA TC ELSE, IF TC = '/' SUB K9 SNZ JMP C8B4 GO TO C8B4 LDA TC SUB K18 IF NOT = , SZE JMP C8A GO TO C8A LDA K107 INPUT 7 CHARACTERS JST IA00 LDA C8X9 RESTORE CC STA CC LDA K101 IPL STA ICSW ICSW = IPL LDA TC SUB K5 IF TC NOT, SZE JMP C8G GO TO C8G LDA K102 ELSE, INPUT 2 CHARS JST IA00 LDA IBUF IF (A) = 'DO' SUB K19 SNZ JMP *+3 JST ER00 BCI 1,CM COMMA OUTSIDE PARENTHESES, NOT IN DO STMNT, LDA K104 JST NP00 FIRST NON-SPEC CHECK JMP C9 GO TO DO C8G LDA C8T1 1 IF NO ( TO LEFT OF EQUALS SZE JMP G2 ARITHMETIC ASSIGNMENT STATEMENT JST SY00 INPUT SYMBOL LDA C8X9 STA CC RESTORE CC LDA IU IF IU = SUBR SUB K103 SZE JMP G1 GO TO ARITH ST. FUNCT, JMP G2 OTHERWISE = ASSIGNMENT STATEMENT C8X9 PZE 0 * * TAPE 2 OF 5 - END MOR