      SUBROUTINE MAIN
      LOGICAL*1 NAME(40)
      INTEGER GETARG, OPEN
      INTEGER FD, I
      CALL TBINIT
      FD = -3
      I=1
23000 IF(.NOT.(GETARG(I, NAME, 40) .NE. -1))GOTO 23002
      IF(.NOT.(NAME(1) .EQ. 63 .AND. NAME(2) .EQ. 0))GOTO 23003
      CALL ERROR (11Husage:  dc.)
23003 CONTINUE
      IF(.NOT.(NAME(1) .EQ. 45 .AND. NAME(2) .EQ. 0))GOTO 23005
      FD = 1
      GOTO 23006
23005 CONTINUE
      IF(.NOT.(NAME(1) .NE. 45))GOTO 23007
      FD = OPEN(NAME, 1)
      IF(.NOT.(FD .EQ. -3))GOTO 23009
      CALL CANT(NAME)
23009 CONTINUE
23007 CONTINUE
23006 CONTINUE
      IF(.NOT.(FD .NE. -3))GOTO 23011
      CALL DCEXP (FD)
      IF(.NOT.(FD .NE. 1))GOTO 23013
      CALL CLOSE (FD)
23013 CONTINUE
23011 CONTINUE
23001 I=I+1
      GOTO 23000
23002 CONTINUE
      IF(.NOT.(FD .EQ. -3))GOTO 23015
      CALL DCEXP (1)
23015 CONTINUE
      RETURN
      END
      SUBROUTINE DCEXP (FD)
      INTEGER FD, JUNK, I, ANSWER, SAVE
      INTEGER GETLIN, NUMTOC, EXPTOI, INDEX, STRCMP
      INTEGER IBASE, OBASE, UBASE, RADEXP, EQLOC
      LOGICAL*1 LINE(400), NAME(400)
      LOGICAL*1 ERRMSG(22)
      LOGICAL*1 TEN(3)
      LOGICAL*1 IBNAME(6)
      LOGICAL*1 OBNAME(6)
      DATA ERRMSG(1)/58/,ERRMSG(2)/32/,ERRMSG(3)/32/,ERRMSG(4)/105/,ERRM
     *SG(5)/110/,ERRMSG(6)/118/,ERRMSG(7)/97/,ERRMSG(8)/108/,ERRMSG(9)/1
     *05/,ERRMSG(10)/100/,ERRMSG(11)/32/,ERRMSG(12)/101/,ERRMSG(13)/120/
     *,ERRMSG(14)/112/,ERRMSG(15)/114/,ERRMSG(16)/101/,ERRMSG(17)/115/,E
     *RRMSG(18)/115/,ERRMSG(19)/105/,ERRMSG(20)/111/,ERRMSG(21)/110/,ERR
     *MSG(22)/0/
      DATA TEN(1)/49/,TEN(2)/48/,TEN(3)/0/
      DATA IBNAME(1)/105/,IBNAME(2)/98/,IBNAME(3)/97/,IBNAME(4)/115/,IBN
     *AME(5)/101/,IBNAME(6)/0/
      DATA OBNAME(1)/111/,OBNAME(2)/98/,OBNAME(3)/97/,OBNAME(4)/115/,OBN
     *AME(5)/101/,OBNAME(6)/0/
      IBASE = 10
      OBASE = 10
      CALL INSTAL(IBNAME,TEN)
      CALL INSTAL(OBNAME,TEN)
23017 IF(.NOT.(GETLIN(LINE, FD) .NE. -1))GOTO 23018
      RADEXP = 0
      CALL STRIP(LINE)
      I = 1
      SAVE = INDEX(LINE, 61)
      IF(.NOT.(SAVE .NE. 0))GOTO 23019
      IF(.NOT.(LINE(SAVE+1) .EQ. 61))GOTO 23021
      SAVE = 0
      GOTO 23022
23021 CONTINUE
      EQLOC = SAVE
      I = SAVE + 1
      LINE(EQLOC) = 0
      CALL SCOPY(LINE, 1, NAME, 1)
      IF(.NOT.(STRCMP(NAME,IBNAME) .EQ. 0 .OR. STRCMP(NAME,OBNAME) .EQ. 
     *0))GOTO 23023
      RADEXP = 1
23023 CONTINUE
23022 CONTINUE
      GOTO 23020
