|
|
1.1 ! root 1: INTEGER FUNCTION CHK2(IR, IE) ! 2: C ! 3: C PROGRAM UNIT AT LAT(IR) CALLS PROGRAM UNIT AT LAT(IE) ! 4: C CHK2 RETURNS 1 IF REF IS OK, ELSE 0 ! 5: C CHECKS TYPE OF FCN IF FCN IS REFERENCED, ! 6: C CHECKS PROC PARAMETERF FOR COMPATIBLE USAGE AND TYPE ! 7: C TYPE AND STRUCTURE OF VARIABLE ! 8: C AND ARRAY ARGS, BUILDS UPWARD LINKS BETWEEN ! 9: C DUMMIES FOR SETTING INFO TRANSFER IN SCAN ! 10: C BAD STRUCTURE MATCHING MAKES REF BAD ! 11: C NO DUMMY LINKS CREATED IN THIS CASE ! 12: C ! 13: INTEGER REF, PREF, PDSA, DSA, PLAT, SYMLEN, FINDND, AER(1) ! 14: LOGICAL ERR, SYSERR, ABORT ! 15: COMMON /DETECT/ ERR, SYSERR, ABORT ! 16: COMMON /CREF/ LREF, PREF, REF(100) ! 17: COMMON /CTABL/ LDSA, PDSA, DSA(5000) ! 18: COMMON /GRAPH/ LLAT, PLAT, LAT(6000) ! 19: COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6 ! 20: COMMON /FACTS/ NAME, NOST, ITYP, IASF ! 21: CHK2 = 1 ! 22: C CHECK TYPE OF FCN CALLED IF A FCN ! 23: IF (REF(4).NE.1) GO TO 10 ! 24: I = IE + SYMLEN + 6 ! 25: IF (MOD(IGATT1(REF(2),1),8).EQ.LAT(I)/8) GO TO 10 ! 26: IF (MOD(LAT(I),8).EQ.6 .AND. IGATT1(REF(2),1)/8.NE.1) GO TO 10 ! 27: CALL ERROR2(39H INCOMPATIBLE FCN TYPE IN REFERENCE TO , 39, ! 28: * LAT(IE), 1, 1, 0) ! 29: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 30: C CYCLE THROUGH ARGS IF ANY ! 31: 10 I = IE + SYMLEN ! 32: IF (LAT(I).EQ.0) GO TO 170 ! 33: I = LAT(I) ! 34: N = IE + SYMLEN + 1 ! 35: L = 5 ! 36: DO 160 K=1,I ! 37: AER(1) = K ! 38: L1 = IGATT2(LAT(N),8) ! 39: IF (L1.EQ.13 .OR. L1.EQ.6 .OR. L1.EQ.5) GO TO 90 ! 40: C CHECK STRUCTURE AND TYPE OF VARIABLES ! 41: C AND ARRAY ARGUMENTS ! 42: K1 = MOD(IGATT2(LAT(N),1),8) ! 43: K2 = IGATT2(LAT(N),7) ! 44: IF (K2.GT.1) K2 = 1 ! 45: L1 = MOD(REF(L+1),8) ! 46: L2 = MOD(REF(L+1),32)/8 ! 47: C ! 48: C CHECK TYPE, CHECK HOLLERITH CONSTANTS MATCHED ! 49: C ALWAYS TO INTEGER ARRAYS ! 50: C ! 51: IF (L1.NE.5 .OR. REF(L).NE.0) GO TO 20 ! 52: IF (REF(4).EQ.0 .AND. K2.NE.0 .AND. K1.EQ.2) GO TO 40 ! 53: CALL ERROR2(33H HOLLERITH CONST ASSOCIATED WITH ,33,AER,-2,1,0) ! 54: CALL ERROR2(17H IN REFERENCE TO , 17,LAT(IE),1, 0, 0) ! 55: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 56: CHK2 = 0 ! 57: GO TO 150 ! 58: 20 IF (K1.EQ.L1 .OR. K1.EQ.2 .AND. L1.EQ.5) GO TO 30 ! 59: CALL ERROR2(33H MISMATCHED TYPE ASSOCIATED WITH ,33,AER,-2,1,0) ! 60: CALL ERROR2(17H IN REFERENCE TO ,17,LAT(IE),1, 0, 0) ! 61: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 62: C ! 63: C CHECK STRUCTURE L2 = 0 SCALAR, 1 ARRAY, 2 ARRAY ELE ! 64: C ! 65: 30 IF (K2.EQ.1 .AND. L2.GT.0 .OR. K2.EQ.0 .AND. (L2.EQ.2 .OR. ! 66: * L2.EQ.0)) GO TO 40 ! 67: CALL ERROR2(38H MISMATCHED STRUCTURE ASSOCIATED WITH ,38,AER,-2, ! 68: * 1, 0) ! 69: CALL ERROR2(17H IN REFERENCE TO , 17, LAT(IE),1, 0, 0) ! 70: CALL ERROR2(1H1, 0, REF(3), -1,0,1) ! 71: CHK2 = 0 ! 72: GO TO 150 ! 73: C ! 74: C CHECK IF ACTUAL ARG IS NON-PROC DUMMY ARG IN CURRENT PGM UNIT ! 75: C IF SO CREATE ARGLINK. ! 76: C NO ARGLINK CREATED IF FCN CALLED IS AN ASF ! 77: C ! 78: 40 IF (REF(L).LE.0 .OR. REF(4).EQ.4) GO TO 150 ! 79: K1 = IGATT1(REF(L),4) ! 80: IF (K1.EQ.0) GO TO 150 ! 81: C ! 82: C FIND REL. POSITION OF CALLING PGM ! 83: C DUMMY , L1 PTS TO IT IN LAT ! 84: L3 = DSA(NAME+2) ! 85: KK = 0 ! 86: 50 KK = KK + 1 ! 87: IF (DSA(L3).EQ.REF(L)) GO TO 60 ! 88: L3 = DSA(L3+1) ! 89: GO TO 50 ! 90: 60 K2 = 0 ! 91: L1 = IR + SYMLEN - 2 ! 92: 70 L1 = LAT(L1+3) ! 93: K2 = K2 + 1 ! 94: IF (K2.LT.KK) GO TO 70 ! 95: C FIND REL POSITION OF CALLED DUMMY ARG ! 96: C L2 PTS TO IT IN LAT ! 97: K1 = 0 ! 98: L2 = IE + SYMLEN - 2 ! 99: 80 L2 = LAT(L2+3) ! 100: K1 = K1 + 1 ! 101: IF (K1.LT.K) GO TO 80 ! 102: IF (MATCH(LAT(L2+2),1,L1).NE.0) GO TO 150 ! 103: IF (PLAT+2.GT.LLAT) GO TO 180 ! 104: LAT(PLAT) = L1 ! 105: LAT(PLAT+1) = LAT(L2+2) ! 106: LAT(L2+2) = PLAT ! 107: PLAT = PLAT + 2 ! 108: GO TO 150 ! 109: C CHECK PROC ARGUMENTS TO SEE THEY ARE CORRECT USAGE AND TYPE ! 110: C LAT(N) PTS TO DUMMY ARG ENTRY IN LAT ! 111: C REF(L) PTS TO CORRESP REF ARG IN DSA ! 112: 90 IF (IGATT1(REF(L),4).EQ.1) GO TO 110 ! 113: C REFERENCE CONTAINS AN AACTUAL PROC NAME ! 114: C CHECK FOR MISSING SUBPROGRAM ! 115: L3 = REF(L) ! 116: L2 = FINDND(DSA(L3+4),L3) ! 117: IF (L2.NE.0) GO TO 100 ! 118: L3 = REF(L) + 4 ! 119: CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(L3), 1, 1, 0) ! 120: CALL ERROR2(17H IN REFERENCE TO , 17, LAT(IE), 1, 0, 0) ! 121: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 122: GO TO 150 ! 123: C CALL CHK3 TO PREFORM CHECKS ! 124: 100 L5 = L2 + SYMLEN + 6 ! 125: CALL CHK3(LAT(N), L2, L1, MOD(LAT(L5),8), IE, REF(3), AER) ! 126: GO TO 150 ! 127: C REFERENCE CONTAINS A DUMMY ARGUMENT MUST CHECK ALL ACTUALS ! 128: C WHICH CAN CORRESPOND TO THAT DUMMY ! 129: C FIRST FIND ITS CORRESP ACTUAL, IF ANY ! 130: 110 L2 = REF(L) ! 131: L2 = DSA(L2+2) ! 132: C L2 IS OFFSET AMONG ALL DUMMIES OF LAT(IR) ! 133: C OF THE DUMMY ARG AT REF(L) ! 134: L3 = IR + SYMLEN + 1 ! 135: L3 = LAT(L3) ! 136: IF (L2.EQ.1) GO TO 130 ! 137: DO 120 L4=2,L2 ! 138: L3 = LAT(L3+3) ! 139: 120 CONTINUE ! 140: C L3 PTS TO DUMMY ARG IN CALLING RTNE ! 141: 130 L3 = LAT(L3+1) ! 142: C L3 CONTAINS OFFSET FOR PROC ACTUALS ! 143: C MATCHED TO THIS DUMMY ARG ! 144: C IN TEMPLATED OFF LAT(IR) ! 145: L2 = IR + SYMLEN + 5 ! 146: IF (LAT(L2).NE.0) GO TO 140 ! 147: L3 = REF(L) + 4 ! 148: CALL ERROR2(35H NO ACTUAL PROCS SUBSTITUTABLE FOR , 35, ! 149: * DSA(L3), 1, 1, 0) ! 150: CALL ERROR2(17H IN REFERENCE TO , 17, LAT(IE), 1, 0, 0) ! 151: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 152: GO TO 150 ! 153: C L2 PTS TO ACTUALS TEMPLATE ! 154: 140 L2 = LAT(L2) ! 155: L4 = L2 + L3 ! 156: C LAT(L4) IS ACTUAL PAIRED TO REF(L) ! 157: L5 = LAT(L4) + SYMLEN + 6 ! 158: CALL CHK3(LAT(N), LAT(L4), L1, MOD(LAT(L5),8), IE, REF(3), AER) ! 159: C CYCLE TO NEXT ACTUAL ! 160: L2 = LAT(L2) + L2 ! 161: IF (LAT(L2)) 150, 150, 140 ! 162: 150 L = L + 2 ! 163: N = LAT(N) + 3 ! 164: 160 CONTINUE ! 165: 170 RETURN ! 166: 180 SYSERR = .TRUE. ! 167: CHK2 = 0 ! 168: CALL ERROR1(31H IN CHK2, TABLE OVERFLOW OF LAT, 31) ! 169: GO TO 170 ! 170: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.