equal
deleted
inserted
replaced
|
1 /* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd |
|
2 See the file COPYING for copying permission. |
|
3 */ |
|
4 |
|
5 #include "codepage.h" |
|
6 |
|
7 #ifdef WIN32 |
|
8 #define STRICT 1 |
|
9 #define WIN32_LEAN_AND_MEAN 1 |
|
10 |
|
11 #include <windows.h> |
|
12 |
|
13 int |
|
14 codepageMap(int cp, int *map) |
|
15 { |
|
16 int i; |
|
17 CPINFO info; |
|
18 if (!GetCPInfo(cp, &info) || info.MaxCharSize > 2) |
|
19 return 0; |
|
20 for (i = 0; i < 256; i++) |
|
21 map[i] = -1; |
|
22 if (info.MaxCharSize > 1) { |
|
23 for (i = 0; i < MAX_LEADBYTES; i+=2) { |
|
24 int j, lim; |
|
25 if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0) |
|
26 break; |
|
27 lim = info.LeadByte[i + 1]; |
|
28 for (j = info.LeadByte[i]; j <= lim; j++) |
|
29 map[j] = -2; |
|
30 } |
|
31 } |
|
32 for (i = 0; i < 256; i++) { |
|
33 if (map[i] == -1) { |
|
34 char c = (char)i; |
|
35 unsigned short n; |
|
36 if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, |
|
37 &c, 1, &n, 1) == 1) |
|
38 map[i] = n; |
|
39 } |
|
40 } |
|
41 return 1; |
|
42 } |
|
43 |
|
44 int |
|
45 codepageConvert(int cp, const char *p) |
|
46 { |
|
47 unsigned short c; |
|
48 if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, |
|
49 p, 2, &c, 1) == 1) |
|
50 return c; |
|
51 return -1; |
|
52 } |
|
53 |
|
54 #else /* not WIN32 */ |
|
55 |
|
56 int |
|
57 codepageMap(int cp, int *map) |
|
58 { |
|
59 return 0; |
|
60 } |
|
61 |
|
62 int |
|
63 codepageConvert(int cp, const char *p) |
|
64 { |
|
65 return -1; |
|
66 } |
|
67 |
|
68 #endif /* not WIN32 */ |