This directory contains the code resulting from an experiment in translating
an Object Z specification into C++ code. The Object Z specification was that
of a mobile phone system.

A sample run is included below. For more verbose output, run the program
with the OTCLIB_TRACETAGS environment variable set to "UQ".

  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = IDLE
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> page 1
  Operation succeeded - Cell::page()
  Operation succeeded - Cell::page()
  Operation succeeded - MPS::allCellsPage()
  Operation succeeded - Mobile::bePaged()
  Operation succeeded - Mobiles::bePaged()
  Operation succeeded - MPS::page()
  res = 0
  mid = 1
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = PAGED
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> pagedSeize 1
  Operation succeeded - Mobile::locate()
  Operation succeeded - Mobiles::locate()
  Operation succeeded - Cell::bePagedSeized()
  Operation succeeded - Mobile::pagedSeize()
  Operation succeeded - Mobiles::pagedSeize()
  Operation succeeded - MPS::pagedSeize()
  res = 0
  mid = 1
  cid = 2
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = PAGED_ACCESS
    cell = 2
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
    access = 1
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> tune 1
  Operation succeeded - Mobile::cell()
  Operation succeeded - Mobiles::cell()
  Operation succeeded - Cell::tune()
  Operation succeeded - Mobile::beTuned()
  Operation succeeded - Mobiles::beTuned()
  Operation succeeded - MPS::tune()
  res = 0
  mid = 1
  fid = 3
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = RINGING
    freq = 3
    cell = 2
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
    alloc = (3,1)
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> answer 1
  Operation succeeded - Mobile::answer()
  Operation succeeded - Mobiles::answer()
  Operation succeeded - MPS::answer()
  res = 0
  mid = 1
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = OFFHOOK
    freq = 3
    cell = 2
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
    alloc = (3,1)
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> handOver 1 1
  Operation succeeded - Mobile::cell()
  Operation succeeded - Mobiles::cell()
  Operation succeeded - Cell::handOn()
  Operation succeeded - Mobile::beHandedOver()
  Operation succeeded - Mobiles::beHandedOver()
  Operation succeeded - Cell::handOff()
  Operation succeeded - MPS::handOver()
  res = 0
  mid = 1
  cid1 = 1
  fid = 1
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = OFFHOOK
    freq = 1
    cell = 1
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
    alloc = (1,1)
  }
  }
  mps> disconnect 1
  Operation succeeded - Mobile::cell()
  Operation succeeded - Mobiles::cell()
  Operation succeeded - Cell::disconnect()
  Operation succeeded - Mobile::beDisconnected()
  Operation succeeded - Mobiles::beDisconnected()
  Operation succeeded - MPS::disconnect()
  res = 0
  mid = 1
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = IDLE
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> callSeize 2
  Operation succeeded - Mobile::locate()
  Operation succeeded - Mobiles::locate()
  Operation succeeded - Cell::beCallSeized()
  Operation succeeded - Mobile::callSeize()
  Operation succeeded - Mobiles::callSeize()
  Operation succeeded - MPS::callSeize()
  res = 0
  mid = 2
  cid = 1
  pid = 1
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = CALL_ACCESS
    cell = 1
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = IDLE
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
    access = 2
  }
  }
  mps> tune 2
  Operation succeeded - Mobile::cell()
  Operation succeeded - Mobiles::cell()
  Operation succeeded - Cell::tune()
  Operation succeeded - Mobile::beTuned()
  Operation succeeded - Mobiles::beTuned()
  Operation succeeded - MPS::tune()
  res = 0
  mid = 2
  fid = 1
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = OFFHOOK
    freq = 1
    cell = 1
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = IDLE
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
    alloc = (1,2)
  }
  }
  mps> disconnect 2
  Operation succeeded - Mobile::cell()
  Operation succeeded - Mobiles::cell()
  Operation succeeded - Cell::disconnect()
  Operation succeeded - Mobile::beDisconnected()
  Operation succeeded - Mobiles::beDisconnected()
  Operation succeeded - MPS::disconnect()
  res = 0
  mid = 2
  mps> dump
  MPS::dump {
  Mobiles::dump {
  Mobile::dump {
    id = 2
    state = IDLE
  }
  Mobile::dump {
    id = 3
    state = IDLE
  }
  Mobile::dump {
    id = 4
    state = IDLE
  }
  Mobile::dump {
    id = 5
    state = IDLE
  }
  Mobile::dump {
    id = 1
    state = IDLE
  }
  }
  Cell::dump {
    id = 2
    freqs = 3 4
  }
  Cell::dump {
    id = 1
    freqs = 1 2
  }
  }
  mps> 