23019 CONTINUE
      IF(.NOT.(STRCMP(LINE,IBNAME) .EQ. 0 .OR. STRCMP(LINE,OBNAME) .EQ. 
     *0))GOTO 23025
      RADEXP = 1
23025 CONTINUE
23020 CONTINUE
      UBASE = IBASE
      IF(.NOT.(RADEXP .EQ. 1))GOTO 23027
      UBASE = 10
23027 CONTINUE
      ANSWER = EXPTOI(LINE, I, UBASE)
      IF(.NOT.(LINE(I) .NE. 0))GOTO 23029
      IF(.NOT.(SAVE .NE. 0))GOTO 23031
      LINE(EQLOC) = 61
23031 CONTINUE
      CALL PUTLIN(LINE, 3)
      CALL PUTLIN(ERRMSG, 3)
      CALL PUTCH(10, 3)
      GOTO 23030
23029 CONTINUE
      UBASE = OBASE
      IF(.NOT.(RADEXP .EQ. 1 .OR. SAVE .NE. 0))GOTO 23033
      UBASE = 10
23033 CONTINUE
      JUNK = NUMTOC(ANSWER, LINE, 400, UBASE)
      IF(.NOT.(SAVE .NE. 0))GOTO 23035
      CALL INSTAL(NAME, LINE)
      IF(.NOT.(STRCMP(IBNAME,NAME) .EQ. 0))GOTO 23037
      IBASE = ANSWER
23037 CONTINUE
      IF(.NOT.(STRCMP(OBNAME,NAME) .EQ. 0))GOTO 23039
      OBASE = ANSWER
23039 CONTINUE
      GOTO 23036
23035 CONTINUE
      CALL PUTLIN(LINE, 2)
      CALL PUTCH(10, 2)
23036 CONTINUE
23030 CONTINUE
      GOTO 23017
23018 CONTINUE
      RETURN
      END
      SUBROUTINE STRIP (LINE)
      LOGICAL*1 LINE(100)
      INTEGER I
      I=1
23041 IF(.NOT.(LINE(I) .NE. 0))GOTO 23043
      IF(.NOT.(LINE(I) .EQ. 32 .OR. LINE(I) .EQ. 9 .OR. LINE(I) .EQ. 10)
     *)GOTO 23044
      CALL SCOPY(LINE, I+1, LINE, I)
      GOTO 23045
23044 CONTINUE
      I = I + 1
23045 CONTINUE
23042 GOTO 23041
23043 CONTINUE
      RETURN
      END
      INTEGER FUNCTION EXPTOI (EXP, PTR, RADIX)
      INTEGER EXPTOK, STACKX
      LOGICAL*1 EXP(100)
      INTEGER PTR, RADIX
      INTEGER K, TOK, KIND, PRECED(21)
      COMMON/CEXP/ TOP, TOKST(200), KINDST(200)
      INTEGER TOP
      INTEGER TOKST
      INTEGER KINDST
      DATA PRECED(1), PRECED(2), PRECED(3), PRECED(4), PRECED(5), PRECED
     *(6), PRECED(7), PRECED(8), PRECED(9), PRECED(10), PRECED(11), PREC
     *ED(12), PRECED(13), PRECED(14), PRECED(15), PRECED(16), PRECED(17)
     *, PRECED(18), PRECED(19), PRECED(20), PRECED(21) / 0, 0, 1, 1, 2, 
     *2, 3, 4,4,4,4,4,4, 5, 5, 6, 6, 8, 6, 7, 8 /
      K = PTR
      TOP = 1
      TOKST(TOP) = 2
      KINDST(TOP) = 3
23046 IF(.NOT.(EXPTOK(EXP, K, TOK, KIND, RADIX) .EQ. 1))GOTO 23047
      IF(.NOT.(KIND .EQ. 2))GOTO 23048
      IF(.NOT.(KINDST(TOP) .EQ. 2))GOTO 23050
      EXPTOI=(0)
      RETURN
23050 CONTINUE
      GOTO 23049
23048 CONTINUE
      IF(.NOT.(KIND .EQ. 1))GOTO 23052
      IF(.NOT.(KINDST(TOP) .EQ. 1))GOTO 23054
      EXPTOI=(0)
      RETURN
23054 CONTINUE
      IF(.NOT.(KINDST(TOP) .EQ. 3))GOTO 23056
      IF(.NOT.(TOK .NE. 14 .AND. TOK .NE. 15 .AND. TOK .NE. 7))GOTO 2305
     *8
      EXPTOI=(0)
      RETURN
