1: /* 2: * Macros for determining character type. 3: * 4: * The table chrtype (in char.c) classifies each character 5: * in one of the categories defined below. 6: */ 7: 8: #define _S 01 /* space */ 9: #define _U 02 /* upper case */ 10: #define _L 04 /* lower case */ 11: #define _A 010 /* other alphabetic (e.g. "_") */ 12: #define _N 020 /* digit */ 13: 14: #define _UL (_U | _L) /* letter */ 15: #define _ULA (_UL | _A) /* alphabetic */ 16: #define _ULAN (_ULA | _N) /* alphanumeric */ 17: 18: #define isspace(c) (chrtype[c] & _S) 19: #define isupper(c) (chrtype[c] & _U) 20: #define islower(c) (chrtype[c] & _L) 21: #define isletter(c) (chrtype[c] & _UL) 22: #define isalpha(c) (chrtype[c] & _ULA) 23: #define isdigit(c) (chrtype[c] & _N) 24: #define isalnum(c) (chrtype[c] & _ULAN) 25: 26: #define toupper(c) (islower(c)? (c - ('a'-'A')) : c) 27: #define tolower(c) (isupper(c)? (c + ('a'-'A')) : c) 28: #define tonum(c) (isdigit(c)? (c - '0') : ((c & 037) + 9)) 29: 30: extern char chrtype[];