ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

hanzen.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:   See COPYING in the top level directory
00003  * PROJECT:     ReactOS system libraries
00004  * FILE:        lib/msvcrt/mbstring/hanzen.c
00005  * PURPOSE:     Multibyte conversion routines formerly called hantozen and zentohan
00006  * PROGRAMER:   Ariadne, Taiji Yamada
00007  * UPDATE HISTORY:
00008         Modified from Taiji Yamada japanese code system utilities
00009  *              12/04/99: Created
00010  */
00011 
00012 #include <mbctype.h>
00013 
00014 static unsigned short han_to_zen_ascii_table[0x5f] = {
00015   0x8140, 0x8149, 0x8168, 0x8194, 0x8190, 0x8193, 0x8195, 0x8166,
00016   0x8169, 0x816a, 0x8196, 0x817b, 0x8143, 0x817c, 0x8144, 0x815e,
00017   0x824f, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256,
00018   0x8257, 0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148,
00019   0x8197, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266,
00020   0x8267, 0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e,
00021   0x826f, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276,
00022   0x8277, 0x8278, 0x8279, 0x816d, 0x818f, 0x816e, 0x814f, 0x8151,
00023   0x8165, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287,
00024   0x8288, 0x8289, 0x828a, 0x828b, 0x828c, 0x828d, 0x828e, 0x828f,
00025   0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297,
00026   0x8298, 0x8299, 0x829a, 0x816f, 0x8162, 0x8170, 0x8150
00027 };
00028 static unsigned short han_to_zen_kana_table[0x40] = {
00029   0x8140, 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340,
00030   0x8342, 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362,
00031   0x815b, 0x8341, 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c,
00032   0x834e, 0x8350, 0x8352, 0x8354, 0x8356, 0x8358, 0x835a, 0x835c,
00033   0x835e, 0x8360, 0x8363, 0x8365, 0x8367, 0x8369, 0x836a, 0x836b,
00034   0x836c, 0x836d, 0x836e, 0x8371, 0x8374, 0x8377, 0x837a, 0x837d,
00035   0x837e, 0x8380, 0x8381, 0x8382, 0x8384, 0x8386, 0x8388, 0x8389,
00036   0x838a, 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, 0x814a, 0x814b
00037 };
00038 static unsigned char zen_to_han_kana_table[0x8396-0x8340+1] = {
00039   0xa7, 0xb1, 0xa8, 0xb2, 0xa9, 0xb3, 0xaa, 0xb4,
00040   0xab, 0xb5, 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
00041   0xb9, 0xb9, 0xba, 0xba, 0xbb, 0xbb, 0xbc, 0xbc,
00042   0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf, 0xc0, 0xc0,
00043   0xc1, 0xc1, 0xaf, 0xc2, 0xc2, 0xc3, 0xc3, 0xc4,
00044   0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xca,
00045   0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcd,
00046   0xcd, 0xcd, 0xce, 0xce, 0xce, 0xcf, 0xd0, 0,
00047   0xd1, 0xd2, 0xd3, 0xac, 0xd4, 0xad, 0xd5, 0xae,
00048   0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdc,
00049   0xb2, 0xb4, 0xa6, 0xdd, 0xb3, 0xb6, 0xb9
00050 };
00051 #define ZTOH_SYMBOLS 9
00052 static unsigned short zen_to_han_symbol_table_1[ZTOH_SYMBOLS] = {
00053   0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x815b, 0x814a, 0x814b
00054 };
00055 static unsigned char zen_to_han_symbol_table_2[ZTOH_SYMBOLS] = {
00056   0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xb0, 0xde, 0xdf
00057 };
00058 #define ISKANA(c) ((c) >= 0xa1 && (c) <= 0xdf)
00059 #define JISHIRA(c) ((c) >= 0x829f && (c) <= 0x82f1)
00060 #define JISKANA(c) ((c) >= 0x8340 && (c) <= 0x8396 && (c) != 0x837f)
00061 #define JTOKANA(c) ((c) <= 0x82dd ? (c) + 0xa1 : (c) + 0xa2)
00062 
00063 
00064 /*
00065  * @implemented
00066  */
00067 unsigned short _mbbtombc(unsigned short c)
00068 {
00069   if (c >= 0x20 && c <= 0x7e) {
00070     return han_to_zen_ascii_table[c - 0x20];
00071   } else if (ISKANA(c)) {
00072     return han_to_zen_kana_table[c - 0xa0];
00073   }
00074   return c;
00075 }
00076 
00077 
00078 /*
00079  * @implemented
00080  */
00081 unsigned short _mbctombb(unsigned short c)
00082 {
00083   int i;
00084   unsigned short *p;
00085 
00086   if (JISKANA(c)) {
00087     return zen_to_han_kana_table[c - 0x8340];
00088   } else if (JISHIRA(c)) {
00089     c = JTOKANA(c);
00090     return zen_to_han_kana_table[c - 0x8340];
00091   } else if (c <= 0x8396) {
00092     for (i = 0x20, p = han_to_zen_ascii_table; i <= 0x7e; i++, p++) {
00093       if (*p == c) {
00094         return i;
00095       }
00096     }
00097     for (i = 0; i < ZTOH_SYMBOLS; i++) {
00098       if (zen_to_han_symbol_table_1[i] == c) {
00099         return zen_to_han_symbol_table_2[i];
00100       }
00101     }
00102   }
00103   return c;
00104 }
00105 
00106 
00107 

Generated on Sat May 26 2012 04:35:27 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.