23058 CONTINUE
      IF(.NOT.(STACKX(0, 2) .EQ. -3))GOTO 23060
      EXPTOI=(0)
      RETURN
23060 CONTINUE
      IF(.NOT.(TOK .EQ. 14))GOTO 23062
      TOK = 21
      GOTO 23063
23062 CONTINUE
      IF(.NOT.(TOK .EQ. 15))GOTO 23064
      TOK = 18
23064 CONTINUE
23063 CONTINUE
      GOTO 23057
23056 CONTINUE
      IF(.NOT.(KINDST(TOP-1) .EQ. 1))GOTO 23066
23068 IF(.NOT.(PRECED(TOKST(TOP-1)) .GE. PRECED(TOK)))GOTO 23069
      CALL BINOP
      GOTO 23068
23069 CONTINUE
23066 CONTINUE
23057 CONTINUE
23055 CONTINUE
      GOTO 23053
23052 CONTINUE
      IF(.NOT.(TOK .NE. 3))GOTO 23070
      IF(.NOT.(KINDST(TOP) .NE. 2))GOTO 23072
      EXPTOI=(0)
      RETURN
23072 CONTINUE
23074 IF(.NOT.(PRECED(TOKST(TOP-1)) .GT. PRECED(TOK)))GOTO 23075
      IF(.NOT.(KINDST(TOP-1) .EQ. 1))GOTO 23076
      CALL BINOP
      GOTO 23077
23076 CONTINUE
      EXPTOI=(0)
      RETURN
23077 CONTINUE
      GOTO 23074
23075 CONTINUE
      IF(.NOT.(PRECED(TOKST(TOP-1)) .EQ. PRECED(TOK)))GOTO 23078
      IF(.NOT.(TOK .EQ. 1))GOTO 23080
      PTR = K
      EXPTOI=(TOKST(TOP))
      RETURN
23080 CONTINUE
      TOK = TOKST(TOP)
      KIND = KINDST(TOP)
      TOP = TOP -2
23081 CONTINUE
      GOTO 23079
23078 CONTINUE
      EXPTOI=(0)
      RETURN
23079 CONTINUE
23070 CONTINUE
23053 CONTINUE
23049 CONTINUE
      IF(.NOT.(STACKX(TOK, KIND) .EQ. -3))GOTO 23082
      EXPTOI=(0)
      RETURN
23082 CONTINUE
      GOTO 23046
23047 CONTINUE
      EXPTOI=(0)
      RETURN
      END
      SUBROUTINE BINOP
      INTEGER L, R, RESULT, OP
      COMMON/CEXP/ TOP, TOKST(200), KINDST(200)
      INTEGER TOP
      INTEGER TOKST
      INTEGER KINDST
      R = TOKST(TOP)
      OP = TOKST(TOP-1)
      L = TOKST(TOP-2)
      TOP = TOP - 2
      I23084=(OP)
      GOTO 23084
23086 CONTINUE
      IF(.NOT.(L .NE. 0 .OR. R .NE. 0))GOTO 23087
      RESULT = 1
      GOTO 23088
23087 CONTINUE
      RESULT = 0
23088 CONTINUE
      GOTO 23085
23089 CONTINUE
      IF(.NOT.(L .NE. 0 .AND. R .NE. 0))GOTO 23090
      RESULT = 1
      GOTO 23091
23090 CONTINUE
      RESULT = 0
23091 CONTINUE
      GOTO 23085
23092 CONTINUE
      IF(.NOT.(R .EQ. 0))GOTO 23093
      RESULT = 1
      GOTO 23094
23093 CONTINUE
      RESULT = 0
23094 CONTINUE
      GOTO 23085
23095 CONTINUE
      IF(.NOT.(L .EQ. R))GOTO 23096
      RESULT = 1
      GOTO 23097
23096 CONTINUE
      RESULT = 0
23097 CONTINUE
      GOTO 23085
23098 CONTINUE
      IF(.NOT.(L .NE. R))GOTO 23099
      RESULT = 1
      GOTO 23100
23099 CONTINUE
      RESULT = 0
23100 CONTINUE
      GOTO 23085
23101 CONTINUE
      IF(.NOT.(L .GT. R))GOTO 23102
      RESULT = 1
      GOTO 23103
23102 CONTINUE
      RESULT = 0
23103 CONTINUE
      GOTO 23085
23104 CONTINUE
      IF(.NOT.(L .GE. R))GOTO 23105
      RESULT = 1
      GOTO 23106
