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

1.1     ! root        1:       SUBROUTINE END
        !             2: C
        !             3: C     ROUTINE SAVES SYMBOL TABLE FOR 2ND PASS
        !             4: C     CHECKS VARIABLE DIMENSIONING IN FCN/SUBR PU'S
        !             5: C     CANNOT RESET DUMMY ARGS USED IN VARIABLE DIMENSIONING;
        !             6: C     CHECKS SUCH BOUNDS FOR TYPE INTEGER
        !             7: C     CALLS OUTSYM TO PRINT SYMBOL TABLE
        !             8: C     CHECKS FOR UNDEFINED LABELS,MISSING DO ENDINGS,
        !             9: C     PROPER BRANCHING THROUGHOUT PGM,
        !            10: C     FIXES UP ALL LABELS WHOSE SCOPE IS NOT YET LIMITED
        !            11: C     SETS USAGE OF ALL IDS TO VARIABLE IF USAGE NOT YET SET
        !            12: C     RESETS FCN USAGE IN FCN  SUBPROGRAM
        !            13: C
        !            14:       INTEGER OUTUT, OUTUT2, OUTUT3, OUTUT4
        !            15:       INTEGER PDSA, SYMLEN, BNEXT, SYMHD, STACK, DSA
        !            16:       LOGICAL OPT, P1ERR
        !            17:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !            18:      *    OUTUT4
        !            19:       COMMON /OPTNS/ OPT(5), P1ERR
        !            20:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !            21:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !            22:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !            23:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !            24:       I = IGATT1(NAME,8)
        !            25:       IF((I.NE.3 .AND. I.NE.10) .OR. DSA(NAME+2).EQ.0) GOTO 40
        !            26: C
        !            27: C     ARGUMENT CHECKING- FOR USE IN VARIABLE DIMENSIONING OF ARRAYS
        !            28: C
        !            29:       LL = 1
        !            30:       L = DSA(NAME+2)
        !            31:       NPAR = 0
        !            32:    10 IF (L.EQ.0) GO TO 40
        !            33:       NPAR = NPAR + 1
        !            34: C     CHECK FOR PROC ARGS TO ENTER THEIR RELATIVE POSIT
        !            35: C     IN ARGLIST IN WD 3 OF THEIR SYMBOL TABLE ENTRY
        !            36:       I = IGATT1(DSA(L),8)
        !            37:       IF (I.NE.5 .AND. I.NE.6 .AND. I.NE.13) GO TO 20
        !            38:       I = DSA(L)
        !            39:       DSA(I+2) = NPAR
        !            40:       GO TO 30
        !            41:    20 I = IGATT1(DSA(L),6)
        !            42:       IF (I.EQ.0) GO TO 30
        !            43:       I = IGATT1(DSA(L),7)
        !            44:       IF (I.NE.0) GO TO 30
        !            45:       I = IGATT1(DSA(L),5)
        !            46:       K = DSA(L)
        !            47:       IF (I.GT.0) CALL ERROR2(
        !            48:      *    57H ILLEGALLY RESET DUMMY ARG USED IN VARIABLE DIMENSIONING ,
        !            49:      *  57, DSA(K+4), 1, 1, 1)
        !            50:       I = IGATT1(K,1)
        !            51:       IF (MOD(I,8).NE.2) CALL ERROR2(
        !            52:      *  47H ILLEGAL DATA TYPE USED IN ADJUSTIBLE DIMENSION, 47
        !            53:      *  , DSA(K+4), 1, 1, 1)
        !            54:    30 L = DSA(L+1)
        !            55:       GO TO 10
        !            56: C
        !            57: C     OUTPUT TABLE
        !            58: C
        !            59:    40 CALL DOCHK(1)
        !            60: C
        !            61: C     CHECK LABELS DEFINED AND WITHIN SCOPE
        !            62: C
        !            63:       I = LABHD
        !            64:    50 IF (I.EQ.0) GO TO 110
        !            65:       L = IGATT1(I,2)
        !            66:       IF (L.EQ.1) GO TO 60
        !            67:       CALL ERROR2(17H UNDEFINED LABEL , 17, DSA(I+4), 1, 1, 1)
        !            68:       GO TO 100
        !            69:    60 L = IGATT1(I,1)
        !            70:       IF (L.NE.1) GO TO 100
        !            71:       L = DSA(I+2)
        !            72:       L1 = DSA(L)
        !            73:       KK = DSA(L+1)
        !            74:       L2 = DSA(I+1)
        !            75: C
        !            76: C     L3 POINTS TO LAST ELEMENT ON CIRCULAR LIST
        !            77: C
        !            78:       L3 = L2
        !            79:    70 IF (DSA(L2).LE.KK .AND. DSA(L2).GE.L1) GO TO 90
        !            80:       IF (DSA(L2).LT.0) GO TO 80
        !            81:       CALL ERROR2(15H ILLEGAL BRANCH, 15, DSA(L2), -1, 1, 1)
        !            82:       GO TO 90
        !            83:    80 DSA(L2) = IABS(DSA(L2))
        !            84:    90 L2 = DSA(L2+1)
        !            85:       IF (L2.NE.L3) GO TO 70
        !            86:   100 I = DSA(I+3)
        !            87:       GO TO 50
        !            88: C
        !            89: C     SET <ID> USAGE IF NOT YET SET
        !            90: C
        !            91:   110 I = SYMHD
        !            92:   120 IF (I.EQ.0) GO TO 150
        !            93:       K = IGATT1(I,8)
        !            94:       IF (K.NE.0) GO TO 130
        !            95:       CALL SATT1(I, 8, 10)
        !            96:       GO TO 140
        !            97:   130 IF (K.NE.6) GO TO 140
        !            98:       IF (IGATT1(I,1)/8.NE.1) GO TO 140
        !            99:       CALL ERROR2(33H SUBROUTINE NAME CANNOT BE TYPED , 33, DSA(I+4),
        !           100:      *  1, 1, 1)
        !           101:   140 I = DSA(I+3)
        !           102:       GO TO 120
        !           103: C
        !           104: C     RESET FCN USAGE IN FCN PROGRAM UNIT
        !           105: C
        !           106:   150 I = IGATT1(NAME,8)
        !           107:       IF (I.NE.10) GO TO 160
        !           108:       CALL SATT1(NAME, 8, 4)
        !           109:       I = IGATT1(NAME,5)
        !           110:       IF (I.EQ.0) CALL ERROR1(23H FUNCTION VALUE NOT SET, 23)
        !           111: C
        !           112: C     SAVE BINARY COPY OF SYMBOL TABLE
        !           113: C
        !           114:   160 IF (OPT(3) .AND. .NOT.P1ERR) GO TO 170
        !           115:       CALL ERROR1(36H P-U NOT SAVED FOR PASS2 PROCESSING , 36)
        !           116:       K = 3
        !           117:       L = 1
        !           118:       WRITE(OUTUT2) L,K,L
        !           119:       WRITE(OUTUT3) L,K,L
        !           120:       GOTO 180
        !           121:  170  K = 1
        !           122:       L = NEXT - 1
        !           123:       I = L + 3
        !           124:       WRITE (OUTUT2) I, K, (DSA(I),I=1,L), NAME, SYMHD, LABHD
        !           125:       L = 3
        !           126:       WRITE (OUTUT3) K, L, K
        !           127:   180 CALL OUTSYM
        !           128:       RETURN
        !           129:       END

unix.superglobalmegacorp.com

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