Annotation of researchv10no/cmd/pfort/EXPR.f, revision 1.1

1.1     ! root        1:       INTEGER FUNCTION EXPR(LOGEX)
        !             2: C
        !             3: C     LOGEX IS A DUMMY ARG , NEVER USED
        !             4: C     FALSE IF AN ARITHMETIC EXPRESSION WAS FOUND
        !             5: C     PRE IS PRECEDENCE TABLE,  PRE(I,J) GIVES ACTION TAKEN WHEN OP I
        !             6: C     IS ON THE STACK, OP J IN THE INPUT
        !             7: C     CUROP IS CURRENT TOKEN TYPE
        !             8: C     PREVOP IS PREVIOUS TOKEN TYPE (LAST ONE PROCESSED BEFORE CUROP)
        !             9: C     STACK IS OPERAND STACK GROWING FROM TOP (1,2 ETC)
        !            10: C     OPERATER STACK GROWING FROM BOTTOM UP(100,99 ETC)
        !            11: C     PARENS COUNTS NESTING LEVEL OF PARENTHESES AND FUNCTION CALLS
        !            12: C
        !            13: C*****EXPRS
        !            14: C     PT (INT) POINTER TO NEXT FREE WORD ON OPERAND STACK (GROWS
        !            15: C     FROM STACK(1))
        !            16: C     PB (INT) POINTER TO NEXT FREE WORD ON OPERATOR STACK (GROWS
        !            17: C     FROM STACK(LSTACK))
        !            18: C     AO(*,*) (INT) ARRAY GIVES TYPES OF ARITH OPERATIONS
        !            19: C     AO(I,J) = TYPE OF (TYPE I <ARITH-OP> TYPE J)
        !            20: C     RO(*,*) (INT) ARRAY TELLS LEGALITY OF RELATIONAL OPERATIONS
        !            21: C     RO(I,J) = 1 IF TYPE I <RELOP> TYPEJ IS LEGAL; ELSE IS 0
        !            22: C     EX(*,*) (INT) ARRAY GIVES TYPES OF ** OPERATION
        !            23: C     EX(I,J) = TYPE OF (TYPE I <**> TYPE J)
        !            24: C
        !            25:       INTEGER PRE(12,12), EX(4,4), AO(4,4), CUROP, PREVOP, RO(3,3),
        !            26:      *    STACK, PARENS, STMT, PSTMT, PT, PB, SYMLEN, PDSA, OUTUT,
        !            27:      *    GETTOK, IBR(14), JBR(13), ADJ(5,4), OUTUT2, DSA, OUTUT3,
        !            28:      *    OUTUT4, PREF, REF
        !            29:       LOGICAL FLUSH, ERR, SYSERR, CALLST, DOVAR, OPT, ABORT, P1ERR
        !            30:       LOGICAL INTEXT
        !            31:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !            32:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !            33:       COMMON /EXPRS/ PT, PB, AO, RO, EX
        !            34:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !            35:       COMMON /CREF/ LREF, PREF, REF(100)
        !            36:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !            37:      *    OUTUT4
        !            38:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !            39:       COMMON /OPTNS/ OPT(5), P1ERR
        !            40:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !            41:       DATA K /0/
        !            42:       DATA PRE(1,1) /6/, PRE(1,2) /6/, PRE(1,3) /4/, PRE(1,5) /4/,
        !            43:      *    PRE(1,6) /2/, PRE(1,7) /4/, PRE(1,8) /6/, PRE(1,9) /6/,
        !            44:      *    PRE(1,10) /6/, PRE(1,4) /-1/, PRE(1,11) /6/, PRE(2,1) /-1/,
        !            45:      *    PRE(2,2) /-1/, PRE(2,3) /-1/, PRE(2,5) /-1/, PRE(2,6) /-1/,
        !            46:      *    PRE(2,7) /-1/, PRE(2,8) /-1/, PRE(2,9) /-1/, PRE(2,10) /-1/,
        !            47:      *    PRE(2,4) /-1/, PRE(2,11) /-1/, PRE(3,1) /6/, PRE(3,2) /6/,
        !            48:      *    PRE(3,3) /-1/, PRE(3,5) /4/, PRE(3,6) /2/, PRE(3,7) /6/,
        !            49:      *    PRE(3,8) /6/, PRE(3,9) /6/, PRE(3,10) /6/, PRE(3,4) /-1/,
        !            50:      *    PRE(3,11) /6/, PRE(5,1) /5/, PRE(5,2) /7/, PRE(5,3) /4/,
        !            51:      *    PRE(5,5) /4/, PRE(5,6) /2/, PRE(5,7) /4/, PRE(5,8) /-1/,
        !            52:      *    PRE(5,9) /4/, PRE(5,10) /4/, PRE(5,4) /4/, PRE(5,11) /4/,
        !            53:      *    PRE(6,1) /5/, PRE(6,2) /1/, PRE(6,3) /4/, PRE(6,5) /4/,
        !            54:      *    PRE(6,6) /2/, PRE(6,7) /4/, PRE(6,8) /3/, PRE(6,9) /4/,
        !            55:      *    PRE(6,10) /4/, PRE(6,4) /4/, PRE(6,11) /4/
        !            56:       DATA PRE(7,1) /6/, PRE(7,2) /6/, PRE(7,3) /4/, PRE(7,5) /4/,
        !            57:      *    PRE(7,6) /2/, PRE(7,7) /6/, PRE(7,8) /6/, PRE(7,9) /6/,
        !            58:      *    PRE(7,10) /6/, PRE(7,4) /-1/, PRE(7,11) /6/, PRE(8,1) /-1/,
        !            59:      *    PRE(8,2) /-1/, PRE(8,3) /-1/, PRE(8,5) /-1/, PRE(8,6) /-1/,
        !            60:      *    PRE(8,7) /-1/, PRE(8,8) /-1/, PRE(8,9) /-1/, PRE(8,10) /-1/,
        !            61:      *    PRE(8,4) /-1/, PRE(8,11) /-1/, PRE(9,1) /5/, PRE(9,2) /6/,
        !            62:      *    PRE(9,3) /4/, PRE(9,5) /4/, PRE(9,6) /2/, PRE(9,7) /4/,
        !            63:      *    PRE(9,8) /6/, PRE(9,9) /6/, PRE(9,10) /6/, PRE(9,4) /4/,
        !            64:      *    PRE(9,11) /4/, PRE(10,1) /5/, PRE(10,2) /6/, PRE(10,3) /4/,
        !            65:      *    PRE(10,5) /4/, PRE(10,6) /2/, PRE(10,7) /4/, PRE(10,8) /6/,
        !            66:      *    PRE(10,9) /4/, PRE(10,10) /6/, PRE(10,4) /4/, PRE(10,11) /4/,
        !            67:      *    PRE(4,1) /5/, PRE(4,2) /6/, PRE(4,3) /4/, PRE(4,5) /4/,
        !            68:      *    PRE(4,6) /2/, PRE(4,7) /4/, PRE(4,8) /6/, PRE(4,9) /6/,
        !            69:      *    PRE(4,10) /6/, PRE(4,4) /-1/, PRE(4,11) /4/, PRE(11,1) /5/,
        !            70:      *    PRE(11,2) /6/, PRE(11,3) /4/, PRE(11,5) /4/, PRE(11,6) /2/,
        !            71:      *    PRE(11,7) /4/, PRE(11,8) /6/, PRE(11,9) /6/, PRE(11,10) /6/,
        !            72:      *    PRE(11,4) /-1/, PRE(11,11) /6/
        !            73:       DATA PRE(12,1), PRE(12,3), PRE(12,7), PRE(12,11) /4*6/, PRE(12,2)
        !            74:      *    /6/, PRE(12,5) /4/, PRE(12,6) /2/, PRE(12,8) /6/, PRE(12,4),
        !            75:      *    PRE(12,9), PRE(12,10) /3*6/, PRE(1,12), PRE(2,12), PRE(3,12),
        !            76:      *    PRE(7,12), PRE(12,12) /5*-1/, PRE(5,12), PRE(6,12),
        !            77:      *    PRE(8,12), PRE(9,12), PRE(10,12), PRE(4,12), PRE(11,12) /7*4/
        !            78:       DATA IBR(1), IBR(3), IBR(7), IBR(12) /4*1/, IBR(2) /2/, IBR(4),
        !            79:      *    IBR(11) /2*3/, IBR(9), IBR(10) /2*5/, IBR(8), IBR(5), IBR(6)
        !            80:      *    /3*4/, IBR(13) /2/, IBR(14) /4/, JBR(1), JBR(12) /2*1/,
        !            81:      *    JBR(2), JBR(3), JBR(7), JBR(9), JBR(10), JBR(11), JBR(8)
        !            82:      *    /7*2/, JBR(4) /3/, JBR(5), JBR(6) /2*4/, JBR(13) /4/
        !            83:       DATA ADJ(1,1), ADJ(1,2), ADJ(1,3) /3*-1/, ADJ(1,4) /0/, ADJ(2,1),
        !            84:      *    ADJ(2,2) /2*0/, ADJ(2,3), ADJ(2,4) /2*-1/, ADJ(3,1) /1/,
        !            85:      *    ADJ(3,4) /0/, ADJ(3,2), ADJ(3,3) /2*-1/, ADJ(5,1) /1/,
        !            86:      *    ADJ(5,3), ADJ(5,4) /2*0/, ADJ(5,2) /-1/, ADJ(4,1), ADJ(4,3),
        !            87:      *    ADJ(4,4) /3*0/, ADJ(4,2) /-1/
        !            88: C
        !            89: C     CODES IN OPERAND STACK
        !            90: C     0....DOUBLE PRECISION       1....REAL   2....INTEGER
        !            91: C     3....COMPLEX      4....LOGICAL   5....HOLLERITH
        !            92: C     6....PROCEDURE NAME
        !            93: C     CODES FOR OPERATORS
        !            94: C     11 +,-    12 )   13 **  14 .NOT.  15 (  16  FCN(
        !            95: C     17 /,*  18 ,  19 .AND.  20 .OR.  21 .EQ.  22 UNARY -,+
        !            96: C
        !            97:       PB = LSTACK
        !            98:       PT = 1
        !            99:       CALLST = .FALSE.
        !           100:       PREVOP = -1
        !           101:       CUROP = 0
        !           102:       PARENS = 0
        !           103:       FLUSH = .FALSE.
        !           104:       EXPR = -1
        !           105:    10 IF (PSTMT.LT.NSTMT .AND. .NOT.CALLST) GO TO 110
        !           106: C
        !           107: C     FINISH RECOGNITION OF EXPRESSION; POP OPERAND STACK AND RETURN
        !           108: C     TYPE OF EXPRESSION
        !           109: C
        !           110:    20 IF (PARENS.EQ.0) GO TO 40
        !           111:    30 CALL ERROR1(37H UNBALANCED PARENTHESES IN EXPRESSION, 37)
        !           112:       IF (FLUSH) GO TO 530
        !           113:       GO TO 80
        !           114:    40 IF (PB.EQ.LSTACK .OR. CALLST) GO TO 60
        !           115:    50 CALL POP
        !           116:       IF (ERR) GO TO 530
        !           117:       IF (PB.LT.LSTACK) GO TO 50
        !           118:    60 IF (PT.NE.3) GO TO 90
        !           119:       IF (STACK(1).EQ.0) GO TO 70
        !           120:       I = IGATT1(STACK(1),8)
        !           121:       IF (I.EQ.0) CALL SATT1(STACK(1), 8, 10)
        !           122:    70 EXPR = STACK(2)
        !           123:    80 PSTMT = K2
        !           124:       ERR = .FALSE.
        !           125:       RETURN
        !           126:    90 CALL ERROR1(29H INVALID SYNTAX IN EXPRESSION, 29)
        !           127:       IF (FLUSH) GO TO 530
        !           128:       GO TO 80
        !           129:   100 CALL ERROR1(31H EXPRESSION TOO LONG TO PROCESS, 31)
        !           130:       GO TO 530
        !           131: C
        !           132: C     CONTINUING PROCESSING THE EXPRESSION, IDENTIFY NEXT TOKEN,
        !           133: C
        !           134:   110 CUROP = GETTOK(PSTMT,K2)
        !           135:       IF (ERR) GO TO 80
        !           136: C
        !           137: C     SEE END OF EXPRESSION:  ")" <ID> OR <LABEL>; GETTOK RETURNS
        !           138: C     SAME CODES AS THOSE ABOVE EXCEPT 6 IS ID, 16 IS FCN( OR ARRAY ELE
        !           139: C
        !           140:       IF (CUROP.NE.6 .AND. CUROP.NE.2 .AND. CUROP.NE.16 .OR.
        !           141:      *    PREVOP.NE.12) GO TO 120
        !           142:       K2 = PSTMT
        !           143:       GO TO 20
        !           144: C
        !           145: C     CHECK FOR ADJACENT OPERATORS OR OPERANDS.
        !           146: C
        !           147:   120 IF (PREVOP.LE.6) GO TO 130
        !           148:       I = IBR(PREVOP-10)
        !           149:       GO TO 140
        !           150:   130 I = IBR(13)
        !           151:       IF(PREVOP.EQ.(-1)) I = IBR(14)
        !           152:   140 IF (CUROP.LE.6) GO TO 150
        !           153:       I2 = JBR(CUROP-10)
        !           154:       GO TO 160
        !           155:   150 I2 = JBR(13)
        !           156:   160 IF (I.GE.3 .AND. I2.EQ.1) CUROP = 22
        !           157:       IF (ADJ(I,I2)) 170, 190, 180
        !           158:   170 CALL ERROR1(44H ADJACENT PLACEMENT OF OPERATORS OR OPERANDS, 44)
        !           159:       GO TO 530
        !           160:   180 CALL ERROR1(
        !           161:      *    54H WARNING - ADJACENT PLACEMENT OF OPERATOR AND UNARY -+, 54)
        !           162:   190 IF (CUROP.GT.6 .AND. CUROP.NE.16) GO TO 290
        !           163:       IF (CUROP.LT.6) GO TO 280
        !           164: C
        !           165: C     PROCESS ID OR FCN( OR ARRAY ELEMENT OR ARRAY
        !           166: C     LOOKUP SYMBOL TABLE ENTRY TO IDENTIFY ARRAYS AND TO IMPLICITLY
        !           167: C     TYPE IDENTIFIERS IF NECESSARY.
        !           168: C
        !           169:       IF (CUROP.EQ.6) GO TO 200
        !           170:       K = LOOKUP(K2-1,.FALSE.)
        !           171:       GO TO 210
        !           172:   200 K = LOOKUP(K2,.FALSE.)
        !           173:   210 IF (SYSERR) GO TO 530
        !           174:       I1 = IGATT1(K,1)
        !           175:       I2 = IGATT1(K,7)
        !           176:       I3 = IGATT1(K,8)
        !           177: C
        !           178: C     IMPLICITLY TYPE IDENTIFIERS AND FCNS
        !           179: C
        !           180:       IF (I1.GT.0) GO TO 220
        !           181:       I1 = 1
        !           182:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !           183:       CALL SATT1(K, 1, I1)
        !           184: C
        !           185: C     SEPARATE ARRAY ELEMENT, FCN REFERENCE,ASF REF.
        !           186: C
        !           187:   220 I1 = MOD(I1,8)
        !           188:       IF (CUROP.NE.16) GO TO 250
        !           189:       IF (I2.EQ.0) GO TO 240
        !           190: C
        !           191: C     ARRAY ELEMENT--CHECK FOR BEING IN ASF DEF AND  PEEL  OFF
        !           192: C     SUBSCRIPTS, CHECKING THEIR NUMBER
        !           193: C
        !           194:       IF (ITYP.NE.31) GO TO 230
        !           195:       CALL ERROR1(39H ILLEGAL USE OF ARRAY IN ASF DEFINITION, 39)
        !           196:   230 CUROP = I1
        !           197:       I1 = CUROP + 16
        !           198:       PSTMT = K2
        !           199:       CALL SUBS(K2, I2)
        !           200:       IF (ERR .OR. SYSERR) GO TO 80
        !           201:       GO TO 270
        !           202: C
        !           203: C     PROCESS FCN( OR ASF( REFERENCE; CHECK USAGE TO SEE
        !           204: C     IF IS A LEGAL FCN OR ASF NAME I.E. IF WAS USED
        !           205: C     AS A FCN, SUBR, ASF, OR WAS IN AN EXTERNAL STMT.
        !           206: C
        !           207:   240 IF (I3.EQ.0 .OR. I3.EQ.2 .OR. I3.EQ.5 .OR. I3.EQ.6 .OR. I3.EQ.13
        !           208:      *    .OR. I3.EQ.14) GO TO 290
        !           209: C
        !           210: C     ACTUAL USAGE WILL BE DETERMINED BY CODE WHICH
        !           211: C     STORES CALL TEMPLATE
        !           212: C
        !           213:       CALL ERROR1(18H ILLEGAL USE OF ID, 18)
        !           214:       GO TO 530
        !           215: C
        !           216: C     VARIABLE, ARRAY, PROCEDURE NAME
        !           217: C
        !           218:   250 IF (I2.EQ.0) GO TO 260
        !           219: C
        !           220: C     ARRAY
        !           221: C
        !           222:       CUROP = I1
        !           223:       I1 = CUROP + 8
        !           224:       IF (I3.EQ.0) CALL SATT1(K, 8, 10)
        !           225:       GO TO 270
        !           226: C
        !           227: C     VARIABLE OR PROCEDURE
        !           228: C     LEAVE IDS USAGE UNSET
        !           229: C     THEY WILL BE SET LATER BY APPEARING AS OPERANDS OR BY BEING
        !           230: C     DEFINED AS FCN  OR SUBROUTINE REFS BY FOLLOWING PGMS
        !           231: C
        !           232:   260 IF (I3.EQ.0) GO TO 270
        !           233:       IF (I3.EQ.5 .OR. I3.EQ.6 .OR. I3.EQ.13) I1 = 6
        !           234:       IF (I3.EQ.10 .OR. I1.EQ.6) GO TO 270
        !           235:       IF (ITYP.EQ.31 .AND. I3.EQ.1 .AND. DSA(K+2).EQ.IASF) GO TO 270
        !           236:       CALL ERROR1(36H ILLEGAL VARIABLE USED IN EXPRESSION, 36)
        !           237:       GO TO 530
        !           238: C
        !           239: C     ENTER ARRAY,ID, PROCEDURE NAME, ARRAY ELEMENT INTO OPERAND STACK
        !           240: C     UPDATE PREVOP,PSTMT.  ALSO ENTER SYMBOL TABLE INDEX FOR THESE
        !           241: C     PREVOP = 0,1,...6 FOR OPERANDS
        !           242: C     11,12,...22 FOR OPERATORS
        !           243: C
        !           244:   270 IF (PT+2.GE.PB) GO TO 100
        !           245:       STACK(PT) = K
        !           246:       STACK(PT+1) = I1
        !           247:       PT = PT + 2
        !           248:       PREVOP = CUROP
        !           249:       PSTMT = K2
        !           250:       GO TO 10
        !           251: C
        !           252: C     ARE PROCESSING A CONSTANT
        !           253: C
        !           254:   280 I1 = CUROP
        !           255:       K = 0
        !           256:       GO TO 270
        !           257: C
        !           258: C     ARE PROCESSING AN OPERATER
        !           259: C     PRE(I,J) CONTAINS ACTION TAKEN GIVEN OPERATOR I ON STACK
        !           260: C     AND OPERATOR J IN INPUT
        !           261: C
        !           262:   290 KNAME = K
        !           263:       IF (CUROP.EQ.15 .OR. CUROP.EQ.16) PARENS = PARENS + 1
        !           264:       IF (CUROP.EQ.12) PARENS = PARENS - 1
        !           265:       IF (PARENS.GE.0) GO TO 300
        !           266:       FLUSH = .TRUE.
        !           267:       GO TO 30
        !           268: C
        !           269: C     CHECKS FOR LEADING UNARY +,- IN EXPRESSIONS
        !           270: C
        !           271:   300 IF (PB.EQ.LSTACK) GO TO 460
        !           272:       I = STACK(PB+1) - 10
        !           273:       I2 = CUROP - 10
        !           274:       K = PRE(I,I2)
        !           275:   310 IF (-1.NE.K) GO TO 320
        !           276:       FLUSH = .TRUE.
        !           277:       GO TO 90
        !           278:   320 GO TO (330, 470, 520, 480, 480, 490, 510), K
        !           279: C
        !           280: C     CREATE TEMPLATE FROM FCN CALL
        !           281: C
        !           282:   330 IF (ITYP.EQ.18 .AND. PARENS.EQ.0) CALLST = .TRUE.
        !           283:       L1 = STACK(PB+2)
        !           284:       L2 = PT - 1
        !           285: C
        !           286: C     CHECK FOR NO ARGS
        !           287: C
        !           288:       IF (L2.GT.L1) GO TO 340
        !           289:       CALL ERROR1(18H MISSING ARGUMENTS, 18)
        !           290:       GO TO 450
        !           291: C
        !           292: C     CHECK FOR NOT CHANGING THROUGH SUBROUTINE CALL THE DO CONTROL
        !           293: C     VARIABLE OF A CURRENT LOOP OR ANY ADJUSTIBLE DIMENSION DUMMY ARG
        !           294: C
        !           295:   340 DO 380 I=L1,L2,2
        !           296:         IF (STACK(I)) 350, 380, 350
        !           297:   350   IF (DOVAR(STACK(I))) STACK(I+1) = STACK(I+1) + 32
        !           298:         I1 = IGATT1(STACK(I),4)
        !           299:         IF (I1) 380, 380, 360
        !           300:   360   I1 = IGATT1(STACK(I),6)
        !           301:         IF (I1) 380, 380, 370
        !           302:   370   STACK(I+1) = STACK(I+1) + 64
        !           303:   380 CONTINUE
        !           304: C
        !           305: C     CHECK FOR USE OF ID AS FCN ONCE AND AS SUBROUTINE LATER
        !           306: C     OR VICE VERSA
        !           307: C
        !           308:       I = STACK(PB+3)
        !           309:       L = IGATT1(I,8)
        !           310:       IF (L.EQ.2 .OR. L.EQ.5 .OR. L.EQ.6) GO TO 410
        !           311:       IF (.NOT.INTEXT(I,L1,L2,.TRUE.)) GO TO 390
        !           312: C
        !           313: C     FOUND AN INTRINSIC FCN
        !           314: C      CHECK NOT IN A CALL STMT USED AS A SUBROUTINE
        !           315: C
        !           316:       IF (CALLST) GO TO 420
        !           317:       GO TO 450
        !           318: C
        !           319: C     DEFINE FCN( USAGE IF UNSET
        !           320: C     SET USAGE OF ID USED AS A PROC
        !           321: C
        !           322:   390 IF (CALLST) GO TO 400
        !           323:       CALL SATT1(I, 8, 5)
        !           324:       GO TO 430
        !           325:   400 CALL SATT1(I, 8, 6)
        !           326:       GO TO 430
        !           327: C
        !           328: C     CHECK USAGE OF PROC ALREADY USED IN PROGRAM UNIT
        !           329: C
        !           330:   410 IF (CALLST .AND. L.EQ.6 .OR. .NOT.CALLST .AND. (L.EQ.5 .OR.
        !           331:      *    L.EQ.2)) GO TO 430
        !           332:   420 CALL ERROR1(18H ILLEGAL REFERENCE, 18)
        !           333:       GO TO 450
        !           334:   430 IF (.NOT.OPT(3) .OR. P1ERR) GO TO 450
        !           335: C
        !           336: C     LOAD INTO STACK COUNT OF WORDS IN  DESCRIPTOR, INDEX OF FCN
        !           337: C     IN SYMBOL TABLE,  STMT NO  OF  REFERENCE
        !           338: C
        !           339:       IF (PT+3.GE.PB) GO TO 100
        !           340:       STACK(PT) = PT - STACK(PB+2)
        !           341:       STACK(PT+1) = STACK(PB+3)
        !           342:       STACK(PT+2) = NOST
        !           343:       STACK(PT+3) = 6 - IGATT1(STACK(PB+3),8)
        !           344:       L3 = PT + 3
        !           345:       ICOD = 2
        !           346:       L = L2 - L1 + 5
        !           347:       IF (L.LE.LREF) GO TO 440
        !           348:       CALL ERROR1(44H IN EXPR, TABLE OVERFLOW OF REF, REF IGNORED, 44)
        !           349:       GO TO 450
        !           350:   440 WRITE (OUTUT3) L, ICOD, (STACK(I),I=PT,L3), (STACK(I),I=L1,L2)
        !           351: C
        !           352: C     FCN REF POPPED AND PROPER TYPE PUT ON OPERAND STACK
        !           353: C
        !           354:   450 PT = STACK(PB+2)
        !           355:       I1 = IGATT1(STACK(PB+3),1)
        !           356:       STACK(PT) = 0
        !           357:       STACK(PT+1) = MOD(I1,8)
        !           358:       PT = PT + 2
        !           359:       PB = PB + 3
        !           360:       GO TO 520
        !           361: C
        !           362: C     HANDLES FIRST OPERATOR IN EXPRESSION--WILL ALWAYS BE PUSHED ONTO
        !           363: C     OPERATOR STACK.  FCN( HAS SPECIAL PUSH.
        !           364: C
        !           365:   460 IF (CUROP.NE.16) GO TO 480
        !           366: C
        !           367: C     FOUND "FCN(" CONSTRUCT  ; STORE 3 THINGS IN STACK
        !           368: C     PTR TO FCN NAME IN SYMBOL TABLE; PTR TO 1ST ARGE IN STACK   ;
        !           369: C     OPERAND CODE FOR FCN(
        !           370: C
        !           371:   470 IF (PB-3.LE.PT) GO TO 100
        !           372:       STACK(PB) = KNAME
        !           373:       STACK(PB-1) = PT
        !           374:       STACK(PB-2) = CUROP
        !           375:       PB = PB - 3
        !           376:       GO TO 520
        !           377: C
        !           378: C     SIMPLE PUSH ONTO OPERATOR STACK
        !           379: C
        !           380:   480 IF (PB-1.EQ.PT) GO TO 100
        !           381:       STACK(PB) = CUROP
        !           382:       PB = PB - 1
        !           383:       GO TO 520
        !           384: C
        !           385: C     POP OPERATOR FROM STACK.  IF STACK EMPTY, PUSH CUROP ONTO
        !           386: C     STACK.  ELSE TAKE ACTION SPECIFIED BY PRE(TOP OPERATOR,CUROP).
        !           387: C
        !           388:   490 CALL POP
        !           389:       IF (ERR) GO TO 530
        !           390:       IF (PB.LT.LSTACK) GO TO 500
        !           391:       GO TO 480
        !           392:   500 I = STACK(PB+1) - 10
        !           393:       K = PRE(I,CUROP-10)
        !           394:       GO TO 310
        !           395: C
        !           396: C     POP "(" WHEN HAVE FINISHED A PARENTHESIZED EXPRESSION
        !           397: C
        !           398:   510 CALL POP
        !           399:       IF (ERR) GO TO 530
        !           400: C
        !           401: C     UPDATE PREVOP,PSTMT AFTER FINISHING PROCESSING AN OPERATOR
        !           402: C
        !           403:   520 PREVOP = CUROP
        !           404:       PSTMT = K2
        !           405:       GO TO 10
        !           406: C
        !           407: C     JOB OF THIS CODE IS TO FLISH TO END OF UNRECOGNIZABLE
        !           408: C     EXPRESSION
        !           409: C
        !           410:   530 K2 = PSTMT
        !           411:       ERR = .FALSE.
        !           412:   540 IF (K2.GE.NSTMT) GO TO 80
        !           413:       IF (STMT(K2).EQ.65) PARENS = PARENS + 1
        !           414:       IF (STMT(K2).NE.62) GO TO 550
        !           415:       PARENS = PARENS - 1
        !           416:       IF (PARENS.EQ.0) GO TO 560
        !           417:   550 K2 = K2 + 1
        !           418:       GO TO 540
        !           419:   560 I = GETTOK(K2,I2)
        !           420:       K2 = I2
        !           421:       IF ((I.EQ.1 .OR. I.EQ.6) .OR. ERR) GO TO 80
        !           422:       GO TO 540
        !           423:       END

unix.superglobalmegacorp.com

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