00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_4_2uni[96] = {
00009
00010 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7,
00011 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af,
00012
00013 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7,
00014 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b,
00015
00016 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
00017 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a,
00018
00019 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
00020 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df,
00021
00022 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
00023 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b,
00024
00025 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
00026 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9,
00027 };
00028
00029 static int
00030 iso8859_4_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 else
00036 *pwc = (ucs4_t) iso8859_4_2uni[c-0xa0];
00037 return 1;
00038 }
00039 #endif
00040
00041 #ifdef NEED_TOMB
00042 static const unsigned char iso8859_4_page00[224] = {
00043 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7,
00044 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf,
00045 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00,
00046 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00047 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00,
00048 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00,
00049 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7,
00050 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
00051 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00,
00052 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00,
00053 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7,
00054 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00,
00055
00056 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00,
00057 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00,
00058 0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec,
00059 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00060 0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00,
00061 0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7,
00062 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3,
00063 0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00,
00064 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00,
00065 0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00,
00066 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3,
00067 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00068 0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc,
00069 0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00,
00070 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00,
00071 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00,
00072 };
00073 static const unsigned char iso8859_4_page02[32] = {
00074 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7,
00075 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00077 0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00,
00078 };
00079
00080 static int
00081 iso8859_4_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00082 {
00083 unsigned char c = 0;
00084 if (wc < 0x00a0) {
00085 *r = wc;
00086 return 1;
00087 }
00088 else if (wc >= 0x00a0 && wc < 0x0180)
00089 c = iso8859_4_page00[wc-0x00a0];
00090 else if (wc >= 0x02c0 && wc < 0x02e0)
00091 c = iso8859_4_page02[wc-0x02c0];
00092 if (c != 0) {
00093 *r = c;
00094 return 1;
00095 }
00096 return RET_ILSEQ;
00097 }
00098 #endif