00010 rem stacula.bas - RPN stack calculator
00020 rem 2016 David Meyer [email protected] +JMJ
00030 rem
00040 rem VARIABLES
00045 rem e$:   Input expression
00050 rem s0:   Stack depth
00060 rem s0(): Data stack
00070 rem w0:   Input word count
00080 rem w0$(): Input word list
00090 rem
00300 print tab(22); "*** STACULA RPN Stack Calculator ***"
00310 print
00320 gosub 10000
00330 print
00370 dim s(10), w$(20)
00380 s0 = 0
00390 rem LOOP
00400 gosub 10100
00410 input e$
00420 gosub 10200
09999 stop
10000 rem SUB: Usage message (in: out: )
10010 print "Enter RPN expression / ? for help / Q to quit"
10020 return
10100 rem SUB: Print stack prompt (in: s0, s() out: )
10110 print str$(s0)+"(";
10120 for i = 1 to s0
10130 print s(i);
10140 next i
10150 print ")";
10160 return
10200 rem SUB: Parse input expression (in: e$ out: w0, w$() )
10206 for i = 1 to w0
10207 w$(i) = ""
10208 next i
10209 w0 = 0
10210 p1 = 0
10220 for i = 1 to len(e$)
10230 i$ = mid$(e$, i, 1)
10240 if not (i$=" " or p1=1) then goto 10300
10250 w0 = w0 + 1
10260 p1 = 1
10270 w$(w0) = w$(w0) + i$
10280 goto 10400
10300 if not (i$<>" " or p1=0) then goto 10330
10310 p1 = 0
10320 goto 10400
10330 if not (i$=" " or p1=0) then goto 10400
10340 w$(w0) = w$(w0) + i$
10390 goto 10220
10400 rem END IF
10410 next i
10420 return
99999 end