Added support for WC_NO_BEST_FIT_CHAR and default char parameters in
[wine.git] / include / wine / unicode.h
blob6c81470d417cac48b307f5294e1a3b8e263dbf50
1 /*
2 * Wine internal Unicode definitions
4 * Copyright 2000 Alexandre Julliard
5 */
7 #ifndef __WINE_UNICODE_H
8 #define __WINE_UNICODE_H
10 /* code page info common to SBCS and DBCS */
11 struct cp_info
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 */
20 struct sbcs_table
22 struct cp_info info;
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;
28 struct dbcs_table
30 struct cp_info info;
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 */
38 union cptable
40 struct cp_info info;
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__)
64 int dummy, res;
65 __asm__( "cld\n\t"
66 "repne\n\t"
67 "scasw\n\t"
68 "notl %0"
69 : "=c" (res), "=&D" (dummy)
70 : "0" (0xffffffff), "1" (str), "a" (0) );
71 return res - 1;
72 #else
73 const unsigned short *s = str;
74 while (*s) s++;
75 return s - str;
76 #endif
79 #endif /* __WINE_UNICODE_H */