MODULE In;
(**

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

**)

   IMPORT TextMappers, TextControllers;

   VAR

      Done-: BOOLEAN;
      s: TextMappers.Scanner;
   PROCEDURE Open*;

      VAR c: TextControllers.Controller; beg, end: INTEGER;
   BEGIN
      c := TextControllers.Focus();
      IF c # NIL THEN
         IF c.HasSelection() THEN c.GetSelection(beg, end) ELSE beg := 0 END;
         s.ConnectTo(c.text); s.SetPos(beg); s.rider.Read; Done := TRUE
      ELSE
         s.ConnectTo(NIL); Done := FALSE
      END
   END Open;
   PROCEDURE Char* (OUT ch: CHAR);

   BEGIN
      IF Done THEN
         IF s.rider.eot THEN Done := FALSE
         ELSE ch := s.rider.char; s.rider.Read
         END
      END
   END Char;
   PROCEDURE Int* (OUT i: INTEGER);

   BEGIN
      IF Done THEN
         s.Scan;
         IF (s.type = TextMappers.int) THEN
            i := s.int
         ELSE Done := FALSE
         END
      END
   END Int;
   PROCEDURE LongInt* (OUT l: LONGINT);

   BEGIN
      IF Done THEN
         s.Scan;
         IF (s.type = TextMappers.lint) OR (s.type = TextMappers.int) THEN
            l := s.lint
         ELSE Done := FALSE
         END
      END
   END LongInt;
   PROCEDURE Real* (OUT x: REAL);

   BEGIN
      IF Done THEN
         s.Scan;
         IF s.type = TextMappers.real THEN
            x := SHORT(s.real)
         ELSIF s.type = TextMappers.int THEN
            x := s.int
         ELSE Done := FALSE
         END
      END
   END Real;
   PROCEDURE Name* (OUT name: ARRAY OF CHAR);

   BEGIN
      IF Done THEN
         s.Scan;
         TextMappers.ScanQualIdent(s, name, Done)
      END
   END Name;
   PROCEDURE String* (OUT str: ARRAY OF CHAR);

   BEGIN
      IF Done THEN
         s.Scan;
         IF s.type = TextMappers.string THEN
            str := s.string$
         ELSE Done := FALSE
         END
      END
   END String;
END In.