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

1.1     ! root        1:       SUBROUTINE ASSASF(IGP)
        !             2:       INTEGER STMT, PSTMT, PDSA, EXPR, DSA, BNEXT, SYMHD
        !             3:       LOGICAL ERR, SYSERR, ABORT, ASF, DOVAR
        !             4:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !             5:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !             6:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !             7:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !             8:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !             9: C
        !            10: C     PROCESSES ARITHMETIC STMT FCNS AND ASSIGNMENT STMTS
        !            11: C     FIRST LOOKS FOR ELEMENT ON RHS. AND TYPES IT
        !            12: C
        !            13:       CALL NEXTOK(PSTMT, K2, K)
        !            14:       ASF = .FALSE.
        !            15:       IF (K.NE.0) GO TO 180
        !            16:       K = LOOKUP(K2,.FALSE.)
        !            17:       IF (SYSERR) GO TO 190
        !            18:       I1 = IGATT1(K,1)
        !            19:       IF (I1.NE.0) GO TO 10
        !            20:       I1 = 1
        !            21:       IF (STMT(PSTMT).LE.43 .AND. STMT(PSTMT).GE.38) I1 = 2
        !            22:       CALL SATT1(K, 1, I1)
        !            23: C
        !            24: C     LOOK FOR A "("  ; FIND ARRAY = CASE AND SEND IT TO ERROR
        !            25: C     FIND ARRAY ELEMENT = , ID = CASES AND SEND THEM TO
        !            26: C     ASSIGNMENT CODE
        !            27: C
        !            28:    10 I2 = IGATT1(K,7)
        !            29:       I1 = MOD(I1,8)
        !            30:       IF (STMT(K2).NE.65 .AND. I2.NE.0) GO TO 180
        !            31:       IF (STMT(K2).NE.65 .OR. I2.NE.0) GO TO 240
        !            32: C
        !            33: C     ASF DEFN
        !            34: C
        !            35:       ITYP = 31
        !            36:       ASF = .TRUE.
        !            37:       IGP = 4
        !            38:       NUM = 0
        !            39:       IASF = K
        !            40:    20 PSTMT = K2 + 1
        !            41:       IF (PSTMT.GE.NSTMT) GO TO 180
        !            42: C
        !            43: C     ASF HAS LIST OF SCALAR VARIABLES; THEY ARE TYPED AND USAGE SET
        !            44: C
        !            45:       CALL NEXTOK(PSTMT, K2, I)
        !            46:       IF (I.EQ.0) GO TO 30
        !            47:       CALL ERROR1(17H ILLEGAL ASF DEFN, 17)
        !            48:       GO TO 190
        !            49:    30 I = LOOKUP(K2,.FALSE.)
        !            50:       IF (SYSERR) GO TO 190
        !            51:       NUM = NUM + 1
        !            52:       I2 = IGATT1(I,1)
        !            53:       IF (I2.GT.0) GO TO 40
        !            54:       I2 = 1
        !            55:       IF (STMT(PSTMT).LE.43 .AND. STMT(PSTMT).GE.38) I2 = 2
        !            56:       CALL SATT1(I, 1, I2)
        !            57:    40 I2 = IGATT1(I,8)
        !            58:       IF (I2.EQ.0) GO TO 50
        !            59:       IF (I2.EQ.1) GO TO 60
        !            60:       CALL ERROR1(29H ILLEGAL VARIABLE IN ASF DEFN, 29)
        !            61:       GO TO 210
        !            62:    50 CALL SATT1(I, 8, 1)
        !            63: C     STORE PTR TO CURRENT ASF-FCN ENTRY IN SYMBOL
        !            64: C     TABLE IN 3D WORD OF ASF-DUMMY ENTRY IN SYM TABLE
        !            65:    60 DSA(I+2) = K
        !            66: C
        !            67: C     LIST OF INDICES OF ASF ARGS IS HUNG OFF OF ASF DEF IN DSA
        !            68: C
        !            69:       IF (DSA(K+2).EQ.0) GO TO 120
        !            70:       L = DSA(K+2)
        !            71:    70 IF (DSA(L+1).EQ.0) GO TO 80
        !            72:       L = DSA(L+1)
        !            73:       GO TO 70
        !            74:    80 IF (NEXT+2.LT.BNEXT) GO TO 100
        !            75:    90 CALL ERROR1(33H IN ASSASF, TABLE OVERFLOW OF DSA, 33)
        !            76:       SYSERR = .TRUE.
        !            77:       GO TO 190
        !            78:   100 DSA(L+1) = NEXT
        !            79:   110 DSA(NEXT) = I
        !            80:       DSA(NEXT+1) = 0
        !            81:       NEXT = NEXT + 2
        !            82:       GO TO 130
        !            83:   120 IF (NEXT+2.GE.BNEXT) GO TO 90
        !            84:       DSA(K+2) = NEXT
        !            85:       GO TO 110
        !            86:   130 IF (STMT(K2).NE.62) GO TO 170
        !            87: C
        !            88: C     CHECK FOR TWO ELEMENTS ONLIST BEING THE SAME ID
        !            89: C
        !            90:       I2 = DSA(K+2)
        !            91:       DO 160 I=1,NUM
        !            92:         L = DSA(K+2)
        !            93:         DO 150 J=1,NUM
        !            94:           IF (I.EQ.J) GO TO 140
        !            95:           IF (DSA(L).NE.DSA(I2)) GO TO 140
        !            96:           CALL ERROR1(18H ILLEGAL ASF-DUMMY, 18)
        !            97:           CALL SATT1(K, 8, 0)
        !            98:           GO TO 190
        !            99:   140     L = DSA(L+1)
        !           100:   150   CONTINUE
        !           101:         I2 = DSA(I2+1)
        !           102:   160 CONTINUE
        !           103:       GO TO 200
        !           104:   170 IF (STMT(K2).EQ.68) GO TO 20
        !           105:   180 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !           106:   190 RETURN
        !           107: C
        !           108: C     = AND EXPR CHECK
        !           109: C
        !           110:   200 PSTMT = K2 + 1
        !           111:   210 IF (PSTMT.GE.NSTMT) GO TO 180
        !           112:       IF (STMT(PSTMT).NE.63) GO TO 180
        !           113:       PSTMT = PSTMT + 1
        !           114:       IF (PSTMT.GE.NSTMT) GO TO 180
        !           115:       L = EXPR(I)
        !           116:       IF (SYSERR) GO TO 190
        !           117: C
        !           118: C     CHECK THAT ASF WAS NOT DEFINED RECURSIVELY, SET USAGE
        !           119: C
        !           120:       IF (.NOT.ASF) GO TO 230
        !           121:       I2 = IGATT1(K,8)
        !           122:       IF (I2.EQ.0) GO TO 220
        !           123:       CALL ERROR1(17H ILLEGAL ASF NAME, 17)
        !           124:       GO TO 190
        !           125:   220 CALL SATT1(K, 8, 2)
        !           126:   230 IF (L/8.EQ.1) GO TO 280
        !           127:       L = MOD(L,8)
        !           128: C
        !           129: C     COMPARE TYPES OF RHS AND LHS
        !           130: C
        !           131:       IF ((L.EQ.3 .AND. I1.EQ.3) .OR. (L.EQ.4 .AND. I1.EQ.4) .OR.
        !           132:      *    (L.LE.2 .AND. I1.LE.2) .OR. (L.EQ.5 .AND. I1.EQ.5)) GO TO 190
        !           133:       IF (.NOT.(L.EQ.2 .AND. I1.EQ.5 .OR. L.EQ.5 .AND. I1.EQ.2)) CALL
        !           134:      *    ERROR1(38H INCOMPATIBLE DATA TYPES IN ASSIGNMENT, 38)
        !           135:       GO TO 190
        !           136: C
        !           137: C     PROCESSING  FOR ASSIGNMENT STMT
        !           138: C
        !           139:   240 I = IGATT1(K,8)
        !           140:       IF (I.NE.0) GO TO 250
        !           141:       I = 10
        !           142:       CALL SATT1(K, 8, 10)
        !           143:   250 IF (I.EQ.10 .OR. (I.EQ.4 .AND. K.EQ.NAME)) GO TO 260
        !           144:       CALL ERROR1(31H CANNOT ASSIGN VALUE TO THIS ID, 31)
        !           145:       GO TO 190
        !           146:   260 CALL SATT1(K, 5, 1)
        !           147:       IF (STMT(K2).EQ.65) GO TO 270
        !           148:       IF (DOVAR(K)) CALL ERROR1(
        !           149:      *    57H ILLEGAL TO CHANGE VALUE OF CONTROL VARIABLE OR DO LIMITS,
        !           150:      *    57)
        !           151:       PSTMT = K2
        !           152:       GO TO 210
        !           153:   270 PSTMT = K2 + 1
        !           154:       IF (PSTMT.GE.NSTMT) GO TO 180
        !           155:       CALL SUBS(I, I2)
        !           156: C
        !           157: C     PEEL SUBSCRIPTS OFF
        !           158: C
        !           159:       IF (SYSERR .OR. ERR) GO TO 190
        !           160:       PSTMT = I
        !           161:       GO TO 210
        !           162:   280 CALL ERROR1(30H ILLEGAL USE OF ARRAY VARIABLE, 30)
        !           163:       GO TO 190
        !           164:       END

unix.superglobalmegacorp.com

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