Annotation of researchv10no/cmd/pfort/END.f, revision 1.1.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.