File:  [Research Unix] / researchv10no / cmd / pfort / END.f
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:35 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Norman

      SUBROUTINE END
C
C     ROUTINE SAVES SYMBOL TABLE FOR 2ND PASS
C     CHECKS VARIABLE DIMENSIONING IN FCN/SUBR PU'S
C     CANNOT RESET DUMMY ARGS USED IN VARIABLE DIMENSIONING;
C     CHECKS SUCH BOUNDS FOR TYPE INTEGER
C     CALLS OUTSYM TO PRINT SYMBOL TABLE
C     CHECKS FOR UNDEFINED LABELS,MISSING DO ENDINGS,
C     PROPER BRANCHING THROUGHOUT PGM,
C     FIXES UP ALL LABELS WHOSE SCOPE IS NOT YET LIMITED
C     SETS USAGE OF ALL IDS TO VARIABLE IF USAGE NOT YET SET
C     RESETS FCN USAGE IN FCN  SUBPROGRAM
C
      INTEGER OUTUT, OUTUT2, OUTUT3, OUTUT4
      INTEGER PDSA, SYMLEN, BNEXT, SYMHD, STACK, DSA
      LOGICAL OPT, P1ERR
      COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
     *    OUTUT4
      COMMON /OPTNS/ OPT(5), P1ERR
      COMMON /FACTS/ NAME, NOST, ITYP, IASF
      COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
      COMMON /CTABL/ LDSA, PDSA, DSA(5000)
      COMMON /CEXPRS/ LSTACK, STACK(620)
      I = IGATT1(NAME,8)
      IF((I.NE.3 .AND. I.NE.10) .OR. DSA(NAME+2).EQ.0) GOTO 40
C
C     ARGUMENT CHECKING- FOR USE IN VARIABLE DIMENSIONING OF ARRAYS
C
      LL = 1
      L = DSA(NAME+2)
      NPAR = 0
   10 IF (L.EQ.0) GO TO 40
      NPAR = NPAR + 1
C     CHECK FOR PROC ARGS TO ENTER THEIR RELATIVE POSIT
C     IN ARGLIST IN WD 3 OF THEIR SYMBOL TABLE ENTRY
      I = IGATT1(DSA(L),8)
      IF (I.NE.5 .AND. I.NE.6 .AND. I.NE.13) GO TO 20
      I = DSA(L)
      DSA(I+2) = NPAR
      GO TO 30
   20 I = IGATT1(DSA(L),6)
      IF (I.EQ.0) GO TO 30
      I = IGATT1(DSA(L),7)
      IF (I.NE.0) GO TO 30
      I = IGATT1(DSA(L),5)
      K = DSA(L)
      IF (I.GT.0) CALL ERROR2(
     *    57H ILLEGALLY RESET DUMMY ARG USED IN VARIABLE DIMENSIONING ,
     *  57, DSA(K+4), 1, 1, 1)
      I = IGATT1(K,1)
      IF (MOD(I,8).NE.2) CALL ERROR2(
     *  47H ILLEGAL DATA TYPE USED IN ADJUSTIBLE DIMENSION, 47
     *  , DSA(K+4), 1, 1, 1)
   30 L = DSA(L+1)
      GO TO 10
C
C     OUTPUT TABLE
C
   40 CALL DOCHK(1)
C
C     CHECK LABELS DEFINED AND WITHIN SCOPE
C
      I = LABHD
   50 IF (I.EQ.0) GO TO 110
      L = IGATT1(I,2)
      IF (L.EQ.1) GO TO 60
      CALL ERROR2(17H UNDEFINED LABEL , 17, DSA(I+4), 1, 1, 1)
      GO TO 100
   60 L = IGATT1(I,1)
      IF (L.NE.1) GO TO 100
      L = DSA(I+2)
      L1 = DSA(L)
      KK = DSA(L+1)
      L2 = DSA(I+1)
C
C     L3 POINTS TO LAST ELEMENT ON CIRCULAR LIST
C
      L3 = L2
   70 IF (DSA(L2).LE.KK .AND. DSA(L2).GE.L1) GO TO 90
      IF (DSA(L2).LT.0) GO TO 80
      CALL ERROR2(15H ILLEGAL BRANCH, 15, DSA(L2), -1, 1, 1)
      GO TO 90
   80 DSA(L2) = IABS(DSA(L2))
   90 L2 = DSA(L2+1)
      IF (L2.NE.L3) GO TO 70
  100 I = DSA(I+3)
      GO TO 50
C
C     SET <ID> USAGE IF NOT YET SET
C
  110 I = SYMHD
  120 IF (I.EQ.0) GO TO 150
      K = IGATT1(I,8)
      IF (K.NE.0) GO TO 130
      CALL SATT1(I, 8, 10)
      GO TO 140
  130 IF (K.NE.6) GO TO 140
      IF (IGATT1(I,1)/8.NE.1) GO TO 140
      CALL ERROR2(33H SUBROUTINE NAME CANNOT BE TYPED , 33, DSA(I+4),
     *  1, 1, 1)
  140 I = DSA(I+3)
      GO TO 120
C
C     RESET FCN USAGE IN FCN PROGRAM UNIT
C
  150 I = IGATT1(NAME,8)
      IF (I.NE.10) GO TO 160
      CALL SATT1(NAME, 8, 4)
      I = IGATT1(NAME,5)
      IF (I.EQ.0) CALL ERROR1(23H FUNCTION VALUE NOT SET, 23)
C
C     SAVE BINARY COPY OF SYMBOL TABLE
C
  160 IF (OPT(3) .AND. .NOT.P1ERR) GO TO 170
      CALL ERROR1(36H P-U NOT SAVED FOR PASS2 PROCESSING , 36)
      K = 3
      L = 1
      WRITE(OUTUT2) L,K,L
      WRITE(OUTUT3) L,K,L
      GOTO 180
 170  K = 1
      L = NEXT - 1
      I = L + 3
      WRITE (OUTUT2) I, K, (DSA(I),I=1,L), NAME, SYMHD, LABHD
      L = 3
      WRITE (OUTUT3) K, L, K
  180 CALL OUTSYM
      RETURN
      END

unix.superglobalmegacorp.com

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