|
|
1.1 ! root 1: SUBROUTINE PROC(IP, IM, IIM, OK) ! 2: C ! 3: C P.U. AT LAT(IP) CALLS P.U. AT LAT(IM) (NODE(IIM)) ! 4: C PROC COLLECTS ACTUAL PROC TEMPLATE(S) FROM THE CALL IF IT CAN ! 5: C CHECKS FOR MISSING SUBPGMS AND STORES TEMPLATES OFF PGM UNIT ! 6: C AT LAT(IM), THEM PROC CALLS ASLEV TO READJUST LEVELS OF ACTUALS ! 7: C SENT TO LAT(IM) VS LEVEL (IM) ! 8: C ! 9: LOGICAL ERR, SYSERR, ABORT, OK ! 10: INTEGER STACK, SYMLEN, PDSA, DSA, REF, PREF, PNODE, PLAT, FINDND, ! 11: * FIND, SS(120), KBR(1) ! 12: COMMON /CEXPRS/ LSTACK, STACK(620) ! 13: COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6 ! 14: COMMON /CTABL/ LDSA, PDSA, DSA(5000) ! 15: COMMON /CREF/ LREF, PREF, REF(100) ! 16: COMMON /HEAD/ LNODE, PNODE, NODE(500) ! 17: COMMON /SCR1/ LINODE, INODE(500) ! 18: COMMON /GRAPH/ LLAT, PLAT, LAT(6000) ! 19: COMMON /DETECT/ ERR, SYSERR, ABORT ! 20: EQUIVALENCE (SS(1),STACK(501)) ! 21: DATA KBR(1) /0/ ! 22: LSS = 501 ! 23: C ARE THERE ARGS IN THIS REF ! 24: IF (REF(1).NE.0) GO TO 20 ! 25: 10 RETURN ! 26: C CYCLE THROUGH REF ARGS ! 27: C JJ IS LAST ENTRY IN REF FOR ARGS ! 28: C IS PTS TO FIRST FREE WD IN STACK ! 29: C MAX IS 1 IF NO DUMMY PROCS IN REF, ELSE IS EQUAL TO THE ! 30: C NUMBER OF ACTUAL PROCS SUBSTITUTABLE FOR THE DUMMY PROCS ! 31: 20 JJ = REF(1) + 4 ! 32: IS = 1 ! 33: MAX = 0 ! 34: DO 90 I=5,JJ,2 ! 35: C SKIP OVER EXPR AS ACTUAL ARGS AND ALL ACTUALS BUT PROC ARGS ! 36: IF (REF(I).EQ.0) GO TO 90 ! 37: IF (REF(I+1).NE.6) GO TO 90 ! 38: C SEE IF ACTUAL ARG IS DUMMY PROC ARG AT LAT(IP) ! 39: C OR ACTUAL PROCEDURE ! 40: IF (IGATT1(REF(I),4).EQ.1) GO TO 40 ! 41: C HAVE AN ACTUAL PROCEDURE ! 42: L = REF(I) ! 43: L = FINDND(DSA(L+4),K) ! 44: IF (L.NE.0) GO TO 30 ! 45: C IF, AS GATHERING ACTUAL PROCS MATCHED TO DUMMY PROC ARGS ! 46: C PROC FINDS A MISSING SUBPROGM, PROCESSING OF THIS REF CEASES ! 47: L = REF(I) ! 48: CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(L+4), 1, 1, 0) ! 49: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 50: GO TO 10 ! 51: 30 IF (IS+2.GT.LSS) GO TO 200 ! 52: C 2 WD STACK ENTRY FOR AN ACTUAL PROC AS AN ACTUAL ARG ! 53: C IS FIRST WD - 1, 2ND WD - LAT INDEX OF ACTUAL PROC ! 54: STACK(IS) = 1 ! 55: STACK(IS+1) = L ! 56: IF (MAX.EQ.0) MAX = 1 ! 57: IS = IS + 2 ! 58: GO TO 90 ! 59: C HAVE A DUMMY PROC CHECK OUT NO OF ACTUALS ! 60: C MATCHED TO IT AND STACK THOSE WITH COUNTER ON TOP ! 61: 40 L = IP + SYMLEN + 5 ! 62: L = LAT(L) ! 63: IF (L.NE.0) GO TO 50 ! 64: IF (.NOT.OK) GOTO 10 ! 65: CALL ERROR2(26H MISSING ACTUAL PROCEDURES ,26, KBR(1), -1,1,1) ! 66: OK = .FALSE. ! 67: GO TO 10 ! 68: C COLLECT ACTUALS CORRESPONDING TO THIS PROC ARG ! 69: C K IS REL POSIT OF PROC ARG AMONG ALL ARGS AT LAT(IP) ! 70: C L PTS TO TEMPLATE AT LAT(IP) ! 71: 50 K = REF(I) ! 72: K = DSA(K+2) ! 73: C J POINTS TO FIRST ELEMENT ON ARGLIST ! 74: J = IP + SYMLEN + 1 ! 75: J = LAT(J) ! 76: IF (K.LE.1) GO TO 70 ! 77: DO 60 LL=2,K ! 78: J = LAT(J+3) ! 79: 60 CONTINUE ! 80: C K IS REL POSIT OF PROC ARG AMONG PROC ARGS IN LAT(IP) ! 81: C THAT IS IT IS OFFSET NECESS TO READ CORRESP ACTUAL ! 82: C PROCS OFF TEMPLATES AT LAT(IP) ! 83: C J POINTS TO DUMMY PROC ARG ENTRY IN LAT (IP) ! 84: 70 K = LAT(J+1) ! 85: IF (IS+1.GE.LSS) GO TO 200 ! 86: C J POINTS TO POSITION IN STACK OF COUNT OF HOW MANY ! 87: C ACTUALS ARE MATCHED TO THIS DUMMY ! 88: J = IS ! 89: STACK(IS) = 0 ! 90: IS = IS + 1 ! 91: 80 IF (IS+1.GE.LSS) GO TO 200 ! 92: C N WD STACK ENTRY FOR DUMMY PROC ARGS USED AS ACTUAL ARGS IN REF ! 93: C WD 1 CONTAINS NO OF ACTUAL PROCS MATCHED TO THE DUMMY ! 94: C WDS 2 - N CONTAIN THE LAT INDICES OF EACH ACTUAL PROC ! 95: STACK(J) = STACK(J) + 1 ! 96: LL = K + L ! 97: STACK(IS) = LAT(LL) ! 98: IS = IS + 1 ! 99: L = LAT(L) + L ! 100: L = LAT(L) ! 101: IF (L.NE.0) GO TO 80 ! 102: IF (STACK(J).GT.MAX) MAX = STACK(J) ! 103: 90 CONTINUE ! 104: C HAVE COLLECTED ALL PROC ACTUALS CORRESP TO THE PROC ! 105: C ARGS IN THE REF, NOTE MAX IS NO OF TEMPLATES RESULTING FROM ! 106: C THIS REF TO BE PASSED TO LAT(IM) AS LONG AS THEIR DUPS ! 107: C ARE NOT THERE ALREADY ! 108: C BUILD EACH TEMPLATE IN LOOP AND CHECK FOR DUPLICATION ! 109: C IF NOT THERE COPY INTO LAT OFF LAT(IM) AND CHECK LEVEL OF ACTUALS ! 110: C PASSED DOWN VS LEVEL OF LAT(IM) ! 111: IF (MAX.EQ.0) GO TO 10 ! 112: DO 190 I=1,MAX ! 113: C CREATE PROC INDICES PORTION OF TEMPLATE IN SS ! 114: K = 1 ! 115: ISS = 1 ! 116: 100 IF (K.GE.IS) GO TO 110 ! 117: L = 1 ! 118: IF (STACK(K).GT.1) L = I ! 119: IF (ISS+1.GE.120) GO TO 200 ! 120: J = K + L ! 121: SS(ISS) = STACK(J) ! 122: K = K + STACK(K) + 1 ! 123: ISS = ISS + 1 ! 124: GO TO 100 ! 125: C HAVE TEMPLATE IN SS(1) THROUGH SS(ISS-1) ! 126: C SEE IF IT HAS A DUPLICATE AT LAT(IM) ! 127: 110 K = IM + SYMLEN + 5 ! 128: K = LAT(K) ! 129: IST = ISS - 1 ! 130: 120 IF (K.EQ.0) GO TO 150 ! 131: DO 130 L=1,IST ! 132: J = K + L ! 133: IF (LAT(J).NE.SS(L)) GO TO 140 ! 134: 130 CONTINUE ! 135: C FOUND DUPLICATE ! 136: GO TO 190 ! 137: C HAVENT FOUND A DUPLICATE YET ! 138: C SEE IF THERE ARE MORE TEMPLATES TO COMPARE ! 139: 140 K = LAT(K) + K ! 140: K = LAT(K) ! 141: GO TO 120 ! 142: C NOT A DUPLICATE WILL ADD IT ON ! 143: 150 IF (PLAT+IST+2.LE.LLAT) GO TO 160 ! 144: CALL ERROR1(32H IN PROC, TABLE OVERFLOW OF LAT , 32) ! 145: SYSERR = .TRUE. ! 146: GO TO 10 ! 147: C MAKE AN ENTRY CONSISTING OF 1ST WORD - NO OF PROCS+1, SUBSEQUENT ! 148: C WORDS - PROCS LAT INDICES, LAST WORD - PTR ! 149: C TO NEXT SUCH TEMPLATE ! 150: 160 DO 170 L=1,IST ! 151: J = PLAT + L ! 152: LAT(J) = SS(L) ! 153: 170 CONTINUE ! 154: LAT(PLAT) = IST + 1 ! 155: L = PLAT ! 156: PLAT = PLAT + IST + 2 ! 157: J = IM + SYMLEN + 5 ! 158: LAT(PLAT-1) = LAT(J) ! 159: LAT(J) = L ! 160: C CHECK LEVELS ! 161: DO 180 L=1,IST ! 162: J = FIND(SS(L)) ! 163: C FIND HEAD OF GREEN LINKS LIST AT LAT(IM) ! 164: JR = IM + SYMLEN + 3 ! 165: JLR = -SS(L) ! 166: 210 IF(LAT(JR+1) .LE. 0) GOTO 220 ! 167: JR = LAT(JR+1) ! 168: GOTO 210 ! 169: C HAVE TOP OF GREEN LINKS LIST AT LAT(JR) ! 170: 220 IF(LAT(JR+1) .EQ. 0) GOTO 230 ! 171: JR = IABS( LAT(JR+1) ) ! 172: C LOOK FOR DUPLICATE ENTRY ON GREEN LINKS LIST ! 173: IF(LAT(JR) .EQ. JLR) GOTO 240 ! 174: GOTO 220 ! 175: C ADD ON ENTRY TO GREEN LINKS LIST ! 176: 230 IF(PLAT + 2 .GT. LLAT) GOTO 250 ! 177: LAT(PLAT) = JLR ! 178: LAT(PLAT+1) = 0 ! 179: LAT(JR+1) = -PLAT ! 180: PLAT = PLAT+2 ! 181: 240 IF((-1).EQ.INODE(J) .OR. (-2).EQ.INODE(J) .OR. ! 182: * INODE(J).GT.INODE(IIM)) GOTO 180 ! 183: INODE(J) = INODE(IIM) + 1 ! 184: CALL ASLEV (-J) ! 185: IF (SYSERR .OR. ABORT) GO TO 10 ! 186: 180 CONTINUE ! 187: 190 CONTINUE ! 188: GO TO 10 ! 189: 200 SYSERR = .TRUE. ! 190: CALL ERROR1(33H IN PROC, TABLE OVERFLOW OF STACK, 33) ! 191: GO TO 10 ! 192: 250 SYSERR = .TRUE. ! 193: CALL ERROR1(31H IN PROC, TABLE OVERFLOW OF LAT,31) ! 194: GOTO 10 ! 195: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.