23105 CONTINUE
      RESULT = 0
23106 CONTINUE
      GOTO 23085
23107 CONTINUE
      IF(.NOT.(L .LT. R))GOTO 23108
      RESULT = 1
      GOTO 23109
23108 CONTINUE
      RESULT = 0
23109 CONTINUE
      GOTO 23085
23110 CONTINUE
      IF(.NOT.(L .LE. R))GOTO 23111
      RESULT = 1
      GOTO 23112
23111 CONTINUE
      RESULT = 0
23112 CONTINUE
      GOTO 23085
23113 CONTINUE
      RESULT = L + R
      GOTO 23085
23114 CONTINUE
      RESULT = L - R
      GOTO 23085
23115 CONTINUE
      RESULT = (-R)
      GOTO 23085
23116 CONTINUE
      RESULT = L * R
      GOTO 23085
23117 CONTINUE
      RESULT = L / R
      GOTO 23085
23118 CONTINUE
      RESULT = MOD(L,R)
      GOTO 23085
23119 CONTINUE
      RESULT = L**R
      GOTO 23085
23120 CONTINUE
      RESULT = (+R)
      GOTO 23085
23084 CONTINUE
      I23084=I23084-4
      IF(I23084.LT.1.OR.I23084.GT.17)GOTO 23085
      GOTO(23086,23089,23092,23095,23098,23101,23104,23107,23110,23113,2
     *3114,23116,23117,23115,23118,23119,23120),I23084
23085 CONTINUE
      TOKST(TOP) = RESULT
      RETURN
      END
      INTEGER FUNCTION EXPTOK(EXP, K, TOK, KIND, RADIX)
      LOGICAL*1 EXP(100), DEFN(400), NAME(400)
      INTEGER K
      INTEGER TOK
      INTEGER KIND
      INTEGER RADIX
      INTEGER CTONUM, LOOKUP
      LOGICAL*1 TYPE
      LOGICAL*1 C, CN
      COMMON/CEXP/ TOP, TOKST(200), KINDST(200)
      INTEGER TOP
      INTEGER TOKST
      INTEGER KINDST
      LOGICAL*1 DIGITS(23)
      DATA DIGITS(1)/48/,DIGITS(2)/49/,DIGITS(3)/50/,DIGITS(4)/51/,DIGIT
     *S(5)/52/,DIGITS(6)/53/,DIGITS(7)/54/,DIGITS(8)/55/,DIGITS(9)/56/,D
     *IGITS(10)/57/,DIGITS(11)/97/,DIGITS(12)/98/,DIGITS(13)/99/,DIGITS(
     *14)/100/,DIGITS(15)/101/,DIGITS(16)/102/,DIGITS(17)/65/,DIGITS(18)
     */66/,DIGITS(19)/67/,DIGITS(20)/68/,DIGITS(21)/69/,DIGITS(22)/70/,D
     *IGITS(23)/0/
      C = TYPE(EXP(K))
      IF(.NOT.(RADIX .GT. 10))GOTO 23121
      IF(.NOT.(INDEX(DIGITS,EXP(K)) .GT. 0))GOTO 23123
      C = 2
23123 CONTINUE
23121 CONTINUE
      IF(.NOT.(C .EQ. 2))GOTO 23125
      TOK = CTONUM(EXP, K, RADIX)
      KIND = 2
      EXPTOK=(1)
      RETURN
23125 CONTINUE
      IF(.NOT.(C .EQ. 1))GOTO 23127
      CALL MOVNAM(EXP, K, NAME, 1)
      K = K + LENGTH(NAME)
      IF(.NOT.(LOOKUP(NAME, DEFN) .EQ. 1))GOTO 23129
      I = 1
      TOK = CTONUM(DEFN, I, 10)
      KIND = 2
      EXPTOK=(1)
      RETURN
23129 CONTINUE
      EXPTOK=(0)
      RETURN
23130 CONTINUE
      GOTO 23128
23127 CONTINUE
      CN = EXP(K+1)
      KIND = 1
      I23131=(C)
      GOTO 23131
23133 CONTINUE
      IF(.NOT.(CN .EQ. 61))GOTO 23134
      TOK = 9
      K = K + 1
      GOTO 23135
23134 CONTINUE
      TOK = 7
23135 CONTINUE
      GOTO 23132
23136 CONTINUE
      IF(.NOT.(CN .EQ. 61))GOTO 23137
      TOK = 9
      K = K + 1
      GOTO 23138
