OSDN Git Service

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