CFILE=RATRSX.RAT C=================== RSX11-DEC VERSION OF RATFOR ======================== C$ **** THIS FILE CONTAINS THE COMPUTER/SYSTEM SPECIFIC PARTS OF RATFOR C PCN # 68, 10 OCT, 79, ADDDEF, FIX BUG IF LASTP=1, OF READING NAMPTR(0) C PCN # 69, 10 OCT, 79, RATLST, MAKE STRPUT TYPE INTEGER C PCN # 71, 1 NOV 79, ADD /GO SWITCH TO START FORTRAN C## VERSION 18 ISSUED, NOV 79. C PCN #73, DEC 79, ADD CARET,TILDE FOR .NOT., ADD C PCN #75, DEC 79, ADD FORTRAN LINE NUMBERS TO RATFOR LISTING C PCN #76, DEC 79, FIX BUG IN DUMPIN/OUTIF. NOT NUMBERING IF'S RIGHT C PCN #77, JAN 79, GENERAL CLEANUP. CHANGE CALL SEQUENCE OF 'STRPUT', 'ICSI'. C## VERSION 19 ISSUED, JAN 80. C PCN 83, 16 JAN 80, DELETE CALL TO 'ERROR' IN PUTLIN. C PCN 85, 20 JAN 80, CREATE OVERLAYED VERSION, MOVE ERRSET TO OVERLAY C PCN 82, 8 FEB 80, USE OPEN STATEMENT VICE ASSIGN,FDBSET IF 'OPENCLOSE'. C NOTE: FORTRAN IV V2.2 BUG CAUSES ODD ADDR TRAP (ERROR 3) ON ANY OPEN ERROR C EXCEPT 'NO SUCH FILE' (E.G. 'INVALID DEVICE') IF OPENS ARE USED. C PCN 87, 10 FEB 80, ALLOW << AND >> FOR < AND >. PASS '...' STRINGS UNCHNAGED. C PCN 90, 11 FEB 80, ADD DAY OF WEEK TO HEADING IF REAL CODE IS ALLOWED. C PCN 91, 13 FEB 80, PROVIDE DEFAULT DEV/UIC FOR INCLUDE FILES. C PCN 93, 16 FEB 80, DROP CKEYWD, FOR STRINGS IN 'LEX', MOVE FROM GETTOK. C PCN 94, 17 FEB 80, STOP PASSING CURRENT INPUT FILE LUN ALL OVER. C## VERSION 20 ISSUED, 1 MARCH 80. C PCN #95, 11 MAR 80, PREVENT WARNING MSG FROM F4P IN INDEX AND OPENI. C PCN # 96, 20 MAR 80, ADD PAGE INDEX AT END OF LISTING. C PCN # 97, 22 MAR 80, DEFINE DEFAULTS FOR SWITCHES, PROCESS IN RATGO C PCN 98, 27 MAR 80, REORGANIZE SCAN WITH MOST COMMON KEYWORDS FIRST. C PCN 100, 29 MAR 80, DON'T NUMBER NULL RATFOR SOURCE LINES. CPCN 101, 29 MAR 80, OPTIONAL WAIT FOR SPAWNED COMPILER, CLEAN UP SPAWN C PCN 102, 29 MAR 80, ALLOW UNDERLINE EMBEDDED IN TOKENS C## VERSION 21 ISSUED, 1 APRIL 80. C CFILE=DEFIN.RAT ===== GENERAL CHARACTER SET DEFINITIONS =============== C PCN #73, DEC 79, ADD CARET,TILDE FOR .NOT. C C FILE=RATDEF.RAT CDEFINE (DECWRITER,) #DEFINED FOR DECWRITER OUTPUT C C C#DEFINE (DECF4P,) #DEFINE TO DO F4P LINE NUMBERS RIGHT(AND SPAWNING) C#DEFINE (OPENCLOSE,) #DEFINE TO ALLOW SPOOL OUTPUT TO PRINTER C#DEFINE (REALCODE,) #DEFINE IF FLOATING PT. MATH IS OK.(FOR 'DAYS') C#DEFINE (WAITFORFTN,) #DEFINE IF YOU WANT TO WAIT FOR SPAWNED COMPILER C#DEFINE (SPAWNIT,) #DEFINE IF RSX11M V3.2 FOR /GO SWITCH, ***PCN 71 !!! C C C C$ DUMPIT - LIST GENERATED FORTRAN SOURCE CODE ON PRINTER C PCN #75, DEC 79, ADD FTN LINE NUMBERS TO LISTING, USE FOR DUMPED CODE C PCN # 77, 5 JAN 80, USE PRTBUF TO GET AND PUT LINES, VICE INTERNAL BUFFER C (ONLY TO SAVE SPACE!!) C PCN # 96, 20 MAR 80, ADD PAGE INDEX AT END OF LISTING. C SUBROUTINE DUMPIT C INTEGER LEN, FLINE, STRGET LOGICAL * 1 FF ( 2 ) C C FILE=CPRTLN.RAT FOR RATFOR COMMON / CPRTLN / FORTYP, IFTYP, READY, PRTBUF ( 91 ) INTEGER FORTYP INTEGER IFTYP INTEGER READY LOGICAL * 1 PRTBUF C DATA FF / 12, 0 / C REWIND 7 CALL RATLST ( FF, 0, 0 ) FLINE = 0 CALL DOINDX ( 5, 36H***DUMP OF GENERATED FORTRAN CODE*** ) 20000 CONTINUE LEN = STRGET ( 7, PRTBUF, 90 ) IF (.NOT.( LEN .EQ. - 3 )) GOTO 20003 GOTO 20002 20003 CONTINUE IF (.NOT.( LEN .EQ. - 1 )) GOTO 20005 CALL ERROR ( 37HDUMPIT ERROR READING FTN OUTPUT FILE. ) GOTO 20006 20005 CONTINUE IF (.NOT.( PRTBUF ( 1 ) .EQ. 12 )) GOTO 20007 FLINE = 0 20007 CONTINUE IF (.NOT.( PRTBUF ( 1 ) .EQ. 67 .OR. PRTBUF ( 6 ) .EQ. 36 .OR. $PRTBUF ( 1 ) .EQ. 12 )) GOTO 20009 CALL RATLST ( PRTBUF, 0, 0 ) GOTO 20010 20009 CONTINUE FLINE = FLINE + 1 CALL RATLST ( PRTBUF, 0, FLINE ) IF (.NOT.( ( PRTBUF ( 7 ) .EQ. 73 .AND. PRTBUF ( 8 ) .EQ. 70 $.AND. PRTBUF ( 9 ) .EQ. 32 ) .OR. ( PRTBUF ( 7 ) .EQ. 105 .AND. $PRTBUF ( 8 ) .EQ. 102 .AND. PRTBUF ( 9 ) .EQ. 32 ) )) GOTO 20011 FLINE = FLINE + 1 20011 CONTINUE 20010 CONTINUE 20006 CONTINUE 20004 CONTINUE C 20001 GOTO 20000 20002 CONTINUE RETURN END C C$ FILFIX - CALL ERRSET FROM OVERLAY TO TURN OFF FTN ERROR MESSAGES C PCN #85, 20 JAN 80 C SUBROUTINE FILFIX C CALL ERRSET ( 63, . TRUE ., . FALSE .,, . FALSE . ) CALL ERRSET ( 43, . TRUE ., . FALSE .,, . FALSE . ) CALL ERRSET ( 29, . TRUE ., . FALSE .,, . FALSE . ) CALL ERRSET ( 39, . TRUE ., . FALSE .,, . FALSE . ) CALL ERRSET ( 30, . TRUE ., . FALSE .,, . FALSE . ) C RETURN END C C$ GETLIN - READ IN ANOTHER LINE FROM THE RATFOR INPUT FILE FOR NGETCH C PCN # 22, 10 DEC 77, ADD DEBUG LEVELS C PCN # 75, DEC 79, ADD FTN LINE NUMBERS TO LISTING C PCN # 82, 8 FEB 80, DELETE UNNEEDED CALL TO 'ERRSNS' AND ERROR MSG. C PCN # 94, 17 FEB 80, CALLER NO LONGER NEEDS TO PASS INPUT FILE LUN. C# IF LINE BEGINS WITH A '%' IN COL. 1, TRANSFER IT TO THE C# OUTPUT FILE WITH NO PROCESSING AT ALL EXCEPT DELETE THE '%'. C# ALSO, TRANSFER FULL LINE COMMENTS ('#' IN COL 1) TO OUTPUT FILE C# ALSO, LIST EACH LINE AS IT IS READ.EXCEPT WITHIN UNDEFINED IFDEFS C IF THE /IF SWITCH IS PRESENT. C INTERPRET DEBUG LINES ("?" IN COL 1) AS WELL. PROCESS THEM IF C THE LEVEL SPECIFIED IN THE SECOND COL IS >= SPECIFIED DEBUG LEVEL. C INTEGER FUNCTION GETLIN ( BUFR ) C INTEGER I, STRGET, STRIM, LEN, INDEX, SCOPY LOGICAL * 1 BUFR ( 91 ) LOGICAL * 1 INMAP C C FILE = CLINE.RAT FOR RATFOR.RAT C PCN #75, DEC 79, ADD FORTRAN LINE NUMBERS TO RATFOR LISTING COMMON / CLINE / LEVEL, INFILE ( 4 ), LINECT, INIF, FTNLN INTEGER LEVEL INTEGER INFILE INTEGER LINECT INTEGER INIF INTEGER FTNLN C C FILE=CPRTLN.RAT FOR RATFOR COMMON / CPRTLN / FORTYP, IFTYP, READY, PRTBUF ( 91 ) INTEGER FORTYP INTEGER IFTYP INTEGER READY LOGICAL * 1 PRTBUF C C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT C C FILE= CUCLC.RAT FOR RATFOR COMMON / CUCLC / LC, COMPRS INTEGER LC INTEGER COMPRS C LOGICAL * 1 DLEVL (11) C DATA DLEVL/1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1H ,0/ GETLIN = 1 20013 CONTINUE CALL PRTLIN LEN = STRGET ( INFILE ( LEVEL ), BUFR, 90 ) IF (.NOT.( LEN .EQ. - 3 )) GOTO 20016 GETLIN = ( - 3 ) RETURN 20016 CONTINUE IF (.NOT.( LEN .EQ. - 1 )) GOTO 20018 CALL ERROR ( 25HERROR READING INPUT FILE. ) 20018 CONTINUE 20017 CONTINUE LEN = STRIM ( BUFR ) C JUNK = SCOPY ( BUFR, PRTBUF, 90, JUNK ) READY = 1 C C#SPECIAL PROCESSING OF RATFOR PROCESSOR FEATURES IF (.NOT.( BUFR ( 1 ) .EQ. 63 )) GOTO 20020 IF (.NOT.( INDEX ( DLEVL, BUFR ( 2 ) ) .GE. DEBUG )) GOTO 20022 BUFR ( 1 ) = 32 BUFR ( 2 ) = 32 GOTO 20023 20022 CONTINUE GOTO 20014 C 20023 CONTINUE 20020 CONTINUE IF (.NOT.( LEN .EQ. 1 .AND. BUFR ( 1 ) .EQ. 12 )) GOTO 20024 GOTO 20014 20024 CONTINUE IF (.NOT.( BUFR ( 1 ) .NE. 37 .AND. BUFR ( 1 ) .NE. 35 )) GOTO $20026 GOTO 20015 C 20026 CONTINUE 20025 CONTINUE IF (.NOT.( INIF .EQ. 1 )) GOTO 20028 GOTO 20014 20028 CONTINUE IF (.NOT.( BUFR ( 1 ) .EQ. 37 )) GOTO 20030 CALL PUTLIN ( BUFR ( 2 ), 7, 0 ) FTNLN = FTNLN + 1 GOTO 20031 20030 CONTINUE IF (.NOT.( COMPRS .EQ. 0 )) GOTO 20032 BUFR ( 1 ) = 67 CALL PUTLIN ( BUFR, 7, 0 ) 20032 CONTINUE 20031 CONTINUE 20029 CONTINUE C 20014 GOTO 20013 20015 CONTINUE RETURN END C C$ GETNAM - GET THE FILE NAME OF AN INCLUDED FILE CPCN # 93, 17 FEB 80 C INCLUDE/NL FILE AND INCLUDE FILE/NL BOTH OK, BUT 2ND WON'T BE LISTED RIGHT. C SUBROUTINE GETNAM ( BUFR, LSTIT ) C INTEGER LSTIT, LEN, SKIP LOGICAL * 1 NGETCH, CHAR, BUFR ( 35 ) C LEN = 0 SKIP = 0 LSTIT = 1 C CSINCE THE STRING MAY CONTAIN SEVERAL TOKENS C AND EVEN SEMICOLONS, FORCE READ THE REST OF THIS LINE AND C TAKE IT TO BE THE FILE NAME SPEC. C 20034 IF (.NOT.( NGETCH ( CHAR ) .NE. 10 .AND. CHAR .NE. 35 .AND. LEN $.LT. 35 )) GOTO 20035 IF (.NOT.( SKIP .EQ. 1 .AND. CHAR .EQ. 32 )) GOTO 20036 SKIP = 0 GOTO 20037 20036 CONTINUE IF (.NOT.( CHAR .EQ. 47 )) GOTO 20038 SKIP = 1 LSTIT = 0 GOTO 20039 20038 CONTINUE IF (.NOT.( CHAR .NE. 32 .AND. CHAR .NE. 9 .AND. SKIP .EQ. 0 )) $GOTO 20040 LEN = LEN + 1 BUFR ( LEN ) = CHAR 20040 CONTINUE 20039 CONTINUE 20037 CONTINUE GOTO 20034 20035 CONTINUE CALL PUTBAK ( CHAR ) C BUFR ( LEN + 1 ) = 0 C RETURN END C C$ HEADR - FILL IN DAY,DATE,TIME FOR RATLST'S PAGE HEADER C PCN #90, 11 FEB 80 C SUBROUTINE HEADR C INTEGER JUNK, DAYS C C FILE = CDATIM.RAT FOR RATFOR COMMON / CDATIM / DATIM ( 25 ) LOGICAL * 1 DATIM C DATA DATIM / 25 * 1H / C CALL DATE ( DATIM ( 6 ) ) CALL TIME ( DATIM ( 17 ) ) DATIM ( 25 ) = 0 C RETURN END C C$ OPENI - OPEN INCLUDED FILES FOR RATFOR CSYKES,24APR77, ALLOW /NL TO SUPPRESS LISTING OF INCLUDED FILES CSYKES,19NOV76,27MAY77 C PCN #77, JAN 80, CHANGE FORMATED READ TO STRGET C PCN #82, FEB 80, USE 'OPEN', IF AVAILABLE. C PCN # 91, 13 FEB 80, ALLOW DEFAULT DEV/UIC SPECIFICATION. C PCN # 93, 17 FEB 80, SETUP START OF INCLUDES(FROM GETTOK). CREATE 'GETNAM'. C PCN # 95, 11 MAR 80, CHANGE ELSE IF AFTER THE RETURN TO IF (FOR F4P) C PCN # 96, 20 MAR 80, ADD PAGE INDEX AT END OF LISTING. C THE LUN FOR EACH INPUT FILE IS STORED IN INFILE(LEVEL),WHERE C LEVEL IS THE INCLUSION LEVEL (BASIC INPUT FILE=1). C CURRENTLY, THE LUN=THE INCLUSION LEVEL; INFILE(LEVEL)=LEVEL. CNOTE: AN EXPLICIT VERSION NUMBER WORKS ONLY IF THERE IS ALSO AN C EXPLICIT EXTENSION SPECIFIED. C SUBROUTINE OPENI C LOGICAL * 1 BUFR ( 35 ), BUF2 ( 35 ) INTEGER I, INDEX, SJOIN, JUNK, OPNIN, IERR C C FILE = CLINE.RAT FOR RATFOR.RAT C PCN #75, DEC 79, ADD FORTRAN LINE NUMBERS TO RATFOR LISTING COMMON / CLINE / LEVEL, INFILE ( 4 ), LINECT, INIF, FTNLN INTEGER LEVEL INTEGER INFILE INTEGER LINECT INTEGER INIF INTEGER FTNLN C C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT C LOGICAL * 1 RAT (5) C DATA RAT/1H.,1HR,1HA,1HT,0/ IF (.NOT.( LEVEL .GE. 4 )) GOTO 20042 CALL ERROR ( 27HINCLUDES NESTED TOO DEEPLY. ) C 20042 CONTINUE CALL GETNAM ( BUFR, LSTIT ) LEVEL = LEVEL + 1 INFILE ( LEVEL ) = LEVEL LST ( LEVEL ) = LSTIT C IF (.NOT.( INDEX ( BUFR, 46 ) .EQ. 0 )) GOTO 20044 LEN = SJOIN ( BUFR, RAT, 35 - 1, JUNK ) C 20044 CONTINUE IF (.NOT.( OPNIN ( BUFR, INFILE ( LEVEL ), IERR ) .EQ. 1 )) GOTO $20046 CALL DOINDX ( 3, BUFR ) RETURN C IF "NO SUCH FILE" ERROR, & NO DEV:UIC GIVEN, ADD DEFAULT DEV:UIC & TRY AGAIN. 20046 CONTINUE IF (.NOT.( IERR .EQ. 29 .AND. INDEX ( BUFR, 58 ) .EQ. 0 .AND. $INDEX ( BUFR, 91 ) .EQ. 0 )) GOTO 20048 BUF2 ( 1 ) = 0 CALL SINSRT ( 8HSY:[1,1], BUF2 ) JUNK = SJOIN ( BUF2, BUFR, 35 - 1, JUNK ) IF (.NOT.( OPNIN ( BUF2, INFILE ( LEVEL ), IERR ) .EQ. 1 )) GOTO $20050 CALL DOINDX ( 3, BUF2 ) RETURN 20050 CONTINUE C C IF WE GOT THIS FAR, ALL EFFORTS TO OPEN FILE FAILED 20048 CONTINUE CALL ERROR ( 29HOPEN FAILURE ON INCLUDE FILE. ) RETURN C END C C$ OPNIN - OPEN AN INCLUDE FILE AND FIELD ERRORS C PCN 91, 13 FEB 80, MAKE THIS OPEN MESS A SEPARATE ROUTINE. C INTEGER FUNCTION OPNIN ( BUFR, UNIT, IERR ) C INTEGER UNIT, IERR, STRGET, I LOGICAL * 1 BUFR ( 35 ) C CALL ERRSNS C CALL ASSIGN ( UNIT, BUFR, 0 ) CALL FDBSET ( UNIT, 8HREADONLY, 5HSHARE ) CALL ERRSNS ( IERR ) IF (.NOT.( IERR .EQ. 0 )) GOTO 20052 I = STRGET ( UNIT, JUNK, 0 ) IF (.NOT.( I .EQ. - 1 )) GOTO 20054 CALL ERRSNS ( IERR ) OPNIN = ( - 1 ) RETURN 20054 CONTINUE REWIND UNIT OPNIN = ( 1 ) RETURN 20055 CONTINUE GOTO 20053 20052 CONTINUE OPNIN = ( - 1 ) RETURN C 20053 CONTINUE RETURN END C C$ OPNOUT - OPEN OUTPUT FILES FOR RATFOR C PCN 91, 14 FEB 80, GET THIS OPEN MESS OUT OF MAINLINE. C INTEGER FUNCTION OPNOUT ( BUFR, UNIT ) C INTEGER UNIT, IERR, STRPUT LOGICAL * 1 BUFR ( 1 ) C CALL ERRSNS OPNOUT = 1 CALL ASSIGN ( UNIT, BUFR, 0 ) CALL FDBSET ( UNIT, 3HNEW,, 2 ) CALL ERRSNS ( IERR ) IF (.NOT.( IERR .NE. 0 .OR. STRPUT ( UNIT, 1H , 32 ) .NE. 1 )) $GOTO 20056 OPNOUT = - 1 GOTO 20057 20056 CONTINUE REWIND UNIT C 20057 CONTINUE RETURN END C C$ PRTLIN - PRINT A LINE OF RATFOR SOURCE ON THE LISTING C PCN #75, DEC 79, ADD FTN LINE NUMBERS TO LISTING C PCN # 96, 20 MAR 80, ADD PAGE INDEX AT END OF LISTING. C PCN 100, 29 MAR 80, DON'T NUMBER NULL RATFOR SOURCE LINES C IF LISTING (BOTH IN GENERAL AND AT THIS PARTICULAR TIME), FIGURE OUT IF C THIS LINE (WHICH IS THE ONE JUST PROCESSED, ONE BEHIND THE ONE JUST READ) C NEEDS RATFOR LINE NUMBER, FTN LINE NUMBER, BOTH, OR NEITHER. CALL RATLST C TO PRINT THE LINE WITH THE CORRECT NUMBER(S). ALSO CONVERT COMMENTS TO C LOWER CASE, IF NEEDED. ALSO KEEP FTN LINE NUMBERS STRAIGHT (NO SMALL PROBLEM). C ARRANGE TO ALWAYS PRINT IFDEF,IFNOTDEF,ENDIF LINES WITH RATFOR NUMBERS, C TO LIST PROPERLY, THESE MUST BE IN UPPER CASE. C NOTE THAT DUMPIT AND DEFLST ALSO USE PRTBUF TO SAVE SPACE. C SUBROUTINE PRTLIN C INTEGER INDEX, EQLS, I, FUDGE, KLUGE, FORCIF, IT C C FILE = CLINE.RAT FOR RATFOR.RAT C PCN #75, DEC 79, ADD FORTRAN LINE NUMBERS TO RATFOR LISTING COMMON / CLINE / LEVEL, INFILE ( 4 ), LINECT, INIF, FTNLN INTEGER LEVEL INTEGER INFILE INTEGER LINECT INTEGER INIF INTEGER FTNLN C C FILE=CPRTLN.RAT FOR RATFOR COMMON / CPRTLN / FORTYP, IFTYP, READY, PRTBUF ( 91 ) INTEGER FORTYP INTEGER IFTYP INTEGER READY LOGICAL * 1 PRTBUF C C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT C C FILE= CUCLC.RAT FOR RATFOR COMMON / CUCLC / LC, COMPRS INTEGER LC INTEGER COMPRS C LOGICAL * 1 DLEVL (11) LOGICAL * 1 INCLU (8) LOGICAL * 1 ENDIF (9) LOGICAL * 1 IFDEFS (6) LOGICAL * 1 IFNOT (9) LOGICAL * 1 DEFI (7) LOGICAL * 1 MACR (6) LOGICAL * 1 FLAGLN (4) C DATA DLEVL/1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1H ,0/ DATA INCLU/1HI,1HN,1HC,1HL,1HU,1HD,1HE,0/ DATA ENDIF/1HE,1HN,1HD,1HI,1HF,1HD,1HE,1HF,0/ DATA IFDEFS/1HI,1HF,1HD,1HE,1HF,0/ DATA IFNOT/1HI,1HF,1HN,1HO,1HT,1HD,1HE,1HF,0/ DATA DEFI/1HD,1HE,1HF,1HI,1HN,1HE,0/ DATA MACR/1HM,1HA,1HC,1HR,1HO,0/ DATA FLAGLN/1H#,1H$,1H ,0/ IF (.NOT.( LST ( 1 ) .EQ. 1 .AND. READY .EQ. 1 )) GOTO 20058 IF (.NOT.( EQLS ( PRTBUF ( 1 ), FLAGLN ) .EQ. 1 )) GOTO 20060 CALL DOINDX ( 2, PRTBUF ( 4 ) ) 20060 CONTINUE CONTINUE IT = 1 20062 IF (.NOT.( PRTBUF ( IT ) .EQ. 32 .OR. PRTBUF ( IT ) .EQ. 9)) GOTO $ 20064 20063 IT = IT + 1 GOTO 20062 20064 CONTINUE IF (.NOT.( ( EQLS ( PRTBUF ( IT ), IFDEFS ) .EQ. 1 ) .OR. ( EQLS $( PRTBUF ( IT ), IFNOT ) .EQ. 1 ) )) GOTO 20065 FORCIF = 1 GOTO 20066 20065 CONTINUE FORCIF = 0 C 20066 CONTINUE IF (.NOT.( INIF .EQ. 0 .OR. IFPNT .EQ. 1 .OR. FORCIF .EQ. 1 )) $GOTO 20067 IF (.NOT.( LC .EQ. 1 )) GOTO 20069 I = INDEX ( PRTBUF, 35 ) IF (.NOT.( I .GT. 0 )) GOTO 20071 CALL FOLD ( PRTBUF ( I + 1 ) ) 20071 CONTINUE C C DON'T NUMBER UNPROCESSED LINES, PCN #75, PCN #100 C 20069 CONTINUE IF (.NOT.( ( PRTBUF ( IT ) .EQ. 35 .OR. PRTBUF ( IT ) .EQ. 12 $.OR. PRTBUF ( IT ) .EQ. 10 .OR. PRTBUF ( IT ) .EQ. 0 ) .OR. ( $INIF .EQ. 1 .AND. FORCIF .EQ. 0 ) .OR. ( PRTBUF ( 1 ) .EQ. 63 $.AND. INDEX ( DLEVL, PRTBUF ( 2 ) ) .LT. DEBUG ) )) GOTO 20073 CALL RATLST ( PRTBUF, 0, 0 ) C C RATFOR LINE NUMBER ONLY ON UNPROCESSED LINES AND PROCESSOR FEATURES C GOTO 20074 20073 CONTINUE IF (.NOT.( ( EQLS ( PRTBUF ( IT ), ENDIF ) .EQ. 1 ) .OR. ( EQLS $( PRTBUF ( IT ), MACR ) .EQ. 1 ) .OR. ( EQLS ( PRTBUF ( IT ), $DEFI ) .EQ. 1 ) .OR. ( EQLS ( PRTBUF ( IT ), INCLU ) .EQ. 1 ) $.OR. FORCIF .EQ. 1 )) GOTO 20075 IF (.NOT.( ( LEVEL .GT. 1 ) .AND. ( PRTBUF ( IT + 7 ) .EQ. 47 ) $.AND. ( EQLS ( PRTBUF ( IT ), INCLU ) .EQ. 1 ) )) GOTO 20077 KLUGE = 1 LST ( LEVEL ) = 1 GOTO 20078 20077 CONTINUE KLUGE = 0 20078 CONTINUE CALL RATLST ( PRTBUF, LINECT, 0 ) LINECT = LINECT + 1 IF (.NOT.( KLUGE .EQ. 1 )) GOTO 20079 LST ( LEVEL ) = 0 20079 CONTINUE C C RATFOR AND FORTRAN NUMBERS ON LINES THAT GENERATED CODE C GOTO 20076 20075 CONTINUE IF (.NOT.( FORTYP .EQ. 1 )) GOTO 20081 FUDGE = 1 GOTO 20082 20081 CONTINUE FUDGE = 0 20082 CONTINUE CALL RATLST ( PRTBUF, LINECT, FTNLN - FUDGE ) LINECT = LINECT + 1 IF (.NOT.( IFTYP .EQ. 1 )) GOTO 20083 FTNLN = FTNLN + 1 20083 CONTINUE C 20076 CONTINUE 20074 CONTINUE READY = 0 20067 CONTINUE IFTYP = 0 FORTYP = 0 C 20058 CONTINUE RETURN END C C$ PUTLIN - WRITE A LINE OF FORTRAN CODE TO OUTPUT FILE CSYKES,14OCT76,16DEC76,27MAY77 C PCN #77, 5 JAN 80, USE 'STRPUT' INSTEAD OF FORMATS. USE FMTCHR FROM CALLER C IF OUTPUT IS TO FORTRAN FILE (STDOUT), MAKE FINAL DECISION ABOUT OUTPUT. C IF OUTPUT IS TO ANOTHER FILE (EG LISTING), ASSUME CALLER HAS ALREADY DECIDED. C PCN #83, 16 JAN 80, DELETE CALL TO 'ERROR' IF STRPUT GETS ERROR. C SUBROUTINE PUTLIN ( BUF, FIL, FMTCHR ) C INTEGER I, J, FIL, STRPUT LOGICAL * 1 BUF ( 91 ), FMTCHR LOGICAL * 1 OUTMAP C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT C C IF (.NOT.( ( OUTPUT .EQ. 1 .AND. FIL .EQ. 7 ) .OR. FIL .NE. 7 )) $GOTO 20085 JUNK = STRPUT ( FIL, BUF, FMTCHR ) RETURN C 20085 CONTINUE RETURN END C C$ RATFOR - PREPROCESSOR MAINLINE AND OPERATOR/OS INTERFACE C PCN # 77, 8 JAN 80, CHANGE 'PROMPT' TO STRING. C PCN # 82, 8 FEB 80, USE OPEN INSTEAD OF ASSIGN/FDBSET, IF AVAILABLE C PCN # 90, 11 FEB 80, CALL HEADR TO SET UP DATE/TIME FOR 'RATLST'. C PCN #91, 13 FEB 80, USE OPNIN FOR INPUT FILE OPENS & OPNOUT FOR OUTPUT. C PCN # 96, 20 MAR 80, ADD PAGE INDEX AT END OF LISTING. C PCN # 97, 22 MAR 80, DEFINE DEFAULTS FOR SWITCHES, PROCESS IN RATGO C INTEGER SWITCH ( 4, 12 ), ICSI, DOIT, I, J, STATUS, SLEN, JUNK INTEGER STRPUT, SITOC, OPNIN, OPNOUT, SWTFO, SWTSC, SWTSP, SWTGO LOGICAL * 1 NAMES ( 35, 9 ) REAL DEFALT ( 4 ) C C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT C C FILE = CICSI.RAT FOR ICSI COMMON / CICSI / INPUT, INDLUN, USER, IFIRST, MCR, CLB ( 81 ) INTEGER INPUT INTEGER INDLUN INTEGER USER INTEGER IFIRST INTEGER MCR LOGICAL * 1 CLB C LOGICAL * 1 REF (24) LOGICAL * 1 PROMPT (5) DATA REF/1H ,1H ,1H ,1H ,1HR,1HA,1HT,1HF,1HO,1HR,1H ,1HE,1HR,1HR, $1HO,1HR,1HS,1H ,1HF,1HO,1HU,1HN,1HD,0/ DATA PROMPT/1HR,1HA,1HT,1H>,0/ DATA DEFALT / 4HFTN , 4HLST , 4HOBJ , 4HRAT / DATA IFIRST / 1 / C DATA SWITCH ( 1, 1 ) / 2HRE / DATA SWITCH ( 1, 2 ) / 2HCO / DATA SWITCH ( 1, 3 ) / 2HFO / DATA SWITCH ( 1, 4 ) / 2HSC / DATA SWITCH ( 1, 5 ) / 2HLC / DATA SWITCH ( 1, 6 ) / 2HHE / DATA SWITCH ( 1, 7 ) / 2HDE / DATA SWITCH ( 1, 8 ) / 2HVE / DATA SWITCH ( 1, 9 ) / 2HIF / DATA SWITCH ( 1, 10 ) / 2HSP / DATA SWITCH ( 1, 11 ) / 2HGO / DATA SWITCH ( 1, 12 ) / 2HIN / C C CALL FILFIX USER = 5 INDLUN = 8 C 20087 CONTINUE C C----------------------------------- GET CMD LINE, DO SWITCHES --------------- C CLB ( 1 ) = 0 CALL HEADR STATUS = ICSI ( NAMES, DEFALT, SWITCH, 12, PROMPT ) IF (.NOT.( STATUS .EQ. - 3 )) GOTO 20090 CALL EXIT GOTO 20091 20090 CONTINUE IF (.NOT.( STATUS .EQ. 1 )) GOTO 20092 IF (.NOT.( SWITCH ( 2, 6 ) .GT. 0 )) GOTO 20094 CALL RATHLP GOTO 20095 20094 CONTINUE IF (.NOT.( SWITCH ( 2, 8 ) .GT. 0 )) GOTO 20096 JUNK = STRPUT ( 5, 21HRATFOR RSX/V 21-O-102, 32 ) GOTO 20097 20096 CONTINUE CALL RATGO ( SWITCH, SWTFO, SWTSC, SWTSP, SWTGO ) C C------------------------------SET UP FTN OUTPUT FILE------------------------ C IF (.NOT.( SLEN ( NAMES ( 1, 1 ) ) .GT. 0 )) GOTO 20098 OUTPUT = 1 IF (.NOT.( OPNOUT ( NAMES ( 1, 1 ), 7 ) .EQ. - 1 )) GOTO 20100 CALL ICSIE ( 31HOpen Failure on FTN Output File ) GOTO 20088 20100 CONTINUE GOTO 20099 20098 CONTINUE OUTPUT = 0 C C------------------------------------SET UP LISTING FILE--------------------- C 20099 CONTINUE IF (.NOT.( SLEN ( NAMES ( 1, 2 ) ) .GT. 0 )) GOTO 20102 LST ( 1 ) = 1 IF (.NOT.( OPNOUT ( NAMES ( 1, 2 ), 6 ) .EQ. - 1 )) GOTO 20104 CALL ICSIE ( 25HOpen Failure on List File ) GOTO 20088 20104 CONTINUE CALL QIO ( 768, 6 ) 20105 CONTINUE GOTO 20103 20102 CONTINUE LST ( 1 ) = 0 INDXIT = 0 C 20103 CONTINUE IF (.NOT.( LST ( 1 ) .EQ. 0 .AND. OUTPUT .EQ. 0 )) GOTO 20106 GOTO 20088 20106 CONTINUE IF (.NOT.( INDXIT .EQ. 1 )) GOTO 20108 20108 CONTINUE CALL ASSIGN ( 9, 11HRATINDX.TMP, 0 ) C C------------------------------ PROCESS ALL INPUT FILES ----------------------- C CONTINUE J = 4 20110 IF (.NOT.( J .LE. 9 .AND. SLEN ( NAMES ( 1, J ) ) .GT. 0)) GOTO $20112 IF (.NOT.( OPNIN ( NAMES ( 1, J ), 1, JUNK ) .EQ. - 1 )) GOTO $20113 CALL ICSIE ( 26HOpen Failure on Input File ) GOTO 20112 20113 CONTINUE CALL DOINDX ( 1, NAMES ( 1, J ) ) CALL PARSE CALL CLOSE ( 1 ) 20114 CONTINUE C C------------------------------------- CLEAN UP, END OF CMD LINE -------------- C 20111 J = J + 1 GOTO 20110 20112 CONTINUE IF (.NOT.( SWTSC .EQ. 1 .AND. LST ( 1 ) .EQ. 1 )) GOTO 20115 CALL DEFLST 20115 CONTINUE IF (.NOT.( SWTFO .EQ. 1 .AND. OUTPUT .EQ. 1 .AND. LST ( 1 ) .EQ. $1 )) GOTO 20117 CALL DUMPIT 20117 CONTINUE IF (.NOT.( INDXIT .EQ. 1 )) GOTO 20119 CALL DMPIDX CALL CLOSE ( 9 ) 20119 CONTINUE IF (.NOT.( OUTPUT .EQ. 1 )) GOTO 20121 CALL CLOSE ( 7 ) C 20121 CONTINUE IF (.NOT.( LST ( 1 ) .EQ. 1 )) GOTO 20123 20123 CONTINUE CALL CLOSE ( 6 ) C IF (.NOT.( ERRORS .GT. 0 )) GOTO 20125 I = SITOC ( ERRORS, REF ( 1 ), 3 ) REF ( I + 1 ) = 32 CALL ICSIE ( REF ) C 20125 CONTINUE 20097 CONTINUE 20095 CONTINUE 20092 CONTINUE 20091 CONTINUE C 20088 GOTO 20087 20089 CONTINUE END C C$ RATHLP - PRINT HELP ON THE TERMINAL FOR THE USER C ***PCN#19, 21, 22, 10 DEC 77 C ***PCN # 34, 16 JAN 78 C ***PCN # 35, 22 JAN 78 C ***PCN # 71, DEC 79, ADD /GO C PCN # 77, 5 JAN 80, FIX DISPLAY OF /SP SWITCH C PCN # 96, 20 MAR 80, ADD PAGE INDEX AT END OF LISTING. C SUBROUTINE RATHLP C WRITE ( 5, 1 ) 1 FORMAT ( / 1H , 21HRATFOR RSX/V 21-O-102 /, 12H SWITCHS: /, $60H /DE:N-PROCESS DEBUG LINES WITH LEVEL >= N ('?N' IN COL 1&2) / $, 55H /CO - SUPPRESS BLANKS BETWEEN TOKENS IN FORTRAN OUTPUT /, $31H /FO - LIST OUTPUT FORTRAN CODE /, $27H /HE - GET THIS HELP (ONLY) ) C C WRITE ( 5, 4 ) 4 FORMAT ( 42H /IF - LIST CODE IN UNDEFINED CONDITIONALS /, $36H /IN - LIST RATFOR SOURCE CODE INDEX /, $39H /LC - GENERATE LOWER CASE FORTRAN CODE /, $56H /RE - RETAIN THE DEFINITIONS FROM PREVIOUS COMMAND LINE /, $46H /SC - LIST SYMBOLIC CONSTANT DEFINITION TABLE ) C C WRITE ( 5, 2 ) 2 FORMAT ( $55H /VE - PRINT RATFOR'S VERSION NUMBER ON TERMINAL (ONLY) /, $53H COMMAND LINE: (SINGLE LEVEL INDIRECT FILES ALLOWED) /, $47H [OUTPUT][,LIST][,OBJ]=IN1[,IN2...,IN6][/SW...] /, $52H IF NO OUTPUT FILES ARE SPECIFIED, DEFAULT FILES ARE /, $60H ARE CREATED WITH SAME DEV, UIC, & NAME AS FIRST INPUT FILE. ) C WRITE ( 5, 3 ) 3 FORMAT ( 26H DEFAULT FILE EXTENSIONS: /, $36H OUTPUT =FTN LIST =LST OBJECT =OBJ /, $24H INPUT =RAT COMMAND=CMD ) C RETURN END C C$ RATLST - PRINT A LINE ON LISTING & DO PAGE HOUSEKEEPING CSYKES 28MAY77 C PCN # 69, 10 OCT 79, MAKE STRPUT TYPE INTEGER C PCN #75, DEC 79, ADD FORTRAN LINE NUMBERS TO RATFOR LISTING C PCN #77, JAN 80, CHANGE STRPUT CALLS TO PUTLIN CALLS TO MAP CHAR. SETS. C PCN #90, 11 FEB 80, GET DATE/TIME FROM 'CDATIM'. C SUBROUTINE RATLST ( BUFR, LINE, FLINE ) C INTEGER N, LINE, SCOPY, SITOC, JUNK, FLINE LOGICAL * 1 BUFR ( 1 ), OUTBUF ( 133 ) C C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT C C FILE = CLINE.RAT FOR RATFOR.RAT C PCN #75, DEC 79, ADD FORTRAN LINE NUMBERS TO RATFOR LISTING COMMON / CLINE / LEVEL, INFILE ( 4 ), LINECT, INIF, FTNLN INTEGER LEVEL INTEGER INFILE INTEGER LINECT INTEGER INIF INTEGER FTNLN C C FILE = CICSI.RAT FOR ICSI COMMON / CICSI / INPUT, INDLUN, USER, IFIRST, MCR, CLB ( 81 ) INTEGER INPUT INTEGER INDLUN INTEGER USER INTEGER IFIRST INTEGER MCR LOGICAL * 1 CLB C C FILE = CDATIM.RAT FOR RATFOR COMMON / CDATIM / DATIM ( 25 ) LOGICAL * 1 DATIM C LOGICAL * 1 STARSS (13) C C ERRORS (LINE=HUGE) WITHIN INCLUDED/NL FILES ARE LISTED, DATA STARSS/1H*,1H*,1H*,1H*,1H*,1H*,1H*,1H*,1H*,1H*,1H*,1H*,0/ N = 1 20127 IF (.NOT.( N .LE. LEVEL)) GOTO 20129 IF (.NOT.( LST ( N ) .EQ. 0 .AND. LINE .LE. 9999 )) GOTO 20130 RETURN C 20130 CONTINUE 20128 N = N + 1 GOTO 20127 20129 CONTINUE IF (.NOT.( PLINE .GT. 57 .OR. BUFR ( 1 ) .EQ. 12 )) GOTO 20132 OUTBUF ( 1 ) = 12 OUTBUF ( 2 ) = 0 CALL PUTLIN ( OUTBUF, 6, 32 ) OUTBUF ( 1 ) = 32 CALL PUTLIN ( OUTBUF, 6, 32 ) CALL PUTLIN ( OUTBUF, 6, 32 ) CALL PUTLIN ( OUTBUF, 6, 32 ) PAGE = PAGE + 1 CALL SPAD ( OUTBUF, 77 ) CALL SINSRT ( 21HRATFOR RSX/V 21-O-102, OUTBUF ( 1 ) ) CALL SINSRT ( DATIM, OUTBUF ( 35 ) ) CALL SINSRT ( 4HPAGE, OUTBUF ( 71 ) ) JUNK = SITOC ( PAGE, OUTBUF ( 77 ), 4 ) CALL PUTLIN ( OUTBUF, 6, 32 ) CALL PUTLIN ( CLB, 6, 32 ) OUTBUF ( 1 ) = 32 OUTBUF ( 2 ) = 0 CALL PUTLIN ( OUTBUF, 6, 32 ) CALL PUTLIN ( OUTBUF, 6, 32 ) PLINE = 6 IF (.NOT.( BUFR ( 1 ) .EQ. 12 )) GOTO 20134 RETURN 20134 CONTINUE 20132 CONTINUE OUTBUF ( 1 ) = 0 CALL SPAD ( OUTBUF, 7 ) IF (.NOT.( FLINE .GT. 0 )) GOTO 20136 OUTBUF ( 1 ) = 40 N = SITOC ( FLINE, OUTBUF ( 2 ), 4 ) OUTBUF ( N + 2 ) = 41 20136 CONTINUE IF (.NOT.( LINE .GT. 0 )) GOTO 20138 IF (.NOT.( LINE .GT. 9999 )) GOTO 20140 JUNK = SCOPY ( STARSS, OUTBUF ( 1 ), 15, JUNK ) GOTO 20141 20140 CONTINUE JUNK = SITOC ( LINE, OUTBUF ( 7 ), 5 ) 20141 CONTINUE 20138 CONTINUE CALL SPAD ( OUTBUF, 21 ) N = 1 20142 IF (.NOT.( N .LE. 4)) GOTO 20144 IF (.NOT.( N .LE. LEVEL - 1 )) GOTO 20145 OUTBUF ( 11 + N ) = 42 20145 CONTINUE 20143 N = N + 1 GOTO 20142 20144 CONTINUE JUNK = SCOPY ( BUFR, OUTBUF ( 14 + 4 ), 132 - 14 - 4, JUNK ) CALL PUTLIN ( OUTBUF, 6, 32 ) PLINE = PLINE + 1 RETURN END C C C$ SYNERR - REPORT RATFOR SYNTAX ERRORS CSYKES 28SEP76,20MAY77 C PCN # 57, 31 AUG 79, ALWAYS PRINT ERRORS ON TERMINAL C SUBROUTINE SYNERR ( MSG ) C LOGICAL * 1 BUFOUT ( 91 ), MSG ( 91 ) INTEGER I, LASTC EQUIVALENCE ( BUFOUT, HEADER ) C FILE= COUTLN.RAT FOR RATFOR.RAT COMMON / COUTLN / OUTP, OUTBUF ( 91 ) INTEGER OUTP LOGICAL * 1 OUTBUF C FILE = CLIST. RAT FOR RATFOR.RAT ; SYKES,26SEP76 COMMON / CLIST / LST ( 4 ), PLINE, PAGE, OUTPUT, ERRORS, IFPNT, $DEBUG, INDXIT INTEGER LST INTEGER PLINE INTEGER PAGE INTEGER ERRORS INTEGER OUTPUT INTEGER IFPNT INTEGER DEBUG INTEGER INDXIT LOGICAL * 1 HEADER (19) C DATA HEADER/1HC,1H*,1H*,1H*,1HR,1HA,1HT,1HF,1HO,1HR,1H ,1HE,1HR,1 $HR,1HO,1HR,1H:,1H ,0/ LASTC = 19 I = 1 20147 IF (.NOT.( MSG ( I ) .NE. 0 .AND. MSG ( I ) .NE. 46 .AND. LASTC $.LT. 90)) GOTO 20149 BUFOUT ( LASTC ) = MSG ( I ) LASTC = LASTC + 1 20148 I = I + 1 GOTO 20147 20149 CONTINUE BUFOUT ( LASTC ) = 0 ERRORS = ERRORS + 1 C OUTPUT TO STANDARD FILE IF (.NOT.( OUTP .GT. 0 )) GOTO 20150 CALL OUTDON 20150 CONTINUE CALL PUTLIN ( BUFOUT, 7, 0 ) C C OUTPUT TO LISTING FILE, AND-OR TO TERMINAL IF (.NOT.( LST ( 1 ) .EQ. 1 )) GOTO 20152 CALL RATLST ( BUFOUT ( 2 ), 32767, 0 ) C ELSE #PCN # 57 20152 CONTINUE CALL ICSIE ( BUFOUT ( 2 ) ) C RETURN END