Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenhanzen.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
1.7.6.1
|