Annotation of researchv10no/cmd/pfort/POP.f, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.