williamr@2: /* williamr@2: * © Portions copyright (c) 2006-2007 Nokia Corporation. All rights reserved. williamr@2: * williamr@2: * Copyright (c) 1999 williamr@2: * Silicon Graphics Computer Systems, Inc. williamr@2: * williamr@2: * Copyright (c) 1999 williamr@2: * Boris Fomitchev williamr@2: * williamr@2: * This material is provided "as is", with absolutely no warranty expressed williamr@2: * or implied. Any use is at your own risk. williamr@2: * williamr@2: * Permission to use or copy this software for any purpose is hereby granted williamr@2: * without fee, provided the above notices are retained on all copies. williamr@2: * Permission to modify the code and to distribute modified code is granted, williamr@2: * provided the above notices are retained, and a notice that the code was williamr@2: * modified is included with the above copyright notice. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef _STLP_C_LOCALE_H williamr@2: # define _STLP_C_LOCALE_H williamr@2: williamr@2: /* williamr@2: * Implementation dependent definitions williamr@2: */ williamr@2: #ifdef __cplusplus williamr@2: # include williamr@2: #endif williamr@2: williamr@2: #if defined(__sgi) williamr@2: # if defined(ROOT_65) /* IRIX 6.5.x */ williamr@2: # include williamr@2: # include williamr@2: # include williamr@2: # include williamr@2: williamr@2: # else williamr@2: /* IRIX pre-6.5 */ williamr@2: # include williamr@2: # include williamr@2: williamr@2: # if !defined(_SIZE_T) && !defined(_SIZE_T_) williamr@2: # define _SIZE_T williamr@2: # if (_MIPS_SZLONG == 32) williamr@2: typedef unsigned int size_t; williamr@2: # endif williamr@2: # if (_MIPS_SZLONG == 64) williamr@2: typedef unsigned long size_t; williamr@2: # endif williamr@2: # endif williamr@2: williamr@2: # ifndef _WCHAR_T williamr@2: # define _WCHAR_T williamr@2: # if (_MIPS_SZLONG == 32) williamr@2: typedef long wchar_t; williamr@2: # endif williamr@2: # if (_MIPS_SZLONG == 64) williamr@2: typedef __int32_t wchar_t; williamr@2: # endif williamr@2: # endif /* _WCHAR_T */ williamr@2: williamr@2: # ifndef _WINT_T williamr@2: # define _WINT_T williamr@2: # if (_MIPS_SZLONG == 32) williamr@2: typedef long wint_t; williamr@2: # endif williamr@2: # if (_MIPS_SZLONG == 64) williamr@2: typedef __int32_t wint_t; williamr@2: # endif williamr@2: # endif /* _WINT_T */ williamr@2: williamr@2: # ifndef _MBSTATE_T williamr@2: # define _MBSTATE_T williamr@2: # ifdef _MSC_VER williamr@2: typedef int mbstate_t; williamr@2: # else williamr@2: typedef char mbstate_t; williamr@2: # endif williamr@2: # endif /* _MBSTATE_T */ williamr@2: williamr@2: # endif /* ROOT65 */ williamr@2: williamr@2: # else /* __sgi */ williamr@2: williamr@2: # ifdef __cplusplus williamr@2: # ifndef _STLP_CSTDDEF williamr@2: # include williamr@2: # endif williamr@2: # ifndef _STLP_CWCHAR_H williamr@2: # include williamr@2: # endif williamr@2: # ifndef _STLP_CCTYPE williamr@2: # include williamr@2: # endif williamr@2: # else williamr@2: # include williamr@2: # include williamr@2: # include williamr@2: # endif williamr@2: williamr@2: #endif /* __sgi */ williamr@2: williamr@2: /* williamr@2: * GENERAL FRAMEWORK williamr@2: */ williamr@2: williamr@2: struct _Locale_ctype; williamr@2: struct _Locale_numeric; williamr@2: struct _Locale_time; williamr@2: struct _Locale_collate; williamr@2: struct _Locale_monetary; williamr@2: struct _Locale_messages; williamr@2: williamr@2: /* williamr@2: Bitmask macros. williamr@2: */ williamr@2: williamr@2: /* williamr@2: * For narrow characters, we expose the lookup table interface. williamr@2: */ williamr@2: williamr@2: /* Internal bitmask macros, os-specific. */ williamr@2: williamr@2: #if defined(__sgi) /* IRIX */ williamr@2: williamr@2: #define _Locale_S 0x00000008 /* Spacing character */ williamr@2: #define _Locale_A 0x00004000 /* Alphabetical characters only */ williamr@2: #define _Locale_B 0x00000040 /* Obsolete: was space char only */ williamr@2: #define _Locale_PR 0x00008000 /* Printable characters only */ williamr@2: #define _Locale_G 0x40000000 /* Graphic characters only */ williamr@2: #define _Locale_BL 0x80000000 /* The blank character class */ williamr@2: williamr@2: /* Public bitmask macros, must be defined for every OS. These values, of williamr@2: * course, are specific to IRIX. */ williamr@2: williamr@2: #define _Locale_CNTRL 0x00000020 /* Control character */ williamr@2: #define _Locale_UPPER 0x00000001 /* Upper case */ williamr@2: #define _Locale_LOWER 0x00000002 /* Lower case */ williamr@2: #define _Locale_DIGIT 0x00000004 /* Numeral (digit) */ williamr@2: #define _Locale_XDIGIT 0x00000080 /* heXadecimal digit */ williamr@2: #define _Locale_PUNCT 0x00000010 /* Punctuation */ williamr@2: #define _Locale_SPACE (_Locale_S | _Locale_BL) williamr@2: #define _Locale_PRINT (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \ williamr@2: _Locale_DIGIT | _Locale_A | _Locale_XDIGIT | \ williamr@2: _Locale_PR) williamr@2: #define _Locale_ALPHA _Locale_A williamr@2: williamr@2: /* williamr@2: * All of these except for graph and blank are from the C standard; williamr@2: * graph and blank are XPG4. (graph in XPG4 doesn't mean quite the williamr@2: * same thing as graph in the C++ library) williamr@2: */ williamr@2: williamr@2: #endif /* IRIX */ williamr@2: williamr@2: williamr@2: #if defined( __Lynx__ ) williamr@2: /* azov: On Lynx isalpha defined as (_U | _L), which gives us a mask williamr@2: * unusable in ctype_table. So we have to redefine it and use hard-coded williamr@2: * numbers (to avoid potential clashes if system headers change). williamr@2: * williamr@2: * P.S. Actually, I see no reason in using platform-specific masks - williamr@2: * having just one set of masks for all platforms should work just as williamr@2: * well - we only use them internally and they don't have to be equal williamr@2: * to whatever defined in local ctype.h williamr@2: * williamr@2: */ williamr@2: # define _Locale_CNTRL 040 /* _C, Control character */ williamr@2: # define _Locale_UPPER 01 /* _U, Upper case */ williamr@2: # define _Locale_LOWER 02 /* _L, Lower case */ williamr@2: # define _Locale_DIGIT 04 /* _N, Numeral (digit) */ williamr@2: # define _Locale_XDIGIT 0200 /* _X, heXadecimal digit */ williamr@2: # define _Locale_PUNCT 020 /* _P, Punctuation */ williamr@2: # define _Locale_SPACE 010 /* _S, Spacing */ williamr@2: # define _Locale_ALPHA 040000 /* none, Alphanumerical */ williamr@2: # define _Locale_PRINT (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \ williamr@2: _Locale_DIGIT | _Locale_ALPHA | _Locale_XDIGIT |\ williamr@2: _Locale_SPACE ) /* Printable */ williamr@2: # endif /* __Lynx__ */ williamr@2: williamr@2: #if defined(__GNUC__) || defined (__BORLANDC__) || defined (__COMO__) williamr@2: williamr@2: # if defined (__CYGWIN__) williamr@2: williamr@2: # define _Locale_CNTRL 040 williamr@2: # define _Locale_UPPER 02 williamr@2: # define _Locale_LOWER 01 williamr@2: # define _Locale_DIGIT 04 williamr@2: # define _Locale_XDIGIT ( 0100 | _Locale_DIGIT ) williamr@2: # define _Locale_PUNCT 020 williamr@2: # define _Locale_SPACE 010 williamr@2: # define _Locale_ALPHA (_Locale_UPPER | _Locale_LOWER) williamr@2: # define _Locale_PRINT (_Locale_ALPHA | _Locale_DIGIT | _Locale_PUNCT | 0200 ) williamr@2: williamr@2: # elif defined (__FreeBSD__) williamr@2: williamr@2: # define _Locale_CNTRL _CTYPE_C williamr@2: # define _Locale_UPPER _CTYPE_U williamr@2: # define _Locale_LOWER _CTYPE_L williamr@2: # define _Locale_DIGIT _CTYPE_D williamr@2: # define _Locale_XDIGIT _CTYPE_X williamr@2: # define _Locale_PUNCT _CTYPE_P williamr@2: # define _Locale_SPACE _CTYPE_S williamr@2: # define _Locale_PRINT _CTYPE_R williamr@2: # define _Locale_ALPHA _CTYPE_A williamr@2: williamr@2: # elif defined (__NetBSD__) || defined (__amigaos__) williamr@2: williamr@2: # define _Locale_CNTRL _C williamr@2: # define _Locale_UPPER _U williamr@2: # define _Locale_LOWER _L williamr@2: # define _Locale_DIGIT _N williamr@2: # define _Locale_XDIGIT (_N|_X) williamr@2: # define _Locale_PUNCT _P williamr@2: # define _Locale_SPACE _S williamr@2: # define _Locale_PRINT (_P|_U|_L|_N|_B) williamr@2: # define _Locale_ALPHA (_U|_L) williamr@2: # elif defined(__EMX__) /* OS/2 with emx runtime */ williamr@2: # define _Locale_CNTRL _CNTRL williamr@2: # define _Locale_UPPER _UPPER williamr@2: # define _Locale_LOWER _LOWER williamr@2: # define _Locale_DIGIT _DIGIT williamr@2: # define _Locale_XDIGIT _XDIGIT williamr@2: # define _Locale_PUNCT _PUNCT williamr@2: # define _Locale_SPACE _SPACE williamr@2: # define _Locale_PRINT _PRINT williamr@2: # define _Locale_ALPHA (_UPPER|_LOWER) williamr@2: williamr@2: # elif defined(_STLP_USE_GLIBC) /* linux, using the gnu compiler */ williamr@2: williamr@2: /* This section uses macros defined in the gnu libc ctype.h header */ williamr@2: williamr@2: # define _Locale_CNTRL _IScntrl williamr@2: # define _Locale_UPPER _ISupper williamr@2: # define _Locale_LOWER _ISlower williamr@2: # define _Locale_DIGIT _ISdigit williamr@2: # define _Locale_XDIGIT _ISxdigit williamr@2: # define _Locale_PUNCT _ISpunct williamr@2: # define _Locale_SPACE _ISspace williamr@2: # define _Locale_PRINT _ISprint williamr@2: # define _Locale_ALPHA _ISalpha williamr@2: williamr@2: # endif /* GLIBC */ williamr@2: williamr@2: #endif /* gnu */ williamr@2: williamr@2: #if ( defined(__sun) && defined (__SVR4) ) \ williamr@2: || (defined (__digital__) && defined (__unix__)) \ williamr@2: || defined(_AIX) williamr@2: /* fbp : condition from AT&T code*/ williamr@2: #if !(defined(__XPG4_CHAR_CLASS__) || defined(_XPG4_2) || \ williamr@2: (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 == 4))) && ! defined (_ISCNTRL) williamr@2: /* fbp : on 2.5.1, the defines are different ;( */ williamr@2: // # if ( defined (__sun) && defined (__SVR4) && ! defined (_ISCNTRL) ) williamr@2: # define _ISCNTRL _C williamr@2: # define _ISUPPER _U williamr@2: # define _ISLOWER _L williamr@2: # define _ISDIGIT _N williamr@2: # define _ISXDIGIT _X williamr@2: # define _ISPUNCT _P williamr@2: # define _ISSPACE _S williamr@2: # define _ISPRINT (_P | _U | _L | _N | _B) williamr@2: # define _ISALPHA (_U | _L) williamr@2: # endif williamr@2: williamr@2: # define _Locale_CNTRL _ISCNTRL williamr@2: # define _Locale_UPPER _ISUPPER williamr@2: # define _Locale_LOWER _ISLOWER williamr@2: # define _Locale_DIGIT _ISDIGIT williamr@2: # define _Locale_XDIGIT _ISXDIGIT williamr@2: # define _Locale_PUNCT _ISPUNCT williamr@2: # define _Locale_SPACE _ISSPACE williamr@2: # define _Locale_PRINT _ISPRINT williamr@2: # define _Locale_ALPHA _ISALPHA williamr@2: # elif defined(__SYMBIAN32__) williamr@2: # define _Locale_CNTRL _CTYPE_C williamr@2: # define _Locale_UPPER _CTYPE_U williamr@2: # define _Locale_LOWER _CTYPE_L williamr@2: # define _Locale_DIGIT _CTYPE_D williamr@2: # define _Locale_XDIGIT _CTYPE_X williamr@2: # define _Locale_PUNCT _CTYPE_P williamr@2: # define _Locale_SPACE _CTYPE_S williamr@2: # define _Locale_PRINT _CTYPE_R williamr@2: # define _Locale_ALPHA _CTYPE_A williamr@2: williamr@2: #elif defined (__MWERKS__) williamr@2: # define _Locale_CNTRL __control_char williamr@2: # define _Locale_UPPER __upper_case williamr@2: # define _Locale_LOWER __lower_case williamr@2: # define _Locale_DIGIT __digit williamr@2: # define _Locale_XDIGIT __hex_digit williamr@2: # define _Locale_PUNCT __punctuation williamr@2: # define _Locale_SPACE __space_char williamr@2: # define _Locale_PRINT __printable williamr@2: # define _Locale_ALPHA __alphanumeric williamr@2: #elif defined (__BORLANDC__) williamr@2: # define _Locale_CNTRL _IS_CTL williamr@2: # define _Locale_UPPER _IS_UPP williamr@2: # define _Locale_LOWER _IS_LOW williamr@2: # define _Locale_DIGIT _IS_DIG williamr@2: # define _Locale_XDIGIT _IS_HEX williamr@2: # define _Locale_PUNCT _IS_PUN williamr@2: # define _Locale_SPACE _IS_SP williamr@2: # define _Locale_PRINT (_IS_SP|_IS_PUN|_IS_UPP|_IS_LOW|_IS_DIG) williamr@2: # define _Locale_ALPHA _IS_ALPHA williamr@2: #elif defined (_MSC_VER) || defined (__MINGW32__) williamr@2: # define _Locale_CNTRL _CONTROL williamr@2: # define _Locale_UPPER _UPPER williamr@2: # define _Locale_LOWER _LOWER williamr@2: # define _Locale_DIGIT _DIGIT williamr@2: # define _Locale_XDIGIT _HEX williamr@2: # define _Locale_PUNCT _PUNCT williamr@2: # define _Locale_SPACE _SPACE williamr@2: # define _Locale_PRINT (_ALPHA | _DIGIT | _BLANK | _PUNCT) williamr@2: // is this one has to be so complex ? williamr@2: # define _Locale_ALPHA ( _ALPHA & ~ (_UPPER | _LOWER )) williamr@2: #elif defined (__DMC__) williamr@2: # define _Locale_CNTRL _CONTROL williamr@2: # define _Locale_UPPER _UPPER williamr@2: # define _Locale_LOWER _LOWER williamr@2: # define _Locale_DIGIT _DIGIT williamr@2: # define _Locale_XDIGIT _HEX williamr@2: # define _Locale_PUNCT _PUNCT williamr@2: # define _Locale_SPACE _SPACE williamr@2: # define _Locale_PRINT (_UPPER | _LOWER | _DIGIT | _PUNCT | _SPACE) williamr@2: # define _Locale_ALPHA _ALPHA williamr@2: #elif defined(__MRC__) || defined(__SC__) //*TY 02/24/2000 - added support for MPW williamr@2: # define _Locale_CNTRL _CTL williamr@2: # define _Locale_UPPER _UPP williamr@2: # define _Locale_LOWER _LOW williamr@2: # define _Locale_DIGIT _DIG williamr@2: # define _Locale_XDIGIT _HEX williamr@2: # define _Locale_PUNCT _PUN williamr@2: # define _Locale_SPACE _BLA williamr@2: # define _Locale_PRINT (_UPP | _LOW | _DIG | _PUN | _BLA) williamr@2: # define _Locale_ALPHA (_UPP | _LOW) williamr@2: #elif defined(__MLCCPP__) williamr@2: # define _Locale_CNTRL 1 williamr@2: # define _Locale_UPPER 2 williamr@2: # define _Locale_LOWER 4 williamr@2: # define _Locale_DIGIT 8 williamr@2: # define _Locale_XDIGIT 16 williamr@2: # define _Locale_PUNCT 32 williamr@2: # define _Locale_SPACE 64 williamr@2: # define _Locale_PRINT 128 williamr@2: # define _Locale_ALPHA 256 williamr@2: williamr@2: # elif defined (__GNUC__) && defined (__APPLE__) williamr@2: williamr@2: # define _Locale_CNTRL _C williamr@2: # define _Locale_UPPER _U williamr@2: # define _Locale_LOWER _L williamr@2: # define _Locale_DIGIT _D williamr@2: # define _Locale_XDIGIT _X williamr@2: # define _Locale_PUNCT _P williamr@2: # define _Locale_SPACE _S williamr@2: # define _Locale_PRINT _R williamr@2: # define _Locale_ALPHA _A williamr@2: williamr@2: # elif defined (__hpux) || defined (__osf__) williamr@2: williamr@2: # if defined(__HP_aCC) && !defined(_INCLUDE_HPUX_SOURCE) williamr@2: # define _ISALPHA 0x001 williamr@2: # define _ISALNUM 0x002 williamr@2: # define _ISBLANK 0x004 williamr@2: # define _ISCNTRL 0x008 williamr@2: # define _ISDIGIT 0x010 williamr@2: # define _ISGRAPH 0x020 williamr@2: # define _ISLOWER 0x040 williamr@2: # define _ISPRINT 0x080 williamr@2: # define _ISPUNCT 0x100 williamr@2: # define _ISSPACE 0x200 williamr@2: # define _ISUPPER 0x400 williamr@2: # define _ISXDIGIT 0x800 williamr@2: # endif williamr@2: # define _Locale_CNTRL _ISCNTRL williamr@2: # define _Locale_UPPER _ISUPPER williamr@2: # define _Locale_LOWER _ISLOWER williamr@2: # define _Locale_DIGIT _ISDIGIT williamr@2: # define _Locale_XDIGIT _ISXDIGIT williamr@2: # define _Locale_PUNCT _ISPUNCT williamr@2: # define _Locale_SPACE _ISSPACE williamr@2: # define _Locale_PRINT _ISPRINT williamr@2: # define _Locale_ALPHA _ISALPHA williamr@2: # elif defined (__MVS__) || defined(__OS400__) williamr@2: # define _Locale_CNTRL __ISCNTRL williamr@2: # define _Locale_UPPER __ISUPPER williamr@2: # define _Locale_LOWER __ISLOWER williamr@2: # define _Locale_DIGIT __ISDIGIT williamr@2: # define _Locale_XDIGIT __ISXDIGIT williamr@2: # define _Locale_PUNCT __ISPUNCT williamr@2: # define _Locale_SPACE __ISSPACE williamr@2: # define _Locale_PRINT __ISPRINT williamr@2: # define _Locale_ALPHA __ISALPHA williamr@2: # elif defined (__QNXNTO__) || defined (__WATCOMC__) williamr@2: # define _Locale_CNTRL _CNTRL williamr@2: # define _Locale_UPPER _UPPER williamr@2: # define _Locale_LOWER _LOWER williamr@2: # define _Locale_DIGIT _DIGIT williamr@2: # define _Locale_XDIGIT _XDIGT williamr@2: # define _Locale_PUNCT _PUNCT williamr@2: # define _Locale_SPACE _SPACE williamr@2: # define _Locale_PRINT _PRINT williamr@2: # define _Locale_ALPHA (_UPPER | _LOWER) williamr@2: #elif defined (__DJGPP) williamr@2: # define _Locale_CNTRL __dj_ISCNTRL williamr@2: # define _Locale_UPPER __dj_ISUPPER williamr@2: # define _Locale_LOWER __dj_ISLOWER williamr@2: # define _Locale_DIGIT __dj_ISDIGIT williamr@2: # define _Locale_XDIGIT __dj_ISXDIGIT williamr@2: # define _Locale_PUNCT __dj_ISPUNCT williamr@2: # define _Locale_SPACE __dj_ISSPACE williamr@2: # define _Locale_PRINT __dj_ISPRINT williamr@2: # define _Locale_ALPHA __dj_ISALPHA williamr@2: #elif defined (_STLP_SCO_OPENSERVER) williamr@2: # define _Locale_CNTRL _C williamr@2: # define _Locale_UPPER _U williamr@2: # define _Locale_LOWER _L williamr@2: # define _Locale_DIGIT _N williamr@2: # define _Locale_XDIGIT _X williamr@2: # define _Locale_PUNCT _P williamr@2: # define _Locale_SPACE _S williamr@2: # define _Locale_PRINT _R williamr@2: # define _Locale_ALPHA _A williamr@2: #elif defined (__NCR_SVR) williamr@2: # define _Locale_CNTRL _C williamr@2: # define _Locale_UPPER _U williamr@2: # define _Locale_LOWER _L williamr@2: # define _Locale_DIGIT _N williamr@2: # define _Locale_XDIGIT _X williamr@2: # define _Locale_PUNCT _P williamr@2: # define _Locale_SPACE _S williamr@2: # define _Locale_PRINT (_P | _U | _L | _N | _B) williamr@2: # define _Locale_ALPHA (_U | _L) williamr@2: #elif defined (_CRAY) williamr@2: # define _Locale_CNTRL _CNTRL williamr@2: # define _Locale_UPPER _UPPER williamr@2: # define _Locale_LOWER _LOWER williamr@2: # define _Locale_DIGIT _DIGIT williamr@2: # define _Locale_XDIGIT _XDIGIT williamr@2: # define _Locale_PUNCT _PUNCT williamr@2: # define _Locale_SPACE _SPACE williamr@2: # define _Locale_PRINT _PRINT williamr@2: # define _Locale_ALPHA _ALPHA williamr@2: #elif defined (_STLP_VXWORKS_TORNADO) williamr@2: #define _Locale_UPPER _C_UPPER /* 0x01 */ williamr@2: #define _Locale_LOWER _C_LOWER /* 0x02 */ williamr@2: #define _Locale_DIGIT _C_NUMBER /* 0x04 */ williamr@2: #define _Locale_SPACE _C_WHITE_SPACE /* 0x08 */ williamr@2: #define _Locale_PUNCT _C_PUNCT /* 0x10 */ williamr@2: #define _Locale_CNTRL _C_CONTROL /* 0x20 */ williamr@2: #define _Locale_XDIGIT _C_HEX_NUMBER /* 0x40 */ williamr@2: #define _Locale_PRINT (_C_B | _C_UPPER | _C_LOWER | _C_NUMBER | _C_PUNCT) williamr@2: #define _Locale_ALPHA (_C_UPPER | _C_LOWER) williamr@2: #endif williamr@2: williamr@2: # endif /* _STLP_C_LOCALE_H */