1 /* Copyright (C) 2003 Manuel Novoa III
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.
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.
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.
18 /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
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.
27 * ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! */
40 #ifdef __UCLIBC_HAS_XLOCALE__
42 #endif /* __UCLIBC_HAS_XLOCALE__ */
44 /**********************************************************************/
45 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
47 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
50 #define CTYPE_DOMAIN_CHECK(C) \
51 (((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN))
53 #define CTYPE_DOMAIN_CHECK(C) \
54 ((((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN)) || ((C) == EOF))
57 #else /* __UCLIBC_HAS_CTYPE_SIGNED__ */
60 #define CTYPE_DOMAIN_CHECK(C) \
61 (((unsigned int)((C) - EOF)) <= (UCHAR_MAX - EOF))
63 #define CTYPE_DOMAIN_CHECK(C) \
64 ((((unsigned int)(C)) <= UCHAR_MAX) || ((C) == EOF))
67 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__ */
69 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
70 /**********************************************************************/
71 #ifdef __UCLIBC_MJN3_ONLY__
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.
78 #endif /* __UCLIBC_MJN3_ONLY__ */
79 /**********************************************************************/
81 #define PASTE2(X,Y) X ## Y
83 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
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)
93 #define CTYPE_NAME(X) is ## X
94 #define ISCTYPE(C,F) __isctype( C, F )
95 #define CTYPE_ALIAS(NAME)
101 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
102 /* Make sure assert is active for to*() funcs below. */
106 extern void __isctype_assert(int c, int mask) __attribute__ ((__noreturn__));
108 #define CTYPE_BODY(NAME,C,MASK) \
109 if (CTYPE_DOMAIN_CHECK(C)) { \
110 return ISCTYPE(C, MASK); \
112 __isctype_assert(C, MASK);
114 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
116 #define CTYPE_BODY(NAME,C,MASK) \
117 return CTYPE_DOMAIN_CHECK(C) \
121 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
123 #define CTYPE_BODY(NAME,C,MASK) \
124 return ISCTYPE(C, MASK);
127 #else /* No checking done. */
129 #error Unknown type of ctype checking!
135 #define IS_FUNC_BODY(NAME) \
136 int CTYPE_NAME(NAME) (int c __LOCALE_PARAM ) \
138 CTYPE_BODY(NAME,c,PASTE2(_IS,NAME)) \
143 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
145 #define C_MACRO(X) PASTE2(__C_is,X)(c)
146 #define CTYPE_NAME(X) is ## X
148 #define IS_FUNC_BODY(NAME) \
149 int CTYPE_NAME(NAME) (int c) \
151 return C_MACRO(NAME); \
154 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
155 /**********************************************************************/
156 #ifdef L___ctype_assert
157 #ifdef __UCLIBC_HAS_CTYPE_ENFORCED__
159 extern const char *__progname;
161 void __isctype_assert(int c, int mask)
163 fprintf(stderr, "%s: __is*{_l}(%d,%#x {locale})\n", __progname, c, mask);
169 /**********************************************************************/
170 #if defined(L_isalnum) || defined(L_isalnum_l)
175 /**********************************************************************/
176 #if defined(L_isalpha) || defined(L_isalpha_l)
181 /**********************************************************************/
182 #if defined(L_isblank) || defined(L_isblank_l)
187 /**********************************************************************/
188 #if defined(L_iscntrl) || defined(L_iscntrl_l)
193 /**********************************************************************/
194 #if defined(L_isdigit) || defined(L_isdigit_l)
196 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
198 /* The standards require EOF < 0. */
200 #define __isdigit_char_or_EOF(C) __isdigit_char((C))
202 #define __isdigit_char_or_EOF(C) __isdigit_int((C))
205 int CTYPE_NAME(digit) (int C __LOCALE_PARAM)
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. */
211 __isctype_assert(C, _ISdigit);
213 return __isdigit_int(C); /* C could be invalid. */
219 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
223 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
226 /**********************************************************************/
227 #if defined(L_isgraph) || defined(L_isgraph_l)
232 /**********************************************************************/
233 #if defined(L_islower) || defined(L_islower_l)
238 /**********************************************************************/
239 #if defined(L_isprint) || defined(L_isprint_l)
244 /**********************************************************************/
245 #if defined(L_ispunct) || defined(L_ispunct_l)
250 /**********************************************************************/
251 #if defined(L_isspace) || defined(L_isspace_l)
256 /**********************************************************************/
257 #if defined(L_isupper) || defined(L_isupper_l)
262 /**********************************************************************/
263 #if defined(L_isxdigit) || defined(L_isxdigit_l)
265 IS_FUNC_BODY(xdigit);
268 /**********************************************************************/
271 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
273 int attribute_hidden __tolower(int c)
275 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
276 assert(CTYPE_DOMAIN_CHECK(c));
278 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOLOWER)[c] : c;
281 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
283 int attribute_hidden __tolower(int c)
285 return __C_tolower(c);
288 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
289 strong_alias(__tolower,tolower)
292 /**********************************************************************/
298 int __tolower_l(int c, __locale_t l)
300 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
301 assert(CTYPE_DOMAIN_CHECK(c));
303 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_tolower[c] : c;
306 weak_alias(__tolower_l, tolower_l)
309 /**********************************************************************/
312 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
314 int attribute_hidden __toupper(int c)
316 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
317 assert(CTYPE_DOMAIN_CHECK(c));
319 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOUPPER)[c] : c;
322 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
324 int attribute_hidden __toupper(int c)
326 return __C_toupper(c);
329 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
330 strong_alias(__toupper,toupper)
333 /**********************************************************************/
339 int __toupper_l(int c, __locale_t l)
341 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
342 assert(CTYPE_DOMAIN_CHECK(c));
344 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_toupper[c] : c;
347 weak_alias(__toupper_l, toupper_l)
350 /**********************************************************************/
351 #if defined(L_isascii) || defined(L_isascii_l)
353 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
355 int __XL(isascii)(int c)
357 return __isascii(c); /* locale-independent */
362 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
366 return __isascii(c); /* locale-independent */
369 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
372 /**********************************************************************/
373 #if defined(L_toascii) || defined(L_toascii_l)
375 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
377 int __XL(toascii)(int c)
379 return __toascii(c); /* locale-independent */
384 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
388 return __toascii(c); /* locale-independent */
391 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
394 /**********************************************************************/
395 /* glibc extensions */
396 /**********************************************************************/
399 int isctype(int c, int mask)
401 CTYPE_BODY(NAME,c,mask)
405 /**********************************************************************/
408 #ifdef __UCLIBC_HAS_XLOCALE__
410 const __ctype_mask_t **__ctype_b_loc(void)
412 return &(__UCLIBC_CURLOCALE_DATA).__ctype_b;
418 /**********************************************************************/
419 #if L___ctype_tolower_loc
421 #ifdef __UCLIBC_HAS_XLOCALE__
423 const __ctype_touplow_t **__ctype_tolower_loc(void)
425 return &(__UCLIBC_CURLOCALE_DATA).__ctype_tolower;
431 /**********************************************************************/
432 #if L___ctype_toupper_loc
434 #ifdef __UCLIBC_HAS_XLOCALE__
436 const __ctype_touplow_t **__ctype_toupper_loc(void)
438 return &(__UCLIBC_CURLOCALE_DATA).__ctype_toupper;
444 /**********************************************************************/
447 const __ctype_mask_t __C_ctype_b_data[] = {
448 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
576 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
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,
836 const __ctype_mask_t *__C_ctype_b = __C_ctype_b_data + __UCLIBC_CTYPE_B_TBL_OFFSET;
838 #ifndef __UCLIBC_HAS_XLOCALE__
840 const __ctype_mask_t *__ctype_b = __C_ctype_b_data + __UCLIBC_CTYPE_B_TBL_OFFSET;
845 /**********************************************************************/
846 #ifdef L___C_ctype_tolower
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,
882 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
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,
949 const __ctype_touplow_t *__C_ctype_tolower = __C_ctype_tolower_data
950 + __UCLIBC_CTYPE_TO_TBL_OFFSET;
952 #ifndef __UCLIBC_HAS_XLOCALE__
954 const __ctype_touplow_t *__ctype_tolower = __C_ctype_tolower_data
955 + __UCLIBC_CTYPE_TO_TBL_OFFSET;
960 /**********************************************************************/
961 #ifdef L___C_ctype_toupper
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,
997 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
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,
1064 const __ctype_touplow_t *__C_ctype_toupper = __C_ctype_toupper_data
1065 + __UCLIBC_CTYPE_TO_TBL_OFFSET;
1067 #ifndef __UCLIBC_HAS_XLOCALE__
1069 const __ctype_touplow_t *__ctype_toupper = __C_ctype_toupper_data
1070 + __UCLIBC_CTYPE_TO_TBL_OFFSET;
1075 /**********************************************************************/