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