Подготовил изменение. Таким образом модуль 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 не надо использовать.
Поэтому я убрал их... Но решил вынести на форум этот вопрос, чтобы услышать больше мнений.
Оставить ли для совместимости?