Annotation of researchv10no/cmd/pfort/TOKLAB.f, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.