Annotation of researchv10no/cmd/pfort/SETREF.f, revision 1.1.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.