#!/usr/bin/perl

use lib "..";
use c;

my $KMAP_MAGIC = 0x8B39C07F;

BEGIN { @ARGV == 1 or die "usage: kmap2bkmap <keymap>\n" }

system("sudo loadkeys $ARGV[0]") == 0 or die;
open F, "dumpkeys -n -f |";
<F> =~ /^keymaps\s+(.*)/ or die;
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;

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;