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