* TAPE 3 OF 5 - BEGIN * * * ************************** * *STATEMENT IDENTIFICATION* * ************************** * READ FOUR CHARACTERS AND DETERMINE CORRECT ROUTINE * FOR PROCESSING, THEN CHECK SPELLING ON REST A9T1 PZE 0 A9T2 PZE 0 A9T3 PZE 0 A9 LDA K104 JST IA00 INPUT (4) CHARS LDA IBUF STA NAMF NAMF = IBUF LDA IBUF+1 STA NAMF+1 LDA A9Z9 INITIALIZE INDEX FOR LOOP STA XR THROUGH THE STATEMENT NAMES A9A LDA NAMF SUB A9X1+30,1 SZE JMP A9F READ IN REST OF LDA NAMF+1 CHECK REST OF SPELLING FOR SUB A9X2+30,1 SZE A MATCH ON 4 CHARACTERS JMP A9F NOT FOUND LDA A9X4+30,1 ANA K133 STA A9T1 T1 = NUMBER OF REMAINING CHARACTERS LDA A9X3+30,1 LEFT TO CHECK LRL 13 IAB LGR 3 STA A9T2 T2 = ADDRESS OF ROUTINE IAB JST NP00 FIRST NON-SPECIFIC. CHECK -(A) = A9B LDA A9T1 HIERARCHY CODE SZE JMP A9C MUST CHECK MORE CHARACTERS JMP* A9T2 FINISHED CHARACTER CHECK, EXIT TO * SPECIFIC ANALYZER. A9C SUB K106 SPL JMP A9E STA A9T1 LDA K106 REMAINING SPELLING 1S CHECKED. A9D STA A9T3 JST IA00 SUB A9T3 SNZ JMP A9B JST ER00 BCI 1,SP STATEMENT NAME MISSPELLED A9E ADD K106 IMA A9T1 CRA IMA A9T1 JMP A9D A9F IRS XR LOOP CONTROL FOR STATEMENT NAMES. JMP A9A MORE NAMES - CONTINUE LOOP LDA TC SUB CRET SZE JMP A9G LDA LSTN TC = C/R SNZ JMP C7 AND LSTN = 0 - INPUT NEW STATEMENT A9G JST ER00 BCI 1,ID UNRECOGNIZED STATEMENT A9X1 BCI 10,INREDOCOLOFUSUBLEXDI BCI 10,COEQGOCARECOFOIFWRRE BCI 7,BAENREENASSTPA BCI 2,DATR BCI 1,PR A9X2 BCI 10,TEALUBMPGINCBROCTEME BCI 10,MMUITOLLTUNTRM( ITAD BCI 3,CKDFWI OCT 142215 D, C/R BCI 3,SIOPUS BCI 2,TAAC BCI 1,IN A9X3 DAC A3 DAC A4 DAC A5 DAC A6 DAC A7 DAC R1 DAC R2 DAC R3 DAC B2 DAC B3 DAC B4 DAC B5 DAC* R7 DAC* R8 DAC* R9 DAC* CONT DAC* V2 DAC* V3 DAC* V4 DAC* V5 DAC* V6 DAC* V7 DAC* V8 DAC W5+'20000 DAC* W3 DAC* W7 DAC* W8 DAC W4,1 DAC* TRAC+'20000,1 TRACE STATEMENT DAC* V10 * * ****************************** * *CONTINUE STATEMENT PROCESS0R* * ****************************** CONT LDA LSTP ACCOUNTS FOR POSSIBLE PATH ERROR ADD LSTN ACCOUNTS FOR POSSIBLE PATH ERROR STA LSTP ACCOUNTS FOR POSSIBLE PATH ERROR JMP C6 * *-------------THE FOLLOWING TABLE IS USED BY STATEMENT ID *-------------(RIGHT 6 BITS) AND OUTPUT ITEM, A9X4 OCT 000003 (00) OCT 030100 (01) + (A$--) OCT 032313 (02) - (S$--) OCT 031503 (03) * (M$--) OCT 030403 (04) / (D$--) OCT 000004 (05) .NOT. OCT 000006 (06) .AND. OCT 031405 (07) .OR. (L$-, OCT 000004 (10) .LT. OCT 000005 (11) .LE. OCT 000002 (12) .EQ. OCT 000007 (13) .GE. OCT 000000 (14) .GT. OCT 000000 (15) .NE. OCT 031003 (16) = (H$--) OCT 000005 (17) , OCT 030503 (20) 'E' (E$--) OCT 031600 (21) 'C' NC$--) OCT 000001 (22) 'A' OCT 000000 (23) OCT 000005 (24) 'X' OCT 000003 (25) 'H' OCT 000002 (26) 'L' OCT 000000 (27) 'I' OCT 000002 (30) 'T' OCT 031400 (31) 'F' (L$--) OCT 000001 (32) 'Q' OCT 000000 OCT 000001 OCT 000001 A9Z9 DAC* -30,1 NO. OF ITEMS IN STMNT NAME TABLE * * * ********************** * *FIRST NON-SPEC CHECK* * ********************** * AT FIRST SHIFT IN LEVEL FROM ZERO, WRAP-UP * SPECIFICATION STATEMENTS T0NP PZE 0 NPT0 EQU T0NP T2NP PZE 0 T1NP PZE 0 NP00 DAC ** STA NPT0 T0 = (A) LDA A STA T1NP T1 = A LDA NPT0 CAS K107 =7 JMP *+2 JMP NP10 TRACE STMNT. (MAY OCCUR ANYWHERE) CAS SPF T0 , G.R. SPF, GO TO NP30 JMP NP30 T0 = SPF, G0 TO NP25 JMP NP25 LDA TC IF TC = C/R SUB CRET GO TO NP10 SNZ JMP NP10 JST ER00 ELSE, ILLEGAL STATEMENT BCI 1,EX SPECIFICATION STATEMENT APPEARS AFTER * NP10 LDA LSTN SPECIFICATION STATEMENT CLEAN-UP STA A A = LSTN SNZ JMP NP16 IF ZERO, RETURN JST FA00 FETCH ASSIGNS LDA K103 STR-REL SUB AT SZE JMP NP20 LDA AF JST OS00 OUTPUT STRING RPL NP15 JST LO00 DEFINE LOCATION LDA NAMF SUB A9X1+16 SZE JST TRSE OUTPUT TRACE COUPLING NP16 LDA T1NP STA A JMP* NP00 NP20 JST NR00 NON-REL TEST JMP NP15 NP25 LDA LIF SZE JMP NP16 LDA LSTP IF LSTP + LSTN =0 ADD LSTN SZE JMP NP10 IRS LSTP JST ER00 'NO PATH' ERROR BCI 1,PH NO PATH LEADING TO THE STATEMENT NP30 LDA SPF IF SPF 0 0 SZE JMP NP37 NP32 LDA TC STA T2NP T2 = TC LDA RPL STA XST XST = RPL LDA BDF BLOCK DATA SUBPROGRAM FLAG SZE SKIP IF NOT BLOCK DATA SUBPROGRAM JMP C2 GO TO RELATE COMMON STA A SET LISTING FOR OCTAL ADDR. LDA OMI5 JMP INSTRUCTION STA DF SET LISTING FOR SYMBOLIC INSTR. JST OA00 OUTPUT ABSOLUTE JMP C2 GO TO RELATE COMMON NP35 LDA T2NP STA TC NP37 LDA T0NP STA SPF SPF = T0 SUB K104 SZE JMP NP10 NP40 STA A SET LISTING FOR OCTAL ADDR. LDA XST LOCATION OF INITIAL JUMP JST OS00 OUTPUT STRING LDA RPL STA XST XST = RPL JMP NP10 GO TO NP10 * * ***************** * *IF( PROCESSOR* * ***************** * ARITHMETIC IF ($1 $2 $3) * IF $2 NOT = $3, JZE $2 * IF $3 NOT = $1, JPL $3 * (IF $1 NOT = NEXT ST NO., JMP $1) LATER * LOGICAL IF * OUTPUT JZE 77777 (FOR STRINGING AROUND * IMBEDDED STATEMENT) V3 JST II00 INPUT ITEM SNZ JMP V310 IM=0 (POSSI8LE UNARY + OR -) LDA DFL SZE JMP V310 FIRST ITEM IN EXPRESSION 0.K. V308 JST ER00 ERROR.....IF(SENSE SWITCH,.ETC)..... BCI 1,IF ILLEGAL IF STATEMENT TYPE V310 CRA (A)=0 JST EX00 EXPRESSION EVALUATOR LDA K4 JST TS00 )-TEST CRA STA A SET A TO SPECIAL (IF) ENTRY IN DATA POOL STA 0 LDA MFL SET MODE OF EXPRESSION INTO SPECIAL (IF) LGL 9 STA DP,1 JST TRSE OUTPUT TRACE COUPLING (IF NECESSARY) LDA MFL CHECK MODE FLAG FOR LOGICAL SUB K103 SZE JMP V320 ARITHMETIC IF LDA LIF SZE JMP V308 STA AF SET ADDR OF SNZ AND JMP INSTR TO 00000 LDA OMJ2 =SNZ INSTR. JST OA00 OUTPUT ABSOLUTE LDA RPL SET LIF=CURRENT +DDR, (STRING BACK) STA LIF LDA OMI5 =JMP 0 INSTR. JST OA00 OUTPUT ABSOLUTE JST XN00 GO TO NEXT INPUT LINE JMP C8 GO TO STATEMENT SCAN * V320 SUB K102 CHECK FOR MODE = COMPLEX SNZ JMP V308 ERROR,...COMPLEX MODE EXPRESSION LDA V356 =-3 STA I V324 JST IS00 INPUT STATEMENT NUMBER JST STXI SET INDEX TO I LDA A STA T1V3+3,1 SAVE BRANCH ADDRESSES IRS I I=I+1 JMP V350 CHECK FOR TERMINAL COMMA LDA T3V3 CAS T2V3 CHECK FOR ADDR-2 = ADDR-3 JMP *+2 JMP V330 ADDR-2 = ADDR-3 CRA STA A LDA OMJ2 =SNZ INSTR. STA DF JST OA00 OUTPUT ABSOLUTE LDA T2V3 JST V360 OUTPUT A JMP(ADDR-2) INSTR. LDA T3V3 V330 CAS T1V3 CHECK FOR ADDR-3 = ADDR-2 JMP *+2 JMP V340 ADDR-3 = ADDR-1 CRA STA A LDA OMJ3 =SMI INSTR. JST OA00 OUTPUT ABSOLUTE LDA T3V3 JST V360 OUTPUT A JMP (ADDR-3) INSTR. V340 LDA T1V3 STA IFF SET IFF ' ADDR-1 JMP C5 GO TO ILL-TERM * V350 LDA K5 JST TS00 COMMA TEST JMP V324 INPUT NEXT STATEMENT NO. * V356 OCT 177775 -3 * *---------------SUBROUTINE TO OUTPUT A RELATIVE JMP V360 DAC ** STA A SET ADDR. OF JUMP REF. TO A CRA IAB SET (B) = 0 LDA OMI5 SET (A) = JMP INSTR. JST OB00 OUTPUT OA JMP* V360 EXIT * T1V3 *** ** ADDR-1 T2V3 *** ** ADDR-2 T3V3 *** ** ADDR-3 * * ******* * *GO TO* * ******* * CHECK FOR NORMAL (R740), COMPUTED (R710) OR * ASSIGNED (R730). INPUT BRANCH LIST USED BY BOTH * R710 AND R730 FOR STATEMENT NO. LIST. * * R7 JST XN00 EXAMINE NEXT CHAR SZE JMP R78 GO TO TEST DFL JST IS00 INPUT STMNT = LDA A (GO TO 20) STA IFF IFF = A JMP C5 G0 TO ILLTERM R78 LDA DFL SZE JMP R7D JST IR00 GO TO I (10, 20, 30} LRL 32 LDA K206 OUTPUT JMP* INSTRUCTION JST OB00 OUTPUT OA LDA K134 JST TS00 , TEST JST IB00 INPUT BRANCH LIST JMP B6 GO TO JUMP R7D JST IB00 INPUT BRANCH LIST GO TO (10,11,12), I LDA K134 JST TS00 , TEST JST IR00 INPUT INT VAR LRL 32 LDA K200 OUTPUT LDA JST OB00 OUTPUT OA CRA STA A STA AF CAUSE OCTAL ADDRESS IN LISTING LDA K75 JST OA00 OUTPUT ABS (STA 0) - INDEX LOAD LDA RPL STA AF CAUSE RPL T0 BE IN LISTING LDA K207 JST OR00 OUTPUT RELATIVE (JMP RPL,1) LDA L0 R7F SUB K101 STA I I = L (0) JST STXI LDA DP,1 STA A JST STXA SNZ JMP B6 FINISHED LOOPING ON LIST LLL 16 LDA K201 OUTPUT JMP INSTRUCTIONS JST OB00 OUTPUT OA (JMP 0) LDA I JMP R7F * ******************* * *INPUT BRANCH LIST* * ******************* * INPUT STATEMENT NO. LISTS FOR GO TO PROCESSOR IB00 DAC ** LDA L0 SUB K101 STA I I = L0-1 JST CH00 INPUT CHAR LDA K17 JST TS00 (- TEST IB10 JST IS00 INPUT STMNT = JST STXI LDA A STA DP,1 SET POINTER OF ST. N0. INTO TRIAD TABLE * AREA LDA I DP (J) = A SUB K101 STA I I = I-1 LDA TC IF TC = , GO TO IB10 SUB K5 SNZ JMP IB10 CONTINUE LOOP CRA STA DP-1,1 SET END FLAG INTO TABLE JST IP00 )- INPUT OPEN JMP* IB00 EXIT K75 STA 0 * * * ******** * *ASSIGN* * ******** * CHECK TO SEE THAT 'TO' IS INCLUDED PROPERLY W3 JST IS00 INPUT STMNT = LDA A STA T1W3 SAVE A LDA TC SUB K34 CHECK FOR T0 SZE JMP W305 CLEAR A FOR OUTPUT REL STA A CAUSE OCTAL ADDRESS IN LIST JST CH00 INPUT CHAR LDA TC SUB K35 SNZ JMP *+3 W305 JST ER00 ERROR BCI 1,TO GO TO IN ASSIGN STATEMENT LDA RPL ADD K102 STA AF OUTPUT REL LDA *+2 LDA K200 OUTPUT LDA *+2 JST OR00 OUTPUT REL LDA RPL ADD K102 STA AF OUTPUT REL JMP *+2 LDA K201 JST OR00 OUTPUT OA LRL 32 LDA T1W3 STA A RESTORE A CRA JST OB00 OUTPUT DAC ST. NO. JST IR00 INPUT INTEGER VARIABLE LRL 32 LDA K202 OUTPUT STA INSTRUCTION JST OB00 OUTPUT OA JMP A1 GO TO C/R TEST T1W3 PZE ** TEMP STORE * * * ************************ * *DO STATEMENT PROCESSOR* * ************************ * STACK INFO IN DO TABLE. OUTPUT DO INITIAL * CODE C9T0 PZE ** C9 JST IS00 INPUT STATEMENT = JST NR00 NON-REL TEST LDA A STA C9T0 T0 = A JST UC00 UNINPUT COLUMN JST IR00 LDA C951 JST TS00 LDA C9T0 (A) = T0 IAB JST DP00 DO INPUT JST DS00 DO INITIALIZE JMP C5 GO TO ILLTERM C951 OCT 16 = * * * ********** * *END FILE* * ********** * *********** * *BACKSPACE* * *REWIND * * *********** V6 LDA K71 V6A STA NAMF+1 JST NF00 SET UP NAMF JST OI00 OUTPUT I/0 LINK JMP A1 GO TO C/R TEST V7 LDA K72 JMP V6A V8 LDA K73 JMP V6A K71 BCI 1,FN FN K72 BCI 1,DN K73 BCI 1,BN BN * * * ************** * *READ * * *WRITE * * *INPUT FORMAT* * ************** * LIST ELEMENT DATA AND IMPLIED DO CONTROL * STACKED IN TRIAD TABLE. PROCESSED BY * OUTPUT TRIAD ROUTINE, SPECIAL OPERATORS * ARE -I = DO INITIALIZATION * T = DO TERMINATION * Q = I/0 ARG TRANSFER T0V5 PZE ** V5 LDA K41 FSRN STA NAMF+1 JST XN00 EXAM NEXT CHAR SZE JMP V5A GENERAL READ LDA V5K4 JMP V10A CARD READ V4 LDA K40 NAWF = F$WN STA NAMF+1 V5A JST NF00 SET UP REMAINING NAME LDA D STA V5T1 JST CH00 INPUT CHARACTER LDA K17 ='250......( JST TS00 (-TEST JST OI00 OUTPUT I0 LINK LDA TC IF TC .NE. , SUB K134 ='17 (,) SZE G0 10 V5J JMP V5J JST V5X INPUT FORMAT V5B JST IP00 ) - INPUT OPERATOR LDA TC SUB CRET TEST FOR TC=C/R SZE JMP V5C N0, G0 TO V5C V5B2 LDA K42 YES. NAMF = ND STA NAMF+1 JST CN00 CALL NAME LDA V5T1 STA D JMP A1 G0 TO C/R TEST V5C JST UC00 V5C5 CRA STA IOF IOF = 0 V5D JST II00 INPUT ITEM SZE JMP V5E IF (A) NOT 0, GO TO V5E LDA K17 JST TS00 (-TEST CRA STA O2 O2 = 0 LDA IOF STA O1 01 = IOF LDA V5K1 = '27 STA P JST ET00 LDA L STA IOF IOF = L JMP V5D GO TO V5D V5E JST NC00 NON-CONSTANT TEST LDA IU IF IU NOT ARR SUB K103 SZE JMP V5H GO TO V5H LDA TC SUB K17 IF TC NOT -(, SZE JMP V5G GO TO V5G LDA D0 STA T0V5 T5 = D0 LDA K103 TCA JST EX00 EXPRESSION LDA T0V5 STA D0 D0 = T5 V5E5 LDA A STA O2 LDA D0 O2 = D0 STA O1 LDA V5K2 ='32 STA P JST ET00 ENTER TRIAD V5E7 LDA TC IF TC = COMMA SUB K134 GO T0 V5D SNZ JMP V5D LDA IOF I = IOF STA I SZE IF NOT ZERO, JMP V5F GO TO V5F JST OT00 OUTPUT TRIADS JMP V5B2 GO TO V5B2 V5F JST IP00 )-INPUT OPERATOR JST STXI LDA DP+1,1 STA IOF IOF = O1 (I) JMP V5E7 V5G JST KT00 K = = WDS/ITEM JMP V5E5 GO TO V5E5 V5H JST TV00 TAG VARIABLE LDA TC SUB K16X ='16 (=) SZE GO TO V5E5 JMP V5E5 ELSE, JST IT00 INTEGER TEST LDA IOF SNZ IF IOF = ZERO OR L JMP V5H7 SUB L SZE JMP *+3 ERROR V5H7 JST ER00 BCI 1,PR PARENTHESES MISSING IN DO STATEMENT JST DP00 DO INPUT LDA IOF STA I JST STXI LDA D STA DP,1 O2(IOF) = D STA O2 O2 = D LDA V5K3 ='30 STA P JST ET00 ENTER TRIAD 'T'. JMP V5F V5J CRA STA A A = 0 JST OA00 OUTPUT ABSOLUTE JMP V5B V5T1 PZE 0 V5K1 OCT 27 V5K2 OCT 32 V5K3 OCT 30 V5K4 BCI 1,R3 V5K5 BCI 1,W4 V5X DAC ** INPUT FORMAT JST XN00 EXAM NEXT CHARACTER SZE JMP V5X5 GO TO INPUT ARRAY NAME JST IS00 INPUT STMNT NO. V5X2 LRL 32 OUTPUT DAC A JST OB00 OUTPUT 0A JMP* V5X RETURN V5X5 JST NA00 INPUT NAME JST AT00 ARRAY TEST JMP V5X2 * PRINT V10 LDA V5K5 PRINTER V10A STA NAMF+1 JST NF00 SET UP REST 0F NAME JST CN00 CALL NAME JST V5X INPUT FORMAT LDA TC SUB K134 SZE SKIP IF COMMA JMP V5B2 LDA D STA V5T1 JMP V5C5 * * * ************************** * *FORMAT * * *INPUT FORMAT STRING * * *INPUT NUMERIC FORMAT STR* * *NON ZERO TEST STRING * * ************************** T0V2 PZE 0 T2V2 PZE 0 V2T0 EQU T0V2 V2T2 EQU T2V2 V2 LDA K17 JST OK00 OUTPUT RACK CRA STA T0V2 TO = 0 LDA LSTP IF LSTOP .NE. 0 SZE JMP V2K GO TO V2K V2A JST SI00 INPUT FORMAT STRING SZE JMP V2B V2A1 LDA TC SUB K12 IF TC NOT MINUS SZE JMP V2F GO TO V2F JST IN00 INPUT NUMERIC FORMAT STRING CRA STA TID TID = 0 V2B LDA TC IF TC .NE. P SUB K46 SZE JMP V2H GO TO V2H JST SI00 INPUT FORMAT STRING SZE JST NZ00 IF (A) .NE. 0 V2C LDA TC CAS K52 IF TC = D,E,F, OR G NOP JMP *+2 JMP V2DA CAS K53 JMP V2E5-2 NOP JST IN00 INPUT NUMERIC FORMAT STRING JST NZ00 NON-ZERO STRING TEST LDA K10 JST TS00 PERIOD TEST V2D JST IN00 INPUT NUMERIC FORMAT STRING V2DA LDA TC IF TC = ) SUB K4 SZE JMP V2E JST CH00 JST OK00 INPUT CHAR AND OUTPUT PACK LDA T0V2 IF F4 + ( Z ( SUB K101 GO TO V2E STA T0V2 SPL JMP V2N ELSE, JMP V2DA * GO TO C/R TEST V2E LDA TC IF TC =, SUB K5 SNZ JMP V2A GO TO V2A LDA K9 JST TS00 / TEST JMP V2A V2E5 JST SI00 INPUT FORMAT STRING SZE IF (A) NOT 0, JMP V2B GO TO V2B LDA DFL IF DFL .NE. ZERO, SZE JMP V2DA GO TO V2DA JMP V2A1 V2F LDA TC IF TC = H CAS K48 JMP *+2 JMP V2P GO TO V2P V2FB CAS K47 JMP *+2 JMP V2E5 CAS K17 IF TC = (, JMP *+2 JMP V2Q GO TO V2Q LDA TC IF TC .NE. A,I, OR L CAS K49 A JMP *+2 JMP V2G CAS K50 I JMP *+2 JMP V2G SUB K51 L SZE JMP V2C V2G JST IN00 INPUT NUMERIC FORMAT STRING JST NZ00 NON-ZERO STRING TEST JMP V2DA V2H JST NZ00 NON-ZERO STRING TEST LDA TC SUB K48 SZE JMP V2F V2J JST HS00 TRANSMIT HOLLERITH STRING JMP V2E5 GO T0 V2E5 V2K LDA LSTN IF LSTN = 0, SZE JMP *+3 JST ER00 ERR0R, NO PATH BCI 1,NF NO REFERENCE T0 FORMAT STATEMENT LDA RPL LIF = RPL STA LIF CRA STA A STA AF AOA STA DF LDA K201 = JMP 0 JST OA00 OUTPUT ABS JMP V2A GO T0 V2A * NZ00 DAC ** LDA TID SZE JMP* NZ00 NZ10 JST ER00 BCI 1,NZ NON-ZERO STRING TEST FAILED IN00 DAC ** JST SI00 (A) = 0 IS ERROR CONDITION SZE JMP* IN00 JMP NZ10 SI00 DAC ** CRA STA TID ID = T2 = 0 SI05 STA V2T2 JST CH00 INPUT CHAR JST OK00 OUTPUT PACK LDA TC SUB K60 ASC-2 ZERO CAS K124 JMP SI10 NOP SPL JMP SI10 STA TC LDA TID TID = 10*TID+TC ALS 3 ADD TID ADD TID ADD TC STA TID LDA K101 T2 =1 JMP SI05 SI10 LDA V2T2 (A) = ERROR CONDITION OR NOT JMP* SI00 V2M JST ER00 BCI 1,FR FORMAT STATEMENT ERROR V2N EQU A1 V2P LDA K101 STA ID ID = 1 JMP V2J GO T0 V2J V2Q LDA T0V2 AOA STA T0V2 SUB K103 SZE JMP V2A JMP V2M K46 OCT 320 0P K47 OCT 330 0X K48 EQU K14 0H K49 OCT 301 0A K51 OCT 314 0L K52 EQU K11 0D K53 OCT 307 0G K50 EQU K43 0I * * * ******* * *STOP * * *PAUSE* * ******* * PAUSE AND STOP CENERATE CALLS TO F$HT T1W7 PZE 0 T2W7 PZE 0 W7 LDA K55 STA T1W7 W7A LDA K74 STA NAMF+1 NAMF = F$HT JST NF00 SET-UP REMAINING CHAR 0F NAME JST XN00 EXAMINE NEXT CHAR LDA TC SUB CRET SNZ JMP W7C TC = C/R - NOTING FOLLOWING JST IV00 INPUT INTEGER/VARIA8LE LRL 32 LDA K200 OUTPUT LDA JST OB00 OUTPUT OA W7C JST CN00 CALL NAME CRA STA DF DF = 0 LDA T1W7 STA ID JST AI00 ASSIGN INTEGER CONSTANT CRA OUTPUT DAC JST OB00 OUTPUT OA OF ST/PA OR HT LDA T1W7 SUB K54 SNZ JMP C5 PA-NOT THE CASE LDA RPL STA AF OUTPUT JMP * CRA STA A CAUSE LISTING TO HAVE OCTAL ADDRESS LDA K201 JST OR00 OUTPUT RELATWE JMP B6 W8 LDA K54 JMP W7+1 K74 BCI 1,HT HT K54 BCI 1,PA PA K55 BCI 1,ST ST * * * - R8 CALL * GENERATES CALL DIRECTLY OR USES EXPRESSION TO * ANALYZE AN ARGUMENT LIST. R8 JST SY00 INPUT SYMBOL LDA IU SUB K101 =1 (SUB) SZE SKIP IF IU=SUBR, JST TG00 TAG SUB PROCRAM LDA TC SUB K17 ='250 ( ( ) SZE JMP *+3 G2B LDA K101 SET A=1 BEFORE EXPRESSION JMP G2A CRA IAB (B)=0 LDA OMI2 =JST INSTR, JST OB00 OUTPUT 0A JMP A1 CR TEST * ********************** * *ASSIGNMENT STATEMENT* * ********************** G2 LDA K104 JST NP00 FIRST NON-SPEC CHECK JST II00 INPUT ITEM LDA K102 SET A = 2 BEFORE EXPRESSION G2A TCA JST EX00 JMP A1 * * * ******** * *RETURN* * ******** * OPTIMIZES EXIT CODING FOR FUNCTIONS TO MINIMIZE * FETCHES OF THE FUNCTION VALUE. R9 LDA SBF A = SBF, STA A IF ZERO, GO TO ERROR SZE JMP *+3 JST ER00 BCI 1,RT RETURN NOT ALLOWED IN MAIN PROGRAM LDA SFF ELSE, IF SFF = 0, SNZ JMP R9C GO TO R9C CAS K101 IF SFF = 1, GO TO R98 JMP *+2 JMP R9B STA AF OUTPUT REL JMP TO 1ST RETN LRL 32 STA A SET A=0 TO OUTPUT OCTAL ADDR ON LISTING LDA K201 JMP R9A R9B IAB LDA RPL SFF = RPL STA SFF LDA K56 0UTPUT ITEM (F,A) JST OM00 R9C LRL 32 STA A SET FOR OCTAL ADDHESS IW LISTING STA AF SET RELATIVE ADDRESS TO ZERO LDA K206 JUMP I, 0 R9A JST OR00 OUTPUT REL JMP B6 EXIT K56 OCT 31 P CODE FOR 'F' (FETCH) * * * ******************** * *STATEMENT FUNCTION* * ******************** * OLD ASSIGN VALUES ARE SAVED IN SFTB AND ARE * RESTORED AT COMPLETION. G1T0 PZE 0 G1T1 PZE 0 G1 LDA K103 (A) = 3 JST NP00 FIRST NON-SPEC CHECK JST SY00 INPUT SYMBOL JST LO00 DEFINE LOCATION LDA K103 STA I JST GE00 GENERATE SUBPROGRAM ENTRANCE LDA I STA G1T1 T1 = I LDA K16X '=' TEST JST TS00 JST II00 INPUT ITEM CRA JST EX00 EXPRESSION LDA G1T1 STA I I = T1 IRS TCF TCF = TCF+1 G1A JST STXI LDA SFTB+2,1 STA A LDA SFTB+0,1 IAB JST STXA SET R TO A IAB STA DP,1 JST STXI SET R TO I LDA SFTB+1,1 IAB JST STXA SET R TO A IAB STA DP+1,1 LDA I SUB K103 I = I-3 = 0 STA I SUB K103 SZE JMP G1A NO, GO TO G1A LDA T1NP STA A LLL 16 LDA OMJ1 JST OB00 JST TG00 TAG SUBPROGRAM JMP A1 GO TO C/R TEST * - W5 END * *************** * *END PROC6SSOR* * *************** * FIRST CHECK SUBPROGRAMS FOR CORRECT USAGE, THEN * GENERATE MAP AND STRING BACK VARIABLES * AND CONSTANTS. T1W5 PZE W5 LDA BDF IF BLOCK DATA, SZE JMP W5K GO TO W5K LDA SBF IF SBF NOT ZERO STA A INDICATES SUBROUTINES SZE OR FUNCTION, JMP W5M GO TO W5M W5B CRA STA A A = J=0 JMP W5H W5D JST FA00 FETCH ASSIGNS JST STXA LDA NT SZE IF NT=L (CONSTANT) JMP W5O GO TO W5O LDA IU SUB K101 IF IU=1 SZE INDICATES VARIABLE, JMP W5T GO TO W5T W5F LDA RPL SAVE RPL STA T1W5 RPL=-AF (INHIBIT LISTING) LDA AF SSM STA RPL CRA JST OR00 OUTPUT REL LDA T1W5 RESTORE RPL STA RPL W5H LDA A A=A+5 ADD K105 STA A SUB ABAR IF A=ABAR, (DONE) SUB K105 SZE JMP W5D ELSE, GO TO W5D W5J JST FS00 FLUSH BUFFER LDA SBF SZE LDA W5Z1 ERA W5Z2 STA OCI LDA SBF SZE LDA W5Z3 STA OCI+1 LDA K106 STA OCNT JST FS00 JMP A051 GO TO INITIALIZE W5K LDA RPL IF RPL NOT ZERO, SNZ JMP W5J JST ER00 ERROR-CODE GENERATED BCI 1,BD IN A BLOCK DATA SUBPROGRAM W5M JST FA00 FETCH ASSIGNS LDA SFF IF FUNCTION, SZE JMP W5N GO TO W5N JST NU00 NO USE TEST JST STXA LDA DP,1 IF NO ERROR, SSM NT(A)=1 STA DP,1 JMP W5B GO T0 W5B W5N LDA IU SUB K102 IU MUST BE VAR/CON, SNZ ELSE, JMP W5B JST ER00 ERROR-FUNCTION BCI 1,FD NAME NOT DEFINED BY AN ARITHM, STATEMENT W5O LDA IU IF IU=VAR/CON SUB K102 SZE JMP W5H LDA AT AND AT = STR/REL SUB K103 A "STRING" REQ'D. SZE JMP W5H W5P LDA D0 IF D0 IS 4, THE SUB K104 CONSTANT IS COMPLEX, SZE OTHERWISE JMP W5Q GO TO W5Q LDA AF JST OS00 OUTPUT STRING JST STXA LDA DP+2,1 OUTPUT 4 WORDS JST W5X OF CONSTANT LDA DP+3,1 JST W5X LDA NT SNZ JMP W5S LDA A INCREMENT A ADD K105 STA A JST STXA JMP W5S W5Q LDA AF JST OS00 OUTPUT STRING JST STXA LDA D0 IF D0=1, SUB K101 INDICATES INTEGER, SNZ JMP W5R GO TO W5R W5S LDA DP+2,1 OUTPUT TWO WORDS JST W5X FLOATING POINT CONSTANT LDA DP+3,1 JST W5X LDA D0 IF DOUBLE PRECISION, SUB K103 SZE JMP W5H W5R LDA DP+4,1 OUTPUT THE 3RD WORD JST W5X JMP W5H GO TO W5H W5T LDA AT CAS K103 JMP W5F STRONG VARIABLE (IU = NON 0) JMP W5T5 CAS K102 TEST FOR STG ABS ADDRESS OCT 17400 JMP *+2 JMP W5F NO LDA DP+4,1 TEST FOR PREFIX G ANA *-4 SUB *-5 SZE JMP W5F STRONG VARIABLE (IU = NON 0) W5T5 LDA IU SZE JMP W5P JST ER00 BCI 1,US W5X DAC ** LRL 16 STA DF IAB JST OA00 OUTPUT ABS JST STXA REST "A" JMP* W5X EXIT W5Z1 EQU K100 000377 W5Z2 EQU K122 040000 W5Z3 EQU K116 177400 * * * * ************************ * *INPUT CHAR/OUTPUT PACK* * ************************ PO00 DAC ** JST CH00 INPUT CHAR JST OK00 OUTPUT PACK JMP* PO00 RETURN * ************************ * *TRANS HOLLERITH STRING* * ************************ * FORM HOLLERITH STRING, CHARACTER COUNT IN ID 0N * ENTRY. C/R WILL ALSO TERMINATE STRING. HS00 DAC ** HS10 JST IC00 INPUT 1 CHARACTER CAS CRET CHECK FOR CHAR = C/R JMP *+2 JMP HS15 HOLLERITH STRING EXTENDS PAST END 0F CARD JST OK00 OUTPUT PACK THE CHARACTER LDA ID SUB K101 REDUCE CHARACTER COUNT BY 1 STA ID SZE JMP HS10 INPUT MORE CHARACTERS JMP* HS00 HS15 JST ER00 BCI 1,HS HOLLERITH STRING EXTENDS OVER STATEMENT * * * ********** * *DO INPUT* * ********** * SET UP DO TABLE ENTRIES. DP00 DAC ** LDA D D = D+5 ADD K105 IFLG = NON-ZERO STA IFLG STA D ADD DO I = D0+D STA I JST STXI LDA A DP (1-4) = (B) STA DP-2,1 DP (1-2) = A IAB STA DP-4,1 JST IV00 INPUT INT VAR/CON LDA K134 = , JST TS00 COMMA TEST JST STXI LDA A STA DP,1 DP(I) = INITIAL VALUE POINTER JST IV00 INPUT INT VAR/CON JST STXI LDA A STA DP-1,1 DP (I-1) = A - FINAL VALUE POINTER LDA TC SUB K134 = , SZE IF THIRD TERM JMP DP20 JST IV00 READ AND ASSIGN, DP10 JST STXI LDA A STA DP-3,1 DP(I-3) = INCREMENT POINTER CRA STA IFLG CLEAR IFLAG JMP* DP00 EXIT DP20 LDA K101 STA ID THIRD TERM = 1 JST AI00 ASSIGN CONSTANT JMP DP10 * *************** * *DO INITIALIZE* * *************** * GENERATE DO INITIALIZATION CODE. DS00 DAC ** JST STXI ESTABLISH I LDA DP,1 A = DP (I) STA A LDA K200 JST DS20 LOAD - LDA INITIAL VALUE LDA DP-2,1 STA A A = DP (I-2) LDA RPL STA DP,1 SET RETURN ADDRESS INTO DP(I) LDA K202 JST DS20 STORE - STA VARIABLE NAME JMP* DS00 * OUTPUT OA SUBROUTINE DS20 DAC ** IAB LLL 16 SET B = 0 JST OB00 OUTPUT OA JST STXI RESTORE I JMP* DS20 RETURN * DS90 PZE 0 * * **************** * *DO TERMINATION* * **************** * GENERATE DO TERMINATION CODE. DQ00 DAC ** JST STXI LDA DP-2,1 STA A LDA K200 JST DS20 OUTPUT LDA VARIABLE NAME LDA DP-3,1 STA A LDA K203 JST DS20 OUTPUT ADD INCREMENT LDA DP-1,1 STA A LDA OMK9 JST DS20 OUTPUT CAS FINAL VALUE CRA STA A LDA RPL ADD K103 STA AF LDA DP,1 STA DS90 LDA OMI5 JUMP *+3 JST OR00 OUTPUT REL LDA DS90 STA AF LDA OMI5 JMP RPL (SAVED) - POINTS TO 'STA' INST. JST OR00 OUTPUT REL LDA OMI5 OUTPUT JMP RPL (SAVED) JST OR00 OUTPUT REL JMP* DQ00 * ************ * *EXPRESSION* * ************ * THE RESULTANT OUTPUT IS A BUILT UP AOIN * TABLE THAT IS FURTHER PROCESSED BY SCAN. T0EX PZE 0 EXT0 EQU T0EX T1EX PZE 0 T2EX PZE 0 T3EX PZE 0 T5EX PZE 0 T6EX PZE 0 EXT7 PZE 0 T9EX PZE 0 EX00 DAC ** STA F F = (A) LDA A SAVE POINTER TO FIRST VARIABLE STA TRFA FOR LATER POSSIBLE TRACING LDA D I = D+D0+10 ADD DO ADD K125 =8 STA I JST EX99 DATA POOL CHECK JST STXI CRA STA EXT0 T0 = 0 STA B B = 0 STA EXT7 T7 = 0 ADD EX92+12 LGL 9 O(1-2) = '=' STA DP-1,1 0 (I) = 0 CMA STA IFLG IFLM NOT 0 LDA L0 STA DP-2,1 O(I-2) = L0 EX10 JST STXI CRA STA T1EX T1 = 0 STA DP,1 AOIN(I) = T(1) = 0 STA DP+1,1 LDA IM IF IM NOT ZERO, SZE JMP EX50 GO TO EX50 LDA K106 TCA STA 0 * PERFORM TABLE SEARCH EX11 LDA TC GO TO ROUTINE ACCORDING SUB EX90+6,1 TO TC. SNZ IF NO MATCH, ERROR JMP EXI1 IRS XR JMP EX11 JST STXI LDA LIBF SPECIAL LIBRARY FLAG SZE JMP EX39 JMP EX95 ERROR CONDITION EXI1 LDA EX91+6,1 STA 0 JMP 0,1 PROCESS LEADING OPERATOR * SPECIAL OPERATOR FLAG SET WHEN COMPILING THE FORTRAN * LIBRARY IN WHICH CASE THE OPERATIONS ( A= ) AND * ( =A ) ARE REQUIRED, THIS LOGIC WILL ALLOW THESE * TO BE PROCESSED WITHOUT GIVING AN ERROR MESSAGE IF THE * SPECIAL LIBRARY FLAG, (LIBF) IS SET TO NON-ZERO, * EX12 LDA B TC = ( ADD K109 B = B+16 STA B SXF = NON-ZERO STA SXF EX14 JST II00 INPUT ITEM JST STXI JMP EX10 GO TO EX10 EX16 JST STXI TC = * LDA TC LGL 9 OI (I-2) = *, B+13 ADD B ADD K129 ERA DP-1,1 SSP SNZ JMP *+3 JST ER00 NO, CONSTR ERROR BCI 1,PW * NOT PRECEDED BY ANOTHER * LDA K109 (E = '20) LGL 9 IMA DP-1,1 ANA K118 ='777 ADD K101 ERA DP-1,1 CHAJNE * TO ** STA DP-1,1 JMP EX14 GO TO EX14 EX18 LDA K102 =2 STA TC SET TC TO - LDA K125 =8 STA T1EX T1 = 8 JST STXI LDA DP-1,1 ANA K118 SUB B 8 .GT. I (I-2) -B SUB T1EX SPL JMP *+3 EX19 JST ER00 NO, ERROR BCI 1,NT LOGICAL .NOT. NOT A UNARY OPERATOR EX20 LDA T0EX YES SZE T (0) = 0 JMP EX34 EX22 LDA B YES, ADD F B + + (5) .GT. 0 SPL NO, ERROR JMP EX96 EX24 JST STXI LDA TC LGL 9 ADD T1EX ADD B STA DP+1,1 OI(I) = TC , T1+B JST EX99 DATA POOL CHECK JMP EX14 EX26 JST STXI LDA DP-1,1 ANA K118 IF I (I-2) .LT. B CAS B JMP EX97 ERROR-----MULTIPLE + OR - SIGNS NOP EX30 LDA K131 SET INDEX TO STA 0 SEARCH OPERATOR TABLE FOR TRAILING EX31 LDA EX92+14,1 OPERATOR AFTER HAVING ENCOUNTERED AN SUB TC ITEM 0R A NEGATE, SZE JMP EX32 LDA EX93+14,1 STA *+3 JST STXI JMP* *+1 DAC ** EX32 IRS XR CONTROL OPERATOR LOOP JMP EX31 CONTINUE * * * TAPE 3 OF 5 - END MOR