Info21 писал(а):
Иван Денисов писал(а):
Есть проблема пока с поиском аналогов функций IsAlpha IsUpper IsLower 
IsAlpha -- это то, что называют alphanumeric character?
Об удобной минимальности базового набора таких функций задумчивость была?
Вот так сейчас они реализованы на Windows.
Код:
PROCEDURE IsAlpha* (ch: CHAR): BOOLEAN;
      VAR type: SHORTINT; res: INTEGER;
   BEGIN
      (* note that WinApi.IsCharAlphaW returns FALSE for all Hiragana and Katakana syllables and is slower *)
      res := WinApi.GetStringTypeW(WinApi.CT_CTYPE1, S.VAL(WinApi.PtrWSTR, S.ADR(ch)), 1, type);
      RETURN BITS(WinApi.C1_ALPHA) * BITS(type) # {}
   END IsAlpha;
   PROCEDURE Upper* (ch: CHAR): CHAR;
   BEGIN
      IF ("a" <= ch) & (ch <= "z") THEN RETURN CAP(ch) (* common case optimized *)
      ELSIF ch > 7FX THEN RETURN S.VAL(CHAR, WinApi.CharUpperW( S.VAL(WinApi.PtrWSTR, ch )))
      ELSE RETURN ch
      END
   END Upper;
   PROCEDURE IsUpper* (ch: CHAR): BOOLEAN;
   BEGIN
      IF ("A" <= ch) & (ch <= "Z") THEN RETURN TRUE
      ELSIF ch > 7FX THEN RETURN WinApi.IsCharUpperW(ch) # 0
      ELSE RETURN FALSE
      END
   END IsUpper;
   PROCEDURE Lower* (ch: CHAR): CHAR;
   BEGIN
      IF ("A" <= ch) & (ch <= "Z") THEN RETURN CHR(ORD(ch) + 32)
      ELSIF ch > 7FX THEN RETURN S.VAL(CHAR, WinApi.CharLowerW(S.VAL(WinApi.PtrWSTR, ch)))
      ELSE RETURN ch
      END
   END Lower;
   PROCEDURE IsLower* (ch: CHAR): BOOLEAN;
   BEGIN
      IF ("a" <= ch) & (ch <= "z") THEN RETURN TRUE
      ELSIF ch > 7FX THEN RETURN WinApi.IsCharLowerW(ch) # 0
      ELSE RETURN FALSE
      END
   END IsLower;
Вот такие у них назначения:
Цитата:
PROCEDURE IsAlpha (ch: CHAR): BOOLEAN
Checks if ch is an alphabetical character, rather than a digit or symbol.
PROCEDURE Upper (ch: CHAR): CHAR
Returns the upper case character corresponding to ch.
PROCEDURE IsUpper (ch: CHAR): BOOLEAN
Checks if ch is an upper case alphabetical character.
PROCEDURE Lower (ch: CHAR): CHAR
Returns the lower case character corresponding to ch.
PROCEDURE IsLower (ch: CHAR): BOOLEAN
Checks if ch is a lower case alphabetical character.