ASMB,Q,C HED ** 16K FTN4 COMPILER (FTN4:PASS1) ** NAM FTN4,3 92060-16092 REV.2026 800423 * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * REPRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * NAME: FTN4, PART OF FTN4, PART OF FTN4 COMPILER. * * SOURCE: PART OF 92060-18092 * * RELOC: PART OF 92060-16092 * * PGMR: BILL GIBBONS. * *************************************************************** * * EXT'S WITH A LEADING 'F.' ARE VARIABLES OR JUMP TARGETS * * THE COLUMN THE EXT STARTS IN DEFINES THE SUBROUTINE IT IS * DEFINED IN AS FOLLOWS * 2 -- OA.F (WRITE PASS FILE ROUTINES) * 3 -- NEX.F (STATEMEXTS THAT DON'T CONTAIN EXPRESSIONS) * 4 -- FA.F (THE ASSIGNMEXT TABLE ROUTINES) * 5 -- EX.F (STATEMEXTS USING THE EXPRESSION EVALUATOR) * 6 -- IC.F (THE CHARACTER INPUT ROUTINES) * 7 -- IDN.F (THE TOKEN INPUT ROUTINES) * 8 -- FTN4 ( THE MAIN) ENT F..DP BASE OF SYMBOL TABLE EXT F.A ASSIGNMEXT TABLE ADDRESS (CURRENT ENTRY) EXT F.ASS ASSIGNMEXT STATEMEXT PROCESSOR EXT F.ABT ABORT COMPILE EXTRY ENT F.ACC TEMP ACCUMULATOR FLAG ENT F.ARF NO. OF SUB. FUN. ARGUMEXTS EXT F.ASP ASSIGN STMT. PROCESSOR EXT F.AT ADDRESS TYPE OF CURREXT F.A ENT F.AT. SUBSCRIPT INFO FLAG ENT F.BGN RETURN FROM F4.0 EXT F.BSP BACKSPACE STMT. PROCESSOR ENT F.BUF A BUFFER EXT F.CAL CALL STATEMEXT PROCESSOR EXT F.CC CHARACTER COUNT ENT F.CCW FTN OPTION WORD EXT F.CON CONTINUE STMT. PROCESSOR ENT F.CSZ COMMON SIZE ENT F.D DO TABLE POINTER ENT F.D.T ADDRESS OF '.' FUN. TABLE EXT F.D0 ARRAY ELEMEXT SIZE EXT F.DCF DIM, COM FLAG ENT F.DEF DATA EXISTS FLAG ENT F.DNB DEF OF NBUF (NAM RECORD) ENT F.DO LWAM - END OF DO TABLE EXT F.DOP DO STATEMEXT PROCESSOR EXT F.EFP ENDFILE STMT. PROCESSOR ENT F.EMA F.A OF EMA EXT ENTRY, WINDOW SIZE ENT F.EMS EMA SIZE DOUBLE WORD, (INTERNAL FORMAT) ENT F.END END FLAG ENT F.EQF EQUIVALENCE FLAG ENT F.ER0 'RX' OF ERRX LIB ERROR ROUTINE EXT F.FMT FORMAT STMT. PROCESSOR EXT F.GOP GO TO STATEMEXT PROCESSOR EXT F.IDI INPUT ARRAY NON-NUMERIC ENT F.IFF IF FLAG EXT F.IFP IF STATEMEXT PROCESSOR ENT F.INT TEMP VARIABLE ARRAY ENT F.IOF INDICATOR FOR I/O INDEX EVALUATOR EXT F.IU CURREXT ITEM USAGE (DUM., RELATIVE, ECT.) ENT F.L # WORDS ON STACK 2 EXT F.LFF LOCICAL IF FLAG ENT F.LO END OF ASSIGNMEXT TABLE+1 ENT F.LSF EXPECT FIRST STATEMEXT FLAG ENT F.LSN F.A OF LAST STATEMEXT NUMBER ENT F.LSP LAST OPERATION FLAG ENT F.MFL TYPE STMT. MODE FLAG EXT F.NCR NO CROSS REF FLAG ENT F.NEQ # OF EQUIVALENCE GROUPS EXT F.NT NAME TAG 0= VAR, 1=CONSTANT. EXT F.NXN NO INPUT FLAG ENT F.OPF OUTPUT PACK FLAG EXT F.PAK PACK BUFFER WORD EXT F.PAP PAUSE STMT. PROCESSOR EXT F.RDP READ STATEMEXT PROCESSOR ENT F.RPL PROGRAM LOCATION COUNTER EXT F.RTN RETURN STMT. PROCESSOR EXT F.RWP REWIND STMT. PROCESSOR ENT F.S02 RETURN FORM RCOM F.1 ENT F.S03 LOAD F.1 AND PASS CONTROL ENT F.S1B BOTTOM OF STACK 1 ENT F.S1T TOP OF STACK 1 ENT F.S2T TOP OF STACK 2 ENT F.SBF 0= MAIN, ELSE SUBROUTINE ENT F.SCC SAVE F.CC ENT F.SEE RETURN FROM F4.1 ENT F.SEG LOAD A NEW SEGMENT ENT F.SFF SUBROUTINE/FUNCTION FLAG 0/1 EXT F.SFP STATEMEXT FUNCTION PROCESSOR ENT F.SID STATEMEXT ID PHASE FLAG ENT F.SLF STATEMEXT LEVEL FLAG ENT F.SPF SPECIFICATION FLAG SET TO CURREXT STMT. LEVEL ENT F.SPS STATEMEXT PROCESSOR SWITCH ENT F.STA FLAG THAT IS ZERO UNTIL THE FTN STATEMEXT IS READ ENT F.STB STRING BACK JUMP FLAG EXT F.STP STOP STMT. PROCESSOR ENT F.STS TO STATEMEXT SCAN ENT F.SXF COMPLEX CONSTANT FLAG ENT F.T # WORDS ON STACK 1 ENT F.TAC ? EXT F.TC NEXT CHARACTER EXT F.TRM TERMINATE COMPILE ENT F.TYP TYPE STMT FLAG EXT F.WRP WRITE STATEMEXT PROCESSOR * * EXT'S WITH A TRAILING '.F' ARE SUBROUTINES * ENT AA.F ASSIGN ADDRESS SUB. ENT CRT.F TEST FOR CARRAGE RETURN EXT CSN.F CHECK STATEMENT # TYPE. EXT DL.F DEFINE LOCATION SUBROUTINE EXT ER.F ERROR PRINT SUBROUTINE EXT EXN.F EXAMINE NEXT CHARACTER ENT FNS.F FIRST NOT SPEC. STMEXT CHECK EXT IA.F INPUT (A) CHARACTERS SUBROUTINE EXT ICH.F GET NEXT NON BLANK CHAR. AND TYPE IT EXT IDN.F INPUT DO NOT ASSIGN (GET NEXT OPERAND) EXT IFT.F IF GOTO COMPLETION EXT ISN.F INPUT STATEMEXT NUMBER EXT ISY.F INPUT SYMBOL EXT MCC.F RESET TO FIRST COLUMN OF STATEMEXT ENT NEW.F SUB TO CLEAR TEMPS FOR A NEW MODULE ENT SCC.F SAVE F.CC SUBROUTINE EXT SNC.F START NEXT CARD SUBROUTINE EXT TDO.F DO TERMINATION CODE GENERATOR EXT TCT.F TEST (A) = F.TC ELSE ER 28 EXT UC.F UNINPUT COLUMN EXT WAR.F ERROR COMMEXT SUBROUTINE (WARNINGS) SPC 1 * THIS FORTRAN IV COMPILER RUNS UNDER VARIOUS OP * SYSTEMS THROUGH SUITABLE INTERFACE ROUTINES. * * OPSYSTEM INTERFACE: * * EXT SEG.F SEGMENT TRANSLATOR EXT WRT.C EXT C.TTY EXT C.BIN BINARY FCB (MUST BE IN MAIN) EXT C.TRN COMPILER LIB. DATA STORE EXT OLY.C SEGMENT LOAD * GENERAL LIBRARY ROUTINES * * * * EXTRY POINTS IN THE SEGMENTS * EXT F.COM COMMON STATEMENT PROCESSOR EXT F.CPX COMPLEX STATEMENT PROCESSOR EXT F.DAT DATA STATEMENT PROCESSOR EXT F.DBL DOUBLE STATEMENT PROCESSOR EXT F.DIM DIMENSION STATEMENT PROCESSOR EXT F.EMP EMA STATEMENT PROCESSOR EXT F.EQU EQUIVALENCE STATEMENT PROCESSOR EXT F.EXT EXTERNAL STATEMENT PROCESSOR EXT F.FUN FUNCTION STATEMENT PROCESSOR EXT F.IMP IMPLICIT STATEMENT PROCESSOR EXT F.INP INTEGER STATEMENT PROCESSOR EXT F.LOG LOGICAL STATEMENT PROCESSOR EXT F.PRO PROGRAM STATEMENT PROCESSOR EXT F.RCO RELATE COMMON AND FINISH EQU PROCESSING EXT F.REA REAL STATEMENT PROCESSOR EXT F.SUB SUBROUTINE STATEMENT PROCESSOR EXT F.BLK BLOCK DATA STATEMENT PROCESSOR EXT FER.F FORM PROGRAM ENTRANCE CODE SPC 1 SUP A EQU 0 A-REGISTER B EQU 1 B-REGISTER SKP * PBUF BSS 0 F.BUF BSS 0 NBUF EQU PBUF+65 LINE #S FOR 21 CARDS IN CRDBF * * DEF C.TRN DUMMY REF. TO FOURCE LOAD WITH MAIN DEF C.BIN ALSO A DUMMY * BSS 60-*+NBUF RESERVE ROOM OF NAM RECORD SPC 1 FTN4 BSS 0 DST F.IDI SAVE THE RUN REGS. LDB K4 GO TO SEGMENT 4 JMP F.SEG * * * F.STA NOP FTN READ YET FLAG F.CCW DEC 1 COMPILE OPTION CONTROL WORD (PRINT CON REC.) F.DNB DEF NBUF K2 DEC 2 K4 DEC 4 B15 OCT 15 B54 OCT 54 F.ER0 ASC 1,R0 F.DO NOP LWAM; END OF F.DO TABLE SKP * ************************* * * COMPILE A NEW PROGRAM * * ************************* SPC 1 NEW.F NOP CLA STA STBFL CLEAR STRING BACK FLAG STA F.NEQ SET # OF EQUIV GP.=0 STA F.OPF SET NOT TO OUTPUT STA F.NXN RESET NO INPUT FLAG STA F.SID CLEAR THE SCAN SWITCH LDA K73 STA F.LSP SET PATH TO THIS STATMENT TRUE STA F.CC SET F.CC=73 JMP NEW.F,I RETURN SPC 2 SPC 1 F.D.T DEF ..TBL * F..DP NOP FIX EXTERNAL F.LO NOP END OF ASSIGNMENT TABLE +1 F.EQF NOP NEG. IF NOT PROC EQUIV F.S1B NOP BEGIN OPERAND STACK F.S1T NOP END OPERAND STACK F.S2T NOP END OPERATOR STACK F.NEQ NOP # OF EQUIVALENCE GROUPS K73 DEC 73 SPC 2 * *********** * * SAVE CC * * *********** SPC 1 SCC.F NOP LDA F.CC SAVE COLUMN COUNTER STA F.SCC JMP SCC.F,I * F.SCC OCT 0 SAVE F.CC K27 DEC 27 K29 DEC 29 SKP * ******************* * * STATEMENT INPUT * * ******************* SPC 1 F.BGN JSB SCC.F SAVE THE CHARACTER POSITION CLA STA F.OPF CLEAR THE PACK FLAG STA F.STB CLEAR STRING-BACK FLAG STA F.A SET ASSIGNMENT TABLE PTR TO 0 STA F.MFL CLEAR MODE FLAG JSB EXN.F EXAMINE NEXT CHAR. CPA B15 IF BLANK CARD JMP CRT.F TREAT AS A CONTINUE CARD * LDA F.CC BEYOND COL. 6? ADA KM6 SZA,RSS IF EXACTLY 6 THEN MUST BE ISZ F.CC A '0' SO PUSH ON SSA,RSS WELL?? JMP STIN2 YES, NO NUMBER. * CLA INPUT ANY KIND OF STATEMENT #. JSB ISN.F STIN2 LDA F.A STA F.LSN LAST STATEMENT NUMBER FLAG SZA,RSS JMP STIN0 CURRENT CARD HAS NO STATEMENT NO. LDA K27 27 LDB F.AT CPB REL JSB WAR.F ERROR 27: STMT NO. PREVIOUSLY DEFINED STIN0 LDA F.IFF IF FLAG SET? SZA XOR F.LSN YES JSB IFT.F F.IFF TEST (RTNS A=0) CPA F.CC BLANK CARD INPUT? JMP STIN6 YES. CPA F.LSN STATEMENT # ON CARD? JMP F.STS NO. GO SCAN THE STATEMENT LDA F.TC LOAD THE LAST CHARACTER READ. CPA B15 CARRIAGE-RETURN? JMP STIN1 YES, PRINT SOURCE LINE. JSB EXN.F GET THE NEXT CHARACTER. LDA F.CC LOAD THE COLUMN POINTER. SZA COLUMNS 7 THRU 72 BLANK? JMP F.STS NO, IDENTIFY THE CARD TYPE. ISZ F.CC SET F.CC=1 STIN1 LDA K29 BITCH: STATEMENT NO. ON BLANK CARD JSB ER.F SPC 2 SPC 1 STIN6 JSB SNC.F BLANK CARD; SET FOR NEXT CARD JMP F.BGN PROCESS THE CURRENT CARD. SPC 2 KM3 DEC -3 KM6 DEC -6 B50 OCT 50 DSLH OCT 42015 END$. ASC 2,END$ SKP * THE FOLLOWING IS A FLOW CHART OF THE STATEMENT IDENTIFIER AND * DISPATCHER. TWO SYMBOLS ARE USED FOR DECISION BLOCKS AS FOLLWOS: * * * Y=X? IF Y=X EXIT WILL BE '1' (TRUE), ELSE '0' (FALSE) * Y=? THIS IS REALLY A COMPUTED GO TO OR CASE STATEMENT. * EXITS WILL BE LABELED WITH THE VALUE OF Y WHICH * TAKES THAT EXIT. * * LABELS ARE USED TO COROLATE THE FLOW CHART AND THE LISTING * * ROUTINES USED FUNCTION * IDN.F INPUTS 6 ALF/NUM OR TO DELIMITER OR OPERAND TO DELIMITER- * INPUTS WHOLE HOLLERITH STRINGS AND EXCEPT FOR > 6 * CHARACTERS ALF/NUM IDENTIFIER STRINGS INPUTS * THE DELIMITER AND LEAVES IT IN F.TC. * ICH.F INPUTS ONE NON-BLANK CHARACTER AND SET DELIMITER FLAG. * CLID CLEARS NUMBER ACCUMULATOR * IDS.F INPUT DIGIT STRING. * MCC.F RESETS TO BEGINNING OF STATEMENT. * ISY.F INPUTS A SYMBOL AND SETS ARRAY IDENTIFIER. * * * SHORT HAND FOR TEMPS * T1 = T1STS * T2 = T2STS * T4 = T4SID * * FLOW LINES * * ! = DOWN * ^ = UP FLOW * _ = LEFT FLOW * - = RIGHT FLOW * = = EQUALITY TEST * O = TWO OR MORE LINES JOIN (ELSE THEY CROSS) SKP * T1_ -1 WE BEGIN JUST AFTER STSCC * T4,T2_ 0 START BY LOOK FOR A 'DO' STMT. * FIRST TWO CHAR = 'DO'? * 0! 1! * !__________ ! * ! T3_ 0 LOOK FOR DIGITS * ! O______ X * ! ICH.F ^ * ! DIGIT? T3_ #0 * ! 0! 1! ^ * ! T3= 0? ---^ * ! 1! 0! * O________________________ F.TC= ','? IF OPTIONAL COMMA THEN DO * ! 0! 1! * ! UC.F,IDN.F ! LOOK FOR INT. VAR. * ! ! ! * ! F.NT=NAMED? ! * ! 0! 1! ! * O______________ F.TC= '='? ! FOLLOWED BY '='? * ! 0! 1! ! * O________________________! ----------------O STSC3______________O * ! ! IDN.F ^ * ! ! ! ^ * ! ! TC=? ^ * ! ! !____!__O-------------ELSE---O * ! ! ! ! ! ! ^ * ! ! 'C/R' ',' ')' '(' ^ * ! ! ! !STSC5 ! ! ^ * !-----------------O________________!____ T2=0? T2_T2+1 ! ^ * ! ! 1! 0! ! T2_T2-1 ^ * ! STSCB ! ! ! ! ! ^ * MCC.F ! ! !---O------O---------^ * F.SID_1 ! ! * IDN.F !----****STIDO**** * TC='(' OR '='? *IT IS A DO * * 0! 1! STID9 *STATEMENT * * ! ! ************* * ! O_______________________ X * ! TC=? ^ * ! ________O------------------- ^ * ! ! ! ! ! ! ^ * ! ! 'C/R', ')' '(' E '=' ^ * ! ! '"', ! ! L ! ^ * ! ! "'" T4_T4-1 ! S ! ^ ^------! * O<<