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