| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115 | /*  Copyright (C) 2003     Manuel Novoa III * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public *  License along with this library; if not, write to the Free *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//*  ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION! * *  Besides uClibc, I'm using this code in my libc for elks, which is *  a 16-bit environment with a fairly limited compiler.  It would make *  things much easier for me if this file isn't modified unnecessarily. *  In particular, please put any new or replacement functions somewhere *  else, and modify the makefile to use your version instead. *  Thanks.  Manuel * *  ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION! */#define __NO_CTYPE#include <ctype.h>#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <stdint.h>#include <assert.h>#include <locale.h>#ifdef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_b_loc) */#elif defined __UCLIBC_HAS_CTYPE_TABLES__/* libc_hidden_proto(__ctype_b) */#endif#ifdef __UCLIBC_HAS_XLOCALE__#include <xlocale.h>#endif /* __UCLIBC_HAS_XLOCALE__ *//**********************************************************************/#ifdef __UCLIBC_HAS_CTYPE_TABLES__#ifdef __UCLIBC_HAS_CTYPE_SIGNED__#if EOF >= CHAR_MIN#define CTYPE_DOMAIN_CHECK(C) \	(((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN))#else#define CTYPE_DOMAIN_CHECK(C) \	((((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN)) || ((C) == EOF))#endif#else  /* __UCLIBC_HAS_CTYPE_SIGNED__ */#if EOF == -1#define CTYPE_DOMAIN_CHECK(C) \	(((unsigned int)((C) - EOF)) <= (UCHAR_MAX - EOF))#else#define CTYPE_DOMAIN_CHECK(C) \	((((unsigned int)(C)) <= UCHAR_MAX) || ((C) == EOF))#endif#endif /* __UCLIBC_HAS_CTYPE_SIGNED__ */#endif /* __UCLIBC_HAS_CTYPE_TABLES__ *//**********************************************************************/#ifdef __UCLIBC_MJN3_ONLY__#ifdef L_isspace/* emit only once */#warning CONSIDER: Should we assert when debugging and __UCLIBC_HAS_CTYPE_CHECKED?#warning TODO: Fix asserts in to{upper|lower}{_l}.#warning TODO: Optimize the isx*() funcs.#endif#endif /* __UCLIBC_MJN3_ONLY__ *//**********************************************************************/#undef PASTE2#define PASTE2(X,Y)    X ## Y#ifdef __UCLIBC_HAS_CTYPE_TABLES__#undef CTYPE_NAME#undef ISCTYPE#undef CTYPE_ALIAS#undef CTYPE_DEF#ifdef __UCLIBC_DO_XLOCALE#define CTYPE_NAME(X)  __is ## X ## _l#define ISCTYPE(C,F)   __isctype_l( C, F, locale_arg)#define CTYPE_ALIAS(NAME)   strong_alias( __is ## NAME ## _l , is ## NAME ## _l)#define CTYPE_DEF(NAME) libc_hidden_def(is ## NAME ## _l)#else#define CTYPE_NAME(X)  is ## X#define ISCTYPE(C,F)   __isctype( C, F )#define CTYPE_ALIAS(NAME)#define CTYPE_DEF(NAME) libc_hidden_def(is ## NAME)#endif#undef CTYPE_BODY#if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)/* Make sure assert is active for to*() funcs below. */#undef NDEBUG#include <assert.h>extern void __isctype_assert(int c, int mask) __attribute__ ((__noreturn__)) attribute_hidden;#define CTYPE_BODY(NAME,C,MASK) \	if (CTYPE_DOMAIN_CHECK(C)) { \		return ISCTYPE(C, MASK); \	} \	__isctype_assert(C, MASK);#elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)#define CTYPE_BODY(NAME,C,MASK) \	return CTYPE_DOMAIN_CHECK(C) \		? ISCTYPE(C, MASK) \		: 0;#elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)#define CTYPE_BODY(NAME,C,MASK) \	return ISCTYPE(C, MASK);#else  /* No checking done. */#error Unknown type of ctype checking!#endif#define IS_FUNC_BODY(NAME) \int CTYPE_NAME(NAME) (int c  __LOCALE_PARAM ); \int CTYPE_NAME(NAME) (int c  __LOCALE_PARAM ) \{ \	CTYPE_BODY(NAME,c,PASTE2(_IS,NAME)) \} \CTYPE_DEF(NAME) \CTYPE_ALIAS(NAME)#else  /* __UCLIBC_HAS_CTYPE_TABLES__ */#define C_MACRO(X)		PASTE2(__C_is,X)(c)#define CTYPE_NAME(X)  is ## X#define IS_FUNC_BODY(NAME) \int CTYPE_NAME(NAME) (int c) \{ \	return C_MACRO(NAME); \}#endif /* __UCLIBC_HAS_CTYPE_TABLES__ *//**********************************************************************/#ifdef L___ctype_assert#ifdef __UCLIBC_HAS_CTYPE_ENFORCED__/* libc_hidden_proto(fprintf) *//* libc_hidden_proto(abort) */attribute_hidden void __isctype_assert(int c, int mask){	fprintf(stderr,	"%s: __is*{_l}(%d,%#x {locale})\n", __uclibc_progname, c, mask);	abort();}#endif#endif/**********************************************************************/#if defined(L_isalnum) || defined(L_isalnum_l)IS_FUNC_BODY(alnum);#endif/**********************************************************************/#if defined(L_isalpha) || defined(L_isalpha_l)IS_FUNC_BODY(alpha);#endif/**********************************************************************/#if defined(L_isblank) || defined(L_isblank_l)IS_FUNC_BODY(blank);#endif/**********************************************************************/#if defined(L_iscntrl) || defined(L_iscntrl_l)IS_FUNC_BODY(cntrl);#endif/**********************************************************************/#if defined(L_isdigit) || defined(L_isdigit_l)#ifdef __UCLIBC_HAS_CTYPE_TABLES__/* The standards require EOF < 0. */#if EOF >= CHAR_MIN#define __isdigit_char_or_EOF(C)   __isdigit_char((C))#else#define __isdigit_char_or_EOF(C)   __isdigit_int((C))#endifint CTYPE_NAME(digit) (int C   __LOCALE_PARAM);int CTYPE_NAME(digit) (int C   __LOCALE_PARAM){#if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)	if (CTYPE_DOMAIN_CHECK(C)) {		return __isdigit_char_or_EOF(C); /* C is (unsigned) char or EOF. */	}	__isctype_assert(C, _ISdigit);#else	return __isdigit_int(C);	/* C could be invalid. */#endif}CTYPE_DEF(digit)CTYPE_ALIAS(digit)#else  /* __UCLIBC_HAS_CTYPE_TABLES__ */IS_FUNC_BODY(digit);#endif /* __UCLIBC_HAS_CTYPE_TABLES__ */#endif/**********************************************************************/#if defined(L_isgraph) || defined(L_isgraph_l)IS_FUNC_BODY(graph);#endif/**********************************************************************/#if defined(L_islower) || defined(L_islower_l)IS_FUNC_BODY(lower);#endif/**********************************************************************/#if defined(L_isprint) || defined(L_isprint_l)IS_FUNC_BODY(print);#endif/**********************************************************************/#if defined(L_ispunct) || defined(L_ispunct_l)IS_FUNC_BODY(punct);#endif/**********************************************************************/#if defined(L_isspace) || defined(L_isspace_l)IS_FUNC_BODY(space);#endif/**********************************************************************/#if defined(L_isupper) || defined(L_isupper_l)IS_FUNC_BODY(upper);#endif/**********************************************************************/#if defined(L_isxdigit) || defined(L_isxdigit_l)IS_FUNC_BODY(xdigit);#endif/**********************************************************************/#ifdef L_tolower#undef tolower#ifdef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_tolower_loc) */#elif defined __UCLIBC_HAS_CTYPE_TABLES__/* libc_hidden_proto(__ctype_tolower) */#endif/* libc_hidden_proto(tolower) */#ifdef __UCLIBC_HAS_CTYPE_TABLES__int tolower(int c){#if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)	assert(CTYPE_DOMAIN_CHECK(c));#endif	return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOLOWER)[c] : c;}#else  /* __UCLIBC_HAS_CTYPE_TABLES__ */int tolower(int c){	return __C_tolower(c);}#endif /* __UCLIBC_HAS_CTYPE_TABLES__ */libc_hidden_def(tolower)#endif/**********************************************************************/#ifdef L_tolower_l#undef tolower_l/* libc_hidden_proto(tolower_l) */int tolower_l(int c, __locale_t l){#if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)	assert(CTYPE_DOMAIN_CHECK(c));#endif	return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_tolower[c] : c;}libc_hidden_def(tolower_l)//remove after 0.9.31. See ctype.h for why.//weak_alias (tolower_l, __tolower_l)#endif/**********************************************************************/#ifdef L_toupper#undef toupper#ifdef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_toupper_loc) */#elif defined __UCLIBC_HAS_CTYPE_TABLES__/* libc_hidden_proto(__ctype_toupper) */#endif/* libc_hidden_proto(toupper) */#ifdef __UCLIBC_HAS_CTYPE_TABLES__int toupper(int c){#if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)	assert(CTYPE_DOMAIN_CHECK(c));#endif	return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOUPPER)[c] : c;}#else  /* __UCLIBC_HAS_CTYPE_TABLES__ */int toupper(int c){	return __C_toupper(c);}#endif /* __UCLIBC_HAS_CTYPE_TABLES__ */libc_hidden_def(toupper)#endif/**********************************************************************/#ifdef L_toupper_l#undef toupper_l/* libc_hidden_proto(toupper_l) */int toupper_l(int c, __locale_t l){#if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)	assert(CTYPE_DOMAIN_CHECK(c));#endif	return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_toupper[c] : c;}libc_hidden_def(toupper_l)//remove after 0.9.31. See ctype.h for why.//weak_alias (toupper_l, __toupper_l)#endif/**********************************************************************/#if defined(L_isascii) || defined(L_isascii_l)#ifdef __UCLIBC_HAS_CTYPE_TABLES__int __XL_NPP(isascii)(int c);int __XL_NPP(isascii)(int c){	return __isascii(c);		/* locale-independent */}#else  /* __UCLIBC_HAS_CTYPE_TABLES__ */int isascii(int c){	return __isascii(c);		/* locale-independent */}#endif /* __UCLIBC_HAS_CTYPE_TABLES__ */CTYPE_DEF(ascii)#endif/**********************************************************************/#if defined(L_toascii) || defined(L_toascii_l)#ifdef __UCLIBC_HAS_CTYPE_TABLES__int __XL_NPP(toascii)(int c);int __XL_NPP(toascii)(int c){	return __toascii(c);		/* locale-independent */}#else  /* __UCLIBC_HAS_CTYPE_TABLES__ */int toascii(int c){	return __toascii(c);		/* locale-independent */}#endif /* __UCLIBC_HAS_CTYPE_TABLES__ */#endif/**********************************************************************//* glibc extensions *//**********************************************************************/#ifdef L_isctypeint isctype(int c, int mask){	CTYPE_BODY(NAME,c,mask)}#endif/**********************************************************************/#ifdef L___ctype_b_loc#ifdef __UCLIBC_HAS_XLOCALE__const __ctype_mask_t **__ctype_b_loc(void){	return &(__UCLIBC_CURLOCALE_DATA).__ctype_b;}libc_hidden_def(__ctype_b_loc)#endif#endif/**********************************************************************/#ifdef L___ctype_tolower_loc#ifdef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_tolower_loc) */const __ctype_touplow_t **__ctype_tolower_loc(void){	return &(__UCLIBC_CURLOCALE_DATA).__ctype_tolower;}libc_hidden_def(__ctype_tolower_loc)#endif#endif/**********************************************************************/#ifdef L___ctype_toupper_loc#ifdef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_toupper_loc) */const __ctype_touplow_t **__ctype_toupper_loc(void){	return &(__UCLIBC_CURLOCALE_DATA).__ctype_toupper;}libc_hidden_def(__ctype_toupper_loc)#endif#endif/**********************************************************************/#ifdef L___C_ctype_bstatic const __ctype_mask_t __C_ctype_b_data[] = {#ifdef __UCLIBC_HAS_CTYPE_SIGNED__	/* -128  M-^@ */ 0,	/* -127  M-^A */ 0,	/* -126  M-^B */ 0,	/* -125  M-^C */ 0,	/* -124  M-^D */ 0,	/* -123  M-^E */ 0,	/* -122  M-^F */ 0,	/* -121  M-^G */ 0,	/* -120  M-^H */ 0,	/* -119  M-^I */ 0,	/* -118  M-^J */ 0,	/* -117  M-^K */ 0,	/* -116  M-^L */ 0,	/* -115  M-^M */ 0,	/* -114  M-^N */ 0,	/* -113  M-^O */ 0,	/* -112  M-^P */ 0,	/* -111  M-^Q */ 0,	/* -110  M-^R */ 0,	/* -109  M-^S */ 0,	/* -108  M-^T */ 0,	/* -107  M-^U */ 0,	/* -106  M-^V */ 0,	/* -105  M-^W */ 0,	/* -104  M-^X */ 0,	/* -103  M-^Y */ 0,	/* -102  M-^Z */ 0,	/* -101  M-^[ */ 0,	/* -100  M-^\ */ 0,	/*  -99  M-^] */ 0,	/*  -98  M-^^ */ 0,	/*  -97  M-^_ */ 0,	/*  -96  M-   */ 0,	/*  -95  M-!  */ 0,	/*  -94  M-"  */ 0,	/*  -93  M-#  */ 0,	/*  -92  M-$  */ 0,	/*  -91  M-%  */ 0,	/*  -90  M-&  */ 0,	/*  -89  M-'  */ 0,	/*  -88  M-(  */ 0,	/*  -87  M-)  */ 0,	/*  -86  M-*  */ 0,	/*  -85  M-+  */ 0,	/*  -84  M-,  */ 0,	/*  -83  M--  */ 0,	/*  -82  M-.  */ 0,	/*  -81  M-/  */ 0,	/*  -80  M-0  */ 0,	/*  -79  M-1  */ 0,	/*  -78  M-2  */ 0,	/*  -77  M-3  */ 0,	/*  -76  M-4  */ 0,	/*  -75  M-5  */ 0,	/*  -74  M-6  */ 0,	/*  -73  M-7  */ 0,	/*  -72  M-8  */ 0,	/*  -71  M-9  */ 0,	/*  -70  M-:  */ 0,	/*  -69  M-;  */ 0,	/*  -68  M-<  */ 0,	/*  -67  M-=  */ 0,	/*  -66  M->  */ 0,	/*  -65  M-?  */ 0,	/*  -64  M-@  */ 0,	/*  -63  M-A  */ 0,	/*  -62  M-B  */ 0,	/*  -61  M-C  */ 0,	/*  -60  M-D  */ 0,	/*  -59  M-E  */ 0,	/*  -58  M-F  */ 0,	/*  -57  M-G  */ 0,	/*  -56  M-H  */ 0,	/*  -55  M-I  */ 0,	/*  -54  M-J  */ 0,	/*  -53  M-K  */ 0,	/*  -52  M-L  */ 0,	/*  -51  M-M  */ 0,	/*  -50  M-N  */ 0,	/*  -49  M-O  */ 0,	/*  -48  M-P  */ 0,	/*  -47  M-Q  */ 0,	/*  -46  M-R  */ 0,	/*  -45  M-S  */ 0,	/*  -44  M-T  */ 0,	/*  -43  M-U  */ 0,	/*  -42  M-V  */ 0,	/*  -41  M-W  */ 0,	/*  -40  M-X  */ 0,	/*  -39  M-Y  */ 0,	/*  -38  M-Z  */ 0,	/*  -37  M-[  */ 0,	/*  -36  M-\  */ 0,	/*  -35  M-]  */ 0,	/*  -34  M-^  */ 0,	/*  -33  M-_  */ 0,	/*  -32  M-`  */ 0,	/*  -31  M-a  */ 0,	/*  -30  M-b  */ 0,	/*  -29  M-c  */ 0,	/*  -28  M-d  */ 0,	/*  -27  M-e  */ 0,	/*  -26  M-f  */ 0,	/*  -25  M-g  */ 0,	/*  -24  M-h  */ 0,	/*  -23  M-i  */ 0,	/*  -22  M-j  */ 0,	/*  -21  M-k  */ 0,	/*  -20  M-l  */ 0,	/*  -19  M-m  */ 0,	/*  -18  M-n  */ 0,	/*  -17  M-o  */ 0,	/*  -16  M-p  */ 0,	/*  -15  M-q  */ 0,	/*  -14  M-r  */ 0,	/*  -13  M-s  */ 0,	/*  -12  M-t  */ 0,	/*  -11  M-u  */ 0,	/*  -10  M-v  */ 0,	/*   -9  M-w  */ 0,	/*   -8  M-x  */ 0,	/*   -7  M-y  */ 0,	/*   -6  M-z  */ 0,	/*   -5  M-{  */ 0,	/*   -4  M-|  */ 0,	/*   -3  M-}  */ 0,	/*   -2  M-~  */ 0,#endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/	/*   -1  M-^? */ 0,	/*    0  ^@   */ _IScntrl,	/*    1  ^A   */ _IScntrl,	/*    2  ^B   */ _IScntrl,	/*    3  ^C   */ _IScntrl,	/*    4  ^D   */ _IScntrl,	/*    5  ^E   */ _IScntrl,	/*    6  ^F   */ _IScntrl,	/*    7  ^G   */ _IScntrl,	/*    8  ^H   */ _IScntrl,	/*    9  ^I   */ _ISspace|_ISblank|_IScntrl,	/*   10  ^J   */ _ISspace|_IScntrl,	/*   11  ^K   */ _ISspace|_IScntrl,	/*   12  ^L   */ _ISspace|_IScntrl,	/*   13  ^M   */ _ISspace|_IScntrl,	/*   14  ^N   */ _IScntrl,	/*   15  ^O   */ _IScntrl,	/*   16  ^P   */ _IScntrl,	/*   17  ^Q   */ _IScntrl,	/*   18  ^R   */ _IScntrl,	/*   19  ^S   */ _IScntrl,	/*   20  ^T   */ _IScntrl,	/*   21  ^U   */ _IScntrl,	/*   22  ^V   */ _IScntrl,	/*   23  ^W   */ _IScntrl,	/*   24  ^X   */ _IScntrl,	/*   25  ^Y   */ _IScntrl,	/*   26  ^Z   */ _IScntrl,	/*   27  ^[   */ _IScntrl,	/*   28  ^\   */ _IScntrl,	/*   29  ^]   */ _IScntrl,	/*   30  ^^   */ _IScntrl,	/*   31  ^_   */ _IScntrl,	/*   32       */ _ISspace|_ISprint|_ISblank,	/*   33  !    */ _ISprint|_ISgraph|_ISpunct,	/*   34  "    */ _ISprint|_ISgraph|_ISpunct,	/*   35  #    */ _ISprint|_ISgraph|_ISpunct,	/*   36  $    */ _ISprint|_ISgraph|_ISpunct,	/*   37  %    */ _ISprint|_ISgraph|_ISpunct,	/*   38  &    */ _ISprint|_ISgraph|_ISpunct,	/*   39  '    */ _ISprint|_ISgraph|_ISpunct,	/*   40  (    */ _ISprint|_ISgraph|_ISpunct,	/*   41  )    */ _ISprint|_ISgraph|_ISpunct,	/*   42  *    */ _ISprint|_ISgraph|_ISpunct,	/*   43  +    */ _ISprint|_ISgraph|_ISpunct,	/*   44  ,    */ _ISprint|_ISgraph|_ISpunct,	/*   45  -    */ _ISprint|_ISgraph|_ISpunct,	/*   46  .    */ _ISprint|_ISgraph|_ISpunct,	/*   47  /    */ _ISprint|_ISgraph|_ISpunct,	/*   48  0    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   49  1    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   50  2    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   51  3    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   52  4    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   53  5    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   54  6    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   55  7    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   56  8    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   57  9    */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   58  :    */ _ISprint|_ISgraph|_ISpunct,	/*   59  ;    */ _ISprint|_ISgraph|_ISpunct,	/*   60  <    */ _ISprint|_ISgraph|_ISpunct,	/*   61  =    */ _ISprint|_ISgraph|_ISpunct,	/*   62  >    */ _ISprint|_ISgraph|_ISpunct,	/*   63  ?    */ _ISprint|_ISgraph|_ISpunct,	/*   64  @    */ _ISprint|_ISgraph|_ISpunct,	/*   65  A    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   66  B    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   67  C    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   68  D    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   69  E    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   70  F    */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   71  G    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   72  H    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   73  I    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   74  J    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   75  K    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   76  L    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   77  M    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   78  N    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   79  O    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   80  P    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   81  Q    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   82  R    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   83  S    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   84  T    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   85  U    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   86  V    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   87  W    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   88  X    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   89  Y    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   90  Z    */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*   91  [    */ _ISprint|_ISgraph|_ISpunct,	/*   92  \    */ _ISprint|_ISgraph|_ISpunct,	/*   93  ]    */ _ISprint|_ISgraph|_ISpunct,	/*   94  ^    */ _ISprint|_ISgraph|_ISpunct,	/*   95  _    */ _ISprint|_ISgraph|_ISpunct,	/*   96  `    */ _ISprint|_ISgraph|_ISpunct,	/*   97  a    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   98  b    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*   99  c    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*  100  d    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*  101  e    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*  102  f    */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,	/*  103  g    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  104  h    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  105  i    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  106  j    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  107  k    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  108  l    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  109  m    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  110  n    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  111  o    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  112  p    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  113  q    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  114  r    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  115  s    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  116  t    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  117  u    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  118  v    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  119  w    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  120  x    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  121  y    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  122  z    */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,	/*  123  {    */ _ISprint|_ISgraph|_ISpunct,	/*  124  |    */ _ISprint|_ISgraph|_ISpunct,	/*  125  }    */ _ISprint|_ISgraph|_ISpunct,	/*  126  ~    */ _ISprint|_ISgraph|_ISpunct,	/*  127  ^?   */ _IScntrl,	/*  128  M-^@ */ 0,	/*  129  M-^A */ 0,	/*  130  M-^B */ 0,	/*  131  M-^C */ 0,	/*  132  M-^D */ 0,	/*  133  M-^E */ 0,	/*  134  M-^F */ 0,	/*  135  M-^G */ 0,	/*  136  M-^H */ 0,	/*  137  M-^I */ 0,	/*  138  M-^J */ 0,	/*  139  M-^K */ 0,	/*  140  M-^L */ 0,	/*  141  M-^M */ 0,	/*  142  M-^N */ 0,	/*  143  M-^O */ 0,	/*  144  M-^P */ 0,	/*  145  M-^Q */ 0,	/*  146  M-^R */ 0,	/*  147  M-^S */ 0,	/*  148  M-^T */ 0,	/*  149  M-^U */ 0,	/*  150  M-^V */ 0,	/*  151  M-^W */ 0,	/*  152  M-^X */ 0,	/*  153  M-^Y */ 0,	/*  154  M-^Z */ 0,	/*  155  M-^[ */ 0,	/*  156  M-^\ */ 0,	/*  157  M-^] */ 0,	/*  158  M-^^ */ 0,	/*  159  M-^_ */ 0,	/*  160  M-   */ 0,	/*  161  M-!  */ 0,	/*  162  M-"  */ 0,	/*  163  M-#  */ 0,	/*  164  M-$  */ 0,	/*  165  M-%  */ 0,	/*  166  M-&  */ 0,	/*  167  M-'  */ 0,	/*  168  M-(  */ 0,	/*  169  M-)  */ 0,	/*  170  M-*  */ 0,	/*  171  M-+  */ 0,	/*  172  M-,  */ 0,	/*  173  M--  */ 0,	/*  174  M-.  */ 0,	/*  175  M-/  */ 0,	/*  176  M-0  */ 0,	/*  177  M-1  */ 0,	/*  178  M-2  */ 0,	/*  179  M-3  */ 0,	/*  180  M-4  */ 0,	/*  181  M-5  */ 0,	/*  182  M-6  */ 0,	/*  183  M-7  */ 0,	/*  184  M-8  */ 0,	/*  185  M-9  */ 0,	/*  186  M-:  */ 0,	/*  187  M-;  */ 0,	/*  188  M-<  */ 0,	/*  189  M-=  */ 0,	/*  190  M->  */ 0,	/*  191  M-?  */ 0,	/*  192  M-@  */ 0,	/*  193  M-A  */ 0,	/*  194  M-B  */ 0,	/*  195  M-C  */ 0,	/*  196  M-D  */ 0,	/*  197  M-E  */ 0,	/*  198  M-F  */ 0,	/*  199  M-G  */ 0,	/*  200  M-H  */ 0,	/*  201  M-I  */ 0,	/*  202  M-J  */ 0,	/*  203  M-K  */ 0,	/*  204  M-L  */ 0,	/*  205  M-M  */ 0,	/*  206  M-N  */ 0,	/*  207  M-O  */ 0,	/*  208  M-P  */ 0,	/*  209  M-Q  */ 0,	/*  210  M-R  */ 0,	/*  211  M-S  */ 0,	/*  212  M-T  */ 0,	/*  213  M-U  */ 0,	/*  214  M-V  */ 0,	/*  215  M-W  */ 0,	/*  216  M-X  */ 0,	/*  217  M-Y  */ 0,	/*  218  M-Z  */ 0,	/*  219  M-[  */ 0,	/*  220  M-\  */ 0,	/*  221  M-]  */ 0,	/*  222  M-^  */ 0,	/*  223  M-_  */ 0,	/*  224  M-`  */ 0,	/*  225  M-a  */ 0,	/*  226  M-b  */ 0,	/*  227  M-c  */ 0,	/*  228  M-d  */ 0,	/*  229  M-e  */ 0,	/*  230  M-f  */ 0,	/*  231  M-g  */ 0,	/*  232  M-h  */ 0,	/*  233  M-i  */ 0,	/*  234  M-j  */ 0,	/*  235  M-k  */ 0,	/*  236  M-l  */ 0,	/*  237  M-m  */ 0,	/*  238  M-n  */ 0,	/*  239  M-o  */ 0,	/*  240  M-p  */ 0,	/*  241  M-q  */ 0,	/*  242  M-r  */ 0,	/*  243  M-s  */ 0,	/*  244  M-t  */ 0,	/*  245  M-u  */ 0,	/*  246  M-v  */ 0,	/*  247  M-w  */ 0,	/*  248  M-x  */ 0,	/*  249  M-y  */ 0,	/*  250  M-z  */ 0,	/*  251  M-{  */ 0,	/*  252  M-|  */ 0,	/*  253  M-}  */ 0,	/*  254  M-~  */ 0,	/*  255  M-^? */ 0};/* libc_hidden_proto(__C_ctype_b) */const __ctype_mask_t *__C_ctype_b = __C_ctype_b_data + __UCLIBC_CTYPE_B_TBL_OFFSET;libc_hidden_data_def(__C_ctype_b)#ifndef __UCLIBC_HAS_XLOCALE__const __ctype_mask_t *__ctype_b = __C_ctype_b_data + __UCLIBC_CTYPE_B_TBL_OFFSET;libc_hidden_data_def(__ctype_b)#endif#endif/**********************************************************************/#ifdef L___C_ctype_tolowerstatic const __ctype_touplow_t __C_ctype_tolower_data[] = {#ifdef __UCLIBC_HAS_CTYPE_SIGNED__	-128,         -127,         -126,         -125,	-124,         -123,         -122,         -121,	-120,         -119,         -118,         -117,	-116,         -115,         -114,         -113,	-112,         -111,         -110,         -109,	-108,         -107,         -106,         -105,	-104,         -103,         -102,         -101,	-100,          -99,          -98,          -97,	 -96,          -95,          -94,          -93,	 -92,          -91,          -90,          -89,	 -88,          -87,          -86,          -85,	 -84,          -83,          -82,          -81,	 -80,          -79,          -78,          -77,	 -76,          -75,          -74,          -73,	 -72,          -71,          -70,          -69,	 -68,          -67,          -66,          -65,	 -64,          -63,          -62,          -61,	 -60,          -59,          -58,          -57,	 -56,          -55,          -54,          -53,	 -52,          -51,          -50,          -49,	 -48,          -47,          -46,          -45,	 -44,          -43,          -42,          -41,	 -40,          -39,          -38,          -37,	 -36,          -35,          -34,          -33,	 -32,          -31,          -30,          -29,	 -28,          -27,          -26,          -25,	 -24,          -23,          -22,          -21,	 -20,          -19,          -18,          -17,	 -16,          -15,          -14,          -13,	 -12,          -11,          -10,           -9,	  -8,           -7,           -6,           -5,	  -4,           -3,           -2,           -1,#endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/	   0,            1,            2,            3,	   4,            5,            6,            7,	   8,            9,           10,           11,	  12,           13,           14,           15,	  16,           17,           18,           19,	  20,           21,           22,           23,	  24,           25,           26,           27,	  28,           29,           30,           31,	  32,           33,           34,           35,	  36,           37,           38,           39,	  40,           41,           42,           43,	  44,           45,           46,           47,	  48,           49,           50,           51,	  52,           53,           54,           55,	  56,           57,           58,           59,	  60,           61,           62,           63,	  64,           97 /* a */,   98 /* b */,   99 /* c */,	 100 /* d */,  101 /* e */,  102 /* f */,  103 /* g */,	 104 /* h */,  105 /* i */,  106 /* j */,  107 /* k */,	 108 /* l */,  109 /* m */,  110 /* n */,  111 /* o */,	 112 /* p */,  113 /* q */,  114 /* r */,  115 /* s */,	 116 /* t */,  117 /* u */,  118 /* v */,  119 /* w */,	 120 /* x */,  121 /* y */,  122 /* z */,   91,	  92,           93,           94,           95,	  96,           97,           98,           99,	 100,          101,          102,          103,	 104,          105,          106,          107,	 108,          109,          110,          111,	 112,          113,          114,          115,	 116,          117,          118,          119,	 120,          121,          122,          123,	 124,          125,          126,          127,	 128,          129,          130,          131,	 132,          133,          134,          135,	 136,          137,          138,          139,	 140,          141,          142,          143,	 144,          145,          146,          147,	 148,          149,          150,          151,	 152,          153,          154,          155,	 156,          157,          158,          159,	 160,          161,          162,          163,	 164,          165,          166,          167,	 168,          169,          170,          171,	 172,          173,          174,          175,	 176,          177,          178,          179,	 180,          181,          182,          183,	 184,          185,          186,          187,	 188,          189,          190,          191,	 192,          193,          194,          195,	 196,          197,          198,          199,	 200,          201,          202,          203,	 204,          205,          206,          207,	 208,          209,          210,          211,	 212,          213,          214,          215,	 216,          217,          218,          219,	 220,          221,          222,          223,	 224,          225,          226,          227,	 228,          229,          230,          231,	 232,          233,          234,          235,	 236,          237,          238,          239,	 240,          241,          242,          243,	 244,          245,          246,          247,	 248,          249,          250,          251,	 252,          253,          254,          255};/* libc_hidden_proto(__C_ctype_tolower) */const __ctype_touplow_t *__C_ctype_tolower =		__C_ctype_tolower_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;libc_hidden_data_def(__C_ctype_tolower)#ifndef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_tolower) */const __ctype_touplow_t *__ctype_tolower =		__C_ctype_tolower_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;libc_hidden_data_def(__ctype_tolower)#endif#endif/**********************************************************************/#ifdef L___C_ctype_toupperstatic const __ctype_touplow_t __C_ctype_toupper_data[] = {#ifdef __UCLIBC_HAS_CTYPE_SIGNED__	-128,         -127,         -126,         -125,	-124,         -123,         -122,         -121,	-120,         -119,         -118,         -117,	-116,         -115,         -114,         -113,	-112,         -111,         -110,         -109,	-108,         -107,         -106,         -105,	-104,         -103,         -102,         -101,	-100,          -99,          -98,          -97,	 -96,          -95,          -94,          -93,	 -92,          -91,          -90,          -89,	 -88,          -87,          -86,          -85,	 -84,          -83,          -82,          -81,	 -80,          -79,          -78,          -77,	 -76,          -75,          -74,          -73,	 -72,          -71,          -70,          -69,	 -68,          -67,          -66,          -65,	 -64,          -63,          -62,          -61,	 -60,          -59,          -58,          -57,	 -56,          -55,          -54,          -53,	 -52,          -51,          -50,          -49,	 -48,          -47,          -46,          -45,	 -44,          -43,          -42,          -41,	 -40,          -39,          -38,          -37,	 -36,          -35,          -34,          -33,	 -32,          -31,          -30,          -29,	 -28,          -27,          -26,          -25,	 -24,          -23,          -22,          -21,	 -20,          -19,          -18,          -17,	 -16,          -15,          -14,          -13,	 -12,          -11,          -10,           -9,	  -8,           -7,           -6,           -5,	  -4,           -3,           -2,           -1,#endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/	   0,            1,            2,            3,	   4,            5,            6,            7,	   8,            9,           10,           11,	  12,           13,           14,           15,	  16,           17,           18,           19,	  20,           21,           22,           23,	  24,           25,           26,           27,	  28,           29,           30,           31,	  32,           33,           34,           35,	  36,           37,           38,           39,	  40,           41,           42,           43,	  44,           45,           46,           47,	  48,           49,           50,           51,	  52,           53,           54,           55,	  56,           57,           58,           59,	  60,           61,           62,           63,	  64,           65,           66,           67,	  68,           69,           70,           71,	  72,           73,           74,           75,	  76,           77,           78,           79,	  80,           81,           82,           83,	  84,           85,           86,           87,	  88,           89,           90,           91,	  92,           93,           94,           95,	  96,           65 /* A */,   66 /* B */,   67 /* C */,	  68 /* D */,   69 /* E */,   70 /* F */,   71 /* G */,	  72 /* H */,   73 /* I */,   74 /* J */,   75 /* K */,	  76 /* L */,   77 /* M */,   78 /* N */,   79 /* O */,	  80 /* P */,   81 /* Q */,   82 /* R */,   83 /* S */,	  84 /* T */,   85 /* U */,   86 /* V */,   87 /* W */,	  88 /* X */,   89 /* Y */,   90 /* Z */,  123,	 124,          125,          126,          127,	 128,          129,          130,          131,	 132,          133,          134,          135,	 136,          137,          138,          139,	 140,          141,          142,          143,	 144,          145,          146,          147,	 148,          149,          150,          151,	 152,          153,          154,          155,	 156,          157,          158,          159,	 160,          161,          162,          163,	 164,          165,          166,          167,	 168,          169,          170,          171,	 172,          173,          174,          175,	 176,          177,          178,          179,	 180,          181,          182,          183,	 184,          185,          186,          187,	 188,          189,          190,          191,	 192,          193,          194,          195,	 196,          197,          198,          199,	 200,          201,          202,          203,	 204,          205,          206,          207,	 208,          209,          210,          211,	 212,          213,          214,          215,	 216,          217,          218,          219,	 220,          221,          222,          223,	 224,          225,          226,          227,	 228,          229,          230,          231,	 232,          233,          234,          235,	 236,          237,          238,          239,	 240,          241,          242,          243,	 244,          245,          246,          247,	 248,          249,          250,          251,	 252,          253,          254,          255};/* libc_hidden_proto(__C_ctype_toupper) */const __ctype_touplow_t *__C_ctype_toupper =		__C_ctype_toupper_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;libc_hidden_data_def(__C_ctype_toupper)#ifndef __UCLIBC_HAS_XLOCALE__/* libc_hidden_proto(__ctype_toupper) */const __ctype_touplow_t *__ctype_toupper =		__C_ctype_toupper_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;libc_hidden_data_def(__ctype_toupper)#endif#endif/**********************************************************************/
 |