Source to include/ctype.h


0001  #ifndef _CTYPE_H
0002  #define _CTYPE_H
0003  /*
0004   * ctype.h
0005   *	Categorize character types
0006   *
0007   * ctype.c holds the actual tables; these just use bits from that
0008   * initialized table.  ctype.c also provides functions for each
0009   * macro; this saves code space at the expense of speed.
0010   */
0011  
0012  extern const unsigned char *__get_ctab(void);
0013  
0014  /*
0015   * Bits in each slot
0016   */
0017  #define _CT_DIG (1)
0018  #define _CT_HEXDIG (2)
0019  #define _CT_LOWER (4)
0020  #define _CT_UPPER (8)
0021  #define _CT_WHITE (16)
0022  #define _CT_CTRL (32)
0023  
0024  /*
0025   * Macros
0026   */
0027  #ifndef _CT_NOMACS
0028  
0029  /*
0030   * The table used.  Note that __ctab is queried via __get_ctab()
0031   * during C startup, and placed here.
0032   */
0033  extern const unsigned char *__ctab;
0034  
0035  #define __bits(c, b) (__ctab[(unsigned)(c) & 0x7F] & (b))
0036  #define isupper(c) __bits((c), _CT_UPPER)
0037  #define islower(c) __bits((c), _CT_LOWER)
0038  #define isalpha(c) __bits((c), _CT_UPPER|_CT_LOWER)
0039  #define isalnum(c) __bits((c), _CT_UPPER|_CT_LOWER|_CT_DIG)
0040  #define isdigit(c) __bits((c), _CT_DIG)
0041  #define isxdigit(c) __bits((c), _CT_HEXDIG)
0042  #define isspace(c) __bits((c), _CT_WHITE)
0043  #define iscntrl(c) __bits((c), _CT_CTRL)
0044  #define ispunct(c) (!iscntrl(c) && !isalnum(c))
0045  #define isprint(c) (!iscntrl(c))
0046  #define isascii(c) ((unsigned)(c) <= 0x7F)
0047  #define tolower(c) (isupper(c) ? ((c) - 'A' + 'a') : c)
0048  #define toupper(c) (islower(c) ? ((c) - 'a' + 'A') : c)
0049  #define toascii(c) ((c) & 0x7F)
0050  #define isblank(c) (((c) == ' ') || ((c) == '\t'))
0051  #define isgraph(c) (((c) > ' ') && ((c) < '\177'))
0052  #endif /* !_CT_NOMACS */
0053  
0054  #endif /* _CTYPE_H */