]>
Commit | Line | Data |
---|---|---|
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 | #if (defined(WIN32) || (defined(__WATCOMC__) && defined(__NT__))) | |
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 */ |