Blame lib/c-ctype.h

Packit Service fdd496
/* Character handling in C locale.
Packit Service fdd496
Packit Service fdd496
   These functions work like the corresponding functions in <ctype.h>,
Packit Service fdd496
   except that they have the C (POSIX) locale hardwired, whereas the
Packit Service fdd496
   <ctype.h> functions' behaviour depends on the current locale set via
Packit Service fdd496
   setlocale.
Packit Service fdd496
Packit Service fdd496
   Copyright (C) 2000-2003, 2006, 2008-2017 Free Software Foundation, Inc.
Packit Service fdd496
Packit Service fdd496
This program is free software; you can redistribute it and/or modify
Packit Service fdd496
it under the terms of the GNU General Public License as published by
Packit Service fdd496
the Free Software Foundation; either version 3 of the License, or
Packit Service fdd496
(at your option) any later version.
Packit Service fdd496
Packit Service fdd496
This program is distributed in the hope that it will be useful,
Packit Service fdd496
but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fdd496
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service fdd496
GNU General Public License for more details.
Packit Service fdd496
Packit Service fdd496
You should have received a copy of the GNU General Public License
Packit Service fdd496
along with this program; if not, see <http://www.gnu.org/licenses/>.  */
Packit Service fdd496
Packit Service fdd496
#ifndef C_CTYPE_H
Packit Service fdd496
#define C_CTYPE_H
Packit Service fdd496
Packit Service fdd496
#include <stdbool.h>
Packit Service fdd496
Packit Service fdd496
#ifndef _GL_INLINE_HEADER_BEGIN
Packit Service fdd496
 #error "Please include config.h first."
