|
|
1.1 root 1: SUBROUTINE COMCHK(MAIN)
2: INTEGER TEMP(1), PLAT, STAR, PCOM, COM, PNODE, SYMLEN
3: INTEGER ZERO(1)
4: COMMON /COMS/ LCOM, PCOM, COM(300)
5: COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
6: COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
7: COMMON /HEAD/ LNODE, PNODE, NODE(500)
8: COMMON /SCR2/ LNN, NN(500)
9: DATA STAR /1H*/
10: DATA ZERO(1) /0/
11: C
12: C ALGORITHM TO CHECK FOR LEGAL USE OF COMMON IN PGM UNITS
13: C NODE(MAIN) POINTS TO SUPEROOT ENTRY IN LAT
14: C
15: IF (PCOM.LE.0) GO TO 130
16: LK = 1
17: 10 IF (LK.GE.PCOM-1) GO TO 130
18: C
19: C CHECK COMMON ISNT BLANK COMMON
20: C
21: CALL S5UNPK(COM(LK), TEMP, 1)
22: IF (TEMP(1).EQ.STAR) GO TO 120
23: C
24: C CHECK THAT COMMON BLOCK NOT IN BLOCK DATA PGM
25: C NEED NOT CHECK THE COMMON
26: C
27: K = LK + SYMLEN + 1
28: IF (COM(K).EQ.1) GO TO 120
29: C
30: C NEED ALGORITHM TO CHECK OUT THIS COMMON
31: C
32: L = PNODE - 1
33: DO 20 K=1,L
34: NN(K) = 0
35: IF (NODE(K).LT.0) NN(K) = 1
36: 20 CONTINUE
37: ICNT = 0
38: NN(MAIN) = 2
39: C
40: C SEARCH FOR A 2 NODE
41: C
42: 30 L = PNODE - 1
43: DO 40 K=1,L
44: IF (NN(K).EQ.2) GO TO 50
45: 40 CONTINUE
46: GO TO 120
47: C
48: C FOUND A 2 NODE; CHANGE TO 1 TO SHOW HAVE VISITED IT;
49: C IF SUBPGM CONTAINS COMMON IN QUESTION INCREMENT COUNT;
50: C IF COUNT> 1 ERROR IN USAGE
51: C IF SUBPGM DOESN'T CONTAIN COMMON, MARK HIS DESC 2 IF THEY ARE 0.
52: C
53: 50 NN(K) = 1
54: LBR = NODE(K)
55: L = NODE(K) + SYMLEN + 2
56: L = LAT(L)
57: 60 IF (L.EQ.0) GO TO 90
58: IF (LAT(L).NE.LK) GO TO 80
59: C
60: C FOUND COMMON LK AT THIS NODE
61: C MARK NODE TO A 3
62: C
63: NN(K) = 3
64: ICNT = ICNT + 1
65: IF (ICNT.LE.1) GO TO 30
66: CALL ERROR2(31H ILLEGAL USAGE OF COMMON BLOCK , 31, COM(LK),
67: * 1, 1, 0)
68: K = PNODE - 1
69: DO 70 I=1,K
70: L = NODE(I)
71: IF (NN(I).EQ.3) CALL ERROR2(19H WHICH APPEARED IN , 19, LAT(L),
72: * 1, 0, 0)
73: 70 CONTINUE
74: CALL ERROR2( 1H1, 0, ZERO(1), -3, 0, 1)
75: GO TO 120
76: 80 L = LAT(L+2)
77: GO TO 60
78: C
79: C ARE DONE SEARCHING FOR COMMON LK AT THIS NODE
80: C ADD DESCENDENTS ONTO LIST TO BE VISITED
81: C
82: 90 L = NODE(K) + SYMLEN + 4
83: L = LAT(L)
84: 100 IF (L.EQ.0) GO TO 30
85: K = PNODE - 1
86: C
87: C FIND DESC OF NODE AND IF NOT VISITED SET TO 2
88: C
89: DO 110 I=1,K
90: IF (NODE(I).NE.LAT(L)) GO TO 110
91: IF (NN(I).EQ.0) NN(I) = 2
92: 110 CONTINUE
93: L = LAT(L+1)
94: GO TO 100
95: 120 LK = LK + SYMLEN + 5
96: GO TO 10
97: 130 RETURN
98: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.