2 * Wine internal Unicode definitions
4 * Copyright 2000 Alexandre Julliard
7 #ifndef __WINE_UNICODE_H
8 #define __WINE_UNICODE_H
10 /* code page info common to SBCS and DBCS */
13 unsigned int codepage; /* codepage id */
14 unsigned int char_size; /* char size (1 or 2 bytes) */
15 unsigned short def_char; /* default char value (can be double-byte) */
16 unsigned short def_unicode_char; /* default Unicode char value */
17 const char *name; /* code page name */
23 const unsigned short *cp2uni; /* code page -> Unicode map */
24 const unsigned char *uni2cp_low; /* Unicode -> code page map */
25 const unsigned short *uni2cp_high;
31 const unsigned short *cp2uni; /* code page -> Unicode map */
32 const unsigned char *cp2uni_leadbytes;
33 const unsigned short *uni2cp_low; /* Unicode -> code page map */
34 const unsigned short *uni2cp_high;
35 unsigned char lead_bytes[12]; /* lead bytes ranges */
41 struct sbcs_table sbcs;
42 struct dbcs_table dbcs;
45 extern const union cptable *cp_get_table( unsigned int codepage );
46 extern const union cptable *cp_enum_table( unsigned int index );
48 extern int cp_mbstowcs( const union cptable *table, int flags,
49 const char *src, int srclen,
50 unsigned short *dst, int dstlen );
51 extern int cp_wcstombs( const union cptable *table, int flags,
52 const unsigned short *src, int srclen,
53 char *dst, int dstlen, const char *defchar, int *used );
56 static inline int is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
58 return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
61 static inline unsigned int strlenW( const unsigned short *str )
63 #if defined(__i386__) && defined(__GNUC__)
69 : "=c" (res), "=&D" (dummy)
70 : "0" (0xffffffff), "1" (str), "a" (0) );
73 const unsigned short *s = str;
79 #endif /* __WINE_UNICODE_H */