makemap.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:2k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2001 Edmund Grimley Evans <edmundo@rano.org>
  3.  * 
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License as published by
  6.  * the Free Software Foundation; either version 2 of the License, or
  7.  * (at your option) any later version.
  8.  * 
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  * 
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  */
  18. #include <errno.h>
  19. #include <iconv.h>
  20. #include <stdio.h>
  21. int main(int argc, char *argv[])
  22. {
  23.   iconv_t cd;
  24.   const char *ib;
  25.   char *ob;
  26.   size_t ibl, obl, k;
  27.   unsigned char c, buf[4];
  28.   int i, wc;
  29.   if (argc != 2) {
  30.     printf("Usage: %s ENCODINGn", argv[0]);
  31.     printf("Output a charset map for the 8-bit ENCODING.n");
  32.     return 1;
  33.   }
  34.   cd = iconv_open("UCS-4", argv[1]);
  35.   if (cd == (iconv_t)(-1)) {
  36.     perror("iconv_open");
  37.     return 1;
  38.   }
  39.   for (i = 0; i < 256; i++) {
  40.     c = i;
  41.     ib = &c;
  42.     ibl = 1;
  43.     ob = buf;
  44.     obl = 4;
  45.     k = iconv(cd, &ib, &ibl, &ob, &obl);
  46.     if (!k && !ibl && !obl) {
  47.       wc = (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
  48.       if (wc >= 0xffff) {
  49. printf("Dodgy value.n");
  50. return 1;
  51.       }
  52.     }
  53.     else if (k == (size_t)(-1) && errno == EILSEQ)
  54.       wc = 0xffff;
  55.     else {
  56.       printf("Non-standard iconv.n");
  57.       return 1;
  58.     }
  59.     if (i % 8 == 0)
  60.       printf("  ");
  61.     printf("0x%04x", wc);
  62.     if (i == 255)
  63.       printf("n");
  64.     else if (i % 8 == 7)
  65.       printf(",n");
  66.     else
  67.       printf(", ");
  68.   }
  69.   return 0;
  70. }