1 /* 1 /* 2 * linux/fs/nls/nls_koi8-r.c 2 * linux/fs/nls/nls_koi8-r.c 3 * 3 * 4 * Charset koi8-r translation tables. 4 * Charset koi8-r translation tables. 5 * Generated automatically from the Unicode an 5 * Generated automatically from the Unicode and charset 6 * tables from the Unicode Organization (www.u 6 * tables from the Unicode Organization (www.unicode.org). 7 * The Unicode to charset table has only exact 7 * The Unicode to charset table has only exact mappings. 8 */ 8 */ 9 9 10 #include <linux/module.h> 10 #include <linux/module.h> 11 #include <linux/kernel.h> 11 #include <linux/kernel.h> 12 #include <linux/string.h> 12 #include <linux/string.h> 13 #include <linux/nls.h> 13 #include <linux/nls.h> 14 #include <linux/errno.h> 14 #include <linux/errno.h> 15 15 16 static const wchar_t charset2uni[256] = { 16 static const wchar_t charset2uni[256] = { 17 /* 0x00*/ 17 /* 0x00*/ 18 0x0000, 0x0001, 0x0002, 0x0003, 18 0x0000, 0x0001, 0x0002, 0x0003, 19 0x0004, 0x0005, 0x0006, 0x0007, 19 0x0004, 0x0005, 0x0006, 0x0007, 20 0x0008, 0x0009, 0x000a, 0x000b, 20 0x0008, 0x0009, 0x000a, 0x000b, 21 0x000c, 0x000d, 0x000e, 0x000f, 21 0x000c, 0x000d, 0x000e, 0x000f, 22 /* 0x10*/ 22 /* 0x10*/ 23 0x0010, 0x0011, 0x0012, 0x0013, 23 0x0010, 0x0011, 0x0012, 0x0013, 24 0x0014, 0x0015, 0x0016, 0x0017, 24 0x0014, 0x0015, 0x0016, 0x0017, 25 0x0018, 0x0019, 0x001a, 0x001b, 25 0x0018, 0x0019, 0x001a, 0x001b, 26 0x001c, 0x001d, 0x001e, 0x001f, 26 0x001c, 0x001d, 0x001e, 0x001f, 27 /* 0x20*/ 27 /* 0x20*/ 28 0x0020, 0x0021, 0x0022, 0x0023, 28 0x0020, 0x0021, 0x0022, 0x0023, 29 0x0024, 0x0025, 0x0026, 0x0027, 29 0x0024, 0x0025, 0x0026, 0x0027, 30 0x0028, 0x0029, 0x002a, 0x002b, 30 0x0028, 0x0029, 0x002a, 0x002b, 31 0x002c, 0x002d, 0x002e, 0x002f, 31 0x002c, 0x002d, 0x002e, 0x002f, 32 /* 0x30*/ 32 /* 0x30*/ 33 0x0030, 0x0031, 0x0032, 0x0033, 33 0x0030, 0x0031, 0x0032, 0x0033, 34 0x0034, 0x0035, 0x0036, 0x0037, 34 0x0034, 0x0035, 0x0036, 0x0037, 35 0x0038, 0x0039, 0x003a, 0x003b, 35 0x0038, 0x0039, 0x003a, 0x003b, 36 0x003c, 0x003d, 0x003e, 0x003f, 36 0x003c, 0x003d, 0x003e, 0x003f, 37 /* 0x40*/ 37 /* 0x40*/ 38 0x0040, 0x0041, 0x0042, 0x0043, 38 0x0040, 0x0041, 0x0042, 0x0043, 39 0x0044, 0x0045, 0x0046, 0x0047, 39 0x0044, 0x0045, 0x0046, 0x0047, 40 0x0048, 0x0049, 0x004a, 0x004b, 40 0x0048, 0x0049, 0x004a, 0x004b, 41 0x004c, 0x004d, 0x004e, 0x004f, 41 0x004c, 0x004d, 0x004e, 0x004f, 42 /* 0x50*/ 42 /* 0x50*/ 43 0x0050, 0x0051, 0x0052, 0x0053, 43 0x0050, 0x0051, 0x0052, 0x0053, 44 0x0054, 0x0055, 0x0056, 0x0057, 44 0x0054, 0x0055, 0x0056, 0x0057, 45 0x0058, 0x0059, 0x005a, 0x005b, 45 0x0058, 0x0059, 0x005a, 0x005b, 46 0x005c, 0x005d, 0x005e, 0x005f, 46 0x005c, 0x005d, 0x005e, 0x005f, 47 /* 0x60*/ 47 /* 0x60*/ 48 0x0060, 0x0061, 0x0062, 0x0063, 48 0x0060, 0x0061, 0x0062, 0x0063, 49 0x0064, 0x0065, 0x0066, 0x0067, 49 0x0064, 0x0065, 0x0066, 0x0067, 50 0x0068, 0x0069, 0x006a, 0x006b, 50 0x0068, 0x0069, 0x006a, 0x006b, 51 0x006c, 0x006d, 0x006e, 0x006f, 51 0x006c, 0x006d, 0x006e, 0x006f, 52 /* 0x70*/ 52 /* 0x70*/ 53 0x0070, 0x0071, 0x0072, 0x0073, 53 0x0070, 0x0071, 0x0072, 0x0073, 54 0x0074, 0x0075, 0x0076, 0x0077, 54 0x0074, 0x0075, 0x0076, 0x0077, 55 0x0078, 0x0079, 0x007a, 0x007b, 55 0x0078, 0x0079, 0x007a, 0x007b, 56 0x007c, 0x007d, 0x007e, 0x007f, 56 0x007c, 0x007d, 0x007e, 0x007f, 57 /* 0x80*/ 57 /* 0x80*/ 58 0x2500, 0x2502, 0x250c, 0x2510, 58 0x2500, 0x2502, 0x250c, 0x2510, 59 0x2514, 0x2518, 0x251c, 0x2524, 59 0x2514, 0x2518, 0x251c, 0x2524, 60 0x252c, 0x2534, 0x253c, 0x2580, 60 0x252c, 0x2534, 0x253c, 0x2580, 61 0x2584, 0x2588, 0x258c, 0x2590, 61 0x2584, 0x2588, 0x258c, 0x2590, 62 /* 0x90*/ 62 /* 0x90*/ 63 0x2591, 0x2592, 0x2593, 0x2320, 63 0x2591, 0x2592, 0x2593, 0x2320, 64 0x25a0, 0x2219, 0x221a, 0x2248, 64 0x25a0, 0x2219, 0x221a, 0x2248, 65 0x2264, 0x2265, 0x00a0, 0x2321, 65 0x2264, 0x2265, 0x00a0, 0x2321, 66 0x00b0, 0x00b2, 0x00b7, 0x00f7, 66 0x00b0, 0x00b2, 0x00b7, 0x00f7, 67 /* 0xa0*/ 67 /* 0xa0*/ 68 0x2550, 0x2551, 0x2552, 0x0451, 68 0x2550, 0x2551, 0x2552, 0x0451, 69 0x2553, 0x2554, 0x2555, 0x2556, 69 0x2553, 0x2554, 0x2555, 0x2556, 70 0x2557, 0x2558, 0x2559, 0x255a, 70 0x2557, 0x2558, 0x2559, 0x255a, 71 0x255b, 0x255c, 0x255d, 0x255e, 71 0x255b, 0x255c, 0x255d, 0x255e, 72 /* 0xb0*/ 72 /* 0xb0*/ 73 0x255f, 0x2560, 0x2561, 0x0401, 73 0x255f, 0x2560, 0x2561, 0x0401, 74 0x2562, 0x2563, 0x2564, 0x2565, 74 0x2562, 0x2563, 0x2564, 0x2565, 75 0x2566, 0x2567, 0x2568, 0x2569, 75 0x2566, 0x2567, 0x2568, 0x2569, 76 0x256a, 0x256b, 0x256c, 0x00a9, 76 0x256a, 0x256b, 0x256c, 0x00a9, 77 /* 0xc0*/ 77 /* 0xc0*/ 78 0x044e, 0x0430, 0x0431, 0x0446, 78 0x044e, 0x0430, 0x0431, 0x0446, 79 0x0434, 0x0435, 0x0444, 0x0433, 79 0x0434, 0x0435, 0x0444, 0x0433, 80 0x0445, 0x0438, 0x0439, 0x043a, 80 0x0445, 0x0438, 0x0439, 0x043a, 81 0x043b, 0x043c, 0x043d, 0x043e, 81 0x043b, 0x043c, 0x043d, 0x043e, 82 /* 0xd0*/ 82 /* 0xd0*/ 83 0x043f, 0x044f, 0x0440, 0x0441, 83 0x043f, 0x044f, 0x0440, 0x0441, 84 0x0442, 0x0443, 0x0436, 0x0432, 84 0x0442, 0x0443, 0x0436, 0x0432, 85 0x044c, 0x044b, 0x0437, 0x0448, 85 0x044c, 0x044b, 0x0437, 0x0448, 86 0x044d, 0x0449, 0x0447, 0x044a, 86 0x044d, 0x0449, 0x0447, 0x044a, 87 /* 0xe0*/ 87 /* 0xe0*/ 88 0x042e, 0x0410, 0x0411, 0x0426, 88 0x042e, 0x0410, 0x0411, 0x0426, 89 0x0414, 0x0415, 0x0424, 0x0413, 89 0x0414, 0x0415, 0x0424, 0x0413, 90 0x0425, 0x0418, 0x0419, 0x041a, 90 0x0425, 0x0418, 0x0419, 0x041a, 91 0x041b, 0x041c, 0x041d, 0x041e, 91 0x041b, 0x041c, 0x041d, 0x041e, 92 /* 0xf0*/ 92 /* 0xf0*/ 93 0x041f, 0x042f, 0x0420, 0x0421, 93 0x041f, 0x042f, 0x0420, 0x0421, 94 0x0422, 0x0423, 0x0416, 0x0412, 94 0x0422, 0x0423, 0x0416, 0x0412, 95 0x042c, 0x042b, 0x0417, 0x0428, 95 0x042c, 0x042b, 0x0417, 0x0428, 96 0x042d, 0x0429, 0x0427, 0x042a, 96 0x042d, 0x0429, 0x0427, 0x042a, 97 }; 97 }; 98 98 99 static const unsigned char page00[256] = { 99 static const unsigned char page00[256] = { 100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 101 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 101 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 102 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 102 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 103 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 103 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 104 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 104 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 105 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 105 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 106 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 106 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 107 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 107 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 108 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 108 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 109 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 109 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 110 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 110 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 111 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 111 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 112 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 112 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 113 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 113 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 114 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 114 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 115 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 115 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 116 116 117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 121 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 121 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 122 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x 122 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ 123 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x 123 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ 124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ 132 }; 132 }; 133 133 134 static const unsigned char page04[256] = { 134 static const unsigned char page04[256] = { 135 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x 135 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 137 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0x 137 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ 138 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0x 138 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ 139 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0x 139 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ 140 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0x 140 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ 141 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0x 141 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ 142 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0x 142 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ 143 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0x 143 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ 144 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0x 144 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ 145 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x 145 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 146 }; 146 }; 147 147 148 static const unsigned char page22[256] = { 148 static const unsigned char page22[256] = { 149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 152 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x 152 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 158 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 158 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 161 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x 161 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ 162 }; 162 }; 163 163 164 static const unsigned char page23[256] = { 164 static const unsigned char page23[256] = { 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 169 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x 169 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 170 }; 170 }; 171 171 172 static const unsigned char page25[256] = { 172 static const unsigned char page25[256] = { 173 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x 173 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 174 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x 174 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 175 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x 175 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 176 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x 176 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 177 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x 177 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 178 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x 178 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 179 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x 179 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 180 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x 180 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 183 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0x 183 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, /* 0x50-0x57 */ 184 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0x 184 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ 185 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0x 185 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x60-0x67 */ 186 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x 186 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 189 189 190 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x 190 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 191 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x 191 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 192 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x 192 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 194 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 194 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 195 }; 195 }; 196 196 197 static const unsigned char *const page_uni2cha 197 static const unsigned char *const page_uni2charset[256] = { 198 page00, NULL, NULL, NULL, page04 198 page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, 199 NULL, NULL, NULL, NULL, NULL, 199 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 200 NULL, NULL, NULL, NULL, NULL, 200 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 201 NULL, NULL, NULL, NULL, NULL, 201 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 202 NULL, NULL, page22, page23, NULL, 202 NULL, NULL, page22, page23, NULL, page25, NULL, NULL, 203 }; 203 }; 204 204 205 static const unsigned char charset2lower[256] 205 static const unsigned char charset2lower[256] = { 206 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 206 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 207 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 207 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 208 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 208 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 209 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 209 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 210 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 210 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 211 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 211 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 212 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 212 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 213 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 213 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 214 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 214 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ 215 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 215 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ 216 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 216 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ 217 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x 217 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 218 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 218 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 219 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 219 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 220 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 220 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 221 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 221 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 222 222 223 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 223 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 224 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 224 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 225 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 225 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 226 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 226 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 227 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 227 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 228 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 228 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 229 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0x 229 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 230 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 230 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ 231 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 231 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 232 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 232 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 233 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 233 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 234 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 234 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ 235 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 235 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ 236 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 236 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ 237 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 237 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xf0-0xf7 */ 238 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 238 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xf8-0xff */ 239 }; 239 }; 240 240 241 static const unsigned char charset2upper[256] 241 static const unsigned char charset2upper[256] = { 242 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 242 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 243 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 243 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 244 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 244 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 245 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 245 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 246 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 246 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 247 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 247 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 248 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 248 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 249 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 249 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 250 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 250 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 251 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 251 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 252 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 252 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 253 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 253 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 254 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 254 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ 255 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 255 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ 256 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 256 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ 257 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x 257 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 258 258 259 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 259 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 260 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 260 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 261 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 261 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 262 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 262 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 263 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xa5, 0x 263 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 264 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 264 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 265 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 265 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 266 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 266 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ 267 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 267 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ 268 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 268 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ 269 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 269 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ 270 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x 270 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xd8-0xdf */ 271 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 271 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 272 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 272 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 273 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 273 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 274 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x 274 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ 275 }; 275 }; 276 276 277 static int uni2char(wchar_t uni, unsigned char 277 static int uni2char(wchar_t uni, unsigned char *out, int boundlen) 278 { 278 { 279 const unsigned char *uni2charset; 279 const unsigned char *uni2charset; 280 unsigned char cl = uni & 0x00ff; 280 unsigned char cl = uni & 0x00ff; 281 unsigned char ch = (uni & 0xff00) >> 8 281 unsigned char ch = (uni & 0xff00) >> 8; 282 282 283 if (boundlen <= 0) 283 if (boundlen <= 0) 284 return -ENAMETOOLONG; 284 return -ENAMETOOLONG; 285 285 286 uni2charset = page_uni2charset[ch]; 286 uni2charset = page_uni2charset[ch]; 287 if (uni2charset && uni2charset[cl]) 287 if (uni2charset && uni2charset[cl]) 288 out[0] = uni2charset[cl]; 288 out[0] = uni2charset[cl]; 289 else 289 else 290 return -EINVAL; 290 return -EINVAL; 291 return 1; 291 return 1; 292 } 292 } 293 293 294 static int char2uni(const unsigned char *rawst 294 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) 295 { 295 { 296 *uni = charset2uni[*rawstring]; 296 *uni = charset2uni[*rawstring]; 297 if (*uni == 0x0000) 297 if (*uni == 0x0000) 298 return -EINVAL; 298 return -EINVAL; 299 return 1; 299 return 1; 300 } 300 } 301 301 302 static struct nls_table table = { 302 static struct nls_table table = { 303 .charset = "koi8-r", 303 .charset = "koi8-r", 304 .uni2char = uni2char, 304 .uni2char = uni2char, 305 .char2uni = char2uni, 305 .char2uni = char2uni, 306 .charset2lower = charset2lower, 306 .charset2lower = charset2lower, 307 .charset2upper = charset2upper, 307 .charset2upper = charset2upper, 308 }; 308 }; 309 309 310 static int __init init_nls_koi8_r(void) 310 static int __init init_nls_koi8_r(void) 311 { 311 { 312 return register_nls(&table); 312 return register_nls(&table); 313 } 313 } 314 314 315 static void __exit exit_nls_koi8_r(void) 315 static void __exit exit_nls_koi8_r(void) 316 { 316 { 317 unregister_nls(&table); 317 unregister_nls(&table); 318 } 318 } 319 319 320 module_init(init_nls_koi8_r) 320 module_init(init_nls_koi8_r) 321 module_exit(exit_nls_koi8_r) 321 module_exit(exit_nls_koi8_r) 322 322 323 MODULE_DESCRIPTION("NLS KOI8-R (Russian)"); << 324 MODULE_LICENSE("Dual BSD/GPL"); 323 MODULE_LICENSE("Dual BSD/GPL"); 325 324
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.