00001
00002
00003
00004
00005
00006
00007 static const unsigned short tis620_2uni[96] = {
00008
00009 0xfffd, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
00010 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
00011
00012 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
00013 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
00014
00015 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
00016 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
00017
00018 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
00019 0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f,
00020
00021 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
00022 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
00023
00024 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
00025 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00026 };
00027
00028 static int
00029 tis620_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00030 {
00031 unsigned char c = *s;
00032 if (c < 0x80) {
00033 *pwc = (ucs4_t) c;
00034 return 1;
00035 }
00036 else if (c < 0xa0) {
00037 }
00038 else {
00039 unsigned short wc = tis620_2uni[c-0xa0];
00040 if (wc != 0xfffd) {
00041 *pwc = (ucs4_t) wc;
00042 return 1;
00043 }
00044 }
00045 return RET_ILSEQ;
00046 }
00047
00048 static const unsigned char tis620_page0e[96] = {
00049 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00050 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00051 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00052 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00053 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00054 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00055 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00056 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf,
00057 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00058 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00059 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00060 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00,
00061 };
00062
00063 static int
00064 tis620_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00065 {
00066 unsigned char c = 0;
00067 if (wc < 0x0080) {
00068 *r = wc;
00069 return 1;
00070 }
00071 else if (wc >= 0x0e00 && wc < 0x0e60)
00072 c = tis620_page0e[wc-0x0e00];
00073 if (c != 0) {
00074 *r = c;
00075 return 1;
00076 }
00077 return RET_ILSEQ;
00078 }