|
|
1.1 ! root 1: SUBROUTINE SUBFCN(TYPE) ! 2: C ! 3: C TYPE IS EXPLICIT TYPE OF FUNCTION, ELSE IS -1 ! 4: C ALL FCNS GIVEN EXPLICIT TYPE SINCE FCN NAME CANNOT APPEAR IN ! 5: C NONEXECUTABLE STMT WITHIN FCN SUBPRGM EXCEPT HEAD STMT ! 6: C ROUTINES DEFINES SUBROUTINE AND FUNCTION NAMES AND CREATES ! 7: C LINKED LISTS OF POINTERS TO THEIR ARGUMENTS IN DSA. ! 8: C SETS NAME TO POINT TO CURRENT FUNCN OR SUBRTNE. IN CASE ! 9: C OF BAD SYNTAX IN NAME CONSTRUCT OR FCN WITHOUT PARAMS., ! 10: C PROGRAM UNIT BECOMES MAIN PGM BY DEFAULT ! 11: C ! 12: INTEGER STMT, PSTMT, DSA, SYMHD, TYPE, BNEXT, S(5), PDSA ! 13: LOGICAL ERR, SYSERR, ABORT ! 14: COMMON /INPUT/ NSTMT, PSTMT, STMT(1327) ! 15: COMMON /FACTS/ NAME, NOST, ITYP, IASF ! 16: COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT ! 17: COMMON /CTABL/ LDSA, PDSA, DSA(5000) ! 18: COMMON /DETECT/ ERR, SYSERR, ABORT ! 19: DATA S(1) /66/, S(2) /42/, S(3) /30/, S(4) /38/, S(5) /43/ ! 20: KCELL = 0 ! 21: CALL NEXTOK(PSTMT, K2, I1) ! 22: IF (I1.NE.0) GO TO 120 ! 23: C ! 24: C SET FCN OR SUBR USE IN SYMBOL TABLE. TYPE FCN AND RECORD EXPLICIT ! 25: C OR IMPLICIT TYPE ! 26: C ! 27: K = LOOKUP(K2,.FALSE.) ! 28: IF (SYSERR) GO TO 90 ! 29: NAME = K ! 30: L = ITYP - 8 ! 31: GO TO (10, 20), L ! 32: 10 CALL SATT1(K, 8, 3) ! 33: GO TO 40 ! 34: 20 CALL SATT1(K, 8, 4) ! 35: IF (TYPE.LT.0) GO TO 30 ! 36: CALL SATT1(K, 1, TYPE+8) ! 37: GO TO 40 ! 38: 30 L = 1 ! 39: IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) L = 2 ! 40: CALL SATT1(K, 1, L) ! 41: 40 IF (STMT(K2).NE.65) GO TO 140 ! 42: 50 PSTMT = K2 + 1 ! 43: IF (PSTMT.GE.NSTMT) GO TO 120 ! 44: CALL NEXTOK(PSTMT, K2, L) ! 45: IF (L.NE.0) GO TO 80 ! 46: C ! 47: C ENTER PARAMETER IN SYMBOL TABLE; TYPE IMPLICITLY; ADD ONTO PARAM ! 48: C LIST HANGING OFF SUBR/FCN NAME; SET DUMMYARG BIT ON; DO NOT SET ! 49: C USAGE ! 50: C ! 51: N = LOOKUP(K2,.FALSE.) ! 52: IF (SYSERR) GO TO 90 ! 53: I2 = IGATT1(N,4) ! 54: I1 = IGATT1(N,8) ! 55: IF (I1.NE.0 .OR. I2.NE.0) GO TO 80 ! 56: L = 1 ! 57: IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) L = 2 ! 58: CALL SATT1(N, 1, L) ! 59: L = IGATT1(N,4) ! 60: IF (L.EQ.1) GO TO 80 ! 61: CALL SATT1(N, 4, 1) ! 62: IF (NEXT+2.GE.BNEXT) GO TO 150 ! 63: IF (KCELL.EQ.0) GO TO 60 ! 64: DSA(KCELL+1) = NEXT ! 65: GO TO 70 ! 66: C ! 67: C START PARAM LIST ! 68: C ! 69: 60 DSA(K+2) = NEXT ! 70: 70 KCELL = NEXT ! 71: DSA(NEXT) = N ! 72: DSA(NEXT+1) = 0 ! 73: NEXT = NEXT + 2 ! 74: C ! 75: C SEARCH FOR ")" OR "," ! 76: C ! 77: IF (STMT(K2).EQ.62) GO TO 100 ! 78: IF (STMT(K2).EQ.68) GO TO 50 ! 79: 80 CALL ERROR1(33H ILLEGAL SYNTAX IN PARAMETER LIST, 33) ! 80: 90 RETURN ! 81: 100 K2 = K2 + 1 ! 82: 110 IF (K2.EQ.NSTMT) GO TO 90 ! 83: CALL ERROR1(39H ILLEGAL CHARACTERS AFTER SUBR/FCN HEAD, 39) ! 84: GO TO 90 ! 85: 120 CALL ERROR1(15H ILLEGAL SYNTAX, 15) ! 86: PSTMT = 6 ! 87: DO 130 I1=1,5 ! 88: STMT(I1+5) = S(I1) ! 89: 130 CONTINUE ! 90: NAME = LOOKUP(11,.FALSE.) ! 91: IF (SYSERR) GO TO 90 ! 92: CALL SATT1(NAME, 8, 11) ! 93: GO TO 90 ! 94: 140 IF (ITYP.EQ.9) GO TO 110 ! 95: CALL ERROR1(20H NO PARAMS SPECIFIED, 20) ! 96: GO TO 120 ! 97: 150 SYSERR = .TRUE. ! 98: CALL ERROR1(33H IN SUBFCN, TABLE OVERFLOW OF DSA,33) ! 99: GO TO 90 ! 100: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.