|
|
1.1 root 1: SUBROUTINE DATA
2: LOGICAL ERR, SYSERR, ABORT, REPL, ARDECL, SIGN, TOKPNO, ERROR
3: INTEGER DECNT, DATCNT, STMT, PSTMT, GETTOK, STACK, S(10), DSA,
4: * PDSA
5: COMMON /CTABL/ LDSA, PDSA, DSA(5000)
6: COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
7: COMMON /FACTS/ NAME, NOST, ITYP, IASF
8: COMMON /DETECT/ ERR, SYSERR, ABORT
9: COMMON /CEXPRS/ LSTACK, STACK(620)
10: DATA IS /1H*/
11: C
12: C ROUTINE PROCESSES A DATA STMT
13: C
14: 10 DECNT = 0
15: 20 IF (ARDECL(K2,KK)) GO TO 30
16: IF (.NOT.ERR) GO TO 30
17: CALL ERROR1(19H ILLEGAL DECLARATOR, 19)
18: IF(.NOT.SYSERR) GOTO 260
19: 30 IF (SYSERR) RETURN
20: C
21: C SET DECLARATOR USAGE AS VARIABLE; CHECK ITS NOT IN BLANK COMMON
22: C CANNOT BE INLABELLED COMMON IF THIS STMT NOT IN BLOCK DATA PGM
23: C FOUND A DECLARATOR ADD IT TO LIST OF ALL DECLS SO CAN CHECK
24: C TYPE OF ITS CORRESPONDING DATA-ITEM; ADD IN COUNT SO CAN
25: C CHECK NUMBER OF DECLS VS. NUMBER OF DATA-ITEMS
26: C KEEP TYPE INFO ON STACK; DECNT IS LENGTH OF STACK
27: C
28: I = IGATT1(KK,8)
29: IF (I.EQ.0) CALL SATT1(KK, 8, 10)
30: I = IGATT1(KK,2)
31: NN = IGATT1(NAME,8)
32: IF (I) 60, 60, 40
33: C
34: C IF VARIABLE IN COMMON, CHECK TO SEE IF CAN LEGALLY APPEAR
35: C IN DATA STMT
36: C
37: 40 I = DSA(KK+2)
38: I = DSA(I+1)
39: CALL S5UNPK(DSA(I+4), S(1), 6)
40: IF (S(1).EQ.IS) GO TO 50
41: C
42: C FOUND NO "*" SO ARE IN LABELLED COMMON
43: C
44: IF (NN.EQ.11) GO TO 70
45: CALL ERROR1(
46: * 55H ILLEGAL TO INITIALIZE VARIABLE IN LABELLED COMMON HERE,
47: * 55)
48: GO TO 260
49: C
50: C FOUND BLANK COMMON
51: C
52: 50 CALL ERROR1(48H ILLEGAL TO INITIALIZE VARIABLES IN BLANK COMMON,
53: * 48)
54: GO TO 260
55: 60 IF (NN.NE.11) GO TO 70
56: CALL ERROR1(33H DATA-ITEM NOT IN LABELLED COMMON, 33)
57: GO TO 260
58: 70 I = IGATT1(KK,1)
59: CALL SATT1(KK, 5, 1)
60: NN = 1
61: IF (IGATT1(KK,7).EQ.0) GO TO 75
62: IF (STMT(K2-1).EQ.62) GO TO 75
63: N = DSA(KK+2)
64: NN = DSA(N)
65: 75 CONTINUE
66: IF (DECNT+3.LE.LSTACK) GO TO 76
67: CALL ERROR1(33H IN DATA, TABLE OVERFLOW OF STACK , 33 )
68: GO TO 260
69: 76 CONTINUE
70: STACK(DECNT+1) = MOD(I,8)
71: STACK(DECNT+2) = KK
72: STACK(DECNT+3) = NN
73: DECNT = DECNT + 3
74: IF (STMT(K2).EQ.67) GO TO 100
75: IF (STMT(K2).NE.68) GO TO 90
76: PSTMT = K2 + 1
77: IF (PSTMT.LT.NSTMT) GO TO 20
78: 80 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
79: RETURN
80: 90 CALL ERROR1(33H ILLEGAL PUNCTUATION IN DATA STMT, 33)
81: GO TO 260
82: C
83: C FIND DATA-ITEMS; CHECK ITS TYPE VS. CORRESPONDING DECLARATOR
84: C SIGN .TRUE. IF DATA-ITEM PRECEEDED BY A SIGN
85: C REPL .TRUE. IF A REPLICATION FACTOR HAS ALREADY BEEN FOUND
86: C
87: 100 DATCNT = 0
88: ERROR = .FALSE.
89: PSTMT = K2 + 1
90: 110 IF (PSTMT.EQ.NSTMT) GO TO 80
91: SIGN = .FALSE.
92: REPL = .FALSE.
93: NN = 1
94: 120 IF (STMT(PSTMT).NE.60 .AND. STMT(PSTMT).NE.61) GO TO 130
95: PSTMT = PSTMT + 1
96: SIGN = .TRUE.
97: 130 IF (PSTMT.EQ.NSTMT) GO TO 80
98: KK = GETTOK(PSTMT,K2)
99: IF (ERR) GO TO 80
100: IF (KK.LT.6) GO TO 150
101: 140 CALL ERROR1(18H ILLEGAL DATA-ITEM, 18)
102: GO TO 260
103: 150 KK = KK + 1
104: GO TO (200, 200, 160, 190, 190, 180), KK
105: C
106: C MUST MAKE SURE THAN AN INTEGER DATA-ITEM ISN'T A REPLICATION FACTO
107: C
108: 160 IF (REPL) GO TO 200
109: IF(SIGN .OR. STMT(K2).NE.66) GOTO 200
110: IF(TOKPNO(PSTMT,K2,NN)) GOTO 170
111: CALL ERROR1(27H ILLEGAL REPLICATION FACTOR ,27)
112: NN = 1
113: 170 REPL = .TRUE.
114: PSTMT = K2 + 1
115: GO TO 120
116: C
117: C CHECK LENGTH OF HOLLERITH DATA-ITEM; MUST FIT INTO INTEGER WORD
118: C
119: 180 IF (STMT(PSTMT)+2048.EQ.1 .OR. ERROR) GO TO 190
120: CALL ERROR1(
121: * 53H WARNING - NH WITH N.GT.1 IS NOT A PORTABLE CONSTRUCT, 53)
122: ERROR = .TRUE.
123: C
124: C CHECK COMPLEX, HOLLERITH, AND LOGICAL DATA-ITEMS ARE UNSIGNED
125: C
126: 190 IF (SIGN) GO TO 140
127: C
128: C CHECK COMPATIBLITY OF DATA-ITEMS WITH DECLARATORS
129: C NN IS REPLICATION FACTOR;
130: C
131: 200 IBR=0
132: DO 220 I = 1,NN
133: IF (STACK(DATCNT+3).EQ.0) DATCNT = DATCNT + 3
134: IF (DATCNT .GE. DECNT) GO TO 240
135: STACK(DATCNT+3) = STACK(DATCNT+3) - 1
136: IF (STACK(DATCNT+1).EQ.KK-1) GO TO 220
137: IF ((STACK(DATCNT+1).NE.2 .OR. KK.NE.6) .AND.
138: * (STACK(DATCNT+1).NE.5 .OR. KK.NE.3)) GO TO 210
139: CALL SATT1(STACK(DATCNT+2), 1, 5)
140: GO TO 220
141: 210 IBR = 1
142: 220 CONTINUE
143: IF(IBR .EQ. 1) CALL ERROR1(52
144: 1H WARNING - DATA-ITEM IS INCOMPATIBLE WITH DECLARATOR ,52)
145: C
146: C CHECK FOR "," BETWEEN DATA-ITEMS
147: C
148: IF (STMT(K2).NE.68) GO TO 230
149: PSTMT = K2 + 1
150: GO TO 110
151: C
152: C CHECK FOR ANOTHER SET OF DECLARATORS/DATA-ITEMS
153: C
154: 230 IF (STMT(K2).NE.67) GO TO 90
155: IF (STACK(DATCNT+3).EQ.0) DATCNT = DATCNT + 3
156: IF (DATCNT.EQ.DECNT) GO TO 250
157: 240 CALL ERROR1(34H MISSING DECLARATORS OR DATA-ITEMS, 34)
158: IF (DATCNT.GE.DECNT) GO TO 260
159: 250 PSTMT = K2 + 1
160: IF (PSTMT.EQ.NSTMT) RETURN
161: IF (STMT(PSTMT).NE.68) GO TO 90
162: PSTMT = PSTMT + 1
163: IF (PSTMT.NE.NSTMT) GO TO 10
164: GO TO 80
165: C
166: C FLUSH TO "/," CONSTRUCT OR END OF STATEMEMT
167: C
168: 260 IF (PSTMT+1.GE.NSTMT) RETURN
169: IF (STMT(PSTMT).EQ.67 .AND. STMT(PSTMT+1).EQ.68) GO TO 270
170: PSTMT = PSTMT + 1
171: GO TO 260
172: 270 PSTMT = PSTMT + 2
173: IF (PSTMT.GE.NSTMT) RETURN
174: GO TO 10
175: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.