[Oberon] Exercise in Text parameter handling.
peter at easthope.ca
peter at easthope.ca
Tue Mar 20 17:08:37 CET 2018
From: Andreas Pirklbauer <andreas_pirklbauer at yahoo.com>
Date: Wed, 14 Mar 2018 19:10:54 +0100
IF v.state > 1 THEN (*v is a displayed viewer*)
ELSIF v.state = 1 THEN (*v is a filler viewer*)
ELSIF v.state = 0 THEN (*v is a closed viewer*)
ELSIF v.state < 0 THEN (*v is a suspended viewer*)
END
OK, thanks. My exercise including "Oberon.MarkedViewer().state > 1"
follows.
For * marked viewers, distinguishing an original style Text viewer
from a Document viewer is by the order of the two Marked evaluations.
I have yet to learn how to make the distinction for selected Text. Is
a selection in a plain viewer or in a Document viewer? Necessary if I
want to open a new viewer of the same style as the original.
Any comments about the exercise are welcome of course. Likely I've
missed at least one detail.
Thanks, ... Lyall E.
MODULE ParameterHandling IN Oberon;
IMPORT Documents, Oberon, Texts;
VAR
S: Texts.Scanner;
W: Texts.Writer;
sel: Texts.Text;
beg, end, time: LONGINT;
source: CHAR; (* "t" for all Text in a Text viewer,
"d" for all Text in a Document viewer,
"n" for * parameter following command and no marker displayed,
"s" for for Text selected in a Text viewer,
"u" for for Text selected in a Document viewer,
"o" for ^ parameter following command but no selection,
"f" for a named file and
"z" for command with no parameter; ParameterHandling.Test ~ . *)
(* ParameterHandling.Test * (Marked viewer),
ParameterHandling.Test ^ (Text selection),
ParameterHandling.Test { <filename> } ~ Named files containing Texts. *)
PROCEDURE Test*;
BEGIN
Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
IF S.class=Texts.Char THEN
IF S.c="*" THEN (* Viewer marked? *)
IF (Documents.MarkedDoc() # NIL) & (Oberon.MarkedViewer().state > 1) THEN
source := "d"
ELSIF (Oberon.MarkedViewer() # NIL) & (Oberon.MarkedViewer().state > 1) THEN
source := "t"
ELSE
source := "n"
END
ELSIF S.c="^" THEN (* Text selected? *)
Oberon.GetSelection(sel, beg, end, time);
(* Is the Text in an original style Text viewer or in a Document viewer? *)
IF sel # NIL THEN
source := "s"
ELSIF FALSE THEN
source := "u"
ELSE
source := "o"
END
END
ELSIF S.class=Texts.Name THEN (* Existing or new file named. *)
source := "f"
ELSE
source := "z"
END;
Texts.WriteString(W, "source = "); Texts.Write(W, source); Texts.WriteLn(W);
Texts.Append(Oberon.Log, W.buf);
IF source = "f" THEN
Texts.WriteString(W, "Filename parameter = "); Texts.WriteString(W, S.s); Texts.WriteLn(W);
Texts.Append(Oberon.Log, W.buf);
END
END Test;
BEGIN
Texts.OpenWriter(W)
END ParameterHandling.
Compiler.Compile * ~
ParameterHandling.Test *
ParameterHandling.Test ^
ParameterHandling.Test Oberon.ParameterHandling.Mod ~
--
This message was transmitted by software carefully written to avoid
the overhead and vulnerability of antivirus software.
123456789 123456789 123456789 123456789 123456789 123456789 123456789
Tel: +1 360 639 0202 Pender Is.: +1 250 629 3757
http://easthope.ca/Peter.html Bcc: peter at easthope. ca
More information about the Oberon
mailing list