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