00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_8_2uni[96] = {
00009
00010 0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
00011 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
00012
00013 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
00014 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0xfffd,
00015
00016 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00017 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00018
00019 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
00020 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2017,
00021
00022 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
00023 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
00024
00025 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
00026 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd,
00027 };
00028
00029 static int
00030 iso8859_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00031 {
00032 unsigned char c = *s;
00033 if (c >= 0xa0) {
00034 unsigned short wc = iso8859_8_2uni[c-0xa0];
00035 if (wc != 0xfffd) {
00036 *pwc = (ucs4_t) wc;
00037 return 1;
00038 }
00039 }
00040 else {
00041 *pwc = (ucs4_t) c;
00042 return 1;
00043 }
00044 return RET_ILSEQ;
00045 }
00046 #endif
00047
00048 #ifdef NEED_TOMB
00049 static const unsigned char iso8859_8_page00[88] = {
00050 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00051 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf,
00052 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00053 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00,
00054 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa,
00057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00059 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00060 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba,
00061 };
00062 static const unsigned char iso8859_8_page05[32] = {
00063 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00064 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00065 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00066 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00,
00067 };
00068 static const unsigned char iso8859_8_page20[16] = {
00069 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe,
00070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf,
00071 };
00072
00073 static int
00074 iso8859_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00075 {
00076 unsigned char c = 0;
00077 if (wc < 0x00a0) {
00078 *r = wc;
00079 return 1;
00080 }
00081 else if (wc >= 0x00a0 && wc < 0x00f8)
00082 c = iso8859_8_page00[wc-0x00a0];
00083 else if (wc >= 0x05d0 && wc < 0x05f0)
00084 c = iso8859_8_page05[wc-0x05d0];
00085 else if (wc >= 0x2008 && wc < 0x2018)
00086 c = iso8859_8_page20[wc-0x2008];
00087 if (c != 0) {
00088 *r = c;
00089 return 1;
00090 }
00091 return RET_ILSEQ;
00092 }
00093 #endif