00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_9_2uni[48] = {
00009
00010 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
00011 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
00012
00013 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
00014 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
00015
00016 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
00017 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
00018 };
00019
00020 static int
00021 iso8859_9_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00022 {
00023 unsigned char c = *s;
00024 if (c >= 0xd0)
00025 *pwc = (ucs4_t) iso8859_9_2uni[c-0xd0];
00026 else
00027 *pwc = (ucs4_t) c;
00028 return 1;
00029 }
00030 #endif
00031
00032 #ifdef NEED_TOMB
00033 static const unsigned char iso8859_9_page00[48] = {
00034 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00035 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
00036 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00037 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00038 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00039 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff,
00040 };
00041 static const unsigned char iso8859_9_page01[72] = {
00042 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0,
00043 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00044 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00045 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00046 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00047 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00048 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00050 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe,
00051 };
00052
00053 static int
00054 iso8859_9_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00055 {
00056 unsigned char c = 0;
00057 if (wc < 0x00d0) {
00058 *r = wc;
00059 return 1;
00060 }
00061 else if (wc >= 0x00d0 && wc < 0x0100)
00062 c = iso8859_9_page00[wc-0x00d0];
00063 else if (wc >= 0x0118 && wc < 0x0160)
00064 c = iso8859_9_page01[wc-0x0118];
00065 if (c != 0) {
00066 *r = c;
00067 return 1;
00068 }
00069 return RET_ILSEQ;
00070 }
00071 #endif