If I merge Unicode.odc with National.odc and reduce the result to the necessary functions then I can use BB 1.6 for shkola like the Russian version of BB 1.5
The result is 
Код:
DEFINITION Unicode;
   PROCEDURE IsLetter (ch: CHAR): BOOLEAN; (* Is it a letter? *)
   PROCEDURE IsCap (ch: CHAR): BOOLEAN; (* Is it a capital letter? *)
   PROCEDURE IsLow (ch: CHAR): BOOLEAN; (* Is it a lower letter? *)
   PROCEDURE IsFirstIdentChar (ch: CHAR): BOOLEAN; (* Is it a first ident character? *)
   PROCEDURE IsIdentChar (ch: CHAR): BOOLEAN; (* Is it a ident character? *)
   PROCEDURE Cap (ch: CHAR): CHAR; (* convert letter to upper case *)
   PROCEDURE Low (ch: CHAR): CHAR; (* convert letter to lower case *)
   PROCEDURE Long (ch: SHORTCHAR): CHAR; (* convert to Unicode *)
   PROCEDURE Short (ch: CHAR): SHORTCHAR; (* convert to ASCII code page *)
END Unicode.
This centralise all necessary changes into one new module called Unicode. The implementation is
Код:
MODULE Unicode;
   PROCEDURE IsCap* (ch: CHAR): BOOLEAN;
   BEGIN
      RETURN (ch >= "A") & (ch <= "Z") 
      (* Unicode *)
      OR (ch >= 0C0X) & (ch # 0D7X) & (ch <= 0DEX)    
      OR (ch >= 0410X) & (ch <= 042FX)
      OR (ch = 0401X)
      [color=#FF00FF](* Win1251 *)
      OR (ch >= 0C0X) & (ch <= 0DFX)
      OR (ch = 0A8X))[/color]
   END IsCap;
   PROCEDURE IsLow* (ch: CHAR): BOOLEAN;
   BEGIN
      RETURN (ch >= "a") & (ch <= "z") 
      (* Unicode *)
      OR (ch >= 0E0X) & (ch # 0F7X) & (ch <= 0FEX)
      OR (ch >= 0430X) & (ch <= 044FX)
      OR (ch = 0451X)
      [color=#FF00FF](* Win1251 *)
      OR (ch >= 0E0X) & (ch <= 0FFX)
      OR (ch = 0B8X))[/color]
   END IsLow;
   PROCEDURE IsLetter* (ch: CHAR): BOOLEAN;
   BEGIN
      RETURN IsCap(ch) OR IsLow(ch) OR (ch = 'ß')
   END IsLetter;
   PROCEDURE IsFirstIdentChar* (ch: CHAR): BOOLEAN;
   BEGIN
      RETURN  IsLetter(ch) OR (ch = "_")
   END IsFirstIdentChar;
   PROCEDURE IsIdentChar* (ch: CHAR): BOOLEAN;
   BEGIN
      RETURN  IsFirstIdentChar(ch) OR ("0" <= ch) & (ch <= "9") 
   END IsIdentChar;
   PROCEDURE Cap* (ch: CHAR): CHAR;
   BEGIN
      IF IsLow(ch) THEN 
         IF ch = "ё" THEN ch := "Ё" ELSE ch := CHR(ORD(ch) - 32) END
      END;
      RETURN ch 
   END Cap;
   PROCEDURE Low* (ch: CHAR): CHAR;
   BEGIN
      IF IsCap(ch) THEN 
         IF ch = "Ё" THEN ch := "ё" ELSE ch := CHR(ORD(ch) + 32) END 
      END;
      RETURN ch 
   END Low;
   PROCEDURE Long* (ch: SHORTCHAR): CHAR;
   BEGIN
      [color=#FF00FF](* ConvertToUnicode from Win1251 *)
      IF ch = 0B8X THEN RETURN 0451X
      ELSIF ch = 0A8X THEN RETURN 0401X
      ELSIF (ch >= 0C0X) & (ch <= 0FFX) THEN RETURN CHR(ORD(ch) + 0350H) END;)[/color]
      RETURN ch 
   END Long;
   PROCEDURE Short* (ch: CHAR): SHORTCHAR;
   BEGIN
      [color=#FF00FF](* ConvertFromUnicode to Win1251 *)
      IF ch = 0451X THEN RETURN 0B8X
      ELSIF ch = 0401X THEN RETURN 0A8X
      ELSIF (ch >= 0410X) & (ch <= 044FX) THEN RETURN SHORT(CHR(ORD(ch) - 0350H)) END;) [/color]
      IF ch >= 100X THEN RETURN "?" ELSE RETURN SHORT(ch) END;
   END Short;
END Unicode.
By using the red line BB 1.6 works like the BB1.5 Russian version
By deleting the red line it works like the original BB 1.6
All other changes are descript in 
viewtopic.php?f=126&t=4468Just subsitute National to Unicode.
And the changes descript in 
viewtopic.php?f=126&t=4487is the missing gap. Without it, it doesn't work.
I have this changes running. Should I mark the changed files with "B18 centralise Unicode functions" ?