Подготовил изменение. Таким образом модуль Unicode не будет иметь зависимостей и содержит следующие процедуры.
Код:
DEFINITION Unicode;
   PROCEDURE IsAlpha (ch: CHAR): BOOLEAN;
   PROCEDURE IsAlphaNumeric (ch: CHAR): BOOLEAN;
   PROCEDURE IsIdent (ch: CHAR): BOOLEAN;
   PROCEDURE IsIdentStart (ch: CHAR): BOOLEAN;
   PROCEDURE IsLower (ch: CHAR): BOOLEAN;
   PROCEDURE IsNumeric (ch: CHAR): BOOLEAN;
   PROCEDURE IsUpper (ch: CHAR): BOOLEAN;
   PROCEDURE Lower (ch: CHAR): CHAR;
   PROCEDURE ToLower (IN in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
   PROCEDURE ToUpper (IN in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
   PROCEDURE Upper (ch: CHAR): CHAR;
END Unicode.
Модуль Strings соответственно эти процедуры утратил. Но зато он теперь зависит только от Math.
Код:
DEFINITION Strings;
   CONST
      charCode = -1;
      decimal = 10;
      digitspace = 8FX;
      hexadecimal = -2;
      hideBase = FALSE;
      roman = -3;
      showBase = TRUE;
   PROCEDURE Extract (s: ARRAY OF CHAR; pos, len: INTEGER; OUT res: ARRAY OF CHAR);
   PROCEDURE Find (IN s: ARRAY OF CHAR; IN pat: ARRAY OF CHAR; start: INTEGER; OUT pos: INTEGER);
   PROCEDURE IntToString (x: LONGINT; OUT s: ARRAY OF CHAR);
   PROCEDURE IntToStringForm (x: LONGINT; form, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN; OUT s: ARRAY OF CHAR);
   PROCEDURE RealToString (x: REAL; OUT s: ARRAY OF CHAR);
   PROCEDURE RealToStringForm (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR; OUT s: ARRAY OF CHAR);
   PROCEDURE Replace (VAR s: ARRAY OF CHAR; pos, len: INTEGER; IN rep: ARRAY OF CHAR);
   PROCEDURE SetToString (x: SET; OUT str: ARRAY OF CHAR);
   PROCEDURE StringToInt (IN s: ARRAY OF CHAR; OUT x, res: INTEGER);
   PROCEDURE StringToLInt (IN s: ARRAY OF CHAR; OUT x: LONGINT; OUT res: INTEGER);
   PROCEDURE StringToReal (IN s: ARRAY OF CHAR; OUT x: REAL; OUT res: INTEGER);
   PROCEDURE StringToSet (IN s: ARRAY OF CHAR; OUT x: SET; OUT res: INTEGER);
   PROCEDURE Valid (IN s: ARRAY OF CHAR): BOOLEAN;
   PROCEDURE GetDecimalSign (): CHAR;
   PROCEDURE SetDecimalSign (sign: CHAR);
END Strings.
В версии 1.6 были вот такие процедуры в Strings, которые работали только в области ASCII. Возникает вопрос, надо ли их оставлять?
Код:
   PROCEDURE Upper* (ch: CHAR): CHAR;
   BEGIN
      IF ORD(ch) < 256 THEN RETURN toUpper[ORD(ch)] ELSE RETURN ch END
   END Upper;
   PROCEDURE ToUpper* (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
      VAR i, max: INTEGER;
   BEGIN i := 0; max := LEN(out)-1;
      WHILE (in[i] # 0X) & (i < max) DO
         IF ORD(in[i]) < 256 THEN out[i] := toUpper[ORD(in[i])] ELSE out[i] := in[i] END;
         INC(i)
      END;
      out[i] := 0X
   END ToUpper;
   PROCEDURE Lower* (ch: CHAR): CHAR;
   BEGIN 
      IF ORD(ch) < 256 THEN RETURN toLower[ORD(ch)] ELSE RETURN ch END
   END Lower;
   PROCEDURE ToLower* (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
      VAR i, max: INTEGER;
   BEGIN i := 0; max := LEN(out)-1;
      WHILE (in[i] # 0X) & (i < max) DO
         IF ORD(in[i]) < 256 THEN out[i] := toLower[ORD(in[i])] ELSE out[i] := in[i] END;
         INC(i)
      END;
      out[i] := 0X
   END ToLower;
Была идея передалать их по SHORTCHAR, но в чате высказывались мнения, что SHORTCHAR не надо использовать. 
Поэтому я убрал их... Но решил вынести на форум этот вопрос, чтобы услышать больше мнений.
Оставить ли для совместимости?