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 */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>