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

1.1     ! root        1:       SUBROUTINE SETCOM(PP, K)
        !             2:       LOGICAL SYSERR, ERR, ABORT, BLANK
        !             3:       INTEGER PLAT, DSA, SYMLEN, PP, PDSA, COM, PCOM, R(5), S(3),
        !             4:      *    FINDND, ST, SS(1), FINDCM
        !             5:       INTEGER ZERO(1)
        !             6:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !             7:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !             8:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !             9:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !            10:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !            11:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !            12: C
        !            13: C     COM ENTRY
        !            14: C     WORD 1.....PACKED CHARACTERS OF COMMON-NAME
        !            15: C     WORD 2....TOTAL LENGTH OF COMMON BLOCK
        !            16: C     WORD 3.....1 IF COMMON INITIALIZED BY BLOCK DATA SUBPGM
        !            17: C      0 IF NOT
        !            18: C     WORDS 4-8...TOTAL LENGTHS OF COMPLEX, DOUBLE PRECIS,
        !            19: C     REAL, INTEGER, LOGICAL DATA TYPES RESPECTIVELY
        !            20: C     WORD 9.....INDEX IN LAT OF ENTRY OF P.U. WHICH CONTAINS
        !            21: C     THIS DEFN OF THE COMMON BLOCK
        !            22: C
        !            23: C     FINDS COMMON BLOCK ENTRY IN COM- ELSE CREATES AND INITIALIZES NEW
        !            24: C     ENTRY. CHECKS NEW ENTRY BLOCK NOT ALREADY A SUBPGM NAME.
        !            25: C     GATHERS INFO ON ORDER, TYPE, LENGTH OF ENTRIES IN THE COMMON-
        !            26: C     CHECKS FOR VARIABLY DIMENSIONED ARRAYS.
        !            27: C     FORMS COMMONLIST ENTRY FOR BLOCK OFF SUBPGM AT LAT(PP)
        !            28: C     IF FOUND COMMON IN COM, COMPARES OLD DEFN TO NEW FOR ORDER, LEN,
        !            29: C     TYPE OF ENTRIES; FLAGS INCONSISTENCIES; NOTES IF COMMON IN
        !            30: C     TWO BLOCK DATA PGMS.  COMMON IS AT DSA(K)
        !            31: C
        !            32:       DATA R(1), R(4) /2*1/, R(2), R(3), R(5) /3*2/, ST /1H*/
        !            33:       DATA ZERO(1) /0/
        !            34: C
        !            35: C     CHECK ISNT IN NODE AS PROCEDURE NAME
        !            36: C
        !            37:       IF (FINDND(DSA(K+4),KK)) 20, 20, 10
        !            38:    10 CALL ERROR2(41H COMMON BLOCK HAS SAME NAME AS SUBPROGRAM, 41,
        !            39:      *  DSA(K+4), 1, 1, 1)
        !            40: C
        !            41: C     CHECK IF IN COM ALREADY
        !            42: C
        !            43:    20 KK = FINDCM(DSA(K+4))
        !            44:       IF (KK) 30, 30, 60
        !            45: C
        !            46: C     CREATE NEW ENTRY
        !            47: C
        !            48:    30 IF (PCOM+SYMLEN+5.GT.LCOM) GO TO 260
        !            49:       DO 40 I=1,SYMLEN
        !            50:         L = PCOM + I - 1
        !            51:         LL = K + I + 3
        !            52:         COM(L) = DSA(LL)
        !            53:    40 CONTINUE
        !            54: C
        !            55: C     MARK COMMON SET WHEN IT IS CREATED BY A BLOCK-DATA
        !            56: C     SUBPROGRAM WHICH SET IT
        !            57: C
        !            58:       DO 50 I=1,4
        !            59:         LL = L + I
        !            60:         COM(LL) = 0
        !            61:    50 CONTINUE
        !            62:       COM(LL+1) = PP
        !            63:       IF (IGATT1(NAME,8).EQ.11 .AND. IGATT1(K,2).EQ.1) COM(L+2) = 1
        !            64:       KK = PCOM
        !            65:       PCOM = PCOM + SYMLEN + 5
        !            66: C
        !            67: C     GATHER INFO ABT LENGTH,TYPE,ORDER OF ELEMENTS
        !            68: C
        !            69:    60 L = 0
        !            70:       S(1) = 0
        !            71:       S(2) = 0
        !            72:       S(3) = 0
        !            73:       I = DSA(K+2)
        !            74:    70 IF (I) 130, 130, 80
        !            75: C
        !            76: C     READING LIST OF ELEMENTS IN COMMON-CHECK TYPE,STRUCTURE
        !            77: C
        !            78:    80 K1 = IGATT1(DSA(I),1)
        !            79:       K2 = IGATT1(DSA(I),7)
        !            80:       K1 = MOD(K1,8)
        !            81:       IF (K1.EQ.5) K1 = 2
        !            82: C
        !            83: C     R(I) CONTAINS PROPER ORDER OF TYPE I IN DEFN OF COMMON
        !            84: C
        !            85:       LL = R(K1+1)
        !            86:       IF (LL.LT.L) GO TO 120
        !            87:       IF (K2) 90, 90, 100
        !            88:    90 S(LL) = S(LL) + 1
        !            89:       GO TO 110
        !            90:   100 K2 = DSA(I)
        !            91:       K2 = DSA(K2+2)
        !            92:       S(LL) = S(LL) + DSA(K2)
        !            93:   110 I = DSA(I+1)
        !            94:       L = LL
        !            95:       GO TO 70
        !            96: C
        !            97: C     ACCUMULATE COUNTS OF TYPES-NOTE TYPES OUT OF ORDER CAUSES
        !            98: C     TRUNCATION OF THE DEFINITION
        !            99: C
        !           100:   120 CALL ERROR2(41H ILLEGAL ORDERING OF DATA-TYPES IN COMMON, 41,
        !           101:      *  COM(KK), 1, 1, 0)
        !           102:       CALL ERROR2(1H1, 0, ZERO(1), -1, 0, 1)
        !           103:   130 S(3) = S(1) + S(2)
        !           104: C
        !           105: C     HANG COMMONLIST ENTRY OFF PP NODE, IF NOT ALREADY THERE FROM SET
        !           106: C
        !           107:       L = PP + SYMLEN + 2
        !           108:       I = MATCH(LAT(L),2,-K)
        !           109:       IF (I.GT.0) GO TO 140
        !           110:       I = MATCH(LAT(L),2,KK)
        !           111:       IF (I.LE.0) GO TO 150
        !           112:   140 LAT(I) = KK
        !           113:       GO TO 160
        !           114: C
        !           115: C     CREATE NEW ENTRY
        !           116: C
        !           117:   150 IF (PLAT+3.GT.LLAT) GO TO 280
        !           118:       LAT(PLAT) = KK
        !           119:       LAT(PLAT+1) = 0
        !           120:       LAT(PLAT+2) = LAT(L)
        !           121:       LAT(L) = PLAT
        !           122:       PLAT = PLAT + 3
        !           123:   160 I = KK + SYMLEN
        !           124:       IF (COM(I)) 170, 170, 190
        !           125: C
        !           126: C     NEW DEFN
        !           127: C
        !           128:   170 COM(I) = S(3)
        !           129:       COM(I+2) = S(1)
        !           130:       COM(I+3) = S(2)
        !           131:   180 RETURN
        !           132: C
        !           133: C     COMPARE LENGTHS OF EACH TYPE
        !           134: C
        !           135:   190 L = KK + SYMLEN + 2
        !           136:       BLANK = .FALSE.
        !           137:       CALL S5UNPK(COM(KK), SS(1), 1)
        !           138:       IF (SS(1).EQ.ST) BLANK = .TRUE.
        !           139:       IBR = 0
        !           140:       IF (COM(L+1).NE.S(2)) IBR = 1
        !           141:       IF (COM(L).NE.S(1)) IBR = -1
        !           142: C     BLANK COMMON DEFNS MATCH
        !           143:       IF (IBR.EQ.0 .AND. BLANK) GO TO 180
        !           144: C     NAMED COMMON DEFNS MATCH
        !           145:       IF (IBR.EQ.0 .AND. .NOT.BLANK) GO TO 210
        !           146: C     BLANK COMMON DONT MATCH
        !           147:       IF (IBR.NE.0 .AND. BLANK) GO TO 230
        !           148: C     NAMED COMMONS DONT MATCH -- ERROR
        !           149:  200  CALL ERROR2(25H INCOMPATIBLE COMMON DEFN, 25, COM(KK), 1, 1,
        !           150:      *  0)
        !           151:       K1 = KK + SYMLEN + 4
        !           152:       K1 = COM(K1)
        !           153:       CALL ERROR2(3H IN, 3, LAT(K1), 1, 0, 0)
        !           154:       CALL ERROR2(4H AND, 4, LAT(PP), 1, 0, 1)
        !           155:       IF (BLANK) GO TO 180
        !           156: C
        !           157: C     CHECK DOUBLE SETTING OF BLOCK
        !           158: C
        !           159:   210 IF (IGATT1(K,2).NE.1 .OR. IGATT1(NAME,8).NE.11) GO TO 180
        !           160:       IF (COM(L-1).NE.1) GO TO 220
        !           161:       CALL ERROR2(
        !           162:      *    53H COMMON BLOCK INITIALIZED IN TWO BLOCK DATA SUBPGMS  , 53,
        !           163:      *  COM(KK), 1, 1, 1)
        !           164:       GO TO 180
        !           165:   220 COM(L-1) = 1
        !           166:       GO TO 180
        !           167: C
        !           168: C     CHECK ARE LENGTHENING BLANK COMMON OFF THE END
        !           169: C
        !           170:  230  IF(IBR.EQ.(-1)) GOTO 250
        !           171: C     ARE LENGTHENING OFF END
        !           172: C     KEEP LONGEST DEFN
        !           173:       IF (COM(L+1).GT.S(2)) GO TO 180
        !           174:   240 COM(L+1) = S(2)
        !           175:       LL = SYMLEN + KK
        !           176:       COM(LL) = S(3)
        !           177:       COM(LL+4) = PP
        !           178:       GO TO 180
        !           179: C     SEE ARE REALLY LENGTHENING OFF END IF
        !           180: C     DEFNS DIFFER IN FIRST DATA TYPE AREAS
        !           181:   250 IF (S(1).LT.COM(L) .AND. S(2).EQ.0) GO TO 180
        !           182:       IF (.NOT.(S(1).GT.COM(L) .AND. COM(L+1).EQ.0)) GO TO 200
        !           183:       COM(L) = S(1)
        !           184:       GO TO 240
        !           185:   260 CALL ERROR1(33H IN SETCOM, TABLE OVERFLOW OF COM, 33)
        !           186:   270 SYSERR = .TRUE.
        !           187:       GO TO 180
        !           188:   280 CALL ERROR1(33H IN SETCOM, TABLE OVERFLOW OF LAT, 33)
        !           189:       GO TO 270
        !           190:       END

unix.superglobalmegacorp.com

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