00001
00002
00003
00004
00005
00006
00007 static const unsigned short iso8859_9e_2uni[96] = {
00008
00009 0x00a0, 0x017d, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x012c, 0x00a7,
00010 0x016c, 0x00a9, 0x01e6, 0x00ab, 0x014a, 0x00ad, 0x00ae, 0x01d1,
00011
00012 0x00b0, 0x017e, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x012d, 0x00b7,
00013 0x016d, 0x00b9, 0x01e7, 0x00bb, 0x014b, 0x00bd, 0x0178, 0x01d2,
00014
00015 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x018f, 0x00c7,
00016 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
00017
00018 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00dd,
00019 0x019f, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
00020
00021 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x0259, 0x00e7,
00022 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
00023
00024 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00fd,
00025 0x0275, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
00026 };
00027
00028 static int
00029 iso8859_9e_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00030 {
00031 unsigned char c = *s;
00032 if (c >= 0xa0)
00033 *pwc = (ucs4_t) iso8859_9e_2uni[c-0xa0];
00034 else
00035 *pwc = (ucs4_t) c;
00036 return 1;
00037 }
00038
00039 static const unsigned char iso8859_9e_page00[96] = {
00040 0xa0, 0x00, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7,
00041 0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0xae, 0x00,
00042 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7,
00043 0x00, 0xb9, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00,
00044 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x00, 0xc7,
00045 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00046 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00,
00047 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0xd7, 0x00, 0xdf,
00048 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x00, 0xe7,
00049 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00050 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00,
00051 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0xf7, 0x00, 0xff,
00052 };
00053 static const unsigned char iso8859_9e_page01[136] = {
00054 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0,
00055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00056 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00,
00057 0xdd, 0xfd, 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, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00,
00061 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00062 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe,
00063 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00064 0x00, 0x00, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00,
00065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00066 0xbe, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xb1, 0x00,
00067 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00068 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6,
00069 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8,
00071 };
00072 static const unsigned char iso8859_9e_page01_d[24] = {
00073 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00,
00074 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00075 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba,
00076 };
00077
00078 static int
00079 iso8859_9e_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00080 {
00081 unsigned char c = 0;
00082 if (wc < 0x00a0) {
00083 *r = wc;
00084 return 1;
00085 }
00086 else if (wc >= 0x00a0 && wc < 0x0100)
00087 c = iso8859_9e_page00[wc-0x00a0];
00088 else if (wc >= 0x0118 && wc < 0x01a0)
00089 c = iso8859_9e_page01[wc-0x0118];
00090 else if (wc >= 0x01d0 && wc < 0x01e8)
00091 c = iso8859_9e_page01_d[wc-0x01d0];
00092 else if (wc == 0x0259)
00093 c = 0xe6;
00094 else if (wc == 0x0275)
00095 c = 0xf8;
00096 else if (wc == 0x20ac)
00097 c = 0xa4;
00098 if (c != 0) {
00099 *r = c;
00100 return 1;
00101 }
00102 return RET_ILSEQ;
00103 }