00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifdef NEED_TOWC
00010 static const unsigned short koi8_r_2uni[128] = {
00011
00012 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
00013 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
00014
00015 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
00016 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
00017
00018 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
00019 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
00020
00021 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
00022 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
00023
00024 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
00025 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
00026
00027 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
00028 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
00029
00030 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
00031 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
00032
00033 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
00034 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
00035 };
00036
00037 static int
00038 koi8_r_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00039 {
00040 unsigned char c = *s;
00041 if (c < 0x80)
00042 *pwc = (ucs4_t) c;
00043 else
00044 *pwc = (ucs4_t) koi8_r_2uni[c-0x80];
00045 return 1;
00046 }
00047 #endif
00048
00049 #ifdef NEED_TOMB
00050 static const unsigned char koi8_r_page00[88] = {
00051 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00052 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00053 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e,
00054 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00057 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00061 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f,
00062 };
00063 static const unsigned char koi8_r_page04[88] = {
00064 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00066 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
00067 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
00068 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
00069 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
00070 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
00071 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
00072 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
00073 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
00074 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00075 };
00076 static const unsigned char koi8_r_page22[80] = {
00077 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00,
00078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00079 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00080 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00082 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00083 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00084 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00085 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00086 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00,
00087 };
00088 static const unsigned char koi8_r_page23[8] = {
00089 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00090 };
00091 static const unsigned char koi8_r_page25[168] = {
00092 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00,
00093 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
00094 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
00095 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
00096 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00,
00097 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
00098 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
00099 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
00100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00102 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
00103 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
00104 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
00105 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00,
00106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00108 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
00109 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
00110 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00,
00111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00112 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00113 };
00114
00115 static int
00116 koi8_r_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00117 {
00118 unsigned char c = 0;
00119 if (wc < 0x0080) {
00120 *r = wc;
00121 return 1;
00122 }
00123 else if (wc >= 0x00a0 && wc < 0x00f8)
00124 c = koi8_r_page00[wc-0x00a0];
00125 else if (wc >= 0x0400 && wc < 0x0458)
00126 c = koi8_r_page04[wc-0x0400];
00127 else if (wc >= 0x2218 && wc < 0x2268)
00128 c = koi8_r_page22[wc-0x2218];
00129 else if (wc >= 0x2320 && wc < 0x2328)
00130 c = koi8_r_page23[wc-0x2320];
00131 else if (wc >= 0x2500 && wc < 0x25a8)
00132 c = koi8_r_page25[wc-0x2500];
00133 if (c != 0) {
00134 *r = c;
00135 return 1;
00136 }
00137 return RET_ILSEQ;
00138 }
00139 #endif