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 >
Wrap
Oberon Text
|
2012-04-20
|
3KB
|
84 lines
Syntax10.Scn.Fnt
MODULE InOut; (* J. Templ, 18.6.91/27.10.91 *)
IMPORT
Texts, Oberon, Viewers, MenuViewers, TextFrames, Fonts, Display;
Done*: BOOLEAN;
W: Texts.Writer;
T: Texts.Text;
S: Texts.Scanner;
B: Texts.Text;
pos: LONGINT;
PROCEDURE OpenInput*;
VAR F: Display.Frame; beg, end, time: LONGINT;
BEGIN
pos := Oberon.Par.pos; B := Oberon.Par.text;
Texts.OpenScanner(S, B, pos); Texts.Scan(S); (* one token look ahead *)
IF S.class = Texts.Char THEN
IF S.c = "^" THEN Oberon.GetSelection(B, beg, end, time);
IF time >= 0 THEN Texts.OpenScanner(S, B, beg); pos := beg; Texts.Scan(S) ELSE B := Oberon.Par.text END
ELSIF S.c = "*" THEN F := Oberon.MarkedViewer();
IF F IS MenuViewers.Viewer THEN F := F.dsc.next;
WITH F: TextFrames.Frame DO B := F.text;
Texts.OpenScanner(S, B, 0); pos := 0; Texts.Scan(S)
ELSE
END
END
END
END
END OpenInput;
PROCEDURE OpenOutput*;
VAR V: MenuViewers.Viewer; X, Y: INTEGER;
BEGIN
T := TextFrames.Text("");
Oberon.AllocateUserViewer(0, X, Y);
V := MenuViewers.New(
TextFrames.NewMenu("InOut.Text", "System.Close System.Copy System.Grow Edit.Search Edit.Store"),
TextFrames.NewText(T, 0),
TextFrames.menuH,
X, Y)
END OpenOutput;
PROCEDURE Read*(VAR ch: CHAR);
BEGIN
Texts.OpenReader(S, B, pos); Texts.Read(S, ch); Done := ~S.eot;
INC(pos); Texts.OpenScanner(S, B, pos); Texts.Scan(S)
END Read;
PROCEDURE ReadInt*(VAR i: LONGINT);
BEGIN
IF S.class = Texts.Int THEN Done := TRUE; i := S.i; pos := Texts.Pos(S)-1; Texts.Scan(S)
ELSE Done := FALSE
END
END ReadInt;
PROCEDURE ReadReal*(VAR x: LONGREAL);
BEGIN
IF S.class = Texts.Real THEN Done := TRUE; x := S.y; pos := Texts.Pos(S)-1; Texts.Scan(S)
ELSE Done := FALSE
END
END ReadReal;
PROCEDURE ReadString*(VAR s: ARRAY OF CHAR);
BEGIN
IF S.class = Texts.Name THEN Done := TRUE; COPY(S.s, s); pos := Texts.Pos(S)-1; Texts.Scan(S)
ELSE Done := FALSE
END
END ReadString;
PROCEDURE Write*(ch: CHAR);
BEGIN Texts.Write(W, ch); Texts.Append(T, W.buf)
END Write;
PROCEDURE WriteInt*(i: LONGINT);
BEGIN Texts.Write(W, " "); Texts.WriteInt(W, i, 1); Texts.Append(T, W.buf)
END WriteInt;
PROCEDURE WriteReal*( x: LONGREAL; n: INTEGER);
BEGIN Texts.WriteLongReal(W, x, n); Texts.Append(T, W.buf)
END WriteReal;
PROCEDURE WriteString*(s: ARRAY OF CHAR);
BEGIN Texts.WriteString(W, s); Texts.Append(T, W.buf)
END WriteString;
PROCEDURE WriteLn*;
BEGIN Texts.WriteLn(W); Texts.Append(T, W.buf)
END WriteLn;
PROCEDURE SetFont*(name: ARRAY 32 OF CHAR);
BEGIN
Texts.SetFont(W, Fonts.This(name))
END SetFont;
BEGIN Texts.OpenWriter(W); T := Oberon.Log
END InOut.