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 */