Post by David Drake on Nov 5, 2019 10:51:28 GMT -5
As a way of getting to know LB5, I created this simple RPN calculator. I think it mostly works. Enjoy!
David
______________________________________________________________
David
______________________________________________________________
nomainwin
gosub [setupWindow]
[awaitInput]
wait
[setupWindow]
WindowWidth = 300
WindowHeight = 400
button #main.buttonmc, "MC",[buttonClick_mc], UL, 20, 20+50, 53, 25
button #main.buttonmr, "MR",[buttonClick_mr], UL, 70, 20+50, 53, 25
button #main.buttonmplus, "M+",[buttonClick_mplus], UL, 120, 20+50, 53, 25
button #main.buttonmminus, "M-",[buttonClick_mminus], UL, 170, 20+50, 53, 25
button #main.buttonclear, "C",[buttonClick_clear], UL, 220, 20+50, 53, 25
button #main.buttonSquared, "x^2", [buttonClick_squared], UL, 20, 95, 53, 25
button #main.buttonXtoy, "x^y", [buttonClick_x2y], UL, 70, 95, 53, 25
button #main.buttonSin, "Sin", [buttonClick_sin], UL, 120, 95, 53, 25
button #main.buttonCos, "Cos", [buttonClick_cos], UL, 170, 95, 53, 25
button #main.buttonTan, "Tan", [buttonClick_tan], UL, 220, 95, 53, 25
button #main.buttonSqroot, "Sqrt", [buttonClick_sqrt], UL, 20, 120, 53, 25
button #main.button10tox, "10^x", [buttonClick_102x], UL, 70, 120, 53, 25
button #main.buttonLog, "Log", [buttonClick_log], UL, 120, 120, 53, 25
button #main.buttonPi, "Pi", [buttonClick_pi], UL, 170, 120, 53, 25
button #main.buttonRnd, "Rnd", [buttonClick_rnd], UL, 220, 120, 53, 25
button #main.button7, "7", [buttonClick_seven], UL, 20, 50+100, 53, 25
button #main.button8, "8", [buttonClick_eight], UL, 70, 50+100, 53, 25
button #main.button9, "9", [buttonClick_nine], UL, 120, 50+100, 53, 25
button #main.button4, "4", [buttonClick_four], UL, 20, 75+100, 53, 25
button #main.button5, "5", [buttonClick_five], UL, 70, 75+100, 53, 25
button #main.button6, "6", [buttonClick_six], UL, 120, 75+100, 53, 25
button #main.button1, "1", [buttonClick_one], UL, 20, 100+100, 53, 25
button #main.button2, "2", [buttonClick_two], UL, 70, 100+100, 53, 25
button #main.button3, "3", [buttonClick_three], UL, 120, 100+100, 53, 25
button #main.buttonpm, "+/-", [buttonClick_pm], UL, 20, 125+100, 53, 25
button #main.button0, "0", [buttonClick_zero], UL, 70, 125+100, 53, 25
button #main.buttonPoint, ".", [buttonClick_point], UL, 120, 125+100, 53, 25
button #main.buttonDivide, "/", [buttonClick_divide], UL, 170, 50+100, 53, 25
button #main.buttonMultiply, "*", [buttonClick_multiply], UL, 170, 75+100, 53, 25
button #main.buttonMinus, "-", [buttonClick_minus], UL, 170, 100+100, 53, 25
button #main.buttonPlus, "+", [buttonClick_plus], UL, 170, 125+100, 53, 25
button #main.enter, "Enter",[buttonClick_enter], UL, 170, 155+100, 53, 25
button #main.buttonQuit, "Quit", [quit], UL, 20, 220+125, 75, 25
statictext #main.display, "0.0", 20, 20, 150, 50
open "Simple RPN Calculator" for window as #main
print #main, "font ms_sans_serif 10"
print #main, "trapclose [quit]"
return
[buttonClick_mc]
mvalue = 0
goto [awaitInput]
[buttonClick_mr]
DisplayNumber$ = str$(mvalue)
gosub [refresh]
goto [awaitInput]
[buttonClick_mplus]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
lastNumber$ = DisplayNumber$
mvalue = mvalue + val(DisplayNumber$)
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_mminus]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
lastNumber$ = DisplayNumber$
mvalue = mvalue - val(DisplayNumber$)
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_squared]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(currentValue^2)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_x2y]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
lastValue = val(lastNumber$)
DisplayNumber$ = str$(lastValue^currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_sin]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(sin(currentValue*3.14159265359/180))
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_cos]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(cos(currentValue*3.14159265359/180))
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_tan]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(tan(currentValue*3.14159265359/180))
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_sqrt]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(currentValue^0.5)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_102x]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(10^currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_log]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$(log(currentValue))
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_pi]
DisplayNumber$ = "3.14159265359"
gosub [refresh]
goto [awaitInput]
[buttonClick_rnd]
x = rnd(1)
DisplayNumber$ = str$(x)
gosub [refresh]
goto [awaitInput]
[buttonClick_zero]
DisplayNumber$ = DisplayNumber$+"0"
gosub [refresh]
goto [awaitInput]
[buttonClick_one]
DisplayNumber$ = DisplayNumber$+"1"
gosub [refresh]
goto [awaitInput]
[buttonClick_two]
DisplayNumber$ = DisplayNumber$+"2"
gosub [refresh]
goto [awaitInput]
[buttonClick_three]
DisplayNumber$ = DisplayNumber$+"3"
gosub [refresh]
goto [awaitInput]
[buttonClick_four]
DisplayNumber$ = DisplayNumber$+"4"
gosub [refresh]
goto [awaitInput]
[buttonClick_five]
DisplayNumber$ = DisplayNumber$+"5"
gosub [refresh]
goto [awaitInput]
[buttonClick_six]
DisplayNumber$ = DisplayNumber$+"6"
gosub [refresh]
goto [awaitInput]
[buttonClick_seven]
DisplayNumber$ = DisplayNumber$+"7"
gosub [refresh]
goto [awaitInput]
[buttonClick_eight]
DisplayNumber$ = DisplayNumber$+"8"
gosub [refresh]
goto [awaitInput]
[buttonClick_nine]
DisplayNumber$ = DisplayNumber$+"9"
gosub [refresh]
goto [awaitInput]
[buttonClick_pm]
if DisplayNumber$ = "" then DisplayNumber$ = lastNumber$
currentValue = val(DisplayNumber$)
DisplayNumber$ = str$((0-1)*currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_point]
if instr(DisplayNumber$,".",0)>0 then goto [awaitInput]
DisplayNumber$ = DisplayNumber$+"."
gosub [refresh]
goto [awaitInput]
[buttonClick_enter]
if DisplayNumber$<>"" then lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_divide]
currentValue = val(DisplayNumber$)
lastValue = val(lastNumber$)
if currentValue = 0 then print #main.display, "Divide by zero error":DisplayNumber$ = "":goto [awaitInput]
DisplayNumber$ = str$(lastValue/currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_multiply]
currentValue = val(DisplayNumber$)
lastValue = val(lastNumber$)
DisplayNumber$ = str$(lastValue*currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_minus]
currentValue = val(DisplayNumber$)
lastValue = val(lastNumber$)
DisplayNumber$ = str$(lastValue-currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_plus]
currentValue = val(DisplayNumber$)
lastValue = val(lastNumber$)
DisplayNumber$ = str$(lastValue+currentValue)
gosub [refresh]
lastNumber$ = DisplayNumber$
DisplayNumber$ = ""
goto [awaitInput]
[buttonClick_clear]
DisplayNumber$ = ""
gosub [refresh]
goto [awaitInput]
[refresh]
print #main.display, DisplayNumber$
return
[quit]
close #main
end