I'd like to continue topic about Unicode characters in BlackBox, started in "Coming soon: BlackBox Component Builder 1.7 CPC Edition":
post p86643 and solution provided by user
maliya,
post p86899.
Here is translation of annotation in module below:
I.N.Goryachev 29.09.2006
Module support for Unicode by facilities of OS
Код:
(*
И.Н.Горячев 29.09.2006
Модуль поддержки юникода средствами ОС
*)
MODULE HostUnicode;
IMPORT
SYSTEM, Kernel, WinApi;
TYPE
KernelHook = POINTER TO RECORD (Kernel.UnicodeHook) END;
VAR
khook : KernelHook;
PROCEDURE (h : KernelHook) IsCap (ch : CHAR) : BOOLEAN;
BEGIN
RETURN WinApi.IsCharUpperW (ch) # 0
END IsCap;
PROCEDURE (h : KernelHook) Cap (ch : CHAR) : CHAR;
BEGIN
RETURN SYSTEM.VAL(CHAR, WinApi.CharUpperW( SYSTEM.VAL(WinApi.PtrWSTR, ch )));
END Cap;
PROCEDURE (h : KernelHook) Low (ch : CHAR) : CHAR;
BEGIN
RETURN SYSTEM.VAL(CHAR, WinApi.CharLowerW(SYSTEM.VAL(WinApi.PtrWSTR, ch)));
END Low;
PROCEDURE Install*;
BEGIN
IF khook = NIL THEN NEW(khook) END;
Kernel.SetUnicodeHook (khook)
END Install;
BEGIN
Install
END HostUnicode.
Personally I prefer approach proposed by Goryachev because his solution is complete, platform- and language-independent.
The rest Oberon-specific code could remain in module Characters.
See commit
https://bitbucket.org/oberoncore/bb16ce ... 39b6ebb2ce for details