00010 rem stacula.bas - RPN stack calculator 00020 rem 2016 David Meyer papa@sdf.org +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