|
|
1.1 root 1: SUBROUTINE OUTSYM
2: INTEGER HASH, STACK, BL, DSA, OUTUT, SYMHD, BNEXT, SYMLEN, ATT(8)
3: INTEGER CODE(11), CC(30), C(4), Q(70), SYM, PDSA
4: INTEGER OUTUT2, OUTUT3, OUTUT4
5: LOGICAL OK
6: LOGICAL OPT, P1ERR, COMM
7: COMMON /CHASH/ LHASH, HASH(401)
8: COMMON /OPTNS/ OPT(5), P1ERR
9: COMMON /CTABL/ LDSA, PDSA, DSA(5000)
10: COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
11: * OUTUT4
12: COMMON /TABL/ NEXT, LAB, SYM, BNEXT
13: COMMON /FACTS/ NAME, NOST, ITYP, IASF
14: COMMON /CEXPRS/ LSTACK, STACK(620)
15: COMMON /TRANS/ Q
16: DATA BL /1H /
17: DATA CODE(1) /1HD/, CODE(2) /1HR/, CODE(3) /1HI/, CODE(4) /1HC/,
18: * CODE(5) /1HL/, CODE(11) /1HE/, CODE(7) /1HA/, CODE(8) /1HS/,
19: * CODE(9) /1HF/, CODE(10) /1HN/, CODE(6) /1HH/, C(1) /4/, C(2)
20: * /11/, C(3) /7/, C(4) /8/
21: DATA CC(2), CC(16), CC(20), CC(22), CC(26), CC(28) /6*1H /,
22: * CC(3), CC(5), CC(9), CC(11) /1HF,1HS,1HF,1HF/, CC(1), CC(4) /
23: * 1HU,1HA/, CC(6), CC(8), CC(10), CC(12), CC(14) /1HF,4*1HN/,
24: * CC(7), CC(13) /2*1HS/, CC(15) /1HC/, CC(17) /1HG/, CC(18) /
25: * 1HT/, CC(19) /1HL/, CC(21) /1HV/, CC(25) /1HM/, CC(23) /1HB/,
26: * CC(24) /1HD/, CC(27) /1HE/
27: DATA CC(29) /1HI/, CC(30) /1HF/
28: C
29: C ROUTINE PRINTS OUT SYMBOL TABLE FOR A PROGRAM UNIT
30: C
31: IF (NAME.EQ.0 .OR. .NOT.OPT(1)) RETURN
32: II = IGATT1(NAME,8)
33: CALL S5UNPK(DSA(NAME+4), STACK(1), 6)
34: WRITE (OUTUT,99999) (STACK(I),I=1,6)
35: 99999 FORMAT (14H1PROGRAM UNIT , 5X, 6A1)
36: IF (II.EQ.11 .OR. II.EQ.12 .OR. DSA(NAME+2).EQ.0) GO TO 60
37: C
38: C PRINT FCN/SUBROUTINE ARGS
39: C
40: KK = DSA(NAME+2)
41: I = 0
42: 10 L = 20
43: CALL RDLIST(KK, 9, M, 0)
44: IF (M) 20, 60, 20
45: 20 DO 30 I1=1,M
46: J = STACK(I1) + 4
47: CALL S5UNPK(DSA(J), STACK(L), 6)
48: L = L + 7
49: STACK(L-1) = BL
50: 30 CONTINUE
51: MM = M*7 + 19
52: IF (I) 40, 40, 50
53: 40 WRITE (OUTUT,99998) (STACK(L),L=20,MM)
54: 99998 FORMAT (//10H ARGUMENTS, 9X, 63A1)
55: I = 1
56: GO TO 10
57: 50 WRITE (OUTUT,99997) (STACK(L),L=20,MM)
58: 99997 FORMAT (19X, 63A1)
59: GO TO 10
60: C
61: C PRINT SYMBOLS FOR PROGRAM UNIT
62: C
63: 60 CALL SORT(SYM, LBR)
64: COMM = .FALSE.
65: WRITE (OUTUT,99996)
66: 99996 FORMAT (//1X, 4HNAME, 5X, 4HTYPE, 2X, 3HUSE, 1X, 10HATTRIBUTES,
67: * 1X, 10HREFERENCES//)
68: DO 230 JBR=1,LBR
69: SYMHD = HASH(JBR)
70: DO 70 I=20,35
71: STACK(I) = BL
72: 70 CONTINUE
73: DO 80 I=1,8
74: ATT(I) = IGATT1(SYMHD,I)
75: 80 CONTINUE
76: C SKIPS OVER SYMBOL TABLE ENTRY FOR MAIN, BLOCK DATA,
77: C AND CURRENT SUBROUTINE NAME
78: IF (SYMHD.EQ.NAME .AND. ATT(8).NE.4) GO TO 230
79: IF (ATT(8).NE.7) GO TO 90
80: COMM = .TRUE.
81: GO TO 230
82: 90 CALL S5UNPK(DSA(SYMHD+4), STACK(20), 6)
83: I1 = ATT(8)
84: L = 2*(I1+1) - 1
85: STACK(28) = CC(L)
86: STACK(29) = CC(L+1)
87: C LEAVE BLANK IRRELEVANT TYPE INFO FOR EXT SUBR, COMMON, EXT ENTS
88: IF(ATT(8).EQ.6 .OR. ATT(8).EQ.7 .OR. ATT(8).EQ.13)
89: 1 GOTO 100
90: I1 = MOD(ATT(1),8)
91: IF (ATT(1).GE.8) STACK(26)=CODE(11)
92: STACK(27) = CODE(I1 + 1)
93: 100 DO 110 I=1,4
94: L = I + 29
95: J = C(I)
96: IF (ATT(I+1).EQ.1) STACK(L) = CODE(J)
97: 110 CONTINUE
98: IF (ATT(8).EQ.7) STACK(30) = BL
99: IF (ATT(8).NE.10 .AND. ATT(8).NE.8) GO TO 140
100: IF (ATT(7)) 120, 130, 120
101: 120 STACK(34) = CODE(7)
102: J = ATT(7) + 1
103: STACK(35) = Q(J)
104: GO TO 140
105: 130 STACK(34) = CODE(8)
106: C
107: C XREF LIST
108: C
109: 140 IF (OPT(2)) GO TO 160
110: 150 WRITE (OUTUT,99995) (STACK(L),L=20,35)
111: GO TO 230
112: 160 OK = .FALSE.
113: N = DSA(SYMHD+1)
114: IF (N.LE.0) GO TO 150
115: N = DSA( N+1 )
116: 170 CALL RFLIST( N, M, J, DSA(SYMHD+1) )
117: C
118: C FIRST TIME PRINT WHOLE LINE
119: C
120: K = M
121: IF (M.GE.57) K = 57
122: WRITE (OUTUT,99995) (STACK(L),L=20,35), (STACK(L),L=50,K)
123: 99995 FORMAT (1X, 6A1, 5X, 2A1, 3X, 2A1, 3X, 6A1, 2X, 8(I5, 1X))
124: IF (M-57) 220, 220, 180
125: 180 L = (M-57)/8
126: LL = 58
127: IF (L) 220, 210, 190
128: 190 DO 200 K=1,L
129: LK = LL + 7
130: WRITE (OUTUT,99994) (STACK(I),I=LL,LK)
131: LL = LK + 1
132: 200 CONTINUE
133: IF (LK.EQ.M) GO TO 220
134: 210 WRITE (OUTUT,99994) (STACK(I),I=LL,M)
135: 99994 FORMAT (30X, 8(I5, 1X))
136: C
137: C MAY HAVE TO CALL REFLIST AGAIN
138: C
139: 220 IF (J) 230, 230, 170
140: 230 CONTINUE
141: C
142: C PRINT LABELS
143: C
144: IF (LAB.EQ.0) GO TO 320
145: CALL SORT(LAB, LBR)
146: DO 310 JBR=1,LBR
147: LABHD = HASH(JBR)
148: CALL S5UNPK(DSA(LABHD+4), STACK(20), 6)
149: OK = .FALSE.
150: IF (OPT(2)) GO TO 240
151: WRITE (OUTUT,99993) (STACK(L),L=20,25)
152: GO TO 310
153: 240 II = DSA(LABHD+1)
154: II = DSA(II+1)
155: 250 CALL RFLIST(II, M, J, DSA(LABHD+1) )
156: K = M
157: IF (M.GE.57) K = 57
158: WRITE (OUTUT,99993) (STACK(I),I=20,25), (STACK(I),I=50,K)
159: 99993 FORMAT (1X, 6A1, 23X, 8(I5, 1X))
160: IF (M-57) 300, 300, 260
161: 260 L = (M-57)/8
162: LL = 58
163: IF (L) 300, 290, 270
164: 270 DO 280 K=1,L
165: LK = LL + 7
166: WRITE (OUTUT,99992) (STACK(I),I=LL,LK)
167: LL = LK + 1
168: 280 CONTINUE
169: IF (LK.EQ.M) GO TO 300
170: 290 WRITE (OUTUT,99992) (STACK(I),I=LL,M)
171: 99992 FORMAT (30X, 8(I5, 1X))
172: 300 IF (J) 310, 310, 250
173: 310 CONTINUE
174: 320 IF (.NOT.COMM) GO TO 390
175: CALL SORT(SYM, LBR)
176: WRITE (OUTUT,99991)
177: 99991 FORMAT (//14H COMMON BLOCKS//)
178: DO 380 JBR=1,LBR
179: SYMHD = HASH(JBR)
180: I = IGATT1(SYMHD,8)
181: IF (I.NE.7) GO TO 380
182: CALL S5UNPK(DSA(SYMHD+4), STACK(100), 6)
183: N = 0
184: II = DSA(SYMHD+2)
185: 330 L = 11
186: CALL RDLIST(II, 10, M, 0)
187: IF (M) 340, 380, 340
188: 340 DO 350 I=1,M
189: J = STACK(I) + 4
190: CALL S5UNPK(DSA(J), STACK(L), 6)
191: L = L + 7
192: STACK(L-1) = BL
193: 350 CONTINUE
194: L = L - 1
195: IF (N) 360, 360, 370
196: 360 WRITE (OUTUT,99990) (STACK(I),I=100,105), (STACK(I),I=11,L)
197: 99990 FORMAT (1X, 6A1, 3X, 70A1)
198: N = 1
199: GO TO 330
200: 370 WRITE (OUTUT,99989) (STACK(K),K=11,L)
201: 99989 FORMAT (10X, 70A1)
202: GO TO 330
203: 380 CONTINUE
204: 390 RETURN
205: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.