23137 CONTINUE
      TOK = 7
23138 CONTINUE
      GOTO 23132
23139 CONTINUE
      IF(.NOT.(CN .EQ. 61))GOTO 23140
      TOK = 9
      K = K + 1
      GOTO 23141
23140 CONTINUE
      TOK = 7
23141 CONTINUE
      GOTO 23132
23142 CONTINUE
      IF(.NOT.(CN .EQ. 61))GOTO 23143
      TOK = 13
      K = K + 1
      GOTO 23144
23143 CONTINUE
      TOK = 12
23144 CONTINUE
      GOTO 23132
23145 CONTINUE
      IF(.NOT.(CN .EQ. 61))GOTO 23146
      TOK = 11
      K = K + 1
      GOTO 23147
23146 CONTINUE
      TOK = 10
23147 CONTINUE
      GOTO 23132
23148 CONTINUE
      IF(.NOT.(CN .EQ. 61))GOTO 23149
      TOK = 8
      K = K + 1
      GOTO 23150
23149 CONTINUE
      TOK = -1
23150 CONTINUE
      GOTO 23132
23151 CONTINUE
      TOK = 5
      GOTO 23132
23152 CONTINUE
      TOK = 6
      GOTO 23132
23153 CONTINUE
      TOK = 14
      GOTO 23132
23154 CONTINUE
      TOK = 15
      GOTO 23132
23155 CONTINUE
      IF(.NOT.(CN .EQ. 42))GOTO 23156
      TOK = 20
      K = K + 1
      GOTO 23157
23156 CONTINUE
      TOK = 16
23157 CONTINUE
      GOTO 23132
23158 CONTINUE
      TOK = 17
      GOTO 23132
23159 CONTINUE
      TOK = 19
      GOTO 23132
23160 CONTINUE
      KIND = 3
      TOK = 3
      GOTO 23132
23161 CONTINUE
      KIND = 3
      TOK = 4
      GOTO 23132
23162 CONTINUE
      KIND = 3
      TOK = 1
      GOTO 23132
23163 CONTINUE
      TOK = -1
      GOTO 23132
23131 CONTINUE
      IF(I23131.EQ.0)GOTO 23162
      IF(I23131.EQ.33)GOTO 23139
      IF(I23131.EQ.37)GOTO 23159
      IF(I23131.EQ.38)GOTO 23152
      IF(I23131.EQ.40)GOTO 23160
      IF(I23131.EQ.41)GOTO 23161
      IF(I23131.EQ.42)GOTO 23155
      IF(I23131.EQ.43)GOTO 23153
      IF(I23131.EQ.45)GOTO 23154
      IF(I23131.EQ.47)GOTO 23158
      IF(I23131.EQ.60)GOTO 23142
      IF(I23131.EQ.61)GOTO 23148
      IF(I23131.EQ.62)GOTO 23145
      IF(I23131.EQ.94)GOTO 23136
      IF(I23131.EQ.124)GOTO 23151
      IF(I23131.EQ.126)GOTO 23133
      GOTO 23163
23132 CONTINUE
      IF(.NOT.(TOK .EQ. -1))GOTO 23164
      EXPTOK=(0)
      RETURN
23164 CONTINUE
      IF(.NOT.(TOK .NE. 1))GOTO 23166
      K = K + 1
23166 CONTINUE
      EXPTOK=(1)
      RETURN
23128 CONTINUE
23126 CONTINUE
      END
      SUBROUTINE MOVNAM (IN, I, OUT, J)
      LOGICAL*1 IN(100), OUT(100)
      INTEGER I, J, K1, K2
      LOGICAL*1 TYPE
      LOGICAL*1 C
      K1 = I
      K2 = J
      C=TYPE(IN(K1))
23168 IF(.NOT.(C .EQ. 1 .OR. C .EQ. 2))GOTO 23170
      OUT(K2) = IN(K1)
      K1 = K1 + 1
      K2 = K2 + 1
23169 C=TYPE(IN(K1))
      GOTO 23168
