MODULE ObxPDBRep2;
(**

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

**)

   IMPORT Ports, Views, TextModels, TextMappers, TextViews, TextRulers, ObxPhoneDB;

   PROCEDURE WriteRuler (VAR f: TextMappers.Formatter);

      CONST cm = 10 * Ports.mm;   (* universal units *)
      VAR ruler: TextRulers.Ruler;
   BEGIN
      ruler := TextRulers.dir.New(NIL);
      TextRulers.AddTab(ruler, 4 * cm);   (* define a tab stop, 4 cm from the left margin *)
      TextRulers.SetRight(ruler, 12 * cm);   (* set right margin *)
      f.WriteView(ruler)                     (* a ruler is a view, thus can be written to the text *)
   END WriteRuler;
   PROCEDURE GenReport*;

      VAR t: TextModels.Model; f: TextMappers.Formatter; v: TextViews.View;
         i: INTEGER; name, number: ObxPhoneDB.String;
   BEGIN
      t := TextModels.dir.New();   (* create empty text carrier *)
      f.ConnectTo(t);               (* connect a formatter to the text *)
      WriteRuler(f);
      i := 0;
      ObxPhoneDB.LookupByIndex(i, name, number);
      WHILE name # "" DO
         f.WriteString(name);      (* first string *)
         f.WriteTab;               (* tab character *)
         f.WriteString(number);   (* second string *)
         f.WriteLn;                  (* carriage return *)
         INC(i);
         ObxPhoneDB.LookupByIndex(i, name, number)
      END;
      v := TextViews.dir.New(t);   (* create a text view for the text generated above *)
      Views.OpenView(v)         (* open the text view in its own window *)
   END GenReport;
END ObxPDBRep2.