⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i18nmb.c

📁 eCos操作系统源码
💻 C
📖 第 1 页 / 共 2 页
字号:
//=================================================================////        i18nmb.c////        General testcase for C library multibyte functions////=================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//=================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     jjohnstn// Contributors:  // Date:          2000-11-24// Description:   Contains general testcode for C library multibyte character functions//////####DESCRIPTIONEND####// INCLUDES#include <pkgconf/libc_i18n.h>     // Configuration header#include <stdlib.h>#include <locale.h>#include <stdio.h>#include <cyg/infra/testcase.h>#include <string.h>// FUNCTIONSintmain( int argc, char *argv[] ){#ifdef CYGFUN_LIBC_I18N_LOCALE_C_JIS  unsigned char in_jis[] =    "abcd\x1b$B\x23\x25\x45\x46\x1b(B23";  unsigned char fmt_jis[] =     "abcd\x1b$B\x23\x25\x45\x46\x1b(B%d";    unsigned char * testjis[] = {     "abcd\x1b$B\x23\x25\x45\x46\x1b(B",    "abcd\x1b$B\x23\x25\x1b(Befg",    "\x1b$B\x23\x7f\x1b(B",    "\x1b$B\x44\x45\x46\x1b(B",    "\x1b$B",    "\x1b$B\x1b(B",    "\x1b$B\x44\x45",  };  int mblenjis0[] = { 1, 1, 1, 1, 5, 5, 0};  int mblenjis1[] = { 1, 1, 1, 1, 8, 1, 1, 1, 0 };  int mblenjis2[] = { -1 };  int mblenjis3[] = { 5, -1 };  int mblenjis4[] = { -1 };  int mblenjis5[] = { -1 };  int mblenjis6[] = { -1 };  int *mblenjis[] = {    mblenjis0,    mblenjis1,    mblenjis2,    mblenjis3,    mblenjis4,    mblenjis5,    mblenjis6,  };  wchar_t mbtowcjis0[] = {     (wchar_t)'a',     (wchar_t)'b',    (wchar_t)'c',    (wchar_t)'d',    (wchar_t)0x2325,    (wchar_t)0x4546,    (wchar_t)0  };#endif /* CYGFUN_LIBC_I18N_LOCALE_C_JIS */#ifdef CYGFUN_LIBC_I18N_LOCALE_C_SJIS  unsigned char in_sjis[] =     "ab\x81\x40\x9f\x7e\xe0\x80\xef\xfcgh23";  unsigned char fmt_sjis[] =     "ab\x81\x40\x9f\x7e\xe0\x80\xef\xfcgh%d";  unsigned char * testsjis[] = {    "ab\x81\x40\x9f\x7e\xe0\x80\xef\xfcgh",    "\x80\x40",    "\xa0\x40",    "\xdf\x40",    "\xf0\x40",    "\x84\x3f",    "\x85\x7f",    "\x86\xfd",    "\x81",  };  int mblensjis0[] = { 1, 1, 2, 2, 2, 2, 1, 1, 0};  int mblensjis1[] = { 1, 1, 0 };  int mblensjis2[] = { 1, 1, 0 };  int mblensjis3[] = { 1, 1, 0 };  int mblensjis4[] = { 1, 1, 0 };  int mblensjis5[] = { -1 };  int mblensjis6[] = { -1 };  int mblensjis7[] = { -1 };  int mblensjis8[] = { -1 };  int *mblensjis[] = {    mblensjis0,    mblensjis1,    mblensjis2,    mblensjis3,    mblensjis4,    mblensjis5,    mblensjis6,    mblensjis7,    mblensjis8,  };  wchar_t mbtowcsjis0[] = {     (wchar_t)'a',     (wchar_t)'b',    (wchar_t)0x8140,    (wchar_t)0x9f7e,    (wchar_t)0xe080,    (wchar_t)0xeffc,    (wchar_t)'g',    (wchar_t)'h',    (wchar_t)0  };#endif /* CYGFUN_LIBC_I18N_LOCALE_C_SJIS */    #ifdef CYGFUN_LIBC_I18N_LOCALE_C_EUCJP  unsigned char in_eucjp[] =     "ab\xa1\xa1\xa2\xfe\xe0\xfd\xef\xfcgh23";  unsigned char fmt_eucjp[] =     "ab\xa1\xa1\xa2\xfe\xe0\xfd\xef\xfcgh%d";   unsigned char * testeucjp[] = {    "ab\xa1\xa1\xa2\xfe\xe0\xfd\xef\xfcgh",    "\x80\xa1",    "\xa0\xa1",    "\xff\xa1",    "\x40\xa1",    "\xa3\x3f",    "\xa4\x7f",    "\xa5\xff",    "\xb1",  };  int mbleneucjp0[] = { 1, 1, 2, 2, 2, 2, 1, 1, 0};  int mbleneucjp1[] = { 1, -1 };  int mbleneucjp2[] = { 1, -1 };  int mbleneucjp3[] = { 1, -1 };  int mbleneucjp4[] = { 1, -1 };  int mbleneucjp5[] = { -1 };  int mbleneucjp6[] = { -1 };  int mbleneucjp7[] = { -1 };  int mbleneucjp8[] = { -1 };  int *mbleneucjp[] = {    mbleneucjp0,    mbleneucjp1,    mbleneucjp2,    mbleneucjp3,    mbleneucjp4,    mbleneucjp5,    mbleneucjp6,    mbleneucjp7,    mbleneucjp8,  };  wchar_t mbtowceucjp0[] = {     (wchar_t)'a',     (wchar_t)'b',    (wchar_t)0xa1a1,    (wchar_t)0xa2fe,    (wchar_t)0xe0fd,    (wchar_t)0xeffc,    (wchar_t)'g',    (wchar_t)'h',    (wchar_t)0  };#endif /* CYGFUN_LIBC_I18N_LOCALE_C_EUCJP */    wchar_t wcbuff[100];  char buff[100];    char *ptr, *locale;  int result, i, j, k;  wchar_t *wcptr;  k=k; locale=locale; // silence warnings    CYG_TEST_INIT();    CYG_TEST_INFO( "Starting tests from testcase " __FILE__ " for C library "		 "<stdlib.h> multi-byte character functions" );    setlocale (LC_ALL, "C");  CYG_TEST_PASS_FAIL( MB_CUR_MAX == 1, "MB_CUR_MAX");  CYG_TEST_PASS_FAIL( mblen(NULL, 0) == 0, "mblen(NULL, 0)");  CYG_TEST_PASS_FAIL( mbtowc(NULL, NULL, 0) == 0, "mbtowc(NULL, NULL, 0)");  CYG_TEST_PASS_FAIL( wctomb(NULL, 0) == 0, "wctomb(NULL, 0)");   ptr = "abcdefghijklmnop";  result = 1;  j = 0;  while (result > 0)     {      result = mblen (ptr, MB_CUR_MAX);      ptr += result;      ++j;    }  CYG_TEST_PASS_FAIL( result == 0, "mblen (ptr, MB_CUR_MAX)");  CYG_TEST_PASS_FAIL( j == strlen("abcdefghijklmnop") + 1, "j");  ptr = "1234567890";  wcptr = wcbuff;  memset(wcbuff, 'K', 40);  result = 1;  while (result > 0)     {      result = mbtowc (wcptr, ptr, MB_CUR_MAX);      CYG_TEST_PASS_FAIL( *wcptr == (wchar_t)*ptr, "*wcptr");      ptr += result;      wcptr++;      ++j;    }    CYG_TEST_PASS_FAIL( wcptr - wcbuff == 11, "wcptr - wcbuff");  CYG_TEST_PASS_FAIL( wcbuff[10] == 0, "wcbuff[10]");   memset (buff, 'K', 40);  ptr = buff;  wcptr = wcbuff;  result = 1;  for (i = 0; i < 11; ++i)    {      result = wctomb (ptr, *wcptr);      ptr += result;      wcptr++;    }    CYG_TEST_PASS_FAIL( strcmp("1234567890", buff) == 0, "strcmp(\"1234567890\", buff");  memset (wcbuff, 'K', 40);  result = mbstowcs (wcbuff, "abcdef", 7);  CYG_TEST_PASS_FAIL( result == 6, "mbstowcs (wcbuff, \"abcdef\", 7)");  CYG_TEST_PASS_FAIL(*((char *)(&wcbuff[7])) == 'K', "*((char *)(&wcbuff[7]))");  CYG_TEST_PASS_FAIL( wcbuff[6] == 0, "wcbuff[6]");   memset(buff, 'K', 20);  result = wcstombs (buff, wcbuff, 20);  CYG_TEST_PASS_FAIL( result == 6, "wcstombs (buff, wcbuff, 20)");  CYG_TEST_PASS_FAIL( strcmp(buff, "abcdef") == 0, "strcmp(buff, \"abcdef\")");   #ifdef CYGFUN_LIBC_I18N_LOCALE_C_JIS  CYG_TEST_INFO( "Testing C-JIS locale" );  locale = setlocale (LC_CTYPE, "C-JIS");  CYG_TEST_PASS_FAIL( locale != NULL, "setlocale (LC_CTYPE, \"C-JIS\")");    CYG_TEST_PASS_FAIL( strcmp(locale, "C-JIS") == 0, "strcmp(locale, \"C-JIS\")");  locale = setlocale (LC_CTYPE, NULL);  CYG_TEST_PASS_FAIL( strcmp(locale, "C-JIS") == 0, "setlocale(LC_CTYPE, NULL)");  CYG_TEST_PASS_FAIL( MB_CUR_MAX == 8, "MB_CUR_MAX");  CYG_TEST_PASS_FAIL( mblen(NULL, 0) != 0, "mblen(NULL, 0)");  CYG_TEST_PASS_FAIL( mbtowc(NULL, NULL, 0) != 0, "mbtowc(NULL, NULL, 0)");  CYG_TEST_PASS_FAIL( wctomb(NULL, 0) != 0, "wctomb(NULL, 0)");  for (i = 0; i < sizeof(testjis) / sizeof(char *); ++i)    {      ptr = testjis[i];      result = 1;      j = 0;      while (result > 0)         {          result = mblen (ptr, MB_CUR_MAX);	  CYG_TEST_PASS_FAIL( result == mblenjis[i][j], "mblen (ptr, MB_CUR_MAX)");          ptr += result;          ++j;        }      }    ptr = testjis[0];  wcptr = wcbuff;  memset(wcbuff, 'K', 40);  result = 1;  j = 0;  while (result > 0)     {      result = mbtowc (wcptr, ptr, MB_CUR_MAX);      CYG_TEST_PASS_FAIL( result == mblenjis0[j], "mbtowc (wcptr, ptr, MB_CUR_MAX)");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -