home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _48e3aaa4ff19dc25d1053c42b7117c3d < prev    next >
Encoding:
Text File  |  2004-06-01  |  1.3 KB  |  69 lines

  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. #ifdef WIN32
  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++) {
  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 */
  69.