mkmap

来自「超小usb协议栈」· 代码 · 共 84 行

TXT
84
字号
#!/usr/bin/perl($ME = $0) =~ s|.*/||;$file = "maps/serial.map";$line = 1;open(PC, $file) || die("$!");while(<PC>){    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(<FIXUP>){    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(<USB>){    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";

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?