00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_5_2uni[96] = {
00009
00010 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
00011 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f,
00012
00013 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
00014 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
00015
00016 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
00017 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
00018
00019 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
00020 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
00021
00022 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
00023 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
00024
00025 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
00026 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f,
00027 };
00028
00029 static int
00030 iso8859_5_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_5_2uni[c-0xa0];
00037 return 1;
00038 }
00039 #endif
00040
00041 #ifdef NEED_TOMB
00042 static const unsigned char iso8859_5_page00[16] = {
00043 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd,
00044 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
00045 };
00046 static const unsigned char iso8859_5_page04[96] = {
00047 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00048 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf,
00049 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00050 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00051 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00052 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00053 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00054 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
00055 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00056 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00057 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00058 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff,
00059 };
00060
00061 static int
00062 iso8859_5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00063 {
00064 unsigned char c = 0;
00065 if (wc < 0x00a0) {
00066 *r = wc;
00067 return 1;
00068 }
00069 else if (wc >= 0x00a0 && wc < 0x00b0)
00070 c = iso8859_5_page00[wc-0x00a0];
00071 else if (wc >= 0x0400 && wc < 0x0460)
00072 c = iso8859_5_page04[wc-0x0400];
00073 else if (wc == 0x2116)
00074 c = 0xf0;
00075 if (c != 0) {
00076 *r = c;
00077 return 1;
00078 }
00079 return RET_ILSEQ;
00080 }
00081 #endif