Annotation of /trunk/mkinitrd-magellan/klibc/usr/include/ctype.h
Parent Directory | Revision Log
Revision 815 -
(hide annotations)
(download)
Fri Apr 24 18:32:46 2009 UTC (15 years ago) by niro
File MIME type: text/plain
File size: 3183 byte(s)
Fri Apr 24 18:32:46 2009 UTC (15 years ago) by niro
File MIME type: text/plain
File size: 3183 byte(s)
-updated to klibc-1.5.15
1 | niro | 532 | /* |
2 | * ctype.h | ||
3 | * | ||
4 | * This assumes ISO 8859-1, being a reasonable superset of ASCII. | ||
5 | */ | ||
6 | |||
7 | #ifndef _CTYPE_H | ||
8 | #define _CTYPE_H | ||
9 | |||
10 | #include <klibc/extern.h> | ||
11 | niro | 815 | #include <klibc/compiler.h> |
12 | niro | 532 | |
13 | /* | ||
14 | * This relies on the following definitions: | ||
15 | * | ||
16 | * cntrl = !print | ||
17 | * alpha = upper|lower | ||
18 | * graph = punct|alpha|digit | ||
19 | * blank = '\t' || ' ' (per POSIX requirement) | ||
20 | */ | ||
21 | enum { | ||
22 | __ctype_upper = (1 << 0), | ||
23 | __ctype_lower = (1 << 1), | ||
24 | __ctype_digit = (1 << 2), | ||
25 | __ctype_xdigit = (1 << 3), | ||
26 | __ctype_space = (1 << 4), | ||
27 | __ctype_print = (1 << 5), | ||
28 | __ctype_punct = (1 << 6), | ||
29 | __ctype_cntrl = (1 << 7), | ||
30 | }; | ||
31 | |||
32 | niro | 815 | __extern int isalnum(int); |
33 | __extern int isalpha(int); | ||
34 | __extern int isascii(int); | ||
35 | __extern int isblank(int); | ||
36 | __extern int iscntrl(int); | ||
37 | __extern int isdigit(int); | ||
38 | __extern int isgraph(int); | ||
39 | __extern int islower(int); | ||
40 | __extern int isprint(int); | ||
41 | __extern int ispunct(int); | ||
42 | __extern int isspace(int); | ||
43 | __extern int isupper(int); | ||
44 | __extern int isxdigit(int); | ||
45 | __extern int toupper(int); | ||
46 | __extern int tolower(int); | ||
47 | |||
48 | niro | 532 | extern const unsigned char __ctypes[]; |
49 | |||
50 | niro | 815 | __must_inline int __ctype_isalnum(int __c) |
51 | niro | 532 | { |
52 | return __ctypes[__c + 1] & | ||
53 | (__ctype_upper | __ctype_lower | __ctype_digit); | ||
54 | } | ||
55 | |||
56 | niro | 815 | __must_inline int __ctype_isalpha(int __c) |
57 | niro | 532 | { |
58 | return __ctypes[__c + 1] & (__ctype_upper | __ctype_lower); | ||
59 | } | ||
60 | |||
61 | niro | 815 | __must_inline int __ctype_isascii(int __c) |
62 | niro | 532 | { |
63 | return !(__c & ~0x7f); | ||
64 | } | ||
65 | |||
66 | niro | 815 | __must_inline int __ctype_isblank(int __c) |
67 | niro | 532 | { |
68 | return (__c == '\t') || (__c == ' '); | ||
69 | } | ||
70 | |||
71 | niro | 815 | __must_inline int __ctype_iscntrl(int __c) |
72 | niro | 532 | { |
73 | return __ctypes[__c + 1] & __ctype_cntrl; | ||
74 | } | ||
75 | |||
76 | niro | 815 | __must_inline int __ctype_isdigit(int __c) |
77 | niro | 532 | { |
78 | return ((unsigned)__c - '0') <= 9; | ||
79 | } | ||
80 | |||
81 | niro | 815 | __must_inline int __ctype_isgraph(int __c) |
82 | niro | 532 | { |
83 | return __ctypes[__c + 1] & | ||
84 | (__ctype_upper | __ctype_lower | __ctype_digit | __ctype_punct); | ||
85 | } | ||
86 | |||
87 | niro | 815 | __must_inline int __ctype_islower(int __c) |
88 | niro | 532 | { |
89 | return __ctypes[__c + 1] & __ctype_lower; | ||
90 | } | ||
91 | |||
92 | niro | 815 | __must_inline int __ctype_isprint(int __c) |
93 | niro | 532 | { |
94 | return __ctypes[__c + 1] & __ctype_print; | ||
95 | } | ||
96 | |||
97 | niro | 815 | __must_inline int __ctype_ispunct(int __c) |
98 | niro | 532 | { |
99 | return __ctypes[__c + 1] & __ctype_punct; | ||
100 | } | ||
101 | |||
102 | niro | 815 | __must_inline int __ctype_isspace(int __c) |
103 | niro | 532 | { |
104 | return __ctypes[__c + 1] & __ctype_space; | ||
105 | } | ||
106 | |||
107 | niro | 815 | __must_inline int __ctype_isupper(int __c) |
108 | niro | 532 | { |
109 | return __ctypes[__c + 1] & __ctype_upper; | ||
110 | } | ||
111 | |||
112 | niro | 815 | __must_inline int __ctype_isxdigit(int __c) |
113 | niro | 532 | { |
114 | return __ctypes[__c + 1] & __ctype_xdigit; | ||
115 | } | ||
116 | |||
117 | /* Note: this is decimal, not hex, to avoid accidental promotion to unsigned */ | ||
118 | #define _toupper(__c) ((__c) & ~32) | ||
119 | #define _tolower(__c) ((__c) | 32) | ||
120 | |||
121 | niro | 815 | __must_inline int __ctype_toupper(int __c) |
122 | niro | 532 | { |
123 | return __ctype_islower(__c) ? _toupper(__c) : __c; | ||
124 | } | ||
125 | |||
126 | niro | 815 | __must_inline int __ctype_tolower(int __c) |
127 | niro | 532 | { |
128 | return __ctype_isupper(__c) ? _tolower(__c) : __c; | ||
129 | } | ||
130 | |||
131 | #ifdef __CTYPE_NO_INLINE | ||
132 | # define __CTYPEFUNC(X) \ | ||
133 | __extern int X(int); | ||
134 | #else | ||
135 | #define __CTYPEFUNC(X) \ | ||
136 | __extern inline int X(int __c) \ | ||
137 | { \ | ||
138 | return __ctype_##X(__c); \ | ||
139 | } | ||
140 | #endif | ||
141 | |||
142 | __CTYPEFUNC(isalnum) | ||
143 | niro | 815 | __CTYPEFUNC(isalpha) |
144 | __CTYPEFUNC(isascii) | ||
145 | __CTYPEFUNC(isblank) | ||
146 | __CTYPEFUNC(iscntrl) | ||
147 | __CTYPEFUNC(isdigit) | ||
148 | __CTYPEFUNC(isgraph) | ||
149 | __CTYPEFUNC(islower) | ||
150 | __CTYPEFUNC(isprint) | ||
151 | __CTYPEFUNC(ispunct) | ||
152 | __CTYPEFUNC(isspace) | ||
153 | __CTYPEFUNC(isupper) | ||
154 | __CTYPEFUNC(isxdigit) | ||
155 | __CTYPEFUNC(toupper) | ||
156 | __CTYPEFUNC(tolower) | ||
157 | niro | 532 | #endif /* _CTYPE_H */ |