asciitype.h (2347B)
1 /* 2 * Copyright (c) 2003 Gunnar Ritter 3 * 4 * This software is provided 'as-is', without any express or implied 5 * warranty. In no event will the authors be held liable for any damages 6 * arising from the use of this software. 7 * 8 * Permission is granted to anyone to use this software for any purpose, 9 * including commercial applications, and to alter it and redistribute 10 * it freely, subject to the following restrictions: 11 * 12 * 1. The origin of this software must not be misrepresented; you must not 13 * claim that you wrote the original software. If you use this software 14 * in a product, an acknowledgment in the product documentation would be 15 * appreciated but is not required. 16 * 17 * 2. Altered source versions must be plainly marked as such, and must not be 18 * misrepresented as being the original software. 19 * 20 * 3. This notice may not be removed or altered from any source distribution. 21 */ 22 /* Sccsid @(#)asciitype.h 1.6 (gritter) 9/9/05 */ 23 24 /* 25 * Locale-independent character classes. 26 */ 27 enum { 28 C_CNTRL = 0000, 29 C_BLANK = 0001, 30 C_WHITE = 0002, 31 C_SPACE = 0004, 32 C_PUNCT = 0010, 33 C_OCTAL = 0020, 34 C_DIGIT = 0040, 35 C_UPPER = 0100, 36 C_LOWER = 0200 37 }; 38 39 extern const unsigned char class_char[]; 40 41 #define asciichar(c) ((unsigned)(c) <= 0177) 42 #define alnumchar(c) (asciichar(c)&&(class_char[c]&\ 43 (C_DIGIT|C_OCTAL|C_UPPER|C_LOWER))) 44 #define alphachar(c) (asciichar(c)&&(class_char[c]&(C_UPPER|C_LOWER))) 45 #define blankchar(c) (asciichar(c)&&(class_char[c]&(C_BLANK))) 46 #define cntrlchar(c) (asciichar(c)&&(class_char[c]==C_CNTRL) 47 #define digitchar(c) (asciichar(c)&&(class_char[c]&(C_DIGIT|C_OCTAL))) 48 #define lowerchar(c) (asciichar(c)&&(class_char[c]&(C_LOWER))) 49 #define punctchar(c) (asciichar(c)&&(class_char[c]&(C_PUNCT))) 50 #define spacechar(c) (asciichar(c)&&(class_char[c]&(C_BLANK|C_SPACE|C_WHITE))) 51 #define upperchar(c) (asciichar(c)&&(class_char[c]&(C_UPPER))) 52 #define whitechar(c) (asciichar(c)&&(class_char[c]&(C_BLANK|C_WHITE))) 53 #define octalchar(c) (asciichar(c)&&(class_char[c]&(C_OCTAL))) 54 #define graphchar(c) (asciichar(c)&&(class_char[c]&\ 55 (C_UPPER|C_LOWER|C_DIGIT|C_OCTAL|C_PUNCT))) 56 #define printchar(c) ((c)==' ' || asciichar(c)&&(class_char[c]&\ 57 (C_UPPER|C_LOWER|C_DIGIT|C_OCTAL|C_PUNCT))) 58 59 #define upperconv(c) (lowerchar(c) ? (c)-'a'+'A' : (c)) 60 #define lowerconv(c) (upperchar(c) ? (c)-'A'+'a' : (c))