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 */