OSDN Git Service

Add a new *scanf implementation, includeing the *wscanf functions.
[uclinux-h8/uClibc.git] / libc / misc / ctype / ctype.c
1 /*  Copyright (C) 2003     Manuel Novoa III
2  *
3  *  This library is free software; you can redistribute it and/or
4  *  modify it under the terms of the GNU Library General Public
5  *  License as published by the Free Software Foundation; either
6  *  version 2 of the License, or (at your option) any later version.
7  *
8  *  This library is distributed in the hope that it will be useful,
9  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  *  Library General Public License for more details.
12  *
13  *  You should have received a copy of the GNU Library General Public
14  *  License along with this library; if not, write to the Free
15  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16  */
17
18 /*  ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!
19  *
20  *  Besides uClibc, I'm using this code in my libc for elks, which is
21  *  a 16-bit environment with a fairly limited compiler.  It would make
22  *  things much easier for me if this file isn't modified unnecessarily.
23  *  In particular, please put any new or replacement functions somewhere
24  *  else, and modify the makefile to use your version instead.
25  *  Thanks.  Manuel
26  *
27  *  ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION! */
28
29 #define _GNU_SOURCE
30 #define __NO_CTYPE
31
32 #include <ctype.h>
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <limits.h>
36 #include <stdint.h>
37 #include <assert.h>
38 #include <locale.h>
39
40 #ifdef __UCLIBC_HAS_XLOCALE__
41 #include <xlocale.h>
42 #endif /* __UCLIBC_HAS_XLOCALE__ */
43
44 /**********************************************************************/
45
46 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
47
48 #if EOF >= CHAR_MIN
49 #define CTYPE_DOMAIN_CHECK(C) \
50         (((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN))
51 #else
52 #define CTYPE_DOMAIN_CHECK(C) \
53         ((((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN)) || ((C) == EOF))
54 #endif
55
56 #else  /* __UCLIBC_HAS_CTYPE_SIGNED__ */
57
58 #if EOF == -1
59 #define CTYPE_DOMAIN_CHECK(C) \
60         (((unsigned int)((C) - EOF)) <= (UCHAR_MAX - EOF))
61 #else
62 #define CTYPE_DOMAIN_CHECK(C) \
63         ((((unsigned int)(C)) <= UCHAR_MAX) || ((C) == EOF))
64 #endif
65
66 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__ */
67
68 /**********************************************************************/
69 #ifdef __UCLIBC_MJN3_ONLY__
70 #ifdef L_isspace
71 /* emit only once */
72 #warning CONSIDER: Should we assert when debugging and __UCLIBC_HAS_CTYPE_CHECKED?
73 #warning TODO: Fix asserts in to{upper|lower}{_l}.
74 #warning TODO: Optimize the isx*() funcs.
75 #endif
76 #endif /* __UCLIBC_MJN3_ONLY__ */
77
78 #undef CTYPE_NAME
79 #undef ISCTYPE
80 #undef CTYPE_ALIAS
81 #ifdef __UCLIBC_DO_XLOCALE
82 #define CTYPE_NAME(X)  __is ## X ## _l
83 #define ISCTYPE(C,F)   __isctype_l( C, F, locale_arg)
84 #define CTYPE_ALIAS(NAME)    weak_alias( __is ## NAME ## _l , is ## NAME ## _l)
85 #else
86 #define CTYPE_NAME(X)  is ## X
87 #define ISCTYPE(C,F)   __isctype( C, F )
88 #define CTYPE_ALIAS(NAME)
89 #endif
90 #undef PASTE2
91 #define PASTE2(X,Y)    X ## Y
92
93
94 #undef CTYPE_BODY
95
96 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
97 /* Make sure assert is active for to*() funcs below. */
98 #undef NDEBUG
99 #include <assert.h>
100
101 extern void __isctype_assert(int c, int mask) __attribute__ ((__noreturn__));
102
103 #define CTYPE_BODY(NAME,C,MASK) \
104         if (CTYPE_DOMAIN_CHECK(C)) { \
105                 return ISCTYPE(C, MASK); \
106         } \
107         __isctype_assert(C, MASK);
108
109 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
110
111 #define CTYPE_BODY(NAME,C,MASK) \
112         return CTYPE_DOMAIN_CHECK(C) \
113                 ? ISCTYPE(C, MASK) \
114                 : 0;
115
116 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
117
118 #define CTYPE_BODY(NAME,C,MASK) \
119         return ISCTYPE(C, MASK);
120
121
122 #else  /* No checking done. */
123
124 #error Unknown type of ctype checking!
125
126 #endif
127
128
129
130 #define IS_FUNC_BODY(NAME) \
131 int CTYPE_NAME(NAME) (int c  __LOCALE_PARAM ) \
132 { \
133         CTYPE_BODY(NAME,c,PASTE2(_IS,NAME)) \
134 } \
135 CTYPE_ALIAS(NAME)
136
137
138 /**********************************************************************/
139 #ifdef L___ctype_assert
140 #ifdef __UCLIBC_HAS_CTYPE_ENFORCED__
141
142 extern const char *__progname;
143
144 void __isctype_assert(int c, int mask)
145 {
146         fprintf(stderr, "%s: __is*{_l}(%d,%#x {locale})\n", __progname, c, mask);
147         abort();
148 }
149
150 #endif
151 #endif
152 /**********************************************************************/
153 #if defined(L_isalnum) || defined(L_isalnum_l)
154
155 IS_FUNC_BODY(alnum);
156
157 #endif
158 /**********************************************************************/
159 #if defined(L_isalpha) || defined(L_isalpha_l)
160
161 IS_FUNC_BODY(alpha);
162
163 #endif
164 /**********************************************************************/
165 #if defined(L_isblank) || defined(L_isblank_l)
166
167 IS_FUNC_BODY(blank);
168
169 #endif
170 /**********************************************************************/
171 #if defined(L_iscntrl) || defined(L_iscntrl_l)
172
173 IS_FUNC_BODY(cntrl);
174
175 #endif
176 /**********************************************************************/
177 #if defined(L_isdigit) || defined(L_isdigit_l)
178
179 /* The standards require EOF < 0. */
180 #if EOF >= CHAR_MIN
181 #define __isdigit_char_or_EOF(C)   __isdigit_char((C))
182 #else
183 #define __isdigit_char_or_EOF(C)   __isdigit_int((C))
184 #endif
185
186 int CTYPE_NAME(digit) (int C   __LOCALE_PARAM)
187 {
188 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
189         if (CTYPE_DOMAIN_CHECK(C)) {
190                 return __isdigit_char_or_EOF(C); /* C is (unsigned) char or EOF. */
191         }
192         __isctype_assert(C, _ISdigit);
193 #else
194         return __isdigit_int(C);        /* C could be invalid. */
195 #endif
196 }
197
198 CTYPE_ALIAS(digit)
199
200 #endif
201 /**********************************************************************/
202 #if defined(L_isgraph) || defined(L_isgraph_l)
203
204 IS_FUNC_BODY(graph);
205
206 #endif
207 /**********************************************************************/
208 #if defined(L_islower) || defined(L_islower_l)
209
210 IS_FUNC_BODY(lower);
211
212 #endif
213 /**********************************************************************/
214 #if defined(L_isprint) || defined(L_isprint_l)
215
216 IS_FUNC_BODY(print);
217
218 #endif
219 /**********************************************************************/
220 #if defined(L_ispunct) || defined(L_ispunct_l)
221
222 IS_FUNC_BODY(punct);
223
224 #endif
225 /**********************************************************************/
226 #if defined(L_isspace) || defined(L_isspace_l)
227
228 IS_FUNC_BODY(space);
229
230 #endif
231 /**********************************************************************/
232 #if defined(L_isupper) || defined(L_isupper_l)
233
234 IS_FUNC_BODY(upper);
235
236 #endif
237 /**********************************************************************/
238 #if defined(L_isxdigit) || defined(L_isxdigit_l)
239
240 IS_FUNC_BODY(xdigit);
241
242 #endif
243 /**********************************************************************/
244 #ifdef L_tolower
245
246 int tolower(int c)
247 {
248 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
249         assert(CTYPE_DOMAIN_CHECK(c));
250 #endif
251         return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOLOWER)[c] : c;
252 }
253
254 #endif
255 /**********************************************************************/
256 #ifdef L_tolower_l
257
258 #undef tolower_l
259
260 int tolower_l(int c, __locale_t l)
261 {
262 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
263         assert(CTYPE_DOMAIN_CHECK(c));
264 #endif
265         return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_tolower[c] : c;
266 }
267
268 #endif
269 /**********************************************************************/
270 #ifdef L_toupper
271
272 int toupper(int c)
273 {
274 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
275         assert(CTYPE_DOMAIN_CHECK(c));
276 #endif
277         return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOUPPER)[c] : c;
278 }
279
280 #endif
281 /**********************************************************************/
282 #ifdef L_toupper_l
283
284 #undef toupper_l
285
286 int toupper_l(int c, __locale_t l)
287 {
288 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
289         assert(CTYPE_DOMAIN_CHECK(c));
290 #endif
291         return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_toupper[c] : c;
292 }
293
294 #endif
295 /**********************************************************************/
296 #if defined(L_isascii) || defined(L_isascii_l)
297
298 int __XL(isascii)(int c)
299 {
300         return __isascii(c);            /* locale-independent */
301 }
302
303 #endif
304 /**********************************************************************/
305 #if defined(L_toascii) || defined(L_toascii_l)
306
307 int __XL(toascii)(int c)
308 {
309         return __toascii(c);            /* locale-independent */
310 }
311
312 #endif
313 /**********************************************************************/
314 /* old uClibc extensions */
315 /**********************************************************************/
316 #ifdef L_isxlower
317
318 int isxlower(int C)
319 {
320 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
321         assert(CTYPE_DOMAIN_CHECK(C));
322         return (__isctype(C, (_ISxdigit|_ISupper)) == _ISxdigit);
323 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
324         return CTYPE_DOMAIN_CHECK(C)
325                 ? (__isctype(C, (_ISxdigit|_ISupper)) == _ISxdigit)
326                 : 0;
327 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
328         return (__isctype(C, (_ISxdigit|_ISupper)) == _ISxdigit);
329 #else  /* No checking done. */
330 #error Unknown type of ctype checking!
331 #endif
332 }
333
334 #endif
335 /**********************************************************************/
336 #ifdef L_isxupper
337
338 int isxupper(int C)
339 {
340 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
341         assert(CTYPE_DOMAIN_CHECK(C));
342         return (__isctype(C, (_ISxdigit|_ISlower)) == _ISxdigit);
343 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
344         return CTYPE_DOMAIN_CHECK(C)
345                 ? (__isctype(C, (_ISxdigit|_ISlower)) == _ISxdigit)
346                 : 0;
347 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
348         return (__isctype(C, (_ISxdigit|_ISlower)) == _ISxdigit);
349 #else  /* No checking done. */
350 #error Unknown type of ctype checking!
351 #endif
352 }
353
354 #endif
355 /**********************************************************************/
356 /* glibc extensions */
357 /**********************************************************************/
358 #ifdef L_isctype
359
360 int isctype(int c, int mask)
361 {
362         CTYPE_BODY(NAME,c,mask)
363 }
364
365 #endif
366 /**********************************************************************/
367 #if L___ctype_b_loc
368
369 #ifdef __UCLIBC_HAS_XLOCALE__
370
371 const uint16_t **__ctype_b_loc(void)
372 {
373         return &(__UCLIBC_CURLOCALE_DATA).__ctype_b;
374 }
375
376 #endif
377
378 #endif
379 /**********************************************************************/
380 #if L___ctype_tolower_loc
381
382 #ifdef __UCLIBC_HAS_XLOCALE__
383
384 const __ctype_touplow_t **__ctype_tolower_loc(void)
385 {
386         return &(__UCLIBC_CURLOCALE_DATA).__ctype_tolower;
387 }
388
389 #endif
390
391 #endif
392 /**********************************************************************/
393 #if L___ctype_toupper_loc
394
395 #ifdef __UCLIBC_HAS_XLOCALE__
396
397 const __ctype_touplow_t **__ctype_toupper_loc(void)
398 {
399         return &(__UCLIBC_CURLOCALE_DATA).__ctype_toupper;
400 }
401
402 #endif
403
404 #endif
405 /**********************************************************************/
406 #ifdef L___C_ctype_b
407
408 const uint16_t __C_ctype_b_data[] = {
409 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
410         /* -128  M-^@ */ 0,
411         /* -127  M-^A */ 0,
412         /* -126  M-^B */ 0,
413         /* -125  M-^C */ 0,
414         /* -124  M-^D */ 0,
415         /* -123  M-^E */ 0,
416         /* -122  M-^F */ 0,
417         /* -121  M-^G */ 0,
418         /* -120  M-^H */ 0,
419         /* -119  M-^I */ 0,
420         /* -118  M-^J */ 0,
421         /* -117  M-^K */ 0,
422         /* -116  M-^L */ 0,
423         /* -115  M-^M */ 0,
424         /* -114  M-^N */ 0,
425         /* -113  M-^O */ 0,
426         /* -112  M-^P */ 0,
427         /* -111  M-^Q */ 0,
428         /* -110  M-^R */ 0,
429         /* -109  M-^S */ 0,
430         /* -108  M-^T */ 0,
431         /* -107  M-^U */ 0,
432         /* -106  M-^V */ 0,
433         /* -105  M-^W */ 0,
434         /* -104  M-^X */ 0,
435         /* -103  M-^Y */ 0,
436         /* -102  M-^Z */ 0,
437         /* -101  M-^[ */ 0,
438         /* -100  M-^\ */ 0,
439         /*  -99  M-^] */ 0,
440         /*  -98  M-^^ */ 0,
441         /*  -97  M-^_ */ 0,
442         /*  -96  M-   */ 0,
443         /*  -95  M-!  */ 0,
444         /*  -94  M-"  */ 0,
445         /*  -93  M-#  */ 0,
446         /*  -92  M-$  */ 0,
447         /*  -91  M-%  */ 0,
448         /*  -90  M-&  */ 0,
449         /*  -89  M-'  */ 0,
450         /*  -88  M-(  */ 0,
451         /*  -87  M-)  */ 0,
452         /*  -86  M-*  */ 0,
453         /*  -85  M-+  */ 0,
454         /*  -84  M-,  */ 0,
455         /*  -83  M--  */ 0,
456         /*  -82  M-.  */ 0,
457         /*  -81  M-/  */ 0,
458         /*  -80  M-0  */ 0,
459         /*  -79  M-1  */ 0,
460         /*  -78  M-2  */ 0,
461         /*  -77  M-3  */ 0,
462         /*  -76  M-4  */ 0,
463         /*  -75  M-5  */ 0,
464         /*  -74  M-6  */ 0,
465         /*  -73  M-7  */ 0,
466         /*  -72  M-8  */ 0,
467         /*  -71  M-9  */ 0,
468         /*  -70  M-:  */ 0,
469         /*  -69  M-;  */ 0,
470         /*  -68  M-<  */ 0,
471         /*  -67  M-=  */ 0,
472         /*  -66  M->  */ 0,
473         /*  -65  M-?  */ 0,
474         /*  -64  M-@  */ 0,
475         /*  -63  M-A  */ 0,
476         /*  -62  M-B  */ 0,
477         /*  -61  M-C  */ 0,
478         /*  -60  M-D  */ 0,
479         /*  -59  M-E  */ 0,
480         /*  -58  M-F  */ 0,
481         /*  -57  M-G  */ 0,
482         /*  -56  M-H  */ 0,
483         /*  -55  M-I  */ 0,
484         /*  -54  M-J  */ 0,
485         /*  -53  M-K  */ 0,
486         /*  -52  M-L  */ 0,
487         /*  -51  M-M  */ 0,
488         /*  -50  M-N  */ 0,
489         /*  -49  M-O  */ 0,
490         /*  -48  M-P  */ 0,
491         /*  -47  M-Q  */ 0,
492         /*  -46  M-R  */ 0,
493         /*  -45  M-S  */ 0,
494         /*  -44  M-T  */ 0,
495         /*  -43  M-U  */ 0,
496         /*  -42  M-V  */ 0,
497         /*  -41  M-W  */ 0,
498         /*  -40  M-X  */ 0,
499         /*  -39  M-Y  */ 0,
500         /*  -38  M-Z  */ 0,
501         /*  -37  M-[  */ 0,
502         /*  -36  M-\  */ 0,
503         /*  -35  M-]  */ 0,
504         /*  -34  M-^  */ 0,
505         /*  -33  M-_  */ 0,
506         /*  -32  M-`  */ 0,
507         /*  -31  M-a  */ 0,
508         /*  -30  M-b  */ 0,
509         /*  -29  M-c  */ 0,
510         /*  -28  M-d  */ 0,
511         /*  -27  M-e  */ 0,
512         /*  -26  M-f  */ 0,
513         /*  -25  M-g  */ 0,
514         /*  -24  M-h  */ 0,
515         /*  -23  M-i  */ 0,
516         /*  -22  M-j  */ 0,
517         /*  -21  M-k  */ 0,
518         /*  -20  M-l  */ 0,
519         /*  -19  M-m  */ 0,
520         /*  -18  M-n  */ 0,
521         /*  -17  M-o  */ 0,
522         /*  -16  M-p  */ 0,
523         /*  -15  M-q  */ 0,
524         /*  -14  M-r  */ 0,
525         /*  -13  M-s  */ 0,
526         /*  -12  M-t  */ 0,
527         /*  -11  M-u  */ 0,
528         /*  -10  M-v  */ 0,
529         /*   -9  M-w  */ 0,
530         /*   -8  M-x  */ 0,
531         /*   -7  M-y  */ 0,
532         /*   -6  M-z  */ 0,
533         /*   -5  M-{  */ 0,
534         /*   -4  M-|  */ 0,
535         /*   -3  M-}  */ 0,
536         /*   -2  M-~  */ 0,
537 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/ 
538         /*   -1  M-^? */ 0,
539         /*    0  ^@   */ _IScntrl,
540         /*    1  ^A   */ _IScntrl,
541         /*    2  ^B   */ _IScntrl,
542         /*    3  ^C   */ _IScntrl,
543         /*    4  ^D   */ _IScntrl,
544         /*    5  ^E   */ _IScntrl,
545         /*    6  ^F   */ _IScntrl,
546         /*    7  ^G   */ _IScntrl,
547         /*    8  ^H   */ _IScntrl,
548         /*    9  ^I   */ _ISspace|_ISblank|_IScntrl,
549         /*   10  ^J   */ _ISspace|_IScntrl,
550         /*   11  ^K   */ _ISspace|_IScntrl,
551         /*   12  ^L   */ _ISspace|_IScntrl,
552         /*   13  ^M   */ _ISspace|_IScntrl,
553         /*   14  ^N   */ _IScntrl,
554         /*   15  ^O   */ _IScntrl,
555         /*   16  ^P   */ _IScntrl,
556         /*   17  ^Q   */ _IScntrl,
557         /*   18  ^R   */ _IScntrl,
558         /*   19  ^S   */ _IScntrl,
559         /*   20  ^T   */ _IScntrl,
560         /*   21  ^U   */ _IScntrl,
561         /*   22  ^V   */ _IScntrl,
562         /*   23  ^W   */ _IScntrl,
563         /*   24  ^X   */ _IScntrl,
564         /*   25  ^Y   */ _IScntrl,
565         /*   26  ^Z   */ _IScntrl,
566         /*   27  ^[   */ _IScntrl,
567         /*   28  ^\   */ _IScntrl,
568         /*   29  ^]   */ _IScntrl,
569         /*   30  ^^   */ _IScntrl,
570         /*   31  ^_   */ _IScntrl,
571         /*   32       */ _ISspace|_ISprint|_ISblank,
572         /*   33  !    */ _ISprint|_ISgraph|_ISpunct,
573         /*   34  "    */ _ISprint|_ISgraph|_ISpunct,
574         /*   35  #    */ _ISprint|_ISgraph|_ISpunct,
575         /*   36  $    */ _ISprint|_ISgraph|_ISpunct,
576         /*   37  %    */ _ISprint|_ISgraph|_ISpunct,
577         /*   38  &    */ _ISprint|_ISgraph|_ISpunct,
578         /*   39  '    */ _ISprint|_ISgraph|_ISpunct,
579         /*   40  (    */ _ISprint|_ISgraph|_ISpunct,
580         /*   41  )    */ _ISprint|_ISgraph|_ISpunct,
581         /*   42  *    */ _ISprint|_ISgraph|_ISpunct,
582         /*   43  +    */ _ISprint|_ISgraph|_ISpunct,
583         /*   44  ,    */ _ISprint|_ISgraph|_ISpunct,
584         /*   45  -    */ _ISprint|_ISgraph|_ISpunct,
585         /*   46  .    */ _ISprint|_ISgraph|_ISpunct,
586         /*   47  /    */ _ISprint|_ISgraph|_ISpunct,
587         /*   48  0    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
588         /*   49  1    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
589         /*   50  2    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
590         /*   51  3    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
591         /*   52  4    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
592         /*   53  5    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
593         /*   54  6    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
594         /*   55  7    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
595         /*   56  8    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
596         /*   57  9    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
597         /*   58  :    */ _ISprint|_ISgraph|_ISpunct,
598         /*   59  ;    */ _ISprint|_ISgraph|_ISpunct,
599         /*   60  <    */ _ISprint|_ISgraph|_ISpunct,
600         /*   61  =    */ _ISprint|_ISgraph|_ISpunct,
601         /*   62  >    */ _ISprint|_ISgraph|_ISpunct,
602         /*   63  ?    */ _ISprint|_ISgraph|_ISpunct,
603         /*   64  @    */ _ISprint|_ISgraph|_ISpunct,
604         /*   65  A    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
605         /*   66  B    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
606         /*   67  C    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
607         /*   68  D    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
608         /*   69  E    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
609         /*   70  F    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
610         /*   71  G    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
611         /*   72  H    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
612         /*   73  I    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
613         /*   74  J    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
614         /*   75  K    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
615         /*   76  L    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
616         /*   77  M    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
617         /*   78  N    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
618         /*   79  O    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
619         /*   80  P    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
620         /*   81  Q    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
621         /*   82  R    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
622         /*   83  S    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
623         /*   84  T    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
624         /*   85  U    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
625         /*   86  V    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
626         /*   87  W    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
627         /*   88  X    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
628         /*   89  Y    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
629         /*   90  Z    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
630         /*   91  [    */ _ISprint|_ISgraph|_ISpunct,
631         /*   92  \    */ _ISprint|_ISgraph|_ISpunct,
632         /*   93  ]    */ _ISprint|_ISgraph|_ISpunct,
633         /*   94  ^    */ _ISprint|_ISgraph|_ISpunct,
634         /*   95  _    */ _ISprint|_ISgraph|_ISpunct,
635         /*   96  `    */ _ISprint|_ISgraph|_ISpunct,
636         /*   97  a    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
637         /*   98  b    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
638         /*   99  c    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
639         /*  100  d    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
640         /*  101  e    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
641         /*  102  f    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
642         /*  103  g    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
643         /*  104  h    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
644         /*  105  i    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
645         /*  106  j    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
646         /*  107  k    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
647         /*  108  l    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
648         /*  109  m    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
649         /*  110  n    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
650         /*  111  o    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
651         /*  112  p    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
652         /*  113  q    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
653         /*  114  r    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
654         /*  115  s    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
655         /*  116  t    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
656         /*  117  u    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
657         /*  118  v    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
658         /*  119  w    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
659         /*  120  x    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
660         /*  121  y    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
661         /*  122  z    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
662         /*  123  {    */ _ISprint|_ISgraph|_ISpunct,
663         /*  124  |    */ _ISprint|_ISgraph|_ISpunct,
664         /*  125  }    */ _ISprint|_ISgraph|_ISpunct,
665         /*  126  ~    */ _ISprint|_ISgraph|_ISpunct,
666         /*  127  ^?   */ _IScntrl,
667         /*  128  M-^@ */ 0,
668         /*  129  M-^A */ 0,
669         /*  130  M-^B */ 0,
670         /*  131  M-^C */ 0,
671         /*  132  M-^D */ 0,
672         /*  133  M-^E */ 0,
673         /*  134  M-^F */ 0,
674         /*  135  M-^G */ 0,
675         /*  136  M-^H */ 0,
676         /*  137  M-^I */ 0,
677         /*  138  M-^J */ 0,
678         /*  139  M-^K */ 0,
679         /*  140  M-^L */ 0,
680         /*  141  M-^M */ 0,
681         /*  142  M-^N */ 0,
682         /*  143  M-^O */ 0,
683         /*  144  M-^P */ 0,
684         /*  145  M-^Q */ 0,
685         /*  146  M-^R */ 0,
686         /*  147  M-^S */ 0,
687         /*  148  M-^T */ 0,
688         /*  149  M-^U */ 0,
689         /*  150  M-^V */ 0,
690         /*  151  M-^W */ 0,
691         /*  152  M-^X */ 0,
692         /*  153  M-^Y */ 0,
693         /*  154  M-^Z */ 0,
694         /*  155  M-^[ */ 0,
695         /*  156  M-^\ */ 0,
696         /*  157  M-^] */ 0,
697         /*  158  M-^^ */ 0,
698         /*  159  M-^_ */ 0,
699         /*  160  M-   */ 0,
700         /*  161  M-!  */ 0,
701         /*  162  M-"  */ 0,
702         /*  163  M-#  */ 0,
703         /*  164  M-$  */ 0,
704         /*  165  M-%  */ 0,
705         /*  166  M-&  */ 0,
706         /*  167  M-'  */ 0,
707         /*  168  M-(  */ 0,
708         /*  169  M-)  */ 0,
709         /*  170  M-*  */ 0,
710         /*  171  M-+  */ 0,
711         /*  172  M-,  */ 0,
712         /*  173  M--  */ 0,
713         /*  174  M-.  */ 0,
714         /*  175  M-/  */ 0,
715         /*  176  M-0  */ 0,
716         /*  177  M-1  */ 0,
717         /*  178  M-2  */ 0,
718         /*  179  M-3  */ 0,
719         /*  180  M-4  */ 0,
720         /*  181  M-5  */ 0,
721         /*  182  M-6  */ 0,
722         /*  183  M-7  */ 0,
723         /*  184  M-8  */ 0,
724         /*  185  M-9  */ 0,
725         /*  186  M-:  */ 0,
726         /*  187  M-;  */ 0,
727         /*  188  M-<  */ 0,
728         /*  189  M-=  */ 0,
729         /*  190  M->  */ 0,
730         /*  191  M-?  */ 0,
731         /*  192  M-@  */ 0,
732         /*  193  M-A  */ 0,
733         /*  194  M-B  */ 0,
734         /*  195  M-C  */ 0,
735         /*  196  M-D  */ 0,
736         /*  197  M-E  */ 0,
737         /*  198  M-F  */ 0,
738         /*  199  M-G  */ 0,
739         /*  200  M-H  */ 0,
740         /*  201  M-I  */ 0,
741         /*  202  M-J  */ 0,
742         /*  203  M-K  */ 0,
743         /*  204  M-L  */ 0,
744         /*  205  M-M  */ 0,
745         /*  206  M-N  */ 0,
746         /*  207  M-O  */ 0,
747         /*  208  M-P  */ 0,
748         /*  209  M-Q  */ 0,
749         /*  210  M-R  */ 0,
750         /*  211  M-S  */ 0,
751         /*  212  M-T  */ 0,
752         /*  213  M-U  */ 0,
753         /*  214  M-V  */ 0,
754         /*  215  M-W  */ 0,
755         /*  216  M-X  */ 0,
756         /*  217  M-Y  */ 0,
757         /*  218  M-Z  */ 0,
758         /*  219  M-[  */ 0,
759         /*  220  M-\  */ 0,
760         /*  221  M-]  */ 0,
761         /*  222  M-^  */ 0,
762         /*  223  M-_  */ 0,
763         /*  224  M-`  */ 0,
764         /*  225  M-a  */ 0,
765         /*  226  M-b  */ 0,
766         /*  227  M-c  */ 0,
767         /*  228  M-d  */ 0,
768         /*  229  M-e  */ 0,
769         /*  230  M-f  */ 0,
770         /*  231  M-g  */ 0,
771         /*  232  M-h  */ 0,
772         /*  233  M-i  */ 0,
773         /*  234  M-j  */ 0,
774         /*  235  M-k  */ 0,
775         /*  236  M-l  */ 0,
776         /*  237  M-m  */ 0,
777         /*  238  M-n  */ 0,
778         /*  239  M-o  */ 0,
779         /*  240  M-p  */ 0,
780         /*  241  M-q  */ 0,
781         /*  242  M-r  */ 0,
782         /*  243  M-s  */ 0,
783         /*  244  M-t  */ 0,
784         /*  245  M-u  */ 0,
785         /*  246  M-v  */ 0,
786         /*  247  M-w  */ 0,
787         /*  248  M-x  */ 0,
788         /*  249  M-y  */ 0,
789         /*  250  M-z  */ 0,
790         /*  251  M-{  */ 0,
791         /*  252  M-|  */ 0,
792         /*  253  M-}  */ 0,
793         /*  254  M-~  */ 0,
794         /*  255  M-^? */ 0
795 };
796
797 const uint16_t *__C_ctype_b = __C_ctype_b_data + 1
798 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
799         + 127
800 #endif
801         ;
802
803 #ifndef __UCLIBC_HAS_XLOCALE__
804
805 const uint16_t *__ctype_b = __C_ctype_b_data + 1
806 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
807         + 127
808 #endif
809         ;
810
811 #endif
812
813 #endif
814 /**********************************************************************/
815 #ifdef L___C_ctype_tolower
816
817 const __ctype_touplow_t __C_ctype_tolower_data[] = {
818 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
819         -128,         -127,         -126,         -125,
820         -124,         -123,         -122,         -121,
821         -120,         -119,         -118,         -117,
822         -116,         -115,         -114,         -113,
823         -112,         -111,         -110,         -109,
824         -108,         -107,         -106,         -105,
825         -104,         -103,         -102,         -101,
826         -100,          -99,          -98,          -97,
827          -96,          -95,          -94,          -93,
828          -92,          -91,          -90,          -89,
829          -88,          -87,          -86,          -85,
830          -84,          -83,          -82,          -81,
831          -80,          -79,          -78,          -77,
832          -76,          -75,          -74,          -73,
833          -72,          -71,          -70,          -69,
834          -68,          -67,          -66,          -65,
835          -64,          -63,          -62,          -61,
836          -60,          -59,          -58,          -57,
837          -56,          -55,          -54,          -53,
838          -52,          -51,          -50,          -49,
839          -48,          -47,          -46,          -45,
840          -44,          -43,          -42,          -41,
841          -40,          -39,          -38,          -37,
842          -36,          -35,          -34,          -33,
843          -32,          -31,          -30,          -29,
844          -28,          -27,          -26,          -25,
845          -24,          -23,          -22,          -21,
846          -20,          -19,          -18,          -17,
847          -16,          -15,          -14,          -13,
848          -12,          -11,          -10,           -9,
849           -8,           -7,           -6,           -5,
850           -4,           -3,           -2,           -1,
851 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/ 
852            0,            1,            2,            3,
853            4,            5,            6,            7,
854            8,            9,           10,           11,
855           12,           13,           14,           15,
856           16,           17,           18,           19,
857           20,           21,           22,           23,
858           24,           25,           26,           27,
859           28,           29,           30,           31,
860           32,           33,           34,           35,
861           36,           37,           38,           39,
862           40,           41,           42,           43,
863           44,           45,           46,           47,
864           48,           49,           50,           51,
865           52,           53,           54,           55,
866           56,           57,           58,           59,
867           60,           61,           62,           63,
868           64,           97 /* a */,   98 /* b */,   99 /* c */,
869          100 /* d */,  101 /* e */,  102 /* f */,  103 /* g */,
870          104 /* h */,  105 /* i */,  106 /* j */,  107 /* k */,
871          108 /* l */,  109 /* m */,  110 /* n */,  111 /* o */,
872          112 /* p */,  113 /* q */,  114 /* r */,  115 /* s */,
873          116 /* t */,  117 /* u */,  118 /* v */,  119 /* w */,
874          120 /* x */,  121 /* y */,  122 /* z */,   91,
875           92,           93,           94,           95,
876           96,           97,           98,           99,
877          100,          101,          102,          103,
878          104,          105,          106,          107,
879          108,          109,          110,          111,
880          112,          113,          114,          115,
881          116,          117,          118,          119,
882          120,          121,          122,          123,
883          124,          125,          126,          127,
884          128,          129,          130,          131,
885          132,          133,          134,          135,
886          136,          137,          138,          139,
887          140,          141,          142,          143,
888          144,          145,          146,          147,
889          148,          149,          150,          151,
890          152,          153,          154,          155,
891          156,          157,          158,          159,
892          160,          161,          162,          163,
893          164,          165,          166,          167,
894          168,          169,          170,          171,
895          172,          173,          174,          175,
896          176,          177,          178,          179,
897          180,          181,          182,          183,
898          184,          185,          186,          187,
899          188,          189,          190,          191,
900          192,          193,          194,          195,
901          196,          197,          198,          199,
902          200,          201,          202,          203,
903          204,          205,          206,          207,
904          208,          209,          210,          211,
905          212,          213,          214,          215,
906          216,          217,          218,          219,
907          220,          221,          222,          223,
908          224,          225,          226,          227,
909          228,          229,          230,          231,
910          232,          233,          234,          235,
911          236,          237,          238,          239,
912          240,          241,          242,          243,
913          244,          245,          246,          247,
914          248,          249,          250,          251,
915          252,          253,          254,          255
916 };
917
918 const __ctype_touplow_t *__C_ctype_tolower = __C_ctype_tolower_data
919 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
920         + 128
921 #endif
922         ;
923
924 #ifndef __UCLIBC_HAS_XLOCALE__
925
926 const __ctype_touplow_t *__ctype_tolower = __C_ctype_tolower_data
927 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
928         + 128
929 #endif
930         ;
931
932 #endif
933
934 #endif
935 /**********************************************************************/
936 #ifdef L___C_ctype_toupper
937
938 const __ctype_touplow_t __C_ctype_toupper_data[] = {
939 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
940         -128,         -127,         -126,         -125,
941         -124,         -123,         -122,         -121,
942         -120,         -119,         -118,         -117,
943         -116,         -115,         -114,         -113,
944         -112,         -111,         -110,         -109,
945         -108,         -107,         -106,         -105,
946         -104,         -103,         -102,         -101,
947         -100,          -99,          -98,          -97,
948          -96,          -95,          -94,          -93,
949          -92,          -91,          -90,          -89,
950          -88,          -87,          -86,          -85,
951          -84,          -83,          -82,          -81,
952          -80,          -79,          -78,          -77,
953          -76,          -75,          -74,          -73,
954          -72,          -71,          -70,          -69,
955          -68,          -67,          -66,          -65,
956          -64,          -63,          -62,          -61,
957          -60,          -59,          -58,          -57,
958          -56,          -55,          -54,          -53,
959          -52,          -51,          -50,          -49,
960          -48,          -47,          -46,          -45,
961          -44,          -43,          -42,          -41,
962          -40,          -39,          -38,          -37,
963          -36,          -35,          -34,          -33,
964          -32,          -31,          -30,          -29,
965          -28,          -27,          -26,          -25,
966          -24,          -23,          -22,          -21,
967          -20,          -19,          -18,          -17,
968          -16,          -15,          -14,          -13,
969          -12,          -11,          -10,           -9,
970           -8,           -7,           -6,           -5,
971           -4,           -3,           -2,           -1,
972 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/ 
973            0,            1,            2,            3,
974            4,            5,            6,            7,
975            8,            9,           10,           11,
976           12,           13,           14,           15,
977           16,           17,           18,           19,
978           20,           21,           22,           23,
979           24,           25,           26,           27,
980           28,           29,           30,           31,
981           32,           33,           34,           35,
982           36,           37,           38,           39,
983           40,           41,           42,           43,
984           44,           45,           46,           47,
985           48,           49,           50,           51,
986           52,           53,           54,           55,
987           56,           57,           58,           59,
988           60,           61,           62,           63,
989           64,           65,           66,           67,
990           68,           69,           70,           71,
991           72,           73,           74,           75,
992           76,           77,           78,           79,
993           80,           81,           82,           83,
994           84,           85,           86,           87,
995           88,           89,           90,           91,
996           92,           93,           94,           95,
997           96,           65 /* A */,   66 /* B */,   67 /* C */,
998           68 /* D */,   69 /* E */,   70 /* F */,   71 /* G */,
999           72 /* H */,   73 /* I */,   74 /* J */,   75 /* K */,
1000           76 /* L */,   77 /* M */,   78 /* N */,   79 /* O */,
1001           80 /* P */,   81 /* Q */,   82 /* R */,   83 /* S */,
1002           84 /* T */,   85 /* U */,   86 /* V */,   87 /* W */,
1003           88 /* X */,   89 /* Y */,   90 /* Z */,  123,
1004          124,          125,          126,          127,
1005          128,          129,          130,          131,
1006          132,          133,          134,          135,
1007          136,          137,          138,          139,
1008          140,          141,          142,          143,
1009          144,          145,          146,          147,
1010          148,          149,          150,          151,
1011          152,          153,          154,          155,
1012          156,          157,          158,          159,
1013          160,          161,          162,          163,
1014          164,          165,          166,          167,
1015          168,          169,          170,          171,
1016          172,          173,          174,          175,
1017          176,          177,          178,          179,
1018          180,          181,          182,          183,
1019          184,          185,          186,          187,
1020          188,          189,          190,          191,
1021          192,          193,          194,          195,
1022          196,          197,          198,          199,
1023          200,          201,          202,          203,
1024          204,          205,          206,          207,
1025          208,          209,          210,          211,
1026          212,          213,          214,          215,
1027          216,          217,          218,          219,
1028          220,          221,          222,          223,
1029          224,          225,          226,          227,
1030          228,          229,          230,          231,
1031          232,          233,          234,          235,
1032          236,          237,          238,          239,
1033          240,          241,          242,          243,
1034          244,          245,          246,          247,
1035          248,          249,          250,          251,
1036          252,          253,          254,          255
1037 };
1038
1039 const __ctype_touplow_t *__C_ctype_toupper = __C_ctype_toupper_data
1040 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
1041         + 128
1042 #endif
1043         ;
1044
1045 #ifndef __UCLIBC_HAS_XLOCALE__
1046
1047 const __ctype_touplow_t *__ctype_toupper = __C_ctype_toupper_data
1048 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
1049         + 128
1050 #endif
1051         ;
1052
1053 #endif
1054
1055 #endif
1056 /**********************************************************************/