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