|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.