Yab2Cpp/yab-IDE/Programs/Examples/Calc.yab
2015-04-13 13:40:27 -07:00

203 lines
4.7 KiB
Plaintext
Executable File

#!yab
sleep .01
This_dir$ = getdir$("Calc.yab")
//localize
window open 100,50 to 320,320, "Calc", "CalcView"
draw set "bgcolor", 100, 150, 220, "Calc"
draw set "lowcolor", 100, 190, 100, "Calc"
draw set "highcolor", 255, 255, 255, "Calc"
window set "Calc", "minimumto", 220, 260
window set "Calc", "maximumto", 220, 260
layout "all", "Calc"
menu "File", "Reset", "R", "Calc"
menu "File", "--", "", "Calc"
menu "File", "Quit", "Q", "Calc"
menu "Help", "Help...", "H", "Calc"
menu "Help", "--", "", "Calc"
menu "Help", "About...", "", "Calc"
button 20,70 to 55,105,"b7", "7", "Calc"
button 65,70 to 100,105,"b8", "8", "Calc"
button 110,70 to 145,105,"b9", "9", "Calc"
button 155,70 to 190,105,"b/", "/", "Calc"
button 20,115 to 55,150,"b4", "4", "Calc"
button 65,115 to 100,150,"b5", "5", "Calc"
button 110,115 to 145,150,"b6", "6", "Calc"
button 155,115 to 190,150,"b*", "*", "Calc"
button 20,160 to 55,195,"b1", "1", "Calc"
button 65,160 to 100,195,"b2", "2", "Calc"
button 110,160 to 145,195,"b3", "3", "Calc"
button 155,160 to 190,195,"b-", "-", "Calc"
button 20,205 to 55,240,"b0", "0", "Calc"
button 65,205 to 100,240,"b.", ".", "Calc"
button 110,205 to 145,240,"bC", "C", "Calc"
button 155,205 to 190,240,"b+/=", "+=", "Calc"
draw text 20,50,"0","Calc"
display$ = "0"
result = 0
type$ = "+"
dim msgbuffer$(1)
inloop = true
while(inloop)
msgnumber = split(message$, msgbuffer$(), "|")
for i=0 to msgnumber
switch msgbuffer$(i)
case "b."
case "b0"
case "b1"
case "b2"
case "b3"
case "b4"
case "b5"
case "b6"
case "b7"
case "b8"
case "b9"
if(len(display$)<10) display$ = display$ + right$(msgbuffer$(i),1)
while(left$(display$,1)="0")
display$ = right$(display$,len(display$)-1)
wend
if(display$="") display$="0"
draw rect 20,30 to 170,60, "Calc"
draw flush "Calc"
draw text 20,50, display$,"Calc"
break
case "b-"
result = calculate(result, type$, val(display$))
type$ = "-"
draw rect 20,30 to 170,60, "Calc"
draw flush "Calc"
draw text 20,50, str$(result),"Calc"
display$="0"
break
case "b+/="
result = calculate(result, type$, val(display$))
type$ = "+"
draw rect 20,30 to 170,60, "Calc"
draw flush "Calc"
draw text 20,50, str$(result),"Calc"
display$="0"
break
case "b*"
result = calculate(result, type$, val(display$))
type$ = "*"
draw rect 20,30 to 170,60, "Calc"
draw flush "Calc"
draw text 20,50, str$(result),"Calc"
display$="0"
break
case "b/"
result = calculate(result, type$, val(display$))
type$ = "/"
draw rect 20,30 to 170,60, "Calc"
draw flush "Calc"
draw text 20,50, str$(result),"Calc"
display$="0"
break
case "bC"
case "Calc:File:Reset"
result=0
draw rect 20,30 to 170,60, "Calc"
draw flush "Calc"
draw text 20,50, str$(result),"Calc"
display$="0"
type$ = "+"
break
case "Calc:File:Quit"
case "Calc:_QuitRequested"
window close "Calc"
break
case "Calc:Help:Help..."
alert "Calc demonstrates how to program\n a calculator in yab.\n\n", "Ok", "info"
break
case "Calc:Help:About..."
window open 250,100 to 570,291, "About", "About"
window set "About", "look", "bordered"
window set "About", "feel", "modal-app"
draw set "BGColor", 255,255,255, "About"
window set "About", "minimumto", 320, 191
window set "About", "maximumto", 320, 191
err = draw image 0,0, This_dir$+"img/image.png", "About"
if(err>0) then
alert "Error loading image.png!"+str$(err), "Close", "warning"
window close "About"
else
button 20,163 to 300,183,"b", "Close", "About"
endif
break
case translate$("b")
case translate$("About:_QuitRequested")
window close "About"
break
default
break
end switch
next i
if(window count = 0) inloop = false
sleep 0.1
wend
sub calculate(a,type$,b)
ret = 0
switch(type$)
case "+"
ret = a + b
break
case "-"
ret = a - b
break
case "*"
ret = a * b
break
case "/"
ret = a / b
break
end switch
return ret
end sub
//////////////////////////////////////////////////////////////////
sub getdir$( programname$)
// find out in which directory we are in
////////////////////////////////////////////////////////////////
local path$
local catch
catch=0
if (!peek("isbound")) then
path$=system$("ps")
x=instr(path$,"/"+programname$)
path$=left$(path$,x)
for x=len(path$)-1 to 1 step -1
if (instr(path$," ",x) and catch=0) catch=x+1
next
path$=right$(path$,len(path$)-catch)
path$=trim$(path$)
if path$="/" then
path$ = trim$(system$("pwd"))+"/"
else
path$="/"+path$
endif
else
path$=trim$(peek$("directory") )
path$=path$+"/"
end if
return path$
end sub