BYTE IA(80),IB(4000),IC(200) INTEGER*4 EQUTBL(200),VALUE I = 2 II = 2 IKEY = 0 IVERB = 0 IFLG = 0 CALL ASSIGN(1,'SY:KEYWRD.TBL') CALL ASSIGN(6,'SY:KEYWRD.FTN') WRITE(6,1060) 1 CONTINUE READ(1,1010,END=500)IA IF(IA(1) .EQ. '*') GO TO 200 !SUBFUNCTION DEFINITION TABLES IF(IA(1) .EQ. '#') GO TO 100 !EQUIVALENCE TABLES IF(IA(1) .NE. '$') GO TO 5 IF(IVERB .NE. 0) GO TO 2 IVERB = IKEY + 4 GO TO 1 2 IF(IFLG .EQ. 0) IFLG = IKEY + 4 GO TO 1 !READ NEXT LINE 5 MAX = 0 DO 10 J = 1,20 IF(IA(J) .EQ. ' ') GO TO 11 10 MAX = MAX + 1 11 CONTINUE IF(MAX .EQ. 0) GO TO 1 !SKIP BLANK LINES IB(I) = MAX I = I + 1 DO 20 J = 1,MAX IB(I) = IA(J) 20 I = I + 1 IKEY = IKEY + 1 IB(1) = IKEY !NUMBER OF TERMS STORED EQUTBL(1) = IKEY + 1 EQUTBL(2) = EQUTBL(1)- 1 GO TO 1 !CONTINUE 100 CONTINUE !DO EQUIVALENCES ISTRT = 2 CALL SYMFND(IB,EQUTBL,IA,80,ISTRT,ITYPE,VALUE) IF(ITYPE .LT. 5) GO TO 210 !NO MORE IN THIS LINE 110 CONTINUE MAX = ISTRT CALL SYMFND(IB,EQUTBL,IA,80,ISTRT,IFUNC,VALUE) IF(IFUNC .NE. 0) GO TO 190 !BAD ONE EQUTBL(2) = EQUTBL(2) + 1 !MAX TERM J = EQUTBL(2) - EQUTBL(1) J = 2*J + 3 EQUTBL(J) = ITYPE EQUTBL(J+1) = -1 MIN = VALUE MAX = ISTRT-1 IKEY = IKEY + 1 IB(1) = IKEY IB(I) = MAX - MIN + 1 I = I + 1 DO 120 J = MIN,MAX IB(I) = IA(J) 120 I = I + 1 GO TO 110 190 WRITE(6,1014) (IA(J),J = 1,MAX) !WRITE LINE PROCESSED GO TO 210 !NEXT LINE 200 CONTINUE 205 ISTRT = 2 CALL SYMFND(IB,EQUTBL,IA,80,ISTRT,ITYPE,VALUE) IF(ITYPE .LE. 4) GO TO 500 !ALL DONE WRITE(6,1015)(IA(J),J = 1,ISTRT-1) IC(II) = ITYPE - 4 !VERB # IC(1) = IC(1) + 1 II = II + 1 K = II + 1 210 READ(1,1010,END=500)IA IF(IA(1) .EQ. '#') GO TO 100 !EQUIVALENCE LINE IF(IA(1) .EQ. '*') GO TO 250 WRITE(6,1016) IA ISTRT = 1 215 CALL SYMFND(IB,EQUTBL,IA,80,ISTRT,ITYPE,VALUE) IF(ITYPE .LT. 0) GO TO 210 IC(II) =IC(II) + 1 IF(ITYPE .GT. 4) ITYPE = ITYPE - IVERB + 4 IC(K) = ITYPE K = K + 1 GO TO 215 250 II = K GO TO 205 500 CONTINUE MAX = EQUTBL(2) - EQUTBL(1) MAX = MAX*2 + 5 WRITE(6,1000) I,K,MAX,I,IVERB,IFLG K = K - 1 I = I - 1 WRITE(6,1001) (IB(J),J=1,I) !WRITE OUT THE KEY DATA WRITE(6,1003) !END DATA WRITE(6,1020) (IC(J),J=1,K) WRITE(6,1003) MAX = MAX - 1 WRITE(6,1012) EQUTBL(2),(EQUTBL(J),J=1,MAX) !WRITE EQUIVALENCE DATA WRITE(6,1003) I = 2 WRITE(6,1005) DO 510 IK = 1,IVERB-4 MAX = I + IB(I) WRITE(6,1002)IK, (IB(J),J=I+1,MAX) I = I + IB(I) + 1 510 CONTINUE WRITE(6,1006) DO 520 IK = 5,IFLG-IVERB+4 MAX = I + IB(I) WRITE(6,1002) IK,(IB(J) , J=I+1,MAX) 520 I = I + IB(I) + 1 WRITE(6,1007) IKEY = EQUTBL(1) - 1 !MAX NON EQUIVALENCE DO 530 IK = 1,IKEY-IFLG+4 MAX = I + IB(I) WRITE(6,1002) IK, (IB(J),J=I+1,MAX) 530 I = I + IB(I) + 1 WRITE(6,1004) 1060 FORMAT(' BLOCK DATA') 1000 FORMAT( 1 ' BYTE IB('I5')' / ' COMMON /KEYWRD/ IVERB,IFLG,IKEY,IB' / 2 ' BYTE IFTABL('I5')' /' COMMON /IFTABL/IFTABL'/ 3 ' INTEGER*4 EQUTBL('I5')'/' COMMON /EQUTBL/ IEQMAX,EQUTBL'/ 3 ' DATA IKEY,IVERB,IFLG/'I5','I5','I5' /') 1001 FORMAT(' DATA IB /'15(I3 ','), 1 /(' 1 '15(I3 ','))) 1002 FORMAT('C KEYWORD# 'I4,10X,20A1) 1003 FORMAT(' 1 0/') 1004 FORMAT(' END') 1005 FORMAT('C ACTION KEY WORDS (VERBS)') 1006 FORMAT('C MODIFIER KEY WORDS') 1007 FORMAT('C FLAG KEY WORDS') 1010 FORMAT(80A1) 1011 FORMAT(10I4) 1012 FORMAT(' DATA IEQMAX/'I5'/ EQUTBL /' 2(I3',') 1 / (' 1 ' 12(I3 ',')) ) 1014 FORMAT('C EQUIVALENT KEYWORDS '80A1) 1015 FORMAT('C'/'C VERB + KEYFUNCTIONS '40A1) 1016 FORMAT('C '80A1) 1020 FORMAT(' DATA IFTABL/'12(I3 ',') 1 /( ' 1 '12(I3 ','))) 1021 FORMAT(12I10) END