23170 CONTINUE
      OUT(K2) = 0
      RETURN
      END
      INTEGER FUNCTION CTONUM(BUF,I,DRADIX)
      LOGICAL*1 BUF(100), TMP(400)
      INTEGER CTOI
      INTEGER I, J, C, N, VAL, RADIX, DRADIX, M
      LOGICAL*1 DIGITS(23)
      DATA DIGITS(1)/48/,DIGITS(2)/49/,DIGITS(3)/50/,DIGITS(4)/51/,DIGIT
     *S(5)/52/,DIGITS(6)/53/,DIGITS(7)/54/,DIGITS(8)/55/,DIGITS(9)/56/,D
     *IGITS(10)/57/,DIGITS(11)/97/,DIGITS(12)/98/,DIGITS(13)/99/,DIGITS(
     *14)/100/,DIGITS(15)/101/,DIGITS(16)/102/,DIGITS(17)/65/,DIGITS(18)
     */66/,DIGITS(19)/67/,DIGITS(20)/68/,DIGITS(21)/69/,DIGITS(22)/70/,D
     *IGITS(23)/0/
      IF(.NOT.(BUF(I) .EQ. 45))GOTO 23171
      I = I + 1
      M = -1
      GOTO 23172
23171 CONTINUE
      M = 1
23172 CONTINUE
      N=0
23173 CONTINUE
      C = INDEX(DIGITS,BUF(I))
      IF(.NOT.(C.EQ.0))GOTO 23176
      GOTO 23175
23176 CONTINUE
      IF(.NOT.(C .GT. 16))GOTO 23178
      C = C-6
23178 CONTINUE
      N = N+1
      TMP(N) = C-1
23174 I=I+1
      GOTO 23173
23175 CONTINUE
      IF(.NOT.(BUF(I) .EQ. 95))GOTO 23180
      RADIX = 0
      I = I+1
      RADIX = CTOI(BUF,I)
      GOTO 23181
23180 CONTINUE
      RADIX = DRADIX
23181 CONTINUE
      VAL = 0
      J=1
23182 IF(.NOT.(J.LE.N))GOTO 23184
      C = TMP(J)
      IF(.NOT.(C .GE. RADIX))GOTO 23185
      CALL REMARK(12Hnumber error)
23185 CONTINUE
      VAL = VAL * RADIX + C
23183 J = J+1
      GOTO 23182
23184 CONTINUE
      CTONUM=( M*VAL )
      RETURN
      END
      INTEGER FUNCTION NUMTOC(INT, STR, SIZE, RADIX)
      INTEGER MOD
      INTEGER RADIX
      INTEGER D, I, INT, INTVAL, J, K, SIZE
      LOGICAL*1 STR(100)
      LOGICAL*1 DIGITS(17)
      DATA DIGITS(1)/48/,DIGITS(2)/49/,DIGITS(3)/50/,DIGITS(4)/51/,DIGIT
     *S(5)/52/,DIGITS(6)/53/,DIGITS(7)/54/,DIGITS(8)/55/,DIGITS(9)/56/,D
     *IGITS(10)/57/,DIGITS(11)/65/,DIGITS(12)/66/,DIGITS(13)/67/,DIGITS(
     *14)/68/,DIGITS(15)/69/,DIGITS(16)/70/,DIGITS(17)/0/
      INTVAL = IABS(INT)
      STR(1) = 0
      I = 1
23187 CONTINUE
      I = I+1
      D = MOD(INTVAL,RADIX)
      STR(I) = DIGITS(D+1)
      INTVAL = INTVAL / RADIX
23188 IF(.NOT.(INTVAL .EQ. 0 .OR. I .GE. SIZE))GOTO 23187
23189 CONTINUE
      IF(.NOT.(INT .LT. 0 .AND. I .LT. SIZE))GOTO 23190
      I = I+1
      STR(I) = 45
23190 CONTINUE
      NUMTOC = I - 1
      J = 1
23192 IF(.NOT.(J .LT. I))GOTO 23194
      K = STR(I)
      STR(I) = STR(J)
      STR(J) = K
      I = I-1
23193 J = J+1
      GOTO 23192
23194 CONTINUE
      RETURN
      END
      INTEGER FUNCTION STACKX(TOK, KIND)
      INTEGER TOK, KIND
      COMMON/CEXP/ TOP, TOKST(200), KINDST(200)
      INTEGER TOP
      INTEGER TOKST
      INTEGER KINDST
      IF(.NOT.(TOP .GE. 200))GOTO 23195
      CALL REMARK (32Harith evaluation stack overflow.)
      STACKX=(-3)
      RETURN
23195 CONTINUE
      TOP = TOP + 1
      TOKST(TOP) = TOK
      KINDST(TOP) = KIND
      STACKX=(0)
      RETURN
      END
