Версия для OFront другая, Log не использует.
Код:
MODULE OLog;
IMPORT SYSTEM, OStrings;
TYPE
Proc* = PROCEDURE;
StringProc* = PROCEDURE (str: ARRAY OF CHAR);
SStringProc* = PROCEDURE (str: ARRAY OF SHORTCHAR);
AdrProc* = PROCEDURE (x: SYSTEM.PTR);
VAR
Ln-: Proc;
String-: StringProc;
SString-: SStringProc;
Adr-: AdrProc;
PROCEDURE SetProcs* (...);
PROCEDURE \[code\] CChar (ch: CHAR)
'putchar((int)ch)';
PROCEDURE \[code\] CLn
"putchar((int)'\n')";
PROCEDURE \[code\] CFlush
'fflush(stdout)';
PROCEDURE SpecChar (ch: CHAR);
BEGIN
CChar(ch)
END SpecChar;
PROCEDURE SpecString (str: ARRAY OF CHAR);
VAR j: INTEGER;
BEGIN
j := 0;
WHILE str[j] # 0X DO Char(str[j]); INC(j) END;
END SpecString;
PROCEDURE SpecSString (str: ARRAY OF SHORTCHAR);
VAR j: INTEGER;
BEGIN
j := 0;
WHILE str[j] # 0X DO Char(str[j]); INC(j) END;
END SpecSString;
PROCEDURE Init;
BEGIN
SetProcs(Empty, SpecFlush, StdBeep, SpecChar, StdLInt, StdReal, SpecString, SpecSString,
StdUSString, StdBool, StdSet, StdLIntForm, StdRealForm, StdTab, SpecLn, StdAdr)
END Init;
В качестве реализации уже другие функции SpecString, SpecSString, SpecLn. При этом подключается еще модуль реализации HostConLog, который переопределяет функцию SpecChar в смысле локализации
Код:
MODULE HostConLog;
PROCEDURE \[code\] CChar (ch: CHAR)
'putchar((int)ch)';
PROCEDURE \[code\] CConv (ca: ARRAY OF CHAR; sca: ARRAY OF SHORTCHAR)
'CharToOemW(ca, sca)';
PROCEDURE SpecChar (ch: CHAR);
BEGIN
cStr[0] := ch;
scStr[1] := 0X;
CConv(cStr, scStr);
CChar(scStr[0]);
IF scStr[1] # 0X THEN
CChar(scStr[0])
END
END SpecChar;