00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_7_2uni[96] = {
00009
00010 0x00a0, 0x2018, 0x2019, 0x00a3, 0xfffd, 0xfffd, 0x00a6, 0x00a7,
00011 0x00a8, 0x00a9, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0xfffd, 0x2015,
00012
00013 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7,
00014 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
00015
00016 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
00017 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
00018
00019 0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
00020 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
00021
00022 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
00023 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
00024
00025 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
00026 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd,
00027 };
00028
00029 static int
00030 iso8859_7_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_7_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_7_page00[32] = {
00050 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7,
00051 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00,
00052 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7,
00053 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00,
00054 };
00055 static const unsigned char iso8859_7_page03[80] = {
00056 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00,
00057 0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf,
00058 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00059 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00060 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00061 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
00062 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00063 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00064 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00065 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00,
00066 };
00067 static const unsigned char iso8859_7_page20[16] = {
00068 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00,
00069 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00070 };
00071
00072 static int
00073 iso8859_7_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00074 {
00075 unsigned char c = 0;
00076 if (wc < 0x00a0) {
00077 *r = wc;
00078 return 1;
00079 }
00080 else if (wc >= 0x00a0 && wc < 0x00c0)
00081 c = iso8859_7_page00[wc-0x00a0];
00082 else if (wc >= 0x0380 && wc < 0x03d0)
00083 c = iso8859_7_page03[wc-0x0380];
00084 else if (wc >= 0x2010 && wc < 0x2020)
00085 c = iso8859_7_page20[wc-0x2010];
00086 if (c != 0) {
00087 *r = c;
00088 return 1;
00089 }
00090 return RET_ILSEQ;
00091 }
00092 #endif