Changeset 1022 for trunk


Ignore:
Timestamp:
Jan 23, 2004, 3:56:14 AM (22 years ago)
Author:
bird
Message:

Rewrote and added a few more aliases and a transformation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/src/lib/locale/__convcp.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1021 r1022  
    1616void __convert_codepage (const char *cp, UniChar *ucp)
    1717{
    18   size_t sl = 0;
     18  static const struct _cp_aliases
     19  {
     20      const char *pszAlias;
     21      const char *pszIBM;
     22  } aAliases[] =
     23  {   /* pszAlias   ->      pszIBM */
     24      { "SYSTEM",           ""         },
     25      { "ASCII",            "IBM-367"  },
     26      { "UTF-8",            "IBM-1208" },
     27      { "UTF-2",            "IBM-1200" },
     28      { "UTF-2LE",          "IBM-1200" },
     29      { "EUC-JP",           "IBM-954"  },
     30      { "EUC-KR",           "IBM-970"  },
     31      { "EUC-TW",           "IBM-964"  },
     32      { "EUC-CN",           "IBM-1383" },
     33      { "BIG5",             "IBM-950"  },
     34  };
     35  int       i;
     36  size_t    sl;
    1937
    20   if (!stricmp (cp, "SYSTEM"))
    21     *ucp = 0;
    22   else if (!stricmp (cp, "UTF-8"))
    23     memcpy (ucp, L"IBM-1208", 9*2);
    24   else if (!stricmp (cp, "UCS-2LE"))
    25     memcpy (ucp, L"IBM-1200", 9*2);
    26   else if (!stricmp (cp, "EUC-JP"))
    27     memcpy (ucp, L"IBM-954", 8*2);
    28   else if (!stricmp (cp, "EUC-KR"))
    29     memcpy (ucp, L"IBM-970", 8*2);
    30   else if (!stricmp (cp, "EUC-TW"))
    31     memcpy (ucp, L"IBM-964", 8*2);
    32   else if (!stricmp (cp, "EUC-CN"))
    33     memcpy (ucp, L"IBM-1383", 9*2);
    34   else if (!stricmp (cp, "BIG5"))
    35     memcpy (ucp, L"IBM-950", 8*2);
    36   else
     38  /*
     39   * Try aliases.
     40   */
     41  for (i = 0; i < sizeof(aAliases) / sizeof(aAliases[0]); i++ )
    3742    {
    38       /* Transform CPXXX naming style to IBM-XXX style */
    39       if ((cp[0] == 'C' || cp[0] == 'c') && (cp[1] == 'P' || cp[1] == 'p'))
     43      if (!strcmp(cp, aAliases[i].pszAlias))
    4044        {
    41           ucp[sl++] = 'I';
    42           ucp[sl++] = 'B';
    43           ucp[sl++] = 'M';
    44           ucp[sl++] = '-';
    45           cp += 2;
     45          cp = aAliases[i].pszIBM;
     46          while ((*ucp++ = *cp++) != 0)
     47              /* nada */;
     48          return;
    4649        }
     50    }
    4751
    48       while (*cp != '\0')
    49         ucp[sl++] = *cp++;
    50       ucp[sl] = 0;
     52  /*
     53   * Generic transformations:
     54   *    CPxxxx     -> IBM-xxxx
     55   *    ISO-xxxx-x -> ISOxxxx-x
     56   */
     57  sl = 0;
     58  /* Transform CPXXX naming style to IBM-XXX style */
     59  if ((cp[0] == 'C' || cp[0] == 'c')
     60   && (cp[1] == 'P' || cp[1] == 'p'))
     61    {
     62      ucp[sl++] = 'I';
     63      ucp[sl++] = 'B';
     64      ucp[sl++] = 'M';
     65      ucp[sl++] = '-';
     66      cp += 2;
    5167    }
     68  /* Transform ISO-XXXX-X naming style to ISOXXXX-X style */
     69  else if ((cp[0] == 'I' || cp[0] == 'i')
     70        && (cp[1] == 'S' || cp[1] == 's')
     71        && (cp[2] == 'O' || cp[2] == 'o')
     72        && (cp[3] == '-'))
     73  {
     74      ucp[sl++] = 'I';
     75      ucp[sl++] = 'S';
     76      ucp[sl++] = 'O';
     77      cp += 4;
     78  }
     79
     80  /* copy the rest of the string. */
     81  while (*cp != '\0')
     82    ucp[sl++] = *cp++;
     83  ucp[sl] = 0;
    5284}
Note: See TracChangeset for help on using the changeset viewer.