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