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))
61