MODULE ObxPhoneDB;
(**

   project   = "BlackBox"
   organization   = "www.oberon.ch"
   contributors   = "Oberon microsystems"
   version   = "System/Rsrc/About"
   copyright   = "System/Rsrc/About"
   license   = "Docu/BB-License"
   changes   = ""
   issues   = ""

**)

   CONST

      maxLen = 32;   (* maximum length of name/number strings *)
      maxEntries = 5;   (* maximum number of entries in the database *)
   TYPE

      String* = ARRAY maxLen OF CHAR;
      Entry = RECORD

         name, number: String
      END;
   VAR db: ARRAY maxEntries OF Entry;

   PROCEDURE LookupByIndex* (index: INTEGER; OUT name, number: String);

   BEGIN   (* given an index, return the corresponding <name, number> pair *)
      ASSERT(index >= 0);
      IF index < maxEntries THEN
         name := db[index].name; number := db[index].number
      ELSE
         name := ""; number := ""
      END
   END LookupByIndex;
   PROCEDURE LookupByName* (name: String; OUT number: String);

      VAR i: INTEGER;
   BEGIN   (* given a name, find the corresponding phone number *)
      i := 0; WHILE (i # maxEntries) & (db[i].name # name) DO INC(i) END;
      IF i # maxEntries THEN   (* name found in db[i] *)
         number := db[i].number
      ELSE   (* name not found in db[0..maxEntries-1] *)
         number := ""
      END
   END LookupByName;
   PROCEDURE LookupByNumber* (number: String; OUT name: String);

      VAR i: INTEGER;
   BEGIN   (* given a phone number, find the corresponding name *)
      i := 0; WHILE (i # maxEntries) & (db[i].number # number) DO INC(i) END;
      IF i # maxEntries THEN   (* number found in db[i] *)
         name := db[i].name
      ELSE   (* number not found in db[0..maxEntries-1] *)
         name := ""
      END
   END LookupByNumber;
BEGIN   (* initialization of database contents *)

   db[0].name := "Daffy Duck"; db[0].number := "310-555-1212";
   db[1].name := "Wile E. Coyote"; db[1].number := "408-555-1212";
   db[2].name := "Scrooge McDuck"; db[2].number := "206-555-1212";
   db[3].name := "Huey Lewis"; db[3].number := "415-555-1212";
   db[4].name := "Thomas Dewey"; db[4].number := "617-555-1212"
END ObxPhoneDB.