Annotation of researchv10no/cmd/pfort/SETNOD.f, revision 1.1

1.1     ! root        1:       SUBROUTINE SETNOD
        !             2:       INTEGER PLAT, COM, PNODE, PDSA, DSA, SYMLEN, PP, SYMHD, PCOM,
        !             3:      *    SETARG, FINDND, FINDCM
        !             4:       LOGICAL ERR, SYSERR, ABORT
        !             5:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !             6:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !             7:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !             8:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !             9:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !            10:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !            11:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !            12:       COMMON /TABL/ NEXT, LABHD, SYMHD, IBNEXT
        !            13:       COMMON /SCR1/ LINODE, INODE(500)
        !            14: C
        !            15: C     LAT-IS THE CALLING GRAPH PLUS AUXILIARY NODES
        !            16: C     PLAT-IS NEXT FREE WORD IN LAT
        !            17: C     LLAT-IS LENGTH OF LAT
        !            18: C     NODE-IS LIST OF ALL CALLING NODES INDICES IN LAT
        !            19: C        (WILL BE IN ALPHABETIC ORDER BEFORE CHECKING COMMENCES)
        !            20: C     PNODE-IS NEXT FREE WORD IN NODE
        !            21: C     LNODE-IS LENGTH OF NODE
        !            22: C
        !            23: C     P.U. NODE IN LAT
        !            24: C     WD 1.....PACKED CHARACTERS OF NAME OF SUBPGM
        !            25: C     WD2.....NUMBER OF ARGS
        !            26: C     WD3.....PTR TO HEAD OF LINEAR LINKED ORDERED LIST OF
        !            27: C     ARGUMENT NODES IN LAT
        !            28: C     WD4.....PTR TO HEAD OF LINEAR LINKED LIST OF COMMON NODES
        !            29: C     IN LAT
        !            30: C     WD5.....PTR TO HEAD OF LINEAR LINKED LIST OF INDICES IN
        !            31: C     LAT OF ENTRIES FOR PARENT NODES
        !            32: C     WD6.....PTR TO HEAD OF LINEAR LINKED LIST OF INDICES IN
        !            33: C     LAT OF ENTRIES FOR DESCENDENT NODES
        !            34: C     WD7.....PTR TO HEAD OF LINEAR LINKED LIST OF SEQUENCE NOS OF
        !            35: C     BAD REFERENCES;  INCONSISTANT TYPE OF FCN/SUBR REFERENCE, INCORR
        !            36: C     NUMBER OF ARGS, AND RECURSIVE CALL OF SELF ARE THE THREE
        !            37: C     TYPES OF BAD REFS
        !            38: C     WD8.....BITS 0-2 TYPE OF SUBPGM:  0 SUBR, 1 FCN, 2 BLOCK DATA,
        !            39: C      3 MAIN, 4 ASF, 5 SUPEROOT
        !            40: C     BITS 3-5 (IF FCN OR ASF) CONTAIN TYPE OF FCN: 0 DP, 1 RL,
        !            41: C     2 INT, 3 COMP, 4 LOG
        !            42: C
        !            43: C     ARGUMENT NODE IN LAT
        !            44: C     WD1.....ATTRIBUTES (SAME AS IN DSA, SEE LOOKUP)
        !            45: C     WD2.....LENGTH (IN PROCEDURE ARGS THIS WORD POINTS TO
        !            46: C     HEAD OF LINEAR LINKED LIST OF ACTUAL SUBPGM NAMES ASSOCIATED
        !            47: C     WITH THIS ARG IN THE PROGRAM; ALSO HAVE INDEX IN LAT OF
        !            48: C     SUBPRGM IN WHICH THE ASSOC OCCURS
        !            49: C     WD 3.....PTR TO HEAD OF LINEAR LINKED LIST OF PARENT ARGS
        !            50: C     (ARGS FROM PARENT RTNES SENT DOWN TO BE ASSOC. WITH THIS ARG)
        !            51: C     WD 4.....PTR TO HEAD OF LINEAR LINKED LIST OF DESC. ARGS
        !            52: C     (ARGS FROM DESC RTNES WHICH THIS ARG IS ASSOC. WITH)
        !            53: C     WD 5.....PTR TO NEXT ARG NODE OR 0
        !            54: C
        !            55: C     COMMON NODE IN LAT
        !            56: C     WD 1.....INDEX OF ENTRY FOR THIS COMMON IN COM
        !            57: C     WD 2.....1 IF COMMON STORED INTO BY THIS P.U. ELSE 0
        !            58: C     WD 3.....PTR TO NEXT COMMON NODE
        !            59: C     CREATE NODE PTR TO NEW NODE IN LAT
        !            60: C
        !            61:       IF (PNODE.GT.LNODE) GO TO 170
        !            62:       IF (PLAT+SYMLEN+7.GT.LLAT) GO TO 190
        !            63: C
        !            64: C     CHECK IF SUBPROGRAM HAS NAME SAME AS ANOTHER SUBPROGRAM
        !            65: C     OR A COMMON BLOCK
        !            66: C
        !            67:       II = IGATT1(NAME,8)
        !            68:       IF (II.EQ.11) GO TO 10
        !            69:       IF (FINDND(DSA(NAME+4),IROOT)) 10, 10, 20
        !            70:    10 IF (FINDCM(DSA(NAME+4))) 40, 40, 30
        !            71:    20 ERR = .TRUE.
        !            72:    30 CALL ERROR2(45H SUBPROGRAM AND/OR COMMON BLOCK NAME CONFLICT, 45,
        !            73:      *  DSA(NAME+4), 1, 1, 1)
        !            74:       IF (.NOT.ERR) GO TO 40
        !            75:       ERR = .FALSE.
        !            76:       ABORT = .TRUE.
        !            77:       GO TO 160
        !            78:    40 NODE(PNODE) = PLAT
        !            79:       IROOT = PNODE
        !            80:       PNODE = PNODE + 1
        !            81: C
        !            82: C     ENTER NAME INTO NODE
        !            83: C
        !            84:       DO 50 I=1,SYMLEN
        !            85:         L = NAME + 3 + I
        !            86:         LL = PLAT - 1 + I
        !            87:         LAT(LL) = DSA(L)
        !            88:    50 CONTINUE
        !            89: C
        !            90: C     PP POINTS TO CURRENT RTNE NODE IN LAT
        !            91: C
        !            92:       PP = PLAT
        !            93:       PLAT = LL + 6
        !            94:       LL = LL + 1
        !            95:       DO 60 I=LL,PLAT
        !            96:         LAT(I) = 0
        !            97:    60 CONTINUE
        !            98: C
        !            99: C     0 SUBR, 1 FCN, 2 BLOCK DATA, 3 MAIN, 4 ASF, 5 SUPEROOT
        !           100: C
        !           101:       LAT(PLAT+1) = II/4
        !           102: C     INITIALIZE LEVEL OF BLOCK DATA TO -2
        !           103:       IF (LAT(PLAT+1).EQ.2) INODE(IROOT) = -2
        !           104:       IF (LAT(PLAT+1).NE.1) GO TO 70
        !           105:       L = IGATT1(NAME,1)
        !           106:       LAT(PLAT+1) = LAT(PLAT+1) + 8*MOD(L,8)
        !           107:    70 PLAT = PLAT + 2
        !           108: C
        !           109: C     HAVING INITIALIZED NODE TO 0, LOOK FOR ARGS
        !           110: C
        !           111:       IF (DSA(NAME+2)) 80, 90, 80
        !           112:    80 L = PP + SYMLEN
        !           113:       LAT(L) = SETARG(PP,NAME)
        !           114:       IF (SYSERR) GO TO 160
        !           115: C
        !           116: C     READ THROUGH SYMBOL TABLE FOR COMMON BLOCK DEFNS AND ASF DEFS
        !           117: C     AND SETTING OF COMMON REGION
        !           118: C
        !           119:    90 K = SYMHD
        !           120:   100 IF (K) 110, 160, 110
        !           121:   110 LL = IGATT1(K,8)
        !           122: C
        !           123: C     CHECK FOR ASF AND COMMON DEFNS OR COMMON
        !           124: C     SETTING INFO
        !           125: C
        !           126:       GO TO (140, 120, 140, 140, 140, 140, 130, 150, 140, 150, 140,
        !           127:      *    140, 140, 140), LL
        !           128: C
        !           129: C     CREATE ASF NODE
        !           130: C
        !           131:   120 CALL SETASF(PP, K)
        !           132:       IF (SYSERR) GO TO 160
        !           133:       GO TO 140
        !           134: C
        !           135: C     CREATE COM ENTRY
        !           136: C
        !           137:   130 CALL SETCOM(PP, K)
        !           138:       IF (SYSERR) GO TO 160
        !           139:   140 K = DSA(K+3)
        !           140:       GO TO 100
        !           141: C
        !           142: C     CHECK IF ELEMENT IN COMMON
        !           143: C
        !           144:   150 LL = IGATT1(K,2)
        !           145:       L = IGATT1(K,5)
        !           146:       IF (L.NE.1 .OR. LL.NE.1) GO TO 140
        !           147:       L = DSA(K+2)
        !           148:       L = DSA(L+1)
        !           149:       CALL MKCOM(PP, L)
        !           150:       IF (SYSERR) GO TO 160
        !           151:       GO TO 140
        !           152:   160 RETURN
        !           153:   170 CALL ERROR1(34H IN SETNOD, TABLE OVERFLOW OF NODE, 34)
        !           154:   180 SYSERR = .TRUE.
        !           155:       GO TO 160
        !           156:   190 CALL ERROR1(33H IN SETNOD, TABLE OVERFLOW OF LAT, 33)
        !           157:       GO TO 180
        !           158:       END

unix.superglobalmegacorp.com

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