A Data and Code Fragments

This appendix contains code fragments left out in the text's chapters.

A.1 Application Development

<Body for DB.oz>=
define 
   Data = {Dictionary.new}
   Ctr  = {New class $ 
                  prop locking
                  attr i:0
                  meth init(I <= 0)
                     lock i := I end 
                  end 
                  meth get($)
                     lock @end 
                  end 
                  meth inc($)
                     lock I=@i+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

<Implementation of Book>=
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)}

<Sample flights>=
[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)]


Denys Duchier, Leif Kornstaedt and Christian Schulte
Version 1.4.0 (20080702)