|
|
1.1 root 1: LOGICAL FUNCTION TOKLAB(K1, K2, KK, DEF)
2: INTEGER STMT, PSTMT, SYMHD, DSA, PDSA, BNEXT, DOPT, DOLIST
3: LOGICAL DEF, NON0, SYSERR, ABORT, ERR
4: COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
5: COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
6: COMMON /CTABL/ LDSA, PDSA, DSA(5000)
7: COMMON /DETECT/ ERR, SYSERR, ABORT
8: COMMON /DOS/ DOPT, LDO, DOLIST(192)
9: COMMON /FACTS/ NAME, NOST, ITYPE, IASF
10: C
11: C LOOKS FOR DEFNS OF LABEL IF DEF = .TRUE., ELSE LOOKS FOR
12: C REFS. IF IT FINDS A LABEL TOKLAB=.TRUE.
13: C IN REFERENCE LABEL IS IN STMT(PSTMT)-STMT(K2-1)
14: C IN DEFN LABEL IS IN STMT(1)-STMT(K2-1)
15: C KK IS SYMBOL TABLE INDEX OF LABEL
16: C K1 IS TYPE OF LABEL EXPECTED OR DEFINED--1-EXECUTABLE
17: C 2-NONEXECUTABLE, 3-FORMAT
18: C IN REF, ROUTINE SETS USAGE OF SYMBOL AND CHECKS FOR
19: C COMPATIBLE REFERENCES(I.E. GOTO 5 AND WRITE(6,5) ARE INCOMPAT.)
20: C IN DEF, ROUTINE SETS USAGE OF SYMBOL, CHECKS FOR DUPLICATE
21: C DEFNS, CHECKS FOR COMPATIBLITY BETWEEN DEFN AND PREVIOUS
22: C REFS, CREATES SCOPE AREA FOR LABEL INITIALIZING WORD1 TO
23: C CURRENT HEADING STMT NO ON DOLIST AND WORD2 TO CURRENT LEVEL
24: C IN REFS AND DEFS LABELS MUST BE POSITIVE NUMBERS
25: C
26: TOKLAB = .FALSE.
27: IF (DEF) GO TO 80
28: NON0 = .FALSE.
29: J = PSTMT + 4
30: IF (J.GT.NSTMT) J = NSTMT
31: K3 = PSTMT
32: DO 10 K2 = PSTMT,J
33: IF(STMT(K2).GT.9 .OR. STMT(K2).LT.0) GOTO 60
34: IF(STMT(K2) .GT. 0) NON0 = .TRUE.
35: IF(.NOT.NON0) K3 = K3+1
36: 10 CONTINUE
37: K2 = J+1
38: IF(.NOT.NON0) GOTO 70
39: C NOTE CAN CHANGE PSTMT HERE BECAUSE WE KNOW WE HAVE A LAB
40: 20 PSTMT = K3
41: KK = LOOKUP(K2,.TRUE.)
42: IF (SYSERR) GO TO 50
43: IF (ITYPE.EQ.14) DSA(BNEXT+1) = -DSA(BNEXT+1)
44: I = IGATT1(KK,8)
45: IF (I.EQ.0) CALL SATT1(KK, 8, 9)
46: I1 = IGATT1(KK,1)
47: IF (I1.NE.0) GO TO 30
48: CALL SATT1(KK, 1, K1)
49: GO TO 40
50: 30 IF (K1.NE.I1) CALL ERROR1(30H INCOMPATIBLE LABEL REFERENCES, 30)
51: 40 TOKLAB = .TRUE.
52: 50 RETURN
53: 60 IF (K2.EQ.PSTMT) GO TO 50
54: IF (NON0) GO TO 20
55: 70 CALL ERROR1(30H LABEL MUST BE POSITIVE NUMBER, 30)
56: GO TO 50
57: C
58: C TAKES DEF OF LABEL; CHECKS FOR DUPLICATE DEFS.; SETS DEFINED
59: C BIT IN SYMBOL TABLE; STORES BEGINNING BINDING STMT NO
60: C
61: 80 K2 = 0
62: NON0 = .FALSE.
63: DO 90 I=1,5
64: IF (STMT(I).EQ.69) GO TO 90
65: IF ((STMT(I).GT.9) .OR. (STMT(I).LT.0)) GO TO 140
66: IF (STMT(I).GT.0) NON0 = .TRUE.
67: IF (.NOT.NON0) GO TO 90
68: K2 = K2 + 1
69: STMT(K2) = STMT(I)
70: 90 CONTINUE
71: IF (K2.EQ.0) GO TO 50
72: IF (.NOT.NON0) GO TO 70
73: K2 = K2 + 1
74: KK = LOOKUP(K2,.TRUE.)
75: IF (SYSERR) GO TO 50
76: I = IGATT1(KK,2)
77: IF (I.EQ.1) GO TO 120
78: CALL SATT1(KK, 2, 1)
79: CALL SATT1(KK, 8, 9)
80: I1 = IGATT1(KK,1)
81: IF (I1.EQ.0) GO TO 100
82: IF (I1.EQ.K1) GO TO 110
83: CALL ERROR1(44H ILLEGAL REFERENCE TO LABEL IN PREVIOUS CODE, 44)
84: 100 CALL SATT1(KK, 1, K1)
85: 110 IF (K1.NE.1) GO TO 40
86: IF (NEXT+2.GE.BNEXT) GO TO 130
87: DSA(KK+2) = NEXT
88: DSA(NEXT) = DOLIST(DOPT)
89: DSA(NEXT+1) = -DOPT/6
90: NEXT = NEXT + 2
91: GO TO 40
92: 120 CALL ERROR1(16H DUPLICATE LABEL, 16)
93: GO TO 50
94: 130 CALL ERROR1(33H IN TOKLAB, TABLE OVERFLOW OF DSA, 33)
95: SYSERR = .TRUE.
96: GO TO 50
97: 140 CALL ERROR1(24H ILLEGAL SYMBOL IN LABEL, 24)
98: GO TO 50
99: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.