xref: /linux/fs/nls/mac-iceland.c (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
171ca97daSVladimir Serbinenko /*
2*8b8c0daaSLinus Torvalds  * linux/fs/nls/mac-iceland.c
371ca97daSVladimir Serbinenko  *
471ca97daSVladimir Serbinenko  * Charset maciceland translation tables.
571ca97daSVladimir Serbinenko  * Generated automatically from the Unicode and charset
671ca97daSVladimir Serbinenko  * tables from the Unicode Organization (www.unicode.org).
771ca97daSVladimir Serbinenko  * The Unicode to charset table has only exact mappings.
871ca97daSVladimir Serbinenko  */
971ca97daSVladimir Serbinenko 
1071ca97daSVladimir Serbinenko /*
1171ca97daSVladimir Serbinenko  * COPYRIGHT AND PERMISSION NOTICE
1271ca97daSVladimir Serbinenko  *
1371ca97daSVladimir Serbinenko  * Copyright 1991-2012 Unicode, Inc.  All rights reserved.  Distributed under
1471ca97daSVladimir Serbinenko  * the Terms of Use in http://www.unicode.org/copyright.html.
1571ca97daSVladimir Serbinenko  *
1671ca97daSVladimir Serbinenko  * Permission is hereby granted, free of charge, to any person obtaining a
1771ca97daSVladimir Serbinenko  * copy of the Unicode data files and any associated documentation (the "Data
1871ca97daSVladimir Serbinenko  * Files") or Unicode software and any associated documentation (the
1971ca97daSVladimir Serbinenko  * "Software") to deal in the Data Files or Software without restriction,
2071ca97daSVladimir Serbinenko  * including without limitation the rights to use, copy, modify, merge,
2171ca97daSVladimir Serbinenko  * publish, distribute, and/or sell copies of the Data Files or Software, and
2271ca97daSVladimir Serbinenko  * to permit persons to whom the Data Files or Software are furnished to do
2371ca97daSVladimir Serbinenko  * so, provided that (a) the above copyright notice(s) and this permission
2471ca97daSVladimir Serbinenko  * notice appear with all copies of the Data Files or Software, (b) both the
2571ca97daSVladimir Serbinenko  * above copyright notice(s) and this permission notice appear in associated
2671ca97daSVladimir Serbinenko  * documentation, and (c) there is clear notice in each modified Data File or
2771ca97daSVladimir Serbinenko  * in the Software as well as in the documentation associated with the Data
2871ca97daSVladimir Serbinenko  * File(s) or Software that the data or software has been modified.
2971ca97daSVladimir Serbinenko  *
3071ca97daSVladimir Serbinenko  * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
3171ca97daSVladimir Serbinenko  * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
3271ca97daSVladimir Serbinenko  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
3371ca97daSVladimir Serbinenko  * THIRD PARTY RIGHTS.  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
3471ca97daSVladimir Serbinenko  * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
3571ca97daSVladimir Serbinenko  * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
3671ca97daSVladimir Serbinenko  * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
3771ca97daSVladimir Serbinenko  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
3871ca97daSVladimir Serbinenko  * PERFORMANCE OF THE DATA FILES OR SOFTWARE.
3971ca97daSVladimir Serbinenko  *
4071ca97daSVladimir Serbinenko  * Except as contained in this notice, the name of a copyright holder shall
4171ca97daSVladimir Serbinenko  * not be used in advertising or otherwise to promote the sale, use or other
4271ca97daSVladimir Serbinenko  * dealings in these Data Files or Software without prior written
4371ca97daSVladimir Serbinenko  * authorization of the copyright holder.
4471ca97daSVladimir Serbinenko  */
4571ca97daSVladimir Serbinenko 
4671ca97daSVladimir Serbinenko #include <linux/module.h>
4771ca97daSVladimir Serbinenko #include <linux/kernel.h>
4871ca97daSVladimir Serbinenko #include <linux/string.h>
4971ca97daSVladimir Serbinenko #include <linux/nls.h>
5071ca97daSVladimir Serbinenko #include <linux/errno.h>
5171ca97daSVladimir Serbinenko 
5271ca97daSVladimir Serbinenko static const wchar_t charset2uni[256] = {
5371ca97daSVladimir Serbinenko 	/* 0x00 */
5471ca97daSVladimir Serbinenko 	0x0000, 0x0001, 0x0002, 0x0003,
5571ca97daSVladimir Serbinenko 	0x0004, 0x0005, 0x0006, 0x0007,
5671ca97daSVladimir Serbinenko 	0x0008, 0x0009, 0x000a, 0x000b,
5771ca97daSVladimir Serbinenko 	0x000c, 0x000d, 0x000e, 0x000f,
5871ca97daSVladimir Serbinenko 	/* 0x10 */
5971ca97daSVladimir Serbinenko 	0x0010, 0x0011, 0x0012, 0x0013,
6071ca97daSVladimir Serbinenko 	0x0014, 0x0015, 0x0016, 0x0017,
6171ca97daSVladimir Serbinenko 	0x0018, 0x0019, 0x001a, 0x001b,
6271ca97daSVladimir Serbinenko 	0x001c, 0x001d, 0x001e, 0x001f,
6371ca97daSVladimir Serbinenko 	/* 0x20 */
6471ca97daSVladimir Serbinenko 	0x0020, 0x0021, 0x0022, 0x0023,
6571ca97daSVladimir Serbinenko 	0x0024, 0x0025, 0x0026, 0x0027,
6671ca97daSVladimir Serbinenko 	0x0028, 0x0029, 0x002a, 0x002b,
6771ca97daSVladimir Serbinenko 	0x002c, 0x002d, 0x002e, 0x002f,
6871ca97daSVladimir Serbinenko 	/* 0x30 */
6971ca97daSVladimir Serbinenko 	0x0030, 0x0031, 0x0032, 0x0033,
7071ca97daSVladimir Serbinenko 	0x0034, 0x0035, 0x0036, 0x0037,
7171ca97daSVladimir Serbinenko 	0x0038, 0x0039, 0x003a, 0x003b,
7271ca97daSVladimir Serbinenko 	0x003c, 0x003d, 0x003e, 0x003f,
7371ca97daSVladimir Serbinenko 	/* 0x40 */
7471ca97daSVladimir Serbinenko 	0x0040, 0x0041, 0x0042, 0x0043,
7571ca97daSVladimir Serbinenko 	0x0044, 0x0045, 0x0046, 0x0047,
7671ca97daSVladimir Serbinenko 	0x0048, 0x0049, 0x004a, 0x004b,
7771ca97daSVladimir Serbinenko 	0x004c, 0x004d, 0x004e, 0x004f,
7871ca97daSVladimir Serbinenko 	/* 0x50 */
7971ca97daSVladimir Serbinenko 	0x0050, 0x0051, 0x0052, 0x0053,
8071ca97daSVladimir Serbinenko 	0x0054, 0x0055, 0x0056, 0x0057,
8171ca97daSVladimir Serbinenko 	0x0058, 0x0059, 0x005a, 0x005b,
8271ca97daSVladimir Serbinenko 	0x005c, 0x005d, 0x005e, 0x005f,
8371ca97daSVladimir Serbinenko 	/* 0x60 */
8471ca97daSVladimir Serbinenko 	0x0060, 0x0061, 0x0062, 0x0063,
8571ca97daSVladimir Serbinenko 	0x0064, 0x0065, 0x0066, 0x0067,
8671ca97daSVladimir Serbinenko 	0x0068, 0x0069, 0x006a, 0x006b,
8771ca97daSVladimir Serbinenko 	0x006c, 0x006d, 0x006e, 0x006f,
8871ca97daSVladimir Serbinenko 	/* 0x70 */
8971ca97daSVladimir Serbinenko 	0x0070, 0x0071, 0x0072, 0x0073,
9071ca97daSVladimir Serbinenko 	0x0074, 0x0075, 0x0076, 0x0077,
9171ca97daSVladimir Serbinenko 	0x0078, 0x0079, 0x007a, 0x007b,
9271ca97daSVladimir Serbinenko 	0x007c, 0x007d, 0x007e, 0x007f,
9371ca97daSVladimir Serbinenko 	/* 0x80 */
9471ca97daSVladimir Serbinenko 	0x00c4, 0x00c5, 0x00c7, 0x00c9,
9571ca97daSVladimir Serbinenko 	0x00d1, 0x00d6, 0x00dc, 0x00e1,
9671ca97daSVladimir Serbinenko 	0x00e0, 0x00e2, 0x00e4, 0x00e3,
9771ca97daSVladimir Serbinenko 	0x00e5, 0x00e7, 0x00e9, 0x00e8,
9871ca97daSVladimir Serbinenko 	/* 0x90 */
9971ca97daSVladimir Serbinenko 	0x00ea, 0x00eb, 0x00ed, 0x00ec,
10071ca97daSVladimir Serbinenko 	0x00ee, 0x00ef, 0x00f1, 0x00f3,
10171ca97daSVladimir Serbinenko 	0x00f2, 0x00f4, 0x00f6, 0x00f5,
10271ca97daSVladimir Serbinenko 	0x00fa, 0x00f9, 0x00fb, 0x00fc,
10371ca97daSVladimir Serbinenko 	/* 0xa0 */
10471ca97daSVladimir Serbinenko 	0x00dd, 0x00b0, 0x00a2, 0x00a3,
10571ca97daSVladimir Serbinenko 	0x00a7, 0x2022, 0x00b6, 0x00df,
10671ca97daSVladimir Serbinenko 	0x00ae, 0x00a9, 0x2122, 0x00b4,
10771ca97daSVladimir Serbinenko 	0x00a8, 0x2260, 0x00c6, 0x00d8,
10871ca97daSVladimir Serbinenko 	/* 0xb0 */
10971ca97daSVladimir Serbinenko 	0x221e, 0x00b1, 0x2264, 0x2265,
11071ca97daSVladimir Serbinenko 	0x00a5, 0x00b5, 0x2202, 0x2211,
11171ca97daSVladimir Serbinenko 	0x220f, 0x03c0, 0x222b, 0x00aa,
11271ca97daSVladimir Serbinenko 	0x00ba, 0x03a9, 0x00e6, 0x00f8,
11371ca97daSVladimir Serbinenko 	/* 0xc0 */
11471ca97daSVladimir Serbinenko 	0x00bf, 0x00a1, 0x00ac, 0x221a,
11571ca97daSVladimir Serbinenko 	0x0192, 0x2248, 0x2206, 0x00ab,
11671ca97daSVladimir Serbinenko 	0x00bb, 0x2026, 0x00a0, 0x00c0,
11771ca97daSVladimir Serbinenko 	0x00c3, 0x00d5, 0x0152, 0x0153,
11871ca97daSVladimir Serbinenko 	/* 0xd0 */
11971ca97daSVladimir Serbinenko 	0x2013, 0x2014, 0x201c, 0x201d,
12071ca97daSVladimir Serbinenko 	0x2018, 0x2019, 0x00f7, 0x25ca,
12171ca97daSVladimir Serbinenko 	0x00ff, 0x0178, 0x2044, 0x20ac,
12271ca97daSVladimir Serbinenko 	0x00d0, 0x00f0, 0x00de, 0x00fe,
12371ca97daSVladimir Serbinenko 	/* 0xe0 */
12471ca97daSVladimir Serbinenko 	0x00fd, 0x00b7, 0x201a, 0x201e,
12571ca97daSVladimir Serbinenko 	0x2030, 0x00c2, 0x00ca, 0x00c1,
12671ca97daSVladimir Serbinenko 	0x00cb, 0x00c8, 0x00cd, 0x00ce,
12771ca97daSVladimir Serbinenko 	0x00cf, 0x00cc, 0x00d3, 0x00d4,
12871ca97daSVladimir Serbinenko 	/* 0xf0 */
12971ca97daSVladimir Serbinenko 	0xf8ff, 0x00d2, 0x00da, 0x00db,
13071ca97daSVladimir Serbinenko 	0x00d9, 0x0131, 0x02c6, 0x02dc,
13171ca97daSVladimir Serbinenko 	0x00af, 0x02d8, 0x02d9, 0x02da,
13271ca97daSVladimir Serbinenko 	0x00b8, 0x02dd, 0x02db, 0x02c7,
13371ca97daSVladimir Serbinenko };
13471ca97daSVladimir Serbinenko 
13571ca97daSVladimir Serbinenko static const unsigned char page00[256] = {
13671ca97daSVladimir Serbinenko 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */
13771ca97daSVladimir Serbinenko 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
13871ca97daSVladimir Serbinenko 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */
13971ca97daSVladimir Serbinenko 	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
14071ca97daSVladimir Serbinenko 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */
14171ca97daSVladimir Serbinenko 	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */
14271ca97daSVladimir Serbinenko 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */
14371ca97daSVladimir Serbinenko 	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */
14471ca97daSVladimir Serbinenko 	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */
14571ca97daSVladimir Serbinenko 	0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */
14671ca97daSVladimir Serbinenko 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */
14771ca97daSVladimir Serbinenko 	0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */
14871ca97daSVladimir Serbinenko 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */
14971ca97daSVladimir Serbinenko 	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */
15071ca97daSVladimir Serbinenko 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */
15171ca97daSVladimir Serbinenko 	0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */
15271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
15371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
15471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
15571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
15671ca97daSVladimir Serbinenko 	0xca, 0xc1, 0xa2, 0xa3, 0x00, 0xb4, 0x00, 0xa4, /* 0xa0-0xa7 */
15771ca97daSVladimir Serbinenko 	0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8, /* 0xa8-0xaf */
15871ca97daSVladimir Serbinenko 	0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, /* 0xb0-0xb7 */
15971ca97daSVladimir Serbinenko 	0xfc, 0x00, 0xbc, 0xc8, 0x00, 0x00, 0x00, 0xc0, /* 0xb8-0xbf */
16071ca97daSVladimir Serbinenko 	0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, /* 0xc0-0xc7 */
16171ca97daSVladimir Serbinenko 	0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, /* 0xc8-0xcf */
16271ca97daSVladimir Serbinenko 	0xdc, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, /* 0xd0-0xd7 */
16371ca97daSVladimir Serbinenko 	0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xa0, 0xde, 0xa7, /* 0xd8-0xdf */
16471ca97daSVladimir Serbinenko 	0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, /* 0xe0-0xe7 */
16571ca97daSVladimir Serbinenko 	0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0xe8-0xef */
16671ca97daSVladimir Serbinenko 	0xdd, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, /* 0xf0-0xf7 */
16771ca97daSVladimir Serbinenko 	0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xe0, 0xdf, 0xd8, /* 0xf8-0xff */
16871ca97daSVladimir Serbinenko };
16971ca97daSVladimir Serbinenko 
17071ca97daSVladimir Serbinenko static const unsigned char page01[256] = {
17171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
17271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
17371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
17471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
17571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
17671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
17771ca97daSVladimir Serbinenko 	0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
17871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
17971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
18071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
18171ca97daSVladimir Serbinenko 	0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
18271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
18371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
18471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
18571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
18671ca97daSVladimir Serbinenko 	0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
18771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
18871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
18971ca97daSVladimir Serbinenko 	0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
19071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
19171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
19271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
19371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
19471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
19571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
19671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
19771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
19871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
19971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
20071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
20171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
20271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
20371ca97daSVladimir Serbinenko };
20471ca97daSVladimir Serbinenko 
20571ca97daSVladimir Serbinenko static const unsigned char page02[256] = {
20671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
20771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
20871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
20971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
21071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
21171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
21271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
21371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
21471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
21571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
21671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
21771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
21871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
21971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
22071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
22171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
22271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
22371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
22471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
22571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
22671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
22771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
22871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
22971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
23071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, /* 0xc0-0xc7 */
23171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
23271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
23371ca97daSVladimir Serbinenko 	0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */
23471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
23571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
23671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
23771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
23871ca97daSVladimir Serbinenko };
23971ca97daSVladimir Serbinenko 
24071ca97daSVladimir Serbinenko static const unsigned char page03[256] = {
24171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
24271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
24371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
24471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
24571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
24671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
24771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
24871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
24971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
25071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
25171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
25271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
25371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
25471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
25571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
25671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
25771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
25871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
25971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
26071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
26171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
26271ca97daSVladimir Serbinenko 	0x00, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
26371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
26471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
26571ca97daSVladimir Serbinenko 	0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
26671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
26771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
26871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
26971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
27071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
27171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
27271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
27371ca97daSVladimir Serbinenko };
27471ca97daSVladimir Serbinenko 
27571ca97daSVladimir Serbinenko static const unsigned char page20[256] = {
27671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
27771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
27871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, /* 0x10-0x17 */
27971ca97daSVladimir Serbinenko 	0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00, /* 0x18-0x1f */
28071ca97daSVladimir Serbinenko 	0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, /* 0x20-0x27 */
28171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
28271ca97daSVladimir Serbinenko 	0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
28371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
28471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x40-0x47 */
28571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
28671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
28771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
28871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
28971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
29071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
29171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
29271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
29371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
29471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
29571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
29671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
29771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
29871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
29971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
30071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
30171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
30271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
30371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
30471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
30571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
30671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
30771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
30871ca97daSVladimir Serbinenko };
30971ca97daSVladimir Serbinenko 
31071ca97daSVladimir Serbinenko static const unsigned char page21[256] = {
31171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
31271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
31371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
31471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
31571ca97daSVladimir Serbinenko 	0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
31671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
31771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
31871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
31971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
32071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
32171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
32271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
32371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
32471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
32571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
32671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
32771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
32871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
32971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
33071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
33171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
33271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
33371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
33471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
33571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
33671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
33771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
33871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
33971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
34071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
34171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
34271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
34371ca97daSVladimir Serbinenko };
34471ca97daSVladimir Serbinenko 
34571ca97daSVladimir Serbinenko static const unsigned char page22[256] = {
34671ca97daSVladimir Serbinenko 	0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, /* 0x00-0x07 */
34771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, /* 0x08-0x0f */
34871ca97daSVladimir Serbinenko 	0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
34971ca97daSVladimir Serbinenko 	0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00, /* 0x18-0x1f */
35071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
35171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
35271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
35371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
35471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
35571ca97daSVladimir Serbinenko 	0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
35671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
35771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
35871ca97daSVladimir Serbinenko 	0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, /* 0x60-0x67 */
35971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
36071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
36171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
36271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
36371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
36471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
36571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
36671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
36771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
36871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
36971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
37071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
37171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
37271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
37371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
37471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
37571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
37671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
37771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
37871ca97daSVladimir Serbinenko };
37971ca97daSVladimir Serbinenko 
38071ca97daSVladimir Serbinenko static const unsigned char page25[256] = {
38171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
38271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
38371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
38471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
38571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
38671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
38771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
38871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
38971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
39071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
39171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
39271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
39371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
39471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
39571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
39671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
39771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
39871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
39971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
40071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
40171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
40271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
40371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
40471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
40571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
40671ca97daSVladimir Serbinenko 	0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
40771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
40871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
40971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
41071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
41171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
41271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
41371ca97daSVladimir Serbinenko };
41471ca97daSVladimir Serbinenko 
41571ca97daSVladimir Serbinenko static const unsigned char pagef8[256] = {
41671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
41771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
41871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
41971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
42071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
42171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
42271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
42371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
42471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
42571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
42671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
42771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
42871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
42971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
43071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
43171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
43271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
43371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
43471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
43571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
43671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
43771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
43871ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
43971ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
44071ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
44171ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
44271ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
44371ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
44471ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
44571ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
44671ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
44771ca97daSVladimir Serbinenko 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, /* 0xf8-0xff */
44871ca97daSVladimir Serbinenko };
44971ca97daSVladimir Serbinenko 
45071ca97daSVladimir Serbinenko static const unsigned char *const page_uni2charset[256] = {
45171ca97daSVladimir Serbinenko 	page00, page01, page02, page03, NULL,   NULL,   NULL,   NULL,
45271ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
45371ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
45471ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
45571ca97daSVladimir Serbinenko 	page20, page21, page22, NULL,   NULL,   page25, NULL,   NULL,
45671ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
45771ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
45871ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
45971ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46071ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46171ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46271ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46371ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46471ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46571ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46671ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46771ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46871ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
46971ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47071ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47171ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47271ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47371ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47471ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47571ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47671ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47771ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47871ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
47971ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
48071ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
48171ca97daSVladimir Serbinenko 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
48271ca97daSVladimir Serbinenko 	pagef8, NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
48371ca97daSVladimir Serbinenko };
48471ca97daSVladimir Serbinenko 
48571ca97daSVladimir Serbinenko static const unsigned char charset2lower[256] = {
48671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x00-0x07 */
48771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08-0x0f */
48871ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x10-0x17 */
48971ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x18-0x1f */
49071ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x20-0x27 */
49171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x28-0x2f */
49271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x30-0x37 */
49371ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x38-0x3f */
49471ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x40-0x47 */
49571ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x48-0x4f */
49671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x50-0x57 */
49771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x58-0x5f */
49871ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x60-0x67 */
49971ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x68-0x6f */
50071ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x70-0x77 */
50171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x78-0x7f */
50271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x80-0x87 */
50371ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x88-0x8f */
50471ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x90-0x97 */
50571ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x98-0x9f */
50671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xa0-0xa7 */
50771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xa8-0xaf */
50871ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xb0-0xb7 */
50971ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xb8-0xbf */
51071ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xc0-0xc7 */
51171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xc8-0xcf */
51271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xd0-0xd7 */
51371ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xd8-0xdf */
51471ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xe0-0xe7 */
51571ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xe8-0xef */
51671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xf0-0xf7 */
51771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xf8-0xff */
51871ca97daSVladimir Serbinenko };
51971ca97daSVladimir Serbinenko 
52071ca97daSVladimir Serbinenko static const unsigned char charset2upper[256] = {
52171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x00-0x07 */
52271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08-0x0f */
52371ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x10-0x17 */
52471ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x18-0x1f */
52571ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x20-0x27 */
52671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x28-0x2f */
52771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x30-0x37 */
52871ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x38-0x3f */
52971ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x40-0x47 */
53071ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x48-0x4f */
53171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x50-0x57 */
53271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x58-0x5f */
53371ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x60-0x67 */
53471ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x68-0x6f */
53571ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x70-0x77 */
53671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x78-0x7f */
53771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x80-0x87 */
53871ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x88-0x8f */
53971ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x90-0x97 */
54071ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x98-0x9f */
54171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xa0-0xa7 */
54271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xa8-0xaf */
54371ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xb0-0xb7 */
54471ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xb8-0xbf */
54571ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xc0-0xc7 */
54671ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xc8-0xcf */
54771ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xd0-0xd7 */
54871ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xd8-0xdf */
54971ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xe0-0xe7 */
55071ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xe8-0xef */
55171ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xf0-0xf7 */
55271ca97daSVladimir Serbinenko 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xf8-0xff */
55371ca97daSVladimir Serbinenko };
55471ca97daSVladimir Serbinenko 
55571ca97daSVladimir Serbinenko static int uni2char(wchar_t uni, unsigned char *out, int boundlen)
55671ca97daSVladimir Serbinenko {
55771ca97daSVladimir Serbinenko 	const unsigned char *uni2charset;
55871ca97daSVladimir Serbinenko 	unsigned char cl = uni & 0x00ff;
55971ca97daSVladimir Serbinenko 	unsigned char ch = (uni & 0xff00) >> 8;
56071ca97daSVladimir Serbinenko 
56171ca97daSVladimir Serbinenko 	if (boundlen <= 0)
56271ca97daSVladimir Serbinenko 		return -ENAMETOOLONG;
56371ca97daSVladimir Serbinenko 
56471ca97daSVladimir Serbinenko 	uni2charset = page_uni2charset[ch];
56571ca97daSVladimir Serbinenko 	if (uni2charset && uni2charset[cl])
56671ca97daSVladimir Serbinenko 		out[0] = uni2charset[cl];
56771ca97daSVladimir Serbinenko 	else
56871ca97daSVladimir Serbinenko 		return -EINVAL;
56971ca97daSVladimir Serbinenko 	return 1;
57071ca97daSVladimir Serbinenko }
57171ca97daSVladimir Serbinenko 
57271ca97daSVladimir Serbinenko static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)
57371ca97daSVladimir Serbinenko {
57471ca97daSVladimir Serbinenko 	*uni = charset2uni[*rawstring];
57571ca97daSVladimir Serbinenko 	if (*uni == 0x0000)
57671ca97daSVladimir Serbinenko 		return -EINVAL;
57771ca97daSVladimir Serbinenko 	return 1;
57871ca97daSVladimir Serbinenko }
57971ca97daSVladimir Serbinenko 
58071ca97daSVladimir Serbinenko static struct nls_table table = {
58171ca97daSVladimir Serbinenko 	.charset	= "maciceland",
58271ca97daSVladimir Serbinenko 	.uni2char	= uni2char,
58371ca97daSVladimir Serbinenko 	.char2uni	= char2uni,
58471ca97daSVladimir Serbinenko 	.charset2lower	= charset2lower,
58571ca97daSVladimir Serbinenko 	.charset2upper	= charset2upper,
58671ca97daSVladimir Serbinenko };
58771ca97daSVladimir Serbinenko 
58871ca97daSVladimir Serbinenko static int __init init_nls_maciceland(void)
58971ca97daSVladimir Serbinenko {
59071ca97daSVladimir Serbinenko 	return register_nls(&table);
59171ca97daSVladimir Serbinenko }
59271ca97daSVladimir Serbinenko 
59371ca97daSVladimir Serbinenko static void __exit exit_nls_maciceland(void)
59471ca97daSVladimir Serbinenko {
59571ca97daSVladimir Serbinenko 	unregister_nls(&table);
59671ca97daSVladimir Serbinenko }
59771ca97daSVladimir Serbinenko 
59871ca97daSVladimir Serbinenko module_init(init_nls_maciceland)
59971ca97daSVladimir Serbinenko module_exit(exit_nls_maciceland)
60071ca97daSVladimir Serbinenko 
60171ca97daSVladimir Serbinenko MODULE_LICENSE("Dual BSD/GPL");
602