00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_6_2uni[96] = {
00009
00010 0x00a0, 0xfffd, 0xfffd, 0xfffd, 0x00a4, 0xfffd, 0xfffd, 0xfffd,
00011 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x060c, 0x00ad, 0xfffd, 0xfffd,
00012
00013 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00014 0xfffd, 0xfffd, 0xfffd, 0x061b, 0xfffd, 0xfffd, 0xfffd, 0x061f,
00015
00016 0xfffd, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
00017 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
00018
00019 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
00020 0x0638, 0x0639, 0x063a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00021
00022 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
00023 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
00024
00025 0x0650, 0x0651, 0x0652, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00026 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00027 };
00028
00029 static int
00030 iso8859_6_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00031 {
00032 unsigned char c = *s;
00033 if (c < 0xa0) {
00034 *pwc = (ucs4_t) c;
00035 return 1;
00036 }
00037 else {
00038 unsigned short wc = iso8859_6_2uni[c-0xa0];
00039 if (wc != 0xfffd) {
00040 *pwc = (ucs4_t) wc;
00041 return 1;
00042 }
00043 }
00044 return RET_ILSEQ;
00045 }
00046 #endif
00047
00048 #ifdef NEED_TOMB
00049 static const unsigned char iso8859_6_page00[16] = {
00050 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
00051 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
00052 };
00053 static const unsigned char iso8859_6_page06[80] = {
00054 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
00055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00056 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf,
00057 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00058 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00059 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00060 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00,
00061 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00062 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00063 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00,
00064 };
00065
00066 static int
00067 iso8859_6_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00068 {
00069 unsigned char c = 0;
00070 if (wc < 0x00a0) {
00071 *r = wc;
00072 return 1;
00073 }
00074 else if (wc >= 0x00a0 && wc < 0x00b0)
00075 c = iso8859_6_page00[wc-0x00a0];
00076 else if (wc >= 0x0608 && wc < 0x0658)
00077 c = iso8859_6_page06[wc-0x0608];
00078 if (c != 0) {
00079 *r = c;
00080 return 1;
00081 }
00082 return RET_ILSEQ;
00083 }
00084 #endif