nkeynes@681: #!/usr/bin/perl nkeynes@681: use POSIX; nkeynes@681: nkeynes@1183: if( $#ARGV != 3 ) { nkeynes@1183: die "Usage: genkeymap.pl \n"; nkeynes@1183: } nkeynes@1183: nkeynes@1183: my $name = shift(); nkeynes@1183: my $dckeysymsfile = shift(); nkeynes@1183: my $keymapfile = shift(); nkeynes@1183: my $outputfile = shift(); nkeynes@681: my %dcsyms = (); nkeynes@681: nkeynes@1183: my %hash = (); nkeynes@1183: my %rhash = (); nkeynes@1183: nkeynes@1183: open(DCKB, "<$dckeysymsfile") || die "Unable to open dckeysym file $dckeysymsfile"; nkeynes@681: while() { nkeynes@681: if( /^#define\s+DCKB_([^ ]*)/ ) { nkeynes@681: $dcsyms{$1} = "DCKB_$1"; nkeynes@681: } nkeynes@681: } nkeynes@1183: close DCKB; nkeynes@681: nkeynes@1183: open(KM, "<$keymapfile") || die "Unable to open keymap file $keymapfile"; nkeynes@1183: while() { nkeynes@681: my ($val, $sym) = split /\s+/; nkeynes@681: $ival = POSIX::strtol($val,0); nkeynes@681: $hash{$ival} = $sym; nkeynes@681: $rhash{$sym} = $ival; nkeynes@681: } nkeynes@1183: close KM; nkeynes@681: nkeynes@1183: open(OUT, ">$outputfile") || die "Unable to open output file $outputfile"; nkeynes@1183: print OUT "/**\n * $name keyboard map autogenerated by genkeymap.pl\n */\n\n"; nkeynes@1183: print OUT "const gchar *${name}_keysyms_by_keycode[128] = { "; nkeynes@681: nkeynes@681: for( $i=0; $i < 128; $i++ ) { nkeynes@1183: if( $i != 0 ) { nkeynes@1183: print OUT ", "; nkeynes@1183: } nkeynes@917: if( defined($hash{$i}) ) { nkeynes@1183: print OUT "\"$hash{$i}\""; nkeynes@681: } else { nkeynes@1183: print OUT "NULL"; nkeynes@681: } nkeynes@681: } nkeynes@1183: print OUT "};\n\n"; nkeynes@681: nkeynes@1183: print OUT "const uint16_t ${name}_keycode_to_dckeysym[128] = { "; nkeynes@681: for( $i=0; $i<128; $i++ ) { nkeynes@1183: if( $i != 0 ) { nkeynes@1183: print OUT ", "; nkeynes@1183: } nkeynes@917: if( defined($hash{$i}) && $dcsyms{$hash{$i}} ) { nkeynes@1183: print OUT $dcsyms{$hash{$i}}; nkeynes@681: } else { nkeynes@1183: print OUT "DCKB_NONE"; nkeynes@681: } nkeynes@681: } nkeynes@1183: print OUT "};\n\n"; nkeynes@681: nkeynes@681: my @keys = sort {uc($a) cmp uc($b)} keys %rhash; nkeynes@1183: print OUT "#define ${name}_keysym_count " . ($#keys+1) . "\n"; nkeynes@1183: print OUT "struct ${name}_keymap_struct {\n const gchar *name;\n uint16_t keycode;\n};\n\n"; nkeynes@1183: print OUT "struct ${name}_keymap_struct ${name}_keysyms[] = { "; nkeynes@681: foreach my $keysym (@keys) { nkeynes@1183: print OUT "{\"$keysym\", $rhash{$keysym} }, "; nkeynes@681: } nkeynes@1183: print OUT "{NULL,-1} };\n\n"; nkeynes@1183: close OUT;