Annotation of researchv10no/cmd/pfort/SUBFCN.f, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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