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

1.1     ! root        1:       SUBROUTINE SETREF(GREEN,INDIR)
        !             2:       INTEGER CHK1, KBR(1)
        !             3:       INTEGER REF, PREF, PDSA, DSA, PLAT, PNODE, FINDND, SYMLEN
        !             4:       LOGICAL ERR, SYSERR, ABORT, COMPAR, GREEN, INDIR
        !             5:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !             6:       COMMON/ SCR1/ LINODE, INODE(500)
        !             7:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !             8:       COMMON /CREF/ LREF, PREF, REF(100)
        !             9:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !            10:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !            11:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !            12:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !            13:       COMMON /TABL/ NEXT, LABHD, ISYM, IBNEXT
        !            14:       DATA IBR /1/, JBR /3/, KBR(1) /0/
        !            15: C
        !            16: C     GREEN = T IF ENCOUNTER EXTERNAL ENTITIES AT ALL
        !            17: C     INDIR = T IF ENCOUNTER ANY INDIRECT REFS
        !            18: C      READS IN ALL REFS FOR A PROGRAM UNIT; FINDS MISSING
        !            19: C      SUBPROGRAM REFS AND DISCARDS THEM; CHECKS ASF REFS AND
        !            20: C      DISCARDS THEM; WRITES INDIRECT REFS OUT ON I6 WITHOUT
        !            21: C      PROCESSING; DOES MINIMAL CHECKING OF DIRECT REFS
        !            22: C      CREATING PAR/DESC LINKS AND WRITING GOOD
        !            23: C      REFS OUT ON I6, AFTER DONE WITH REFS, SEARCHES
        !            24: C      FOR EXTERNAL ENTITIES (USAGE 13) TO FIX UP LEVELS
        !            25: C
        !            26:       IJK = FINDND(DSA(NAME+4),IIJK)
        !            27: C      READ IN A NEW REF; IF HIT END OF REFS RECORD
        !            28: C      END OF REFS ON I6 AND RETURN
        !            29:    10 IF (INREF(I5)) 20, 20, 80
        !            30: C      WRITE END OF REFS
        !            31:    20 WRITE (I6) IBR, JBR, IBR
        !            32: C      CHECK FOR NON DUMMY EXTERNALS IN SYMBOL TABLE WHICH
        !            33: C      C AUSE CHANGES IN LEVEL CALCS
        !            34:       K = ISYM
        !            35:    30 IF (K) 40, 40, 50
        !            36:  150  SYSERR=.TRUE.
        !            37:       CALL ERROR1(33H IN SETREF, TABLE OVERFLOW OF LAT,33)
        !            38:    40 RETURN
        !            39:    50 IF (IGATT1(K,8).NE.13 .OR. IGATT1(K,4).EQ.1) GO TO 70
        !            40:       L = FINDND(DSA(K+4),IL)
        !            41:       IF (L.NE.0) GO TO 60
        !            42:       CALL ERROR2(18H MISSING EXTERNAL , 18, DSA(K+4), 1, 1, 0)
        !            43:       CALL ERROR2(1H1,0,KBR(1),-1, 0, 1)
        !            44:       GO TO 70
        !            45: C     FOUND AN EXTERNAL ENTITY
        !            46:  60   GREEN = .TRUE.
        !            47: C     ENTER ONTO GREEN LINKS LIST AT NODE
        !            48:       N = IJK + SYMLEN + 3
        !            49: C     J IS HEAD OF GREEN LINKS LIST (SEE SETPD)
        !            50:  160  IF(LAT(N+1).LE.0) GOTO 170
        !            51:       N = LAT(N+1)
        !            52:       GOTO 160
        !            53:  170  J = N+1
        !            54:       IF(PLAT+2.GT.LLAT) GOTO 150
        !            55:       LAT(PLAT) = -L
        !            56:       LAT(PLAT+1) = LAT(J)
        !            57:       LAT(J) = -PLAT
        !            58:       PLAT = PLAT+2
        !            59:       IF(-2.EQ.INODE(IL).OR.INODE(IL).GT.INODE(IIJK)) GOTO 70
        !            60:       INODE(IL) = INODE(IIJK) + 1
        !            61:       CALL ASLEV(-IL)
        !            62:       IF (ABORT .OR. SYSERR) GO TO 40
        !            63:    70 K = DSA(K+3)
        !            64:       GO TO 30
        !            65: C
        !            66: C      REF IS  WD1--NUMBER OF ARGS(2 WD ENTRIES)
        !            67: C            WD2--PTR TO PGM UNIT CALLED IN DSA
        !            68: C            WD3--STMT NO OF  CALL
        !            69: C            WD4--CODE, 0 FOR SUBR REFS; 1 FOR FCN REFS
        !            70: C             WD5+-ARG ENTRIES (WD1-SYMBOL TABLE INDEX OR 0
        !            71: C                             WD2-TYPE/STRUCTURE INFO)
        !            72: C
        !            73:    80 IF (REF(4).LT.4) GO TO 100
        !            74: C
        !            75: C      ASF REFERENCE; CHECKED AND THEN DISCARDED
        !            76: C
        !            77:       K1 = PNODE - 1
        !            78:       DO 90 I=1,K1
        !            79:         IF (NODE(I).GE.0) GO TO 90
        !            80:         IJR = IABS(NODE(I))
        !            81:         L = IJR + SYMLEN + 3
        !            82:         L = LAT(L)
        !            83:         K = REF(2)
        !            84: C
        !            85: C      IF HAVE ASF REF, FIND ASF BY NAME AND PAR CHECKS
        !            86: C
        !            87:         IF (COMPAR(DSA(K+4),LAT(IJR)) .AND. LAT(L).EQ.IJK) GO TO 110
        !            88:    90 CONTINUE
        !            89:       L = REF(2) + 4
        !            90:       CALL ERROR2(18H MISSING ASF DEFN , 18, DSA(L), 1, 1, 0)
        !            91:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !            92:       GO TO 10
        !            93: C
        !            94: C      WRITE INDIRECT REF OUT ON I6
        !            95: C
        !            96:   100 K2 = IGATT1(REF(2),4)
        !            97:       IF(K2.EQ.0) GOTO 140
        !            98:       INDIR = .TRUE.
        !            99:       GOTO 130
        !           100: C      CHECK FOR MISSING SUBPROGRAM
        !           101:  140  K1 = REF(2)
        !           102:       IJR = FINDND(DSA(K1+4),IIJR)
        !           103:       IF (IJR.NE.0) GO TO 110
        !           104:       CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(K1+4), 1
        !           105:      *  ,1, 0)
        !           106:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !           107:       GO TO 10
        !           108: C      CHECK DIRECT REFS AND ASF REFS
        !           109: C      1 MEANS OK 0 MEANS N.G.
        !           110:   110 IF (CHK1(IJK,IJR)) 10, 10, 120
        !           111:   120 IF (REF(4).EQ.4) GO TO 10
        !           112: C      GOOD DIRECT REF; CREATE PAR/DES LINKS
        !           113:       CALL SETPD(IJR, IJK)
        !           114:       IF (SYSERR) GO TO 40
        !           115:       IF (-2.EQ.INODE(IIJR) .OR. INODE(IIJR).GT.INODE(IIJK)) GO TO 130
        !           116: C      FIX UP LEVELS
        !           117:       INODE(IIJR) = INODE(IIJK) + 1
        !           118:       CALL ASLEV(IIJR)
        !           119:       IF (SYSERR .OR. ABORT) GO TO 40
        !           120:   130 WRITE (I6) PREF, IBR, (REF(L),L=1,PREF)
        !           121:       GO TO 10
        !           122:       END

unix.superglobalmegacorp.com

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