[Oberon] Removing unnecessary and embedded RETURNs.
peter at easthope.ca
peter at easthope.ca
Sat Nov 11 22:33:27 CET 2023
Hi,
Mail in ETH Oberon has many RETURNs which are unnecessary or embedded
in a procedure body. Some procedures offer a challenge, to me at
least. This is one. Comprehending how the intended purpose is
accomplished was difficult. In a day or two, will post an
alternative.
PROCEDURE ReadText(S: NetTools.Session; VAR R: Files.Rider);
VAR
buffer: ARRAY BufLen OF CHAR;
len, rlen, i, offs: SIGNED32;
state: SIGNED16;
ch, old: CHAR;
BEGIN
old := 0X; offs := 1;
len := NetSystem.Available(S.C);
state := NetSystem.State(S.C);
WHILE (len > 0) OR (state = NetSystem.inout) DO
IF len > (BufLen-2) THEN
rlen := BufLen-2
ELSE
rlen := len
END;
NetSystem.ReadBytes(S.C, 0, rlen, buffer);
i := 0;
WHILE i < rlen DO
ch := buffer[i];
IF ch = Strings.CR THEN
Files.Write(R, ch);
IF (offs = 2) & (old = ".") THEN
Files.Write(R, Strings.LF);
RETURN
END;
offs := 0
ELSE
IF (offs > 0) OR (ch # ".") THEN
Files.Write(R, ch)
END;
INC(offs)
END;
old := ch; INC(i)
END;
DEC(len, rlen);
IF len <= 0 THEN
len := NetSystem.Available(S.C);
state := NetSystem.State(S.C)
END
END
END ReadText;
-
VoIP: +1 604 670 0140
work: https://en.wikibooks.org/wiki/User:PeterEasthope
More information about the Oberon
mailing list