- Up - |
This appendix contains code fragments left out in the text's chapters.
define
Data = {Dictionary.new}
Ctr = {New class $
prop locking
attr i:0
meth init(I <= 0)
lock i := I end
end
meth get($)
lock @i end
end
meth inc($)
lock I=@i+1 in i := I I end
end
end init()}
proc {Add X}
I={Ctr inc($)}
in
{Dictionary.put Data I X}
end
fun {Get ID}
{Dictionary.get Data ID}
end
fun {GetAll}
{Map {Dictionary.keys Data}
fun {$ K}
{AdjoinAt {Dictionary.get Data K} key K}
end}
end
proc {Remove ID}
{Dictionary.remove Data ID}
end
T ={New Tk.toplevel tkInit}
F1={New Tk.frame tkInit(parent:T relief:sunken bd:2)}
V ={New Tk.variable tkInit(Fs.1.key)}
{Tk.batch
grid(b({Map ['' 'From' 'To' 'Price']
fun {$ A}
{New Tk.label tkInit(parent:F1 text:A
relief:raised bd:1)}
end})
padx:1 pady:1 sticky:ew) |
{Map Fs
fun {$ F}
grid({New Tk.radiobutton tkInit(parent:F1 var:V
value:F.key)}
b({Map ['from' to price]
fun {$ A}
{New Tk.label tkInit(parent:F1 text:F.A)}
end}))
end}}
F2={New Tk.frame tkInit(parent:T)}
[FN LN EM] =
{Map ['First name' 'Last name' 'E-Mail']
fun {$ S}
E={New Tk.entry tkInit(parent:F2 width:20 bg:wheat)}
in
{Tk.send grid({New Tk.label
tkInit(parent:F2 text:S#':' anchor:w)}
E
sticky:ew)}
fun {$}
{E tkReturnAtom(get $)}
end
end}
B={New Tk.button
tkInit(parent:T text:'Okay'
action: proc {$}
Get=form(first: {FN}
last: {LN}
email: {EM}
key: {V tkReturnInt($)})
{T tkClose}
end)}
in
{Tk.send pack(F1 F2 B padx:1#m pady:2#m)}
[f('from':'Paris' to:'Stockholm' price:234)
f('from':'Saarbrücken' to:'Paris' price:345)
f('from':'New York' to:'Saarbrücken' price:567)
f('from':'New York' to:'Bruxelles' price:363)
f('from':'Paris' to:'Saarbrücken' price:834)
f('from':'Stockholm' to:'Bruxelles' price:333)
f('from':'London' to:'Saarbrücken' price:523)
f('from':'Saarbrücken' to:'London' price:457)
f('from':'Bruxelles' to:'New York' price:324)
f('from':'Boston' to:'Stockholm' price:765)
f('from':'Stockholm' to:'New York' price:344)
f('from':'Sydney' to:'Saarbrücken' price:3452)
f('from':'Sydney' to:'Stockholm' price:2568)]
- Up - |