Версия для 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;