core/expat-2.0.1/xmlwf/codepage.c
changeset 300 b6d834208d33
parent 296 ea3dbc023c80
equal deleted inserted replaced
299:f06c5eba524d 300:b6d834208d33
       
     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 */