|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.