From c985dcb3e4ce9693fbeba42a1ac944b80c6d1f0a Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Sat, 1 Aug 2026 00:27:52 +0400 Subject: [PATCH] ocat: fixing missing last line by flushing output after each file console module only flushes its internal buffer on lf or when full. files without a trailing newline silently lost their last line on exit. switching to out module and calling out.flush after processing each file guarantees all buffered output is written. --- src/tools/ocat/OCatCmd.Mod | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/tools/ocat/OCatCmd.Mod b/src/tools/ocat/OCatCmd.Mod index 3d76a745..036707be 100644 --- a/src/tools/ocat/OCatCmd.Mod +++ b/src/tools/ocat/OCatCmd.Mod @@ -2,16 +2,16 @@ MODULE OCatCmd; (* J. Templ, 13-Jan-96 *) (* looks at the OBERON search path and writes one or more Oberon or ascii texts to standard out *) - IMPORT Args, Console, Files, Texts; + IMPORT Args, Out, Files, Texts; PROCEDURE Cat*; VAR path: ARRAY 128 OF CHAR; i: INTEGER; T: Texts.Text; R: Texts.Reader; ch: CHAR; tab: BOOLEAN; buf: ARRAY 1024 OF CHAR; bufpos: INTEGER; - PROCEDURE ConsoleChar(ch: CHAR); (* buffered write *) + PROCEDURE OutChar(ch: CHAR); (* buffered write *) BEGIN buf[bufpos] := ch; INC(bufpos); - IF bufpos = LEN(buf) - 1 THEN buf[bufpos] := 0X; Console.String(buf); bufpos := 0 END - END ConsoleChar; + IF bufpos = LEN(buf) - 1 THEN buf[bufpos] := 0X; Out.String(buf); bufpos := 0 END + END OutChar; BEGIN path := ""; NEW(T); @@ -20,20 +20,20 @@ MODULE OCatCmd; (* J. Templ, 13-Jan-96 *) ELSE tab := FALSE; i := 1 END ; WHILE path # "" DO - IF Files.Old(path) # NIL THEN + IF Files.Old(path) # NIL THEN Texts.Open(T, path); Texts.OpenReader(R, T, 0); Texts.Read(R, ch); bufpos := 0; WHILE ~R.eot DO - IF ch >= " " THEN ConsoleChar(ch) + IF ch >= " " THEN OutChar(ch) ELSIF ch = 09X THEN - IF tab THEN ConsoleChar(ch) ELSE ConsoleChar(" "); ConsoleChar(" ") END - ELSIF ch = 0DX THEN ConsoleChar(0AX) + IF tab THEN OutChar(ch) ELSE OutChar(" "); OutChar(" ") END + ELSIF ch = 0DX THEN OutChar(0AX) END ; Texts.Read(R, ch) END ; - buf[bufpos] := 0X; Console.String(buf) (* flush *) + buf[bufpos] := 0X; Out.String(buf); Out.Flush (* flush *) ELSE - Console.String("ocat: cannot open "); Console.String(path); Console.Ln + Out.String("ocat: cannot open "); Out.String(path); Out.Ln END ; INC(i); path := ""; Args.Get(i, path)