|
|
1.1 root 1: SUBROUTINE COMMON
2: INTEGER PSTMT, PDSA, STMT, DSA, BNEXT, SYMHD, S(4)
3: LOGICAL ERR, SYSERR, ABORT, ARDECL
4: COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
5: COMMON /CTABL/ LDSA, PDSA, DSA(5000)
6: COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
7: COMMON /DETECT/ ERR, SYSERR, ABORT
8: COMMON /FACTS/ NAME, NOST, ITYP, IASF
9: DATA S(1) /66/, S(2) /32/, S(3) /44/, S(4) /42/
10: C
11: C PROCESSES A COMMON STMT
12: C FIRST, PEEL OFF NAME OF COMMON AND SET SYMBOL TABLE ENTRY USAGE
13: C CHECK NAME HAS NOT APPEARED BEFORE IN PGM UNIT
14: C
15: IF (STMT(PSTMT).EQ.67) GO TO 30
16: C
17: C SET SYMBOL TABLE ENTRY FOR BLANK COMMON
18: C
19: 10 I1 = IGATT1(NAME,8)
20: IF (I1.EQ.11) GO TO 170
21: IF (PSTMT.GE.NSTMT) GO TO 200
22: L = PSTMT
23: DO 20 I1=1,4
24: STMT(I1) = S(I1)
25: 20 CONTINUE
26: PSTMT = 1
27: KK = LOOKUP(5,.FALSE.)
28: IF (SYSERR) GO TO 190
29: PSTMT = L
30: CALL SATT1(KK, 8, 7)
31: GO TO 60
32: 30 PSTMT = PSTMT + 1
33: IF (STMT(PSTMT).NE.67) GO TO 40
34: PSTMT = PSTMT + 1
35: GO TO 10
36: 40 IF (PSTMT.GE.NSTMT) GO TO 200
37: CALL NEXTOK(PSTMT, K2, L)
38: IF (L.NE.0) GO TO 200
39: KK = LOOKUP(K2,.FALSE.)
40: IF (SYSERR) GO TO 190
41: I1 = IGATT1(KK,1)
42: N = IGATT1(KK,8)
43: IF (I1.EQ.0 .AND. (N.EQ.0 .OR. N.EQ.7)) GO TO 50
44: CALL ERROR1(20H ILLEGAL COMMON NAME, 20)
45: GO TO 190
46: 50 CALL SATT1(KK, 8, 7)
47: I1 = IGATT1(NAME,8)
48: IF (I1.EQ.11) CALL SATT1(KK, 2, 1)
49: PSTMT = K2 + 1
50: IF (PSTMT.GE.NSTMT .OR. STMT(K2).NE.67) GO TO 200
51: C
52: C ELEMENTS IN COMMON: ARRAYS,VARIABLES,DECLARATIONS OF ARRAYS( NOT
53: C VARIABLY DIMENSIONED). IMPLICITLY TYPE THEM
54: C
55: 60 IF (ARDECL(K2,N)) GO TO 70
56: CALL ERROR1(47H COMMON ELEMENT NOT VARIABLE, ARRAY, DECLARATOR,
57: * 47)
58: GO TO 190
59: 70 IF (SYSERR .OR. ERR) GO TO 190
60: C
61: C SET SYMBOL TABLE ENTRY OF ELEMENT TO SHOW ITS IN COMMON
62: C PUT POINTER TO COMMON NAME INTO 3D WORD OF ENTRY (OR OFF 3D
63: C WORD--FOR ARRAYS
64: C
65: I1 = IGATT1(N,2)
66: IF (I1.NE.0) GO TO 160
67: CALL SATT1(N, 2, 1)
68: I1 = IGATT1(N,7)
69: IF (I1.EQ.0) GO TO 80
70: L = DSA(N+2)
71: DSA(L+1) = KK
72: GO TO 90
73: 80 CALL SATT1(N, 8, 10)
74: IF (NEXT+2.GE.BNEXT) GO TO 180
75: DSA(N+2) = NEXT
76: DSA(NEXT) = 0
77: DSA(NEXT+1) = KK
78: NEXT = NEXT + 2
79: C
80: C SETUP CHAIN OF ELEMENTS OF COMMON HANGING OFF SYMBOL TABLE
81: C ENTRY OF COMMON NAME
82: C
83: 90 IF (DSA(KK+2).EQ.0) GO TO 130
84: L = DSA(KK+2)
85: 100 IF (DSA(L+1).EQ.0) GO TO 110
86: L = DSA(L+1)
87: GO TO 100
88: 110 IF (NEXT+2.GE.BNEXT) GO TO 180
89: DSA(L+1) = NEXT
90: 120 DSA(NEXT) = N
91: DSA(NEXT+1) = 0
92: NEXT = NEXT + 2
93: GO TO 140
94: 130 IF (NEXT+2.GE.BNEXT) GO TO 180
95: DSA(KK+2) = NEXT
96: GO TO 120
97: C
98: C CHECK FOR END OF STMT
99: C
100: 140 IF (K2.EQ.NSTMT) GO TO 190
101: IF (STMT(K2).NE.68) GO TO 150
102: PSTMT = K2 + 1
103: GO TO 60
104: 150 IF (STMT(K2).NE.67) GO TO 200
105: PSTMT = K2
106: GO TO 30
107: 160 CALL ERROR1(23H ELEMENT IN TWO COMMONS, 23)
108: GO TO 140
109: 170 CALL ERROR1(
110: * 51H BLANK COMMON NOT ALLOWED IN BLOCK DATA SUBPROGRAMS, 51)
111: GO TO 190
112: 180 SYSERR = .TRUE.
113: CALL ERROR1(33H IN COMMON, TABLE OVERFLOW OF DSA,33)
114: 190 RETURN
115: 200 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
116: GO TO 190
117: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.