Ignore:
Timestamp:
Dec 6, 2004, 3:19:54 AM (21 years ago)
Author:
bird
Message:

wide-char and other locale stuff.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/include/InnoTekLIBC/locale.h

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.2
    r1704 r1705  
    3131
    3232#include <sys/cdefs.h>
     33#include <sys/_types.h>
    3334#include <locale.h>
    3435#include <uconv.h>
     
    4546    /** MBCS prefixes. Two bits per character. */
    4647    unsigned char   au2MBCSPrefixs[256/4];
     48#ifdef __OS2__
    4749    /** The converter object to convert to and from selected codepage
    4850      (used with MBCS codepages only). */
     
    5052    /** The locale object. */
    5153    LocaleObject    lobj;
     54#endif
    5255    /** Non-zero if there are any MBCS prefix characters in codepage. */
    5356    char            mbcs;
     
    5659typedef __LIBC_LOCALECOLLATE *__LIBC_PLOCALECOLLATE;
    5760
     61/**
     62 * Multibyte to/from wide character conversion functions.
     63 */
     64typedef struct __libc_localeCTypeFuncs
     65{
     66    int     (*pfnmbsinit)(const __mbstate_t *);
     67    size_t  (*pfnmbrtowc)(__wchar_t * __restrict, const char * __restrict, size_t, __mbstate_t * __restrict);
     68    size_t  (*pfnmbsnrtowcs)(__wchar_t * __restrict, const char ** __restrict, size_t, size_t, __mbstate_t * __restrict);
     69    size_t  (*pfnwcrtomb)(char * __restrict, __wchar_t, __mbstate_t * __restrict);
     70    size_t  (*pfnwcsnrtombs)(char * __restrict, const __wchar_t ** __restrict, size_t, size_t, __mbstate_t * __restrict);
     71} __LIBC_LOCALECTYPEFUNCS;
     72/** Pointer to multibyte/wide character conversion functions. */
     73typedef __LIBC_LOCALECTYPEFUNCS *__LIBC_PLOCALECTYPEFUNCS;
     74/** Pointer to const multibyte/wide character conversion functions. */
     75typedef const __LIBC_LOCALECTYPEFUNCS *__LIBC_PCLOCALECTYPEFUNCS;
    5876
    5977/**
     
    6381{
    6482    /** All uppercased characters. */
    65     unsigned char   auchUpper[256];
     83    unsigned char           auchUpper[256];
    6684    /** All lowercased characters. */
    67     unsigned char   auchLower[256];
     85    unsigned char           auchLower[256];
    6886    /** Bit flags for every character (for isXXX() function series). */
    69     unsigned short  ausfType[256];
     87    unsigned                aufType[256];
     88
     89/* part which we don't 'expose': */
    7090    /** MBCS prefixes. Two bits per character. */
    71     unsigned char   au2MBCSPrefixs[256/4];
     91    unsigned char           au2MBCSPrefixs[256/4];
     92    /** Unicode translation. (0xffff means not translation.) */
     93    unsigned short          aucUnicode[256];
     94    /** Unicode -> SBCS conversion: 0..128. */
     95    unsigned char           auchToSBCS0To128[128];
     96    /** Unicode -> SBCS conversion: Custom regions. */
     97    struct
     98    {
     99        /** First unicode code point. */
     100        unsigned short      usStart;
     101        /** Number of entries used. */
     102        unsigned short      cChars;
     103        /** Array SBCS chars corresponding to (wc - usStart). 0 means no conversion. */
     104        unsigned char       auch[28];
     105    }                       aSBCSs[8];
     106    /** Number of aSBCS regions in use. */
     107    unsigned                cSBCSs;
     108    /** Conversion functions. */
     109    __LIBC_LOCALECTYPEFUNCS CtypeFuncs;
     110#ifdef __OS2__
    72111    /** The converter object to convert to and from selected codepage
    73112      (used with MBCS codepages only). */
    74     UconvObject     uobj;
     113    UconvObject             uobj;
    75114    /** The locale object. */
    76     LocaleObject    lobj;
     115    LocaleObject            lobj;
     116#endif
    77117    /** Non-zero if there are any MBCS prefix characters in codepage. */
    78     char            mbcs;
     118    char                    mbcs;
    79119} __LIBC_LOCALECTYPE;
    80120/** Pointer to the Ctype locale struct. */
     
    83123
    84124/**
    85  * This structure contains the flags for the default (C/POSIX) locale.
    86  */
    87 typedef struct __libc_LocaleCtypeDefault
    88 {
    89     /** Bit flags for every character (for isXXX() function series). */
    90     unsigned short  ausfType[256];
    91 } __LIBC_LOCALECTYPEDEFAULT;
    92 /** Pointer to the Ctype locale struct. */
    93 typedef __LIBC_LOCALECTYPEDEFAULT *__LIBC_PLOCALECTYPEDEFAULT;
    94 
     125 * Unicode CType data.
     126 * The structure contains information for the first 256 unicode chars.
     127 */
     128typedef struct __libc_localeWCType
     129{
     130    /** All uppercased characters. */
     131    __wchar_t       awcUpper[256];
     132    /** All lowercased characters. */
     133    __wchar_t       awcLower[256];
     134    /** Bit flags for every character (for iswXXX() function series). */
     135    unsigned        aufType[256];
     136} __LIBC_LOCALEWCTYPE;
     137/** Pointer to the Ctype unicode struct. */
     138typedef __LIBC_LOCALEWCTYPE *__LIBC_PLOCALEWCTYPE;
    95139
    96140/**
     
    101145{
    102146    /** Short month names. */
    103     char *smonths[12];
     147    char   *smonths[12];
    104148    /** Long month names. */
    105     char *lmonths[12];
     149    char   *lmonths[12];
    106150    /** Short weekday names. */
    107     char *swdays[7];
     151    char   *swdays[7];
    108152    /** Long weekday names. */
    109     char *lwdays[7];
     153    char   *lwdays[7];
    110154    /** Date and time format. */
    111     char *date_time_fmt;
     155    char   *date_time_fmt;
    112156    /** Date format. */
    113     char *date_fmt;
     157    char   *date_fmt;
    114158    /** Time format. */
    115     char *time_fmt;
     159    char   *time_fmt;
    116160    /** AM strings. */
    117     char *am;
     161    char   *am;
    118162    /** PM strings. */
    119     char *pm;
     163    char   *pm;
     164    /** AM/PM format. (T_FMT_AMPM) */
     165    char   *ampm_fmt;
     166    /** ERA */
     167    char   *era;
     168    /** ERA_D_FMT. */
     169    char   *era_date_fmt;
     170    /** ERA_D_T_FMT. */
     171    char   *era_date_time_fmt;
     172    /** ERA_T_FMT. */
     173    char   *era_time_fmt;
     174    /** ALT_DIGITS. */
     175    char   *alt_digits;
     176    /** DATESEP. */
     177    char   *datesep;
     178    /** TIMESEP. */
     179    char   *timesep;
     180    /** LISTSEP. */
     181    char   *listsep;
    120182    /** If set all the strings are consts and shall not be free()ed. */
    121     int             fConsts;
     183    int     fConsts;
    122184} __LIBC_LOCALETIME;
    123185/** Pointer to time locale data. */
     
    135197    /** The lconv structure. */
    136198    struct lconv    s;
     199    /** CRNCYSTR. */
     200    char           *pszCrncyStr;
    137201    /** Indicates that all the numeric members are readonly const strings. */
    138202    int             fNumericConsts;
     
    145209
    146210/** String collation information. */
    147 extern __LIBC_LOCALECOLLATE     __libc_gLocaleCollate;
     211extern __LIBC_LOCALECOLLATE         __libc_gLocaleCollate;
    148212/** Character case conversion tables. */
    149 extern __LIBC_LOCALECTYPE       __libc_GLocaleCtype;
     213extern __LIBC_LOCALECTYPE           __libc_GLocaleCtype;
    150214/** Character case conversion tables for the default 'C'/'POSIX' locale. */
    151 extern const __LIBC_LOCALECTYPEDEFAULT __libc_GLocaleCtypeDefault;
     215extern const __LIBC_LOCALECTYPE     __libc_GLocaleCtypeDefault;
     216/** Cached Unicode (__wchar_t) case conversion tables and flags. */
     217extern const __LIBC_LOCALEWCTYPE    __libc_GLocaleWCtype;
    152218/** Locale information structure. */
    153 extern __LIBC_LOCALELCONV       __libc_gLocaleLconv;
     219extern __LIBC_LOCALELCONV           __libc_gLocaleLconv;
    154220/** Date / time formatting rules. */
    155 extern __LIBC_LOCALETIME        __libc_gLocaleTime;
    156 
     221extern __LIBC_LOCALETIME            __libc_gLocaleTime;
     222
     223/** Macros to lock the different locale structures.
     224 * @{
     225 */
     226#define LOCALE_LOCK()               do {} while (0)
     227#define LOCALE_UNLOCK()             do {} while (0)
     228#define LOCALE_CTYPE_RW_LOCK()      do {} while (0)
     229#define LOCALE_CTYPE_RW_UNLOCK()    do {} while (0)
     230#define LOCALE_CTYPE_RW_LOCK()      do {} while (0)
     231#define LOCALE_CTYPE_RW_UNLOCK()    do {} while (0)
     232/** @} */
    157233
    158234/** Convert a string to Unicode, apply some transform and convert back. */
     
    165241extern void __libc_TranslateCodepage(const char *cp, UniChar *ucp);
    166242
     243extern int __libc_localeCreateObjects(const char *pszLocale, const char *pszCodepage, char *pszCodepageActual, LocaleObject *plobj, UconvObject *puobj);
     244
     245extern void __libc_localeFuncsSBCS(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     246extern void __libc_localeFuncsDBCS(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     247extern void __libc_localeFuncsMBCS(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     248extern void __libc_localeFuncsUCS2(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     249extern void __libc_localeFuncsUTF8(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     250extern void __libc_localeFuncsDefault(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     251
     252extern size_t  __libc_localeFuncsGeneric_mbsnrtowcs(size_t  (*pfnmbrtowc)(__wchar_t * __restrict, const char * __restrict, size_t, __mbstate_t * __restrict),
     253                                                    __wchar_t * __restrict dst, const char ** __restrict src, size_t nms, size_t len, __mbstate_t * __restrict ps);
     254extern size_t  __libc_localeFuncsGeneric_wcsnrtombs(size_t  (*pfnwcrtomb)(char * __restrict, __wchar_t, __mbstate_t * __restrict),
     255                                                    char * __restrict dst, const __wchar_t ** __restrict src, size_t nwc, size_t len, __mbstate_t * __restrict ps);
     256
     257extern void     __libc_localeFuncsNone(__LIBC_PLOCALECTYPEFUNCS pFuncs);
     258extern size_t   __libc_locale_none_mbrtowc(__wchar_t * __restrict, const char * __restrict, size_t, __mbstate_t * __restrict);
     259extern int      __libc_locale_none_mbsinit(const __mbstate_t *);
     260extern size_t   __libc_locale_none_mbsnrtowcs(__wchar_t * __restrict dst, const char ** __restrict src, size_t nms, size_t len, __mbstate_t * __restrict ps __unused);
     261extern size_t   __libc_locale_none_wcrtomb(char * __restrict, __wchar_t, __mbstate_t * __restrict);
     262extern size_t   __libc_locale_none_wcsnrtombs(char * __restrict, const __wchar_t ** __restrict, size_t, size_t, __mbstate_t * __restrict);
    167263
    168264
Note: See TracChangeset for help on using the changeset viewer.