|
|
1.1 root 1: SUBROUTINE CHKALL
2: C
3: C CHKALL READS IN REFS FROM OUTUT4 AND CHECKS THEM
4: C EXPANDS ALL INDIRECTS AND CHECKS THEM, IF ALL OK
5: C WRITES THE EXPANDED VERSION OUT ON OUTUT3
6: C TEMPLATE WRITTEN OUT CONSISTS OF
7: C PREF - NO OF WORDS TO FOLLOW
8: C IBR - CODE .LT.3 TO SHOW OK REF
9: C REF(1) - 2*NO OF ARGS
10: C IJR - LAT INDEX OF CALLED P.U.
11: C REF(3) - STMT NO OF REF
12: C REF(4) - CODE 0-SUBR, 1-FCN
13: C REF(5 -) - ARG ENTRIES
14: C FOR DIRECT REFS IF OK WRITES THE DIRECT REF OUT ON OUTUT3
15: C CHKALL WRITES END OF REFS ON OUTUT3 BEFORE RETURNING
16: C
17: INTEGER OUTUT3, OUTUT4, DSA, PDSA, REF, PREF, PLAT, SYMLEN, FINDND
18: INTEGER CHK1, CHK2
19: LOGICAL ERR, SYSERR, ABORT, QP2, QBR
20: COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, OUTUT3, OUTUT4
21: COMMON /CTABL/ LDSA, PDSA, DSA(5000)
22: COMMON /CREF/ LREF, PREF, REF(100)
23: COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
24: COMMON /DETECT/ ERR, SYSERR, ABORT
25: COMMON /FACTS/ NAME, NOST, ITYP, IASF
26: COMMON /PASS/ QP2, QBR
27: DATA IBR /1/, JBR /3/
28: C IJK IS CALLING PGM UNIT; IJR IS PGM UNIT CALLED
29: IJK = FINDND(DSA(NAME+4),L1)
30: 10 IF (INREF(OUTUT4)) 20, 20, 30
31: C WRITE END OF REFS AND RETURN
32: 20 WRITE (OUTUT3) IBR, JBR, IBR
33: QBR = .FALSE.
34: RETURN
35: C CHECK IF REF INDIRECT OR DIRECT
36: 30 IF (IGATT1(REF(2),4).EQ.1) GO TO 40
37: C HAVE A DIRECT REF
38: IJR = REF(2)
39: IJR = FINDND(DSA(IJR+4),L1)
40: IBAR = CHK2(IJK,IJR)
41: IF (SYSERR) GO TO 20
42: IF (IBAR.EQ.1) WRITE (OUTUT3) PREF, IBR, REF(1), IJR,
43: * (REF(L),L=3,PREF)
44: GO TO 10
45: C HAVE AN INDIRECT REF
46: 40 K = IJK + SYMLEN + 5
47: K = LAT(K)
48: C NOTE HAVE FLAGGED THIS ERROR OF NO ACTUALS AT LAT(IM)
49: C BEFORE IN PROC SO NOW SKIP OVER REF
50: IF (K.EQ.0) GO TO 10
51: C K POINTS TO ACTUALS TEMPLATE AT CALLING PGM
52: L = REF(2)
53: L = DSA(L+2)
54: J = IJK + SYMLEN + 1
55: J = LAT(J)
56: IF (L.LE.1) GO TO 60
57: DO 50 LL=2,L
58: J = LAT(J+3)
59: 50 CONTINUE
60: 60 L = LAT(J+1)
61: C L IS OFFSET IN ACTUALS TEMPLATE OF ACTUALS
62: C CORRESP TO THIS DUMMY
63: 70 J = K + L
64: IJR = LAT(J)
65: QBR = .TRUE.
66: IF (CHK1(IJK,IJR).NE.1) GO TO 80
67: IBAR = CHK2(IJK,IJR)
68: IF (SYSERR) GO TO 20
69: IF (IBAR.EQ.1) WRITE (OUTUT3) PREF, IBR, REF(1), IJR,
70: * (REF(L),L=3,PREF)
71: 80 QBR = .FALSE.
72: K = LAT(K) + K
73: K = LAT(K)
74: IF (K) 10, 10, 70
75: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.