#!/usr/bin/perl ($ME = $0) =~ s|.*/||; $file = "maps/serial.map"; $line = 1; open(PC, $file) || die("$!"); while() { if(/^\s*keycode\s+(\d+)\s*=\s*(\S+)/) { my($idx) = int($1); my($sym) = $2; if(defined($map{uc($sym)})) { # print STDERR "$file:$line: warning: `$sym' redefined\n"; } $map{uc($sym)} = $idx; } $line++; } close(PC); $file = "maps/fixup.map"; $line = 1; open(FIXUP, $file) || die("$!"); while() { if(/^\s*keycode\s+(\d+)\s*=\s*/) { my($idx) = int($1); for $sym (split(/\s+/, $')) { $map{uc($sym)} = $idx; } } $line++; } close(FIXUP); $file = "maps/usb.map"; $line = 1; open(USB, $file) || die("$!"); while() { if(/^\s*keycode\s+(\d+)\s*=\s*/) { my($idx) = int($1); for $sym (split(/\s+/, $')) { my($val) = $map{uc($sym)}; $map[$idx] = $val; if(!defined($val)) { print STDERR "$file:$line: warning: `$sym' undefined\n"; } else { last; } } } $line++; } close(USB); print "unsigned char usb_kbd_map[256] = \n{\n"; for($x = 0; $x < 32; $x++) { if($x && !($x % 2)) { print "\n"; } print " "; for($y = 0; $y < 8; $y++) { my($idx) = $x * 8 + $y; print sprintf(" 0x%02x,", int(defined($map[$idx]) ? $map[$idx]:0)); } print "\n"; } print "};\n";