diff options
Diffstat (limited to 'perl-install/install/share/kmap2bkmap')
-rwxr-xr-x | perl-install/install/share/kmap2bkmap | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/perl-install/install/share/kmap2bkmap b/perl-install/install/share/kmap2bkmap new file mode 100755 index 000000000..9870ef3ef --- /dev/null +++ b/perl-install/install/share/kmap2bkmap @@ -0,0 +1,42 @@ +#!/usr/bin/perl + +use lib "/usr/lib/libDrakX"; +use c; + +my $KMAP_MAGIC = 0x8B39C07F; + +BEGIN { @ARGV == 1 or die "usage: kmap2bkmap <keymap>\n" } + +# load unicode keymap +my $unimap = $ARGV[0] . ".uni"; +system("sudo loadkeys $unimap") == 0 or die; +open my $F, "dumpkeys -n -f |"; +<$F> =~ /^keymaps\s+(.*)/ or die; + +my @keymaps; +foreach (split ',', $1) { + my @l = /(\d+)-(\d+)/; + my ($i, $j) = @l ? @l : ($_,$_); + $keymaps[$_] = 1 foreach $i .. $j; +} + +print pack("I", $KMAP_MAGIC); +print map { pack "i", $keymaps[$_] || 0 } 0 .. c::MAX_NR_KEYMAPS()-1; + +my @L; +foreach (<$F>) { + s/\+0x/0x/g; + my ($keycode, $key, undef, @l) = split; + $keycode eq 'keycode' or next; + my $i = 0; + $L[$i++][$key] = hex $_ foreach @l; +} +close $F or die "dumpkeys failed"; + +foreach (@L) { + foreach my $i (0 .. c::NR_KEYS()-1) { + print pack "s", defined $_->[$i] ? $_->[$i] : 0x200; + } +} + +exit 0; |