00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_3_2uni[96] = {
00009
00010 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0xfffd, 0x0124, 0x00a7,
00011 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0xfffd, 0x017b,
00012
00013 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7,
00014 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0xfffd, 0x017c,
00015
00016 0x00c0, 0x00c1, 0x00c2, 0xfffd, 0x00c4, 0x010a, 0x0108, 0x00c7,
00017 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
00018
00019 0xfffd, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7,
00020 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df,
00021
00022 0x00e0, 0x00e1, 0x00e2, 0xfffd, 0x00e4, 0x010b, 0x0109, 0x00e7,
00023 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
00024
00025 0xfffd, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7,
00026 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9,
00027 };
00028
00029 static int
00030 iso8859_3_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_3_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_3_page00[96] = {
00050 0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7,
00051 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
00052 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7,
00053 0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
00054 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7,
00055 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00056 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7,
00057 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
00058 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7,
00059 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00060 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7,
00061 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00,
00062 };
00063 static const unsigned char iso8859_3_page01[120] = {
00064 0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00,
00065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00066 0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb,
00067 0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1,
00068 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00069 0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00,
00070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00071 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00072 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00074 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba,
00075 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00076 0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00,
00077 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00078 0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00,
00079 };
00080 static const unsigned char iso8859_3_page02[8] = {
00081 0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00082 };
00083
00084 static int
00085 iso8859_3_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00086 {
00087 unsigned char c = 0;
00088 if (wc < 0x00a0) {
00089 *r = wc;
00090 return 1;
00091 }
00092 else if (wc >= 0x00a0 && wc < 0x0100)
00093 c = iso8859_3_page00[wc-0x00a0];
00094 else if (wc >= 0x0108 && wc < 0x0180)
00095 c = iso8859_3_page01[wc-0x0108];
00096 else if (wc >= 0x02d8 && wc < 0x02e0)
00097 c = iso8859_3_page02[wc-0x02d8];
00098 if (c != 0) {
00099 *r = c;
00100 return 1;
00101 }
00102 return RET_ILSEQ;
00103 }
00104 #endif