home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system / inout.mod (.txt) < prev    next >
Oberon Text  |  2012-04-20  |  3KB  |  84 lines

  1. Syntax10.Scn.Fnt
  2. MODULE InOut;    (* J. Templ, 18.6.91/27.10.91 *)
  3.     IMPORT
  4.         Texts, Oberon, Viewers, MenuViewers, TextFrames, Fonts, Display;
  5.         Done*: BOOLEAN;
  6.         W: Texts.Writer;
  7.         T: Texts.Text;
  8.         S: Texts.Scanner;
  9.         B: Texts.Text;
  10.         pos: LONGINT;
  11.     PROCEDURE OpenInput*;
  12.         VAR F: Display.Frame; beg, end, time: LONGINT;
  13.     BEGIN
  14.         pos := Oberon.Par.pos; B := Oberon.Par.text;
  15.         Texts.OpenScanner(S, B, pos); Texts.Scan(S);    (* one token look ahead *)
  16.         IF S.class = Texts.Char THEN
  17.             IF S.c = "^" THEN Oberon.GetSelection(B, beg, end, time);
  18.                 IF time >= 0 THEN Texts.OpenScanner(S, B, beg); pos := beg; Texts.Scan(S) ELSE B := Oberon.Par.text END
  19.             ELSIF S.c = "*" THEN F := Oberon.MarkedViewer();
  20.                 IF F IS MenuViewers.Viewer THEN F := F.dsc.next;
  21.                     WITH F: TextFrames.Frame DO B := F.text;
  22.                          Texts.OpenScanner(S, B, 0); pos := 0; Texts.Scan(S)
  23.                     ELSE
  24.                     END
  25.                 END
  26.             END
  27.         END
  28.     END OpenInput;
  29.     PROCEDURE OpenOutput*;
  30.         VAR V: MenuViewers.Viewer; X, Y: INTEGER;
  31.     BEGIN
  32.         T := TextFrames.Text("");
  33.         Oberon.AllocateUserViewer(0, X, Y);
  34.         V := MenuViewers.New(
  35.             TextFrames.NewMenu("InOut.Text", "System.Close  System.Copy  System.Grow  Edit.Search  Edit.Store"),
  36.             TextFrames.NewText(T, 0),
  37.             TextFrames.menuH,
  38.             X, Y)
  39.     END OpenOutput;
  40.     PROCEDURE Read*(VAR ch: CHAR);
  41.     BEGIN
  42.         Texts.OpenReader(S, B, pos); Texts.Read(S, ch); Done := ~S.eot;
  43.         INC(pos); Texts.OpenScanner(S, B, pos); Texts.Scan(S)
  44.     END Read;
  45.     PROCEDURE ReadInt*(VAR i: LONGINT);
  46.     BEGIN 
  47.         IF S.class = Texts.Int THEN Done := TRUE; i := S.i; pos := Texts.Pos(S)-1; Texts.Scan(S)
  48.         ELSE Done := FALSE
  49.         END
  50.     END ReadInt;
  51.     PROCEDURE ReadReal*(VAR x: LONGREAL);
  52.     BEGIN 
  53.         IF S.class = Texts.Real THEN Done := TRUE; x := S.y; pos := Texts.Pos(S)-1; Texts.Scan(S)
  54.         ELSE Done := FALSE
  55.         END
  56.     END ReadReal;
  57.     PROCEDURE ReadString*(VAR s: ARRAY OF CHAR);
  58.     BEGIN 
  59.         IF S.class = Texts.Name THEN Done := TRUE; COPY(S.s, s); pos := Texts.Pos(S)-1; Texts.Scan(S)
  60.         ELSE Done := FALSE
  61.         END
  62.     END ReadString;
  63.     PROCEDURE Write*(ch: CHAR);
  64.     BEGIN Texts.Write(W, ch); Texts.Append(T, W.buf)
  65.     END Write;
  66.     PROCEDURE WriteInt*(i: LONGINT);
  67.     BEGIN Texts.Write(W, " "); Texts.WriteInt(W, i, 1); Texts.Append(T, W.buf)
  68.     END WriteInt;
  69.     PROCEDURE WriteReal*( x: LONGREAL; n: INTEGER);
  70.     BEGIN Texts.WriteLongReal(W, x, n); Texts.Append(T, W.buf)
  71.     END WriteReal;
  72.     PROCEDURE WriteString*(s: ARRAY OF CHAR);
  73.     BEGIN Texts.WriteString(W, s); Texts.Append(T, W.buf)
  74.     END WriteString;
  75.     PROCEDURE WriteLn*;
  76.     BEGIN Texts.WriteLn(W); Texts.Append(T, W.buf)
  77.     END WriteLn;
  78.     PROCEDURE SetFont*(name: ARRAY 32 OF CHAR);
  79.     BEGIN
  80.         Texts.SetFont(W, Fonts.This(name))
  81.     END SetFont;
  82. BEGIN Texts.OpenWriter(W); T := Oberon.Log
  83. END InOut.
  84.