rem Euro Calculator V1.3
rem By Tommy Sools (tommy@sools.com)
option decimalsep,.
option fieldsep,|
option scale,96
directory change,@path(%0)
%%vdsinet =
option errortrap,skip
external vdsinet.dll,Public Freeware Key|90257236
%%vdsinet = 1
:skip
option errortrap
rem EUR = European euro
rem ATS = Austrian schilling
rem BEF = Belgian franc
rem DEM = Deutsche Mark
rem ESP = Spanish peseta
rem FIM = Finnish markka
rem FRF = French franc
rem GRD = Greek drachma
rem IEP = Irish pound
rem ITL = Italian lira
rem LUF = Luxembourg franc
rem NLG = Dutch guilder
rem PTE = Portuguese escudo
rem the following currencies (marked with a star) are subjected to changes;
rem look at http://www.ecb.int/home/eurofxref.htm:
rem USD = United States dollar
rem JPY = Japanese yen
rem DKK = Danish krone
rem GBP = Pound sterling
rem SEK = Swedish krona
rem CHF = Swiss franc
rem ISK = Icelandic krona
rem NOK = Norwegian krone
rem BGN = Bulgarian lev
rem CYP = Cyprus pound
rem CZK = Czech koruna
rem EEK = Estonian kroon
rem HUF = Hungarian forint
rem LTL = Lithuanian litas
rem LVL = Latvian lat
rem MTL = Maltese lira
rem PLN = Polish zloty
rem ROL = Romanian leu
rem SIT = Slovenian tolar
rem SKK = Slovakian koruna
rem TRL = Turkish lira
rem AUD = Australian dollar
rem CAD = Canadian dollar
rem HKD = Hong Kong dollar
rem NZD = New Zealand dollar
rem SGD = Singaporean dollar
rem KRW = South Korean won
rem ZAR = South African rand
%%file = .\@name(%0).dat
list create,1
if @file(%%file)
list loadfile,1,%%file
else
list loadtext,1
"* AUD|1.7111
"* BGN|1.9466
"* CAD|1.3531
"* CHF|1.5078
"* CYP|0.57409
"* CZK|33.878
"* DKK|7.4485
"* EEK|15.6466
"* GBP|0.61180
"* HKD|6.8451
"* HUF|249.20
"* ISK|88.54
"* JPY|108.36
"* KRW|1145.88
"* LTL|3.5113
"* LVL|0.5521
"* MTL|0.3994
"* NOK|8.0170
"* NZD|2.1239
"* PLN|3.6990
"* ROL|25825
"* SEK|9.2631
"* SGD|1.6006
"* SIT|218.9110
"* SKK|42.739
"* TRL|1150767
"* USD|0.8776
"* ZAR|7.2418
"ATS|13.7603
"BEF|40.3399
"DEM|1.95583
"ESP|166.386
"EUR|1
"FIM|5.94573
"FRF|6.55957
"GRD|340.750
"IEP|0.787564
"ITL|1936.27
"LUF|40.3399
"NLG|2.20371
"PTE|200.482
end
rem auto-update currencies
if %%vdsinet
DIALOG CREATE,Please wait...,-1,0,266,49,NOSYS
DIALOG ADD,STYLE,sCenter,,6,C,BACKGROUND,FOREGROUND
DIALOG ADD,TEXT,tNotice,16,8,248,16,Auto-updating...,SCENTER
DIALOG SHOW
option errortrap,skip2
net http,get,http://www.ecb.int/home/eurofxref.htm
list create,2
repeat
%a = @net(http)
if @not(@both(@equal(%a,@cr()),@equal(@len(%A),1)))
list add,2,%a
end
until @both(@equal(%a,@cr()),@equal(@len(%A),1))
list seek,1,0
repeat
parse "%a;",@item(1)
%a = @substr(%a,3,@len(%a))
list seek,2,0
%x = @match(2,
%a | )
if %x
%x = @next(2)
%x = @next(2)
%b = @item(2)
%c = @pos(>,%b)
%d = @pos(,%b)
list put,1,* %a|@substr(@item(2),@succ(%c),@pred(%d))
end
until @not(@equal(@substr(@next(1),1,1),*))
list close,2
:skip2
option errortrap
dialog hide
end
list savefile,1,%%file
%%memory = 0
DIALOG CREATE,Euro Calculator,-1,0,273,212,ONTOP
DIALOG ADD,STYLE,sValue,,6,,BLACK,CYAN
DIALOG ADD,STYLE,sMemory,,6,C,BACKGROUND,LTBLUE
DIALOG ADD,STYLE,sWingdings,Wingdings,8,BC,BACKGROUND,FOREGROUND
DIALOG ADD,STYLE,sSource,,6,L,BACKGROUND,FOREGROUND
DIALOG ADD,STYLE,sDest,,6,R,BACKGROUND,FOREGROUND
DIALOG ADD,EDIT,eValue,8,8,256,18,0,,READONLY,SVALUE
DIALOG ADD,BUTTON,b7,40,8,24,14,&7
DIALOG ADD,BUTTON,b8,40,40,24,14,&8
DIALOG ADD,BUTTON,b9,40,72,24,14,&9
DIALOG ADD,BUTTON,b4,64,8,24,14,&4
DIALOG ADD,BUTTON,b5,64,40,24,14,&5
DIALOG ADD,BUTTON,b6,64,72,24,14,&6
DIALOG ADD,BUTTON,b1,88,8,24,14,&1
DIALOG ADD,BUTTON,b2,88,40,24,14,&2
DIALOG ADD,BUTTON,b3,88,72,24,14,&3
DIALOG ADD,BUTTON,b0,112,8,24,14,&0
DIALOG ADD,BUTTON,bDecimal,112,40,24,14,&.
DIALOG ADD,BUTTON,bNegative,112,72,24,14,-/+
DIALOG ADD,BUTTON,bC,40,104,24,14,&C
DIALOG ADD,BUTTON,bResult,64,104,24,14,=,,default
DIALOG ADD,BUTTON,bAdd,40,144,24,14,&+
DIALOG ADD,BUTTON,bDiff,40,176,24,14,&-
DIALOG ADD,BUTTON,bProd,40,208,24,14,&*
DIALOG ADD,BUTTON,bDiv,40,240,24,14,&/
DIALOG ADD,BUTTON,bMod,64,144,24,14,&%
DIALOG ADD,BUTTON,bMoney,64,176,24,14,&$
DIALOG ADD,BUTTON,bMAdd,88,144,24,14,M+
DIALOG ADD,BUTTON,bMS,88,176,24,14,MS
DIALOG ADD,BUTTON,bMR,88,208,24,14,&MR
DIALOG ADD,BUTTON,bMC,88,240,24,14,MC
DIALOG ADD,TEXT,tMemory,112,144,,,Memory:
DIALOG ADD,TEXT,tMemory2,112,190,50,,%%memory,,sMemory
DIALOG ADD,TEXT,tSource,144,8,72,16,Source:,,SSOURCE
DIALOG ADD,TEXT,tDest,144,192,72,16,Destination:,,SDEST
DIALOG ADD,BUTTON,bDir1,144,104,24,14,ß,,sWingdings
DIALOG ADD,BUTTON,bDir2,144,144,24,14,à,,sWingdings
DIALOG ADD,COMBO,cSource,168,8,120,21,cSource,,SORTED,LIST
DIALOG ADD,COMBO,cDest,168,144,120,21,cDest,,SORTED,LIST
DIALOG ADD,TEXT,tNotice,194,10,,,* non-euro currency
DIALOG SHOW
dialog focus,bResult
list seek,1,0
repeat
parse "%%item;",@next(1)
list add,cSource,%%item
until @equal(@index(1),@count(1))
%x = @match(cSource,* USD)
list assign,cDest,cSource
%x = @match(cDest,EUR)
%%reset =
option errortrap,error
:evloop
wait event
%e = @event()
if @not(@numeric(@dlgtext(eValue))@numeric(@dlgtext(eValue)0))
dialog set,eValue,0
end
if @equal(@substr(%e,1,1),b)
%e = @strdel(%e,1,1)
%e = @substr(%e,1,-6)
if @numeric(%e)
if %%reset
%%reset =
dialog set,eValue,0
end
if @zero(@dlgtext(eValue))
dialog set,eValue,%e
else
dialog set,eValue,@dlgtext(eValue)%e
end
goto evloop
end
if @equal(@substr(%e,1,3),dir)
if @equal(@strdel(%e,1,3),1)
%%source = cDest
%%dest = cSource
else
%%source = cSource
%%dest = cDest
end
list seek,1,0
%x = @match(1,@dlgtext(%%source))
parse ";%%rate",@item(1)
%%EUR = @fdiv(@dlgtext(eValue),%%rate)
list seek,1,0
%x = @match(1,@dlgtext(%%dest))
parse ";%%rate",@item(1)
dialog set,eValue,@fmul(%%EUR,%%rate)
%%reset = 1
goto evloop
end
if @equal(%e,C)
dialog set,eValue,0
%%value1 =
%%reset =
goto evloop
end
if @equal(%e,negative)
if @not(@zero(@dlgtext(eValue)))
if @equal(@substr(@dlgtext(eValue),1,1),-)
dialog set,eValue,@strdel(@dlgtext(eValue),1,1)
else
dialog set,eValue,-@dlgtext(eValue)
end
end
goto evloop
end
if @equal(%e,add)@equal(%e,diff)@equal(%e,prod)@equal(%e,div)@equal(%e,mod)
if %%operation
gosub calc
end
%%value1 = @dlgtext(eValue)
%%operation = %e
%%reset = 1
goto evloop
end
if @equal(%e,result)
if %%operation
gosub calc
end
%%reset = 1
goto evloop
end
if @equal(%e,money)
dialog set,eValue,@format(@dlgtext(eValue),.2)
%%reset = 1
goto evloop
end
if @equal(%e,decimal)
if @numeric(@dlgtext(eValue).0)
dialog set,eValue,@dlgtext(eValue).
end
goto evloop
end
if @equal(%e,MAdd)
if @both(@not(@numeric(@dlgtext(eValue))),@numeric(@dlgtext(eValue)0))
dialog set,eValue,@dlgtext(eValue)0
end
%%memory = @fadd(%%memory,@dlgtext(eValue))
dialog set,tMemory2,%%memory
%%reset = 1
goto evloop
end
if @equal(%e,MS)
if @both(@not(@numeric(@dlgtext(eValue))),@numeric(@dlgtext(eValue)0))
dialog set,eValue,@dlgtext(eValue)0
end
%%memory = @dlgtext(eValue)
dialog set,tMemory2,%%memory
%%reset = 1
goto evloop
end
if @equal(%e,MR)
dialog set,eValue,%%memory
%%reset = 1
goto evloop
end
if @equal(%e,MC)
%%memory = 0
dialog set,tMemory2,%%memory
goto evloop
end
warn Unexpected error!
goto evloop
else
goto %e
end
:calc
if @both(@not(@numeric(@dlgtext(eValue))),@numeric(@dlgtext(eValue)0))
dialog set,eValue,@dlgtext(eValue)0
end
%%value2 = @dlgtext(eValue)
gosub calc2
dialog set,eValue,%%value
%%operation =
exit
:calc2
if @equal(%%operation,add)
%%value = @fadd(%%value1,%%value2)
exit
end
if @equal(%%operation,diff)
%%value = @fsub(%%value1,%%value2)
exit
end
if @equal(%%operation,prod)
%%value = @fmul(%%value1,%%value2)
exit
end
if @equal(%%operation,div)
if @zero(%%value2)
%%value = Can't divide by zero
else
%%value = @fdiv(%%value1,%%value2)
end
exit
end
if @equal(%%operation,mod)
if @zero(%%value2)
%%value = Can't divide by zero
else
rem @MOD() doesn't support decimals
%%value = @fdiv(%%value1,%%value2)
rem truncate the value
%%pos = @pos(.,%%value)
if @greater(%%pos,0)
%%value = @strdel(%%value,%%pos,@len(%%value))
end
%%value = @fsub(%%value1,@fmul(%%value,%%value2))
end
exit
end
warn Unexpected error "(2)"!
exit
:error
if @equal(@error(E),26)
dialog set,eValue,Overflow
else
warn Unexpected error @error(E) at line @error(N)!
end
goto evloop
:close
list close,1