IMPLEMENTATION MODULE TextIO; (* Binds the shim externals directly (avoids name shadowing with SysIO's wrappers). *) IMPORT Utf8; PROCEDURE m2write(VAR s : ARRAY OF CHAR); EXTERNAL; PROCEDURE m2writeln; EXTERNAL; PROCEDURE m2writeint(n : INTEGER); EXTERNAL; PROCEDURE m2writechar(c : CHAR); EXTERNAL; PROCEDURE WriteString(VAR s : ARRAY OF CHAR); BEGIN m2write(s) END WriteString; PROCEDURE WriteLn; BEGIN m2writeln END WriteLn; PROCEDURE WriteInt(n : INTEGER); BEGIN m2writeint(n) END WriteInt; PROCEDURE WriteCard(n : CARDINAL); BEGIN m2writeint(n) END WriteCard; PROCEDURE WriteChar(c : CHAR); BEGIN m2writechar(c) END WriteChar; PROCEDURE UWriteChar(cp : UCHAR); VAR buf : ARRAY [0 .. 3] OF CHAR; n, i : CARDINAL; BEGIN n := Utf8.Encode(cp, buf); i := 0; WHILE i < n DO m2writechar(buf[i]); INC(i) END END UWriteChar; PROCEDURE UWriteString(VAR u : ARRAY OF UCHAR); VAR i : CARDINAL; BEGIN i := 0; WHILE i <= HIGH(u) DO UWriteChar(u[i]); INC(i) END END UWriteString; PROCEDURE UWriteLn; BEGIN m2writeln END UWriteLn; END TextIO.