Packit Service fdd496
#endif
Packit Service fdd496
_GL_INLINE_HEADER_BEGIN
Packit Service fdd496
#ifndef C_CTYPE_INLINE
Packit Service fdd496
# define C_CTYPE_INLINE _GL_INLINE
Packit Service fdd496
#endif
Packit Service fdd496
Packit Service fdd496
#ifdef __cplusplus
Packit Service fdd496
extern "C" {
Packit Service fdd496
#endif
Packit Service fdd496
Packit Service fdd496
Packit Service fdd496
/* The functions defined in this file assume the "C" locale and a character
Packit Service fdd496
   set without diacritics (ASCII-US or EBCDIC-US or something like that).
Packit Service fdd496
   Even if the "C" locale on a particular system is an extension of the ASCII
Packit Service fdd496
   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
Packit Service fdd496
   is ISO-8859-1), the functions in this file recognize only the ASCII
Packit Service fdd496
   characters.  */
Packit Service fdd496
Packit Service fdd496
Packit Service fdd496
#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
Packit Service fdd496
    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
Packit Service fdd496
    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
Packit Service fdd496
    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
Packit Service fdd496
    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
Packit Service fdd496
    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
Packit Service fdd496
    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
Packit Service fdd496
    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
Packit Service fdd496
    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
Packit Service fdd496
    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
Packit Service fdd496
    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
Packit Service fdd496
    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
Packit Service fdd496
    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
Packit Service fdd496
    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
Packit Service fdd496
    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
Packit Service fdd496
    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
Packit Service fdd496
    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
Packit Service fdd496
    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
Packit Service fdd496
    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
Packit Service fdd496
    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
Packit Service fdd496
    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
Packit Service fdd496
    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
Packit Service fdd496
    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
Packit Service fdd496
/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
Packit Service fdd496
   Testing the value of '\n' and '\r' is not relevant.  */
Packit Service fdd496
# define C_CTYPE_ASCII 1
Packit Service fdd496
#elif ! (' ' == '\x40' && '0' == '\xf0'                     \
Packit Service fdd496
         && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \
Packit Service fdd496
         && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2')
Packit Service fdd496
# error "Only ASCII and EBCDIC are supported"
Packit Service fdd496
#endif
Packit Service fdd496
Packit Service fdd496
#if 'A' < 0
Packit Service fdd496
# error "EBCDIC and char is signed -- not supported"
Packit Service fdd496
#endif
Packit Service fdd496
Packit Service fdd496
/* Cases for control characters.  */
Packit Service fdd496
Packit Service fdd496
#define _C_CTYPE_CNTRL \
Packit Service fdd496
   case '\a': case '\b': case '\f': case '\n': \
Packit Service fdd496
   case '\r': case '\t': case '\v': \
Packit Service fdd496
   _C_CTYPE_OTHER_CNTRL
Packit Service fdd496
Packit Service fdd496
/* ASCII control characters other than those with \-letter escapes.  */
Packit Service fdd496
Packit Service fdd496
#if C_CTYPE_ASCII
Packit Service fdd496
# define _C_CTYPE_OTHER_CNTRL \
Packit Service fdd496
    case '\x00': case '\x01': case '\x02': case '\x03': \
Packit Service fdd496
    case '\x04': case '\x05': case '\x06': case '\x0e': \
Packit Service fdd496
    case '\x0f': case '\x10': case '\x11': case '\x12': \
Packit Service fdd496
    case '\x13': case '\x14': case '\x15': case '\x16': \
Packit Service fdd496
    case '\x17': case '\x18': case '\x19': case '\x1a': \
Packit Service fdd496
    case '\x1b': case '\x1c': case '\x1d': case '\x1e': \
Packit Service fdd496
    case '\x1f': case '\x7f'
Packit Service fdd496
#else
Packit Service fdd496
   /* Use EBCDIC code page 1047's assignments for ASCII control chars;
Packit Service fdd496
      assume all EBCDIC code pages agree about these assignments.  */
Packit Service fdd496
# define _C_CTYPE_OTHER_CNTRL \
Packit Service fdd496
    case '\x00': case '\x01': case '\x02': case '\x03': \
Packit Service fdd496
    case '\x07': case '\x0e': case '\x0f': case '\x10': \
Packit Service fdd496
    case '\x11': case '\x12': case '\x13': case '\x18': \
Packit Service fdd496
    case '\x19': case '\x1c': case '\x1d': case '\x1e': \
Packit Service fdd496
    case '\x1f': case '\x26': case '\x27': case '\x2d': \
Packit Service fdd496
    case '\x2e': case '\x32': case '\x37': case '\x3c': \
Packit Service fdd496
    case '\x3d': case '\x3f'
Packit Service fdd496
#endif
Packit Service fdd496
Packit Service fdd496
/* Cases for lowercase hex letters, and lowercase letters, all offset by N.  */
Packit Service fdd496
Packit Service fdd496
#define _C_CTYPE_LOWER_A_THRU_F_N(N) \
Packit Service fdd496
   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
Packit Service fdd496
   case 'e' + (N): case 'f' + (N)
Packit Service fdd496
#define _C_CTYPE_LOWER_N(N) \
Packit Service fdd496
   _C_CTYPE_LOWER_A_THRU_F_N(N): \
Packit Service fdd496
   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
Packit Service fdd496
   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
Packit Service fdd496
   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
Packit Service fdd496
   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
Packit Service fdd496
   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
Packit Service fdd496
Packit Service fdd496
/* Cases for hex letters, digits, lower, punct, and upper.  */
Packit Service fdd496
Packit Service fdd496
#define _C_CTYPE_A_THRU_F \
Packit Service fdd496
   _C_CTYPE_LOWER_A_THRU_F_N (0): \
Packit Service fdd496
   _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a')
Packit Service fdd496
#define _C_CTYPE_DIGIT                     \
Packit Service fdd496
   case '0': case '1': case '2': case '3': \
Packit Service fdd496
   case '4': case '5': case '6': case '7': \
Packit Service fdd496
   case '8': case '9'
Packit Service fdd496
#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0)
Packit Service fdd496
#define _C_CTYPE_PUNCT \
Packit Service fdd496
   case '!': case '"': case '#': case '$':  \
Packit Service fdd496
   case '%': case '&': case '\'': case '(': \
Packit Service fdd496
   case ')': case '*': case '+': case ',':  \
Packit Service fdd496
   case '-': case '.': case '/': case ':':  \
Packit Service fdd496
   case ';': case '<': case '=': case '>':  \
Packit Service fdd496
   case '?': case '@': case '[': case '\\': \
Packit Service fdd496
   case ']': case '^': case '_': case '`':  \
Packit Service fdd496
   case '{': case '|': case '}': case '~'
Packit Service fdd496
#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
Packit Service fdd496
Packit Service fdd496
Packit Service fdd496
/* Function definitions.  */
Packit Service fdd496
Packit Service fdd496
/* Unlike the functions in <ctype.h>, which require an argument in the range
Packit Service fdd496
   of the 'unsigned char' type, the functions here operate on values that are
Packit Service fdd496
   in the 'unsigned char' range or in the 'char' range.  In other words,
Packit Service fdd496
   when you have a 'char' value, you need to cast it before using it as
Packit Service fdd496
   argument to a <ctype.h> function:
Packit Service fdd496
Packit Service fdd496
         const char *s = ...;
Packit Service fdd496
         if (isalpha ((unsigned char) *s)) ...
Packit Service fdd496
Packit Service fdd496
   but you don't need to cast it for the functions defined in this file:
Packit Service fdd496
Packit Service fdd496
         const char *s = ...;
Packit Service fdd496
         if (c_isalpha (*s)) ...
Packit Service fdd496
 */
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isalnum (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_DIGIT:
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isalpha (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
/* The function isascii is not locale dependent.
Packit Service fdd496
   Its use in EBCDIC is questionable. */
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isascii (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    case ' ':
Packit Service fdd496
    _C_CTYPE_CNTRL:
Packit Service fdd496
    _C_CTYPE_DIGIT:
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
    _C_CTYPE_PUNCT:
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isblank (int c)
Packit Service fdd496
{
Packit Service fdd496
  return c == ' ' || c == '\t';
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_iscntrl (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_CNTRL:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isdigit (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_DIGIT:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isgraph (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_DIGIT:
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
    _C_CTYPE_PUNCT:
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_islower (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isprint (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    case ' ':
Packit Service fdd496
    _C_CTYPE_DIGIT:
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
    _C_CTYPE_PUNCT:
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_ispunct (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_PUNCT:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isspace (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isupper (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE bool
Packit Service fdd496
c_isxdigit (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_DIGIT:
Packit Service fdd496
    _C_CTYPE_A_THRU_F:
Packit Service fdd496
      return true;
Packit Service fdd496
    default:
Packit Service fdd496
      return false;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE int
Packit Service fdd496
c_tolower (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_UPPER:
Packit Service fdd496
      return c - 'A' + 'a';
Packit Service fdd496
    default:
Packit Service fdd496
      return c;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
C_CTYPE_INLINE int
Packit Service fdd496
c_toupper (int c)
Packit Service fdd496
{
Packit Service fdd496
  switch (c)
Packit Service fdd496
    {
Packit Service fdd496
    _C_CTYPE_LOWER:
Packit Service fdd496
      return c - 'a' + 'A';
Packit Service fdd496
    default:
Packit Service fdd496
      return c;
Packit Service fdd496
    }
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
#ifdef __cplusplus
Packit Service fdd496
}
Packit Service fdd496
#endif
Packit Service fdd496
Packit Service fdd496
_GL_INLINE_HEADER_END
Packit Service fdd496
Packit Service fdd496
#endif /* C_CTYPE_H */