Annotation of researchv10no/cmd/pfort/ARDECL.f, revision 1.1

1.1     ! root        1:       LOGICAL FUNCTION ARDECL(K2, KK)
        !             2: C
        !             3: C     K2 IS INDEX OF END OF ARRAY DECLARATOR IN STMT
        !             4: C     KK IS SYMBOL TABLE INDEX FOR THIS ARRAY
        !             5: C     PROCESSES ARRAY DECLARATOR AND DECLARATOR CONSTRUCTS.
        !             6: C     CAN EXPECT ARRAY DECLARATOR, ARRAY ELEMENT; ARRAY, VARIABLE.
        !             7: C     ENTERS INTO SYMBOL TABLE AND TYPES ID;  SETS USAGE ON ARRAY
        !             8: C     DECLARATOR
        !             9: C     CHECKS SYNTAX OF BOUNDS; IF VARIABLY DIMENSIONED, BOUNDS
        !            10: C     VARIABLE AND ARRAY ITSELF MUST BE DUMMY ARGUMENTS.
        !            11: C     ACCUMULATES TOTAL LENGTH OF ARRAY WITH CONSTANT BOUNDS AND STORES
        !            12: C     IT OFF ARRAY SYMBOL TABLE ENTRY.  -1 LENGTH INDICATES VARIABLE
        !            13: C     DIMENSION
        !            14: C     CALLED BY DIMENSION, TYPE, COMMON, EQUIVALENCE, DATA STMT.
        !            15: C
        !            16: C     ARRY IS TRUE FOR ARRAY ELEMENTS/ARRAY DECLARATORS
        !            17: C     FALSE FOR ARRAYS AND VARIABLES
        !            18: C     CORNER IS TRUE FOR ARRAY ELEMENTS WITH (1,1,1)--NEEDED IN EQUIV.
        !            19: C     STMT ;  IF SUCH AN ELEMENT IS RECOGNIZED KK IS SENT AS ITS
        !            20: C     NEGATIVE.
        !            21: C
        !            22:       LOGICAL ERR, SYSERR, ABORT, TOKPNO, VAR, CORNER, ARRY, FLUSH
        !            23:       INTEGER STMT, PSTMT, PDSA, BNEXT, SYMHD, DSA
        !            24:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !            25:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !            26:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !            27:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !            28:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !            29:       ERR = .FALSE.
        !            30:       FLUSH = .FALSE.
        !            31:       ARRY = .FALSE.
        !            32:       CORNER = .TRUE.
        !            33:       ARDECL = .FALSE.
        !            34: C
        !            35: C     CHECK NAME; CAN'T HAVE BEEN USED PREVIOUSLY AS A NONVAR;
        !            36: C     CHECK TO SEE IF HAVE ARRAY ELEMENT/ARRAY DECLARATOR. IF SO
        !            37: C     ARRY=.TRUE.
        !            38: C
        !            39:       ICNT = 0
        !            40:       CALL NEXTOK(PSTMT, K2, I1)
        !            41:       IF (I1.EQ.0) GO TO 10
        !            42:       CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !            43:       ERR = .TRUE.
        !            44:       GO TO 280
        !            45:    10 IF (STMT(K2).EQ.65) ARRY = .TRUE.
        !            46:       KK = LOOKUP(K2,.FALSE.)
        !            47:       IF (SYSERR) GO TO 70
        !            48:       ARDECL = .TRUE.
        !            49:       L = IGATT1(KK,8)
        !            50:       IF (L.EQ.0 .OR. L.EQ.10) GO TO 30
        !            51:       IF (ITYP.LT.6 .AND. L.EQ.13) GO TO 30
        !            52:    20 CALL ERROR1(45H ILLEGAL USE OF PREVIOUSLY DEFINED IDENTIFIER, 45)
        !            53:       ERR = .TRUE.
        !            54:       GO TO 280
        !            55: C
        !            56: C     SET TYPE (EXPLICITLY FOR TYPE STMTS)
        !            57: C
        !            58:    30 I1 = IGATT1(KK,1)
        !            59:       IF (ITYP.GE.6) GO TO 50
        !            60: C
        !            61: C     TYPE EXPLICITLY
        !            62: C
        !            63:       IF (I1.GE.8) GO TO 40
        !            64:       CALL SATT1(KK, 1, ITYP+7)
        !            65:       GO TO 60
        !            66:    40 CALL ERROR1(34H IDENTIFIER TYPED EXPLICITLY TWICE, 34)
        !            67:       GO TO 60
        !            68: C
        !            69: C     TYPE IMPLICITLY
        !            70: C
        !            71:    50 IF (I1.GT.0) GO TO 60
        !            72:       I1 = 1
        !            73:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !            74:       CALL SATT1(KK, 1, I1)
        !            75: C
        !            76: C     IF NOT ARRAY ELEMENT/ARAY DECLARATOR--RECOGNITION COMPLETE
        !            77: C
        !            78: C     CHECK NOT A DUMMY ARG IN COMMON, DATA, EQUIV STMT
        !            79: C
        !            80:    60 IF (ARRY) GO TO 80
        !            81:       IF (IGATT1(KK,7).EQ.0) GO TO 65
        !            82:       IF (ITYP.EQ.12)
        !            83:      1 CALL ERROR1(46H WARNING - ILLEGAL USE OF ARRAY IN EQUIVALENCE
        !            84:      2  , 46)
        !            85:       IF (ITYP.EQ.13)
        !            86:      1 CALL ERROR1(39H WARNING - ILLEGAL USE OF ARRAY IN DATA, 39)
        !            87:    65 CONTINUE
        !            88:       I1 = IGATT1(KK,4)
        !            89:       IF (.NOT.(I1.EQ.1 .AND. (ITYP.EQ.8 .OR. ITYP.EQ.12 .OR.
        !            90:      *    ITYP.EQ.13))) GO TO 70
        !            91:       ERR = .TRUE.
        !            92:       CALL ERROR1(32H ILLEGAL USAGE OF DUMMY ARGUMENT, 32)
        !            93:    70 RETURN
        !            94:    80 ISIZ = 1
        !            95:       VAR = .FALSE.
        !            96:       IF (L.EQ.0) CALL SATT1(KK, 8, 10)
        !            97: C
        !            98: C     LOOP TO FIND BOUNDS;  CHECK THAT VARIABLE BOUNDS ARE DUMMY ARGS
        !            99: C     SET ADJUSTIBLE DIMENSION VARIABLE BIT; SET TYPE IMPLICITLY IF NOT
        !           100: C     ALREADY SET
        !           101: C     ACCUMULATE LENGTH IF IN DIMENSION, COMMON, OR TYPE STMT.
        !           102: C     CHECK FOR REPEAT DIMENSIONING IN THOSE STMTS
        !           103: C
        !           104:       L = IGATT1(KK,7)
        !           105:       IF (ITYP.EQ.13 .OR. ITYP.EQ.12) GO TO 90
        !           106:       IF (L.EQ.0) GO TO 100
        !           107:       CALL ERROR1(44H ILLEGAL USE OF PREVIOUSLY DIMENSIONED ARRAY, 44)
        !           108:       ERR = .TRUE.
        !           109:       GO TO 270
        !           110:    90 IF (L.EQ.0) CALL ERROR1(
        !           111:      *    44H ILLEGAL USE OF ARRAY NOT PREVIOUSLY DEFINED, 44)
        !           112:   100 IF (K2+1.LT.NSTMT) GO TO 120
        !           113:   110 CALL ERROR1(28H ILLEGAL ARRAY BOUNDS SYNTAX, 28)
        !           114:       GO TO 270
        !           115: C
        !           116: C     CHECK FOR POSITIVE INTEGER BOUND
        !           117: C
        !           118:   120 PSTMT = K2 + 1
        !           119:       IF (.NOT.TOKPNO(PSTMT,I1,LL)) GO TO 130
        !           120:       IF (ITYP.EQ.7 .OR. ITYP.EQ.8 .OR. ITYP.LT.6) ISIZ = ISIZ*LL
        !           121:       IF (ITYP.NE.12) GO TO 170
        !           122:       IF (I1-K2.NE.2 .OR. STMT(PSTMT).NE.1) CORNER = .FALSE.
        !           123:       GO TO 170
        !           124: C
        !           125: C     SEEK A VARIABLE BOUND
        !           126: C
        !           127:   130 CALL NEXTOK(PSTMT, I1, L)
        !           128:       IF (L.NE.0) GO TO 110
        !           129:       IF (ITYP.LT.6 .OR. ITYP.EQ.7) GO TO 140
        !           130:       CALL ERROR1(32H VARIABLE DIMENSION ILLEGAL HERE, 32)
        !           131:       ERR = .TRUE.
        !           132:       GO TO 270
        !           133:   140 VAR = .TRUE.
        !           134:       L = LOOKUP(I1,.FALSE.)
        !           135:       IF (SYSERR) GO TO 70
        !           136:       N = IGATT1(L,8)
        !           137:       IF (N.NE.0 .AND. N.NE.10) GO TO 20
        !           138:       I2 = IGATT1(L,4)
        !           139:       IF (I2.EQ.1) GO TO 150
        !           140:       CALL ERROR1(42H ILLEGAL USAGE OF VARIABLE IN ARRAY BOUNDS, 42)
        !           141:       ERR = .TRUE.
        !           142:       GO TO 270
        !           143:   150 I2 = IGATT1(KK,4)
        !           144:       IF (I2.EQ.1) GO TO 160
        !           145:       CALL ERROR1(50H VARIABLY DIMENSIONED ARRAY MUST BE DUMMY ARGUMENT,
        !           146:      *    50)
        !           147:       ERR = .TRUE.
        !           148:       GO TO 270
        !           149:   160 CALL SATT1(L, 6, 1)
        !           150:       CALL SATT1(L, 8, 10)
        !           151:       N = IGATT1(L,1)
        !           152:       IF (N.GT.0) GO TO 170
        !           153:       N = 1
        !           154:       IF (STMT(K2+1).GE.38 .AND. STMT(K2+1).LE.43) N = 2
        !           155:       CALL SATT1(L, 1, N)
        !           156:       GO TO 170
        !           157: C
        !           158: C     FIND "," AND ACCUMULATE LENGTH
        !           159: C
        !           160:   170 ICNT = ICNT + 1
        !           161:       IF (ICNT.LE.3) GO TO 180
        !           162:       ISIZ = ISIZ/LL
        !           163:       CALL ERROR1(30H WARNING - TOO MANY SUBSCRIPTS, 30)
        !           164:       ICNT = 3
        !           165:       FLUSH = .TRUE.
        !           166:       GO TO 190
        !           167:   180 K2 = I1
        !           168:       IF (STMT(K2).EQ.68) GO TO 100
        !           169: C
        !           170: C     FIND ")" STORE LENGTH OR -1 INTO ARRAY SYMBOL TABLE ELEMENT
        !           171: C
        !           172:       IF (STMT(K2).NE.62) GO TO 110
        !           173:   190 IF (ITYP.EQ.13 .OR. ITYP.EQ.12) GO TO 260
        !           174:       CALL SATT1(KK, 7, ICNT)
        !           175: C
        !           176: C     STORE LENGTH OF ARRAY
        !           177: C
        !           178:       IF (VAR) GO TO 240
        !           179:       IF (DSA(KK+2).EQ.0) GO TO 200
        !           180:       N = DSA(KK+2)
        !           181:       DSA(N) = ISIZ
        !           182:       GO TO 220
        !           183:   200 IF (NEXT+2.GE.BNEXT) GO TO 210
        !           184:       DSA(KK+2) = NEXT
        !           185:       DSA(NEXT) = ISIZ
        !           186:       DSA(NEXT+1) = 0
        !           187:       NEXT = NEXT + 2
        !           188:       GO TO 220
        !           189:   210 SYSERR = .TRUE.
        !           190:       CALL ERROR1(33H IN ARDECL, TABLE OVERFLOW OF DSA,33)
        !           191:   220 IF (FLUSH) GO TO 270
        !           192:   230 K2 = K2 + 1
        !           193:       GO TO 70
        !           194: C
        !           195: C     FIXUP FOR VARIABLY DIMENSIONED ARRAYS
        !           196: C
        !           197:   240 IF (DSA(KK+2).EQ.0) GO TO 250
        !           198:       N = DSA(KK+2)
        !           199:       DSA(N) = -1
        !           200:       GO TO 220
        !           201:   250 IF (NEXT+2.GE.BNEXT) GO TO 210
        !           202:       DSA(KK+2) = NEXT
        !           203:       DSA(NEXT) = -1
        !           204:       DSA(NEXT+1) = 0
        !           205:       NEXT = NEXT + 2
        !           206:       GO TO 220
        !           207: C
        !           208: C     CHECK FORCORNER ELEMENT IN EQUIVALENCE STMT
        !           209: C
        !           210:   260 IF (ITYP.NE.12) GO TO 220
        !           211:       IF (CORNER) KK = -KK
        !           212:       GO TO 220
        !           213: C
        !           214: C     CODE TO FLUSH CONSTRUCT--TO NEXT ")"
        !           215: C
        !           216:   270 IF (K2.EQ.NSTMT) GO TO 70
        !           217:       IF (STMT(K2).EQ.62) GO TO 230
        !           218:       K2 = K2 + 1
        !           219:       GO TO 270
        !           220: C
        !           221: C     CODE TO FLUSH TO NEXT CONSTRUCT ")",",", "/"
        !           222: C
        !           223:   280 K = 90
        !           224:       IF (ITYP.EQ.8 .OR. ITYP.EQ.13) K = 67
        !           225:   290 IF (K2.EQ.NSTMT) GO TO 70
        !           226:       L = STMT(K2)
        !           227:       IF (L.EQ.65) GO TO 270
        !           228:       IF (L.EQ.68 .OR. L.EQ.K) GO TO 70
        !           229:       K2 = K2 + 1
        !           230:       GO TO 290
        !           231:       END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.