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 13int 14codepageMap(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 44int 45codepageConvert(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 56int 57codepageMap(int cp, int *map) 58{ 59 return 0; 60} 61 62int 63codepageConvert(int cp, const char *p) 64{ 65 return -1; 66} 67 68#endif /* not WIN32 */ 69