1f139291cSMauro Carvalho Chehab#!/usr/bin/perl -w
2f139291cSMauro Carvalho Chehab#
3f139291cSMauro Carvalho Chehab# winucase_convert.pl -- convert "Windows 8 Upper Case Mapping Table.txt" to
4f139291cSMauro Carvalho Chehab#                        a two-level set of C arrays.
5f139291cSMauro Carvalho Chehab#
6f139291cSMauro Carvalho Chehab#   Copyright 2013: Jeff Layton <jlayton@redhat.com>
7f139291cSMauro Carvalho Chehab#
8f139291cSMauro Carvalho Chehab#   This program is free software: you can redistribute it and/or modify
9f139291cSMauro Carvalho Chehab#   it under the terms of the GNU General Public License as published by
10f139291cSMauro Carvalho Chehab#   the Free Software Foundation, either version 3 of the License, or
11f139291cSMauro Carvalho Chehab#   (at your option) any later version.
12f139291cSMauro Carvalho Chehab#
13f139291cSMauro Carvalho Chehab#   This program is distributed in the hope that it will be useful,
14f139291cSMauro Carvalho Chehab#   but WITHOUT ANY WARRANTY; without even the implied warranty of
15f139291cSMauro Carvalho Chehab#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16f139291cSMauro Carvalho Chehab#   GNU General Public License for more details.
17f139291cSMauro Carvalho Chehab#
18f139291cSMauro Carvalho Chehab#   You should have received a copy of the GNU General Public License
19cba22b1cSAlexander A. Klimov#   along with this program.  If not, see <https://www.gnu.org/licenses/>.
20f139291cSMauro Carvalho Chehab#
21f139291cSMauro Carvalho Chehab
22f139291cSMauro Carvalho Chehabwhile(<>) {
23f139291cSMauro Carvalho Chehab	next if (!/^0x(..)(..)\t0x(....)\t/);
24f139291cSMauro Carvalho Chehab	$firstchar = hex($1);
25f139291cSMauro Carvalho Chehab	$secondchar = hex($2);
26f139291cSMauro Carvalho Chehab	$uppercase = hex($3);
27f139291cSMauro Carvalho Chehab
28f139291cSMauro Carvalho Chehab	$top[$firstchar][$secondchar] = $uppercase;
29f139291cSMauro Carvalho Chehab}
30f139291cSMauro Carvalho Chehab
31f139291cSMauro Carvalho Chehabfor ($i = 0; $i < 256; $i++) {
32f139291cSMauro Carvalho Chehab	next if (!$top[$i]);
33f139291cSMauro Carvalho Chehab
34f139291cSMauro Carvalho Chehab	printf("static const wchar_t t2_%2.2x[256] = {", $i);
35f139291cSMauro Carvalho Chehab	for ($j = 0; $j < 256; $j++) {
36f139291cSMauro Carvalho Chehab		if (($j % 8) == 0) {
37f139291cSMauro Carvalho Chehab			print "\n\t";
38f139291cSMauro Carvalho Chehab		} else {
39f139291cSMauro Carvalho Chehab			print " ";
40f139291cSMauro Carvalho Chehab		}
41f139291cSMauro Carvalho Chehab		printf("0x%4.4x,", $top[$i][$j] ? $top[$i][$j] : 0);
42f139291cSMauro Carvalho Chehab	}
43f139291cSMauro Carvalho Chehab	print "\n};\n\n";
44f139291cSMauro Carvalho Chehab}
45f139291cSMauro Carvalho Chehab
46f139291cSMauro Carvalho Chehabprintf("static const wchar_t *const toplevel[256] = {", $i);
47f139291cSMauro Carvalho Chehabfor ($i = 0; $i < 256; $i++) {
48f139291cSMauro Carvalho Chehab	if (($i % 8) == 0) {
49f139291cSMauro Carvalho Chehab		print "\n\t";
50f139291cSMauro Carvalho Chehab	} elsif ($top[$i]) {
51f139291cSMauro Carvalho Chehab		print " ";
52f139291cSMauro Carvalho Chehab	} else {
53f139291cSMauro Carvalho Chehab		print "  ";
54f139291cSMauro Carvalho Chehab	}
55f139291cSMauro Carvalho Chehab
56f139291cSMauro Carvalho Chehab	if ($top[$i]) {
57f139291cSMauro Carvalho Chehab		printf("t2_%2.2x,", $i);
58f139291cSMauro Carvalho Chehab	} else {
59f139291cSMauro Carvalho Chehab		print "NULL,";
60f139291cSMauro Carvalho Chehab	}
61f139291cSMauro Carvalho Chehab}
62f139291cSMauro Carvalho Chehabprint "\n};\n\n";
63