nkeynes@681: #!/usr/bin/perl nkeynes@681: nkeynes@681: use POSIX; nkeynes@681: nkeynes@681: my $dckeysymsfile = "dckeysyms.h"; nkeynes@681: my %dcsyms = (); nkeynes@681: nkeynes@681: open DCKB, "<$dckeysymsfile" || die "Unable to open keysym file $dckeysymsfile"; nkeynes@681: while() { nkeynes@681: if( /^#define\s+DCKB_([^ ]*)/ ) { nkeynes@681: $dcsyms{$1} = "DCKB_$1"; nkeynes@681: } nkeynes@681: } nkeynes@681: nkeynes@681: my %hash = (); nkeynes@681: my %rhash = (); nkeynes@681: my $name = shift(); nkeynes@681: 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@681: nkeynes@681: print "/**\n * $name keyboard map autogenerated by genkeymap.pl\n */\n\n"; nkeynes@681: nkeynes@681: print "const gchar *${name}_keysyms_by_keycode[128] = { "; nkeynes@681: for( $i=0; $i < 128; $i++ ) { nkeynes@681: if( $i != 0 ) { print ", "; } nkeynes@681: if( $hash{$i} ) { nkeynes@681: print "\"$hash{$i}\""; nkeynes@681: } else { nkeynes@681: print "NULL"; nkeynes@681: } nkeynes@681: } nkeynes@681: print "};\n\n"; nkeynes@681: nkeynes@681: print "const uint16_t ${name}_keycode_to_dckeysym[128] = { "; nkeynes@681: for( $i=0; $i<128; $i++ ) { nkeynes@681: if( $i != 0 ) { print ", "; } nkeynes@681: if( $hash{$i} && $dcsyms{$hash{$i}} ) { nkeynes@681: print $dcsyms{$hash{$i}}; nkeynes@681: } else { nkeynes@681: print "DCKB_NONE"; nkeynes@681: } nkeynes@681: } nkeynes@681: print "};\n\n"; nkeynes@681: nkeynes@681: my @keys = sort {uc($a) cmp uc($b)} keys %rhash; nkeynes@681: print "#define ${name}_keysym_count " . ($#keys+1) . "\n"; nkeynes@681: print "struct ${name}_keymap_struct {\n const gchar *name;\n uint16_t keycode;\n};\n\n"; nkeynes@681: print "struct ${name}_keymap_struct ${name}_keysyms[] = { "; nkeynes@681: foreach my $keysym (@keys) { nkeynes@681: print "{\"$keysym\", $rhash{$keysym} }, "; nkeynes@681: } nkeynes@681: print "{NULL,-1} };\n\n";