|
|
1.1 ! root 1: SUBROUTINE INVOKE ! 2: C ! 3: C PGM UNIT STEPS THROUGH NODES IN INVOCATION ORDER ! 4: C PUSHING ACTUAL PROC ARGS DOWN LATTICE WHERE NECESSARY ! 5: C AND READJUSTING LEVEL IF NECESSARY ! 6: C ! 7: INTEGER PNODE, PLAT, PDSA, DSA, SYMLEN, PREF, REF, FIND, CHK1, ! 8: * ZERO(1), FINDND ! 9: LOGICAL ERR, SYSERR, ABORT, OK, AOK ! 10: COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6 ! 11: COMMON /DETECT/ ERR, SYSERR, ABORT ! 12: COMMON /HEAD/ LNODE, PNODE, NODE(500) ! 13: COMMON /SCR1/ LINODE, INODE(500) ! 14: COMMON /GRAPH/ LLAT, PLAT, LAT(6000) ! 15: COMMON /CTABL/ LDSA, PDSA, DSA(5000) ! 16: COMMON /CREF/ LREF, PREF, REF(100) ! 17: COMMON /FACTS/ NAME, NOST, ITYPE, IASF ! 18: DATA ZERO(1)/0/ ! 19: C NC IS CURRENT NODE, NP IS PREVIOUS NODE PROCESSED ! 20: NC = 0 ! 21: 10 NP = NC ! 22: OK = .TRUE. ! 23: AOK = .TRUE. ! 24: C ! 25: C SEARCH FOR NEXT NODE TO DO, NODE WITH LOWEST POSIT LEVEL IN INODE ! 26: C UPON ENTRY TO INVOKE, SUPEROOT IS -1, ASFS AND BLOCK DATA ! 27: C ARE -2. IF CANT FIND A POSITIVE LEVEL ARE DONE ! 28: C ! 29: L = PNODE - 1 ! 30: DO 20 I=1,L ! 31: IF (INODE(I).LT.0) GO TO 20 ! 32: NC = I ! 33: GO TO 40 ! 34: 20 CONTINUE ! 35: 30 RETURN ! 36: 40 J = NC ! 37: DO 50 I=J,L ! 38: IF (INODE(I).GE.0 .AND. INODE(I).LT.INODE(NC)) NC = I ! 39: 50 CONTINUE ! 40: C READ IN SYMBOL TABLE FOR NODE(NC) AND POSITION REFS CORRECTLY ! 41: CALL RDSYM(NC, NP) ! 42: 60 IF (INREF(I6)) 140, 140, 70 ! 43: C HAVE A REFERENCE TO PROCESS ! 44: 70 IF (IGATT1(REF(2),4).EQ.1) GO TO 80 ! 45: C PROCESSING A DIRECT REFERENCE ! 46: C NEED ONLY PROCESS REF TEMPLATE IF ANY PROC ACTUAL ARGS IN REF ! 47: L = REF(2) ! 48: L = FINDND(DSA(L+4),K) ! 49: CALL PROC(NODE(NC), L, K, AOK) ! 50: IF (SYSERR .OR. ABORT) GO TO 30 ! 51: GO TO 60 ! 52: C PROCESSING AN INDIRECT REF ! 53: 80 K = NODE(NC) + SYMLEN + 5 ! 54: K = LAT(K) ! 55: IF (K.EQ.0) GO TO 150 ! 56: C K PTS TO A TEMPLATE OF ACTUALS AT LAT(NODE(NC)) ! 57: C L GIVES REL POSIT AMONG PROC DUMMIES IN LAT(NODE(NC)) ! 58: C OF PROC DUMMY BEING CALLED ! 59: L = REF(2) ! 60: L = DSA(L+2) ! 61: I = NODE(NC) + SYMLEN + 1 ! 62: I = LAT(I) ! 63: IF (L.EQ.1) GO TO 100 ! 64: DO 90 M=2,L ! 65: I = LAT(I+3) ! 66: 90 CONTINUE ! 67: C ! 68: C I PTS TO DUMMY PROC ARG ENTRY IN LAT ! 69: C ! 70: 100 M = LAT(I+1) + K ! 71: M = LAT(M) ! 72: C M PTS TO ACTUAL SUBSTITUTABLE FOR I ! 73: L = FIND(M) ! 74: C RECURSION DUE TO INDIRECT REF COMPLETING THE LOOP ! 75: IF (-1.NE.INODE(L)) GO TO 110 ! 76: ABORT = .TRUE. ! 77: CALL ERROR2(26H RECURSIVE LOOP INVOLVING , 26, DSA(NAME+4), 1,1,0) ! 78: CALL ERROR2(14H AND POSSIBLY , 14, LAT(M), 1, 0, 1) ! 79: GO TO 30 ! 80: C NOTE NEED NOT WORRY ABOUT MISSING SUBPGM SINCE ! 81: C THEN ITS LAT INDEX COULDNOT BE IN TEMPLATE ! 82: 110 IF (CHK1(NODE(NC),M).EQ.0) GO TO 130 ! 83: C PROCESSED A LEGAL INDIRET REF ! 84: CALL SETPD(M, NODE(NC)) ! 85: IF (SYSERR) GO TO 30 ! 86: IF (-2.EQ.INODE(L) .OR. INODE(NC).LT.INODE(L)) GO TO 120 ! 87: INODE(L) = INODE(NC) + 1 ! 88: CALL ASLEV(L) ! 89: IF (ABORT .OR. SYSERR) GO TO 30 ! 90: C LOOK FOR MORE ACTUALS ! 91: 120 CALL PROC(NODE(NC), M, L, AOK) ! 92: IF (SYSERR .OR. ABORT) GO TO 30 ! 93: 130 K = LAT(K) + K ! 94: K = LAT(K) ! 95: IF (K) 60, 60, 100 ! 96: C MARK CURRENT NODE DONE ! 97: 140 INODE(NC) = -1 ! 98: GO TO 10 ! 99: 150 IF (.NOT.OK) GO TO 60 ! 100: K = NODE(NC) ! 101: CALL ERROR2(20H NO ACTUAL PROCS IN ,20, LAT(K), 1, 1, 0) ! 102: CALL ERROR2(28H CANNOT PROCESS FORMAL REFS , 28, ! 103: * ZERO, -3, 0, 1) ! 104: OK = .FALSE. ! 105: GO TO 60 ! 106: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.