% adbook.dem

import AddressBook in  "adbookln.tu" 

var AB : ^AddressBook
new AB   % allocate addressbook

AB->Load() % Load contents of book if any from file.

var name, address : string
var command : string
var inBook, success : boolean

put "Address Book Program"
put "You must give a command and supply the requested information "
put skip, "Enter(e), Delete(d), Change(c), LookUp(l), Print(p)"
put skip, "Quit(q), Initialize (i), Finalize (f), Load (o), Save (s)"

% Read and handle each command.
loop
  put "Command: " ..
  get command : *

  case command of % Handle each command.

    label "e" : % Enter
      put "   Give name: " ..
      get name : *
      put "   Give address: " ..
      get address : *
      AB-> LookUp (name, address, inBook)
      if not inBook then
        AB-> Enter (name, address, success)
        if not success then
          put "Sorry, cannot enter item"
        end if
      else
        put "Sorry, name already in book."
      end if

    label "d" : % Delete
      put "   Give name: " ..
      get name : *
      AB-> LookUp (name, address, inBook)
      if inBook then
        AB-> Delete (name)
        put "Entry deleted"
      else
        put "   Sorry, name not in book."
      end if

    label "c" : % Change
      put "   Give name: " ..
      get name : *
      AB-> LookUp (name, address, inBook)
      if inBook then
        put "   Give new address: " ..
        get address : *
        AB-> Change (name, address)
      else
        put "   Sorry, name not in book."
      end if

    label "l" : % Look up
      put "   Give name: " ..
      get name : *
      AB-> LookUp (name, address, inBook)
      if inBook then
        put "   Address is: ", address
      else
        put "   Sorry, name not in book."
      end if

    label "p" : % Print
      AB->PrintOut()

    label "q" : % Quit
      exit

    label "o" : % Load  from file "adbook.dat"
      AB->Load()

    label "s" : % Save into file "adbook.dat"
      AB->Save()

    label "i" : 
      AB->Initialize()

    label "f" :
      AB->Finalize()
      
    label :
      put "   Sorry, don't understand command: ", command

  end case

end loop

AB->Save() % Save contents of book in a file.

put "Quitting, address book has been saved."