|
|
1.1 ! root 1: SUBROUTINE POP ! 2: LOGICAL ERR, SYSERR, ABORT ! 3: INTEGER PB, PT, STACK, OP(12), EX(4,4), AO(4,4), RO(3,3) ! 4: COMMON /CEXPRS/ LSTACK, STACK(620) ! 5: COMMON /EXPRS/ PT, PB, AO, RO, EX ! 6: COMMON /DETECT/ ERR, SYSERR, ABORT ! 7: DATA OP(1), OP(3), OP(7), OP(9), OP(10), OP(11) /6*2/, OP(4) /1/, ! 8: * OP(5) /0/, OP(6), OP(8), OP(2) /3*-1/, OP(12) /1/ ! 9: C ! 10: C JOB OF SUBROUTINE IS TO POP THE STACK; DOES ALL POPS ! 11: C EXCEPT REMOVAL OF "FCN(" CONSTRUCTION ! 12: C OP(I) CONTAINS NUM OF ARGS OF OPERATER I PB CHECKED BEFORE ! 13: C CALLING POP; POP CHECKS PT; ERROR RETURNS FROM THIS ROUTINE STOP ! 14: C EXPRESSION PROCESSING (I.E. ERR=.TRUE.) ! 15: C ! 16: ERR = .FALSE. ! 17: I = STACK(PB+1) ! 18: K = OP(I-10) ! 19: IF (K) 190, 180, 10 ! 20: 10 L = PT - 1 ! 21: KQ = K ! 22: 20 IF (K) 80, 80, 30 ! 23: 30 IF (STACK(L)/8.EQ.1) GO TO 220 ! 24: IF (STACK(L).GE.8 .OR. STACK(L-1).EQ.0) GO TO 40 ! 25: J = IGATT1(STACK(L-1),8) ! 26: IF (J.EQ.0) CALL SATT1(STACK(L-1), 8, 10) ! 27: 40 GO TO (60, 50), K ! 28: 50 K1 = MOD(STACK(L),8) + 1 ! 29: GO TO 70 ! 30: 60 K2 = MOD(STACK(L),8) + 1 ! 31: 70 L = L - 2 ! 32: K = K - 1 ! 33: GO TO 20 ! 34: C ! 35: C 11 +,- 12 ) 13 ** 14 .NOT. 15 ( 16 FCN( 17 *,/ 18 , ! 36: C 19 .AND. 20 .OR. 21 .EQ. 22 UNARY +,- ! 37: C ! 38: 80 L = I - 10 ! 39: GO TO (90, 190, 120, 150, 190, 190, 90, 190, 130, 130, 100, 140), ! 40: * L ! 41: 90 IF (K1.GT.4 .OR. K2.GT.4) GO TO 210 ! 42: KK = AO(K1,K2) ! 43: GO TO 160 ! 44: 100 IF (K1.GT.3 .OR. K2.GT.3) GO TO 110 ! 45: KK = RO(K1,K2) ! 46: GO TO 160 ! 47: 110 IF ((K1.NE.6 .OR. K2.NE.6) .AND. (K1.NE.6 .OR. K2.NE.3) .AND. ! 48: * (K1.NE.3 .OR. K2.NE.6) ) GO TO 210 ! 49: KK = 4 ! 50: GO TO 160 ! 51: 120 IF (K1.GT.4 .OR. K2.GT.4) GO TO 210 ! 52: KK = EX(K2,K1) ! 53: GO TO 160 ! 54: 130 KK = 4 ! 55: IF (K1.NE.5 .OR. K2.NE.5) GO TO 210 ! 56: GO TO 160 ! 57: 140 KK = K2 - 1 ! 58: IF (KK.LT.0 .OR. KK.GT.3) GO TO 210 ! 59: GO TO 160 ! 60: 150 IF (K2.NE.5) GO TO 210 ! 61: KK = 4 ! 62: 160 IF (-1.EQ.KK) GO TO 210 ! 63: C ! 64: C STORE ON STACK 0 TO SHOW EXPRESSION RESULT(NO DSA INDEX) ! 65: C ALSO STORE TYPE OF RESULTING OPERAND ! 66: C ! 67: PT = PT - 2*KQ ! 68: STACK(PT) = 0 ! 69: STACK(PT+1) = KK ! 70: PT = PT + 2 ! 71: PB = PB + 1 ! 72: 170 RETURN ! 73: C ! 74: C POPPING "(" ! 75: C ! 76: 180 PB = PB + 1 ! 77: GO TO 170 ! 78: 190 CALL ERROR1(25H ILLEGAL ELEMENT ON STACK, 25) ! 79: 200 ERR = .TRUE. ! 80: RETURN ! 81: 210 CALL ERROR1(34H ILLEGAL COMBINATION OF DATA TYPES, 34) ! 82: GO TO 200 ! 83: 220 CALL ERROR1(21H ILLEGAL USE OF ARRAY, 21) ! 84: GO TO 200 ! 85: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.