MODULE Out;
(**

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

**)

   IMPORT Views, TextModels, TextMappers, TextViews, StdLog;

   CONST digitspace = 08FX;

   VAR

      buf: TextModels.Model;
      out: TextMappers.Formatter;
   PROCEDURE Open*;

   BEGIN
      StdLog.Open
   END Open;
   PROCEDURE Char* (ch: CHAR);

   BEGIN
      out.WriteChar(ch);
      StdLog.text.Append(buf); Views.RestoreDomain(StdLog.text.Domain())
   END Char;
   PROCEDURE Ln*;

   BEGIN
      out.WriteLn;
      StdLog.text.Append(buf); Views.RestoreDomain(StdLog.text.Domain());
      TextViews.ShowRange(StdLog.text, StdLog.text.Length(), StdLog.text.Length(), TextViews.any)
   END Ln;
   PROCEDURE String* (str: ARRAY OF CHAR);

   BEGIN
      out.WriteString(str);
      StdLog.text.Append(buf); Views.RestoreDomain(StdLog.text.Domain())
   END String;
   PROCEDURE Int* (i: LONGINT; n: INTEGER);

   BEGIN
      out.WriteIntForm(i, 10, n, digitspace, FALSE);
      StdLog.text.Append(buf); Views.RestoreDomain(StdLog.text.Domain())
   END Int;
   PROCEDURE Real* (x: REAL; n: INTEGER);

   BEGIN
      out.WriteRealForm(x, 16, n, 0, digitspace);
      StdLog.text.Append(buf); Views.RestoreDomain(StdLog.text.Domain())
   END Real;
BEGIN

   buf := TextModels.CloneOf(StdLog.buf); out.ConnectTo(buf)
END Out.