59 lines
1.1 KiB
Perl
Executable File
59 lines
1.1 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
my $sdl_config_out = `sdl-config --cflags`;
|
|
if ($sdl_config_out =~ /-I(\S+)\s/)
|
|
{
|
|
my $sdl_path = $1;
|
|
open(my $fh, '<', "$sdl_path/SDL_keysym.h");
|
|
|
|
my %keys;
|
|
while (my $line = <$fh>)
|
|
{
|
|
if ($line =~ /SDLK_(\S+)\s*=\s*(\d+)/)
|
|
{
|
|
my $keyname = lc($1);
|
|
my $keynum = $2;
|
|
$keys{$keynum} = $keyname;
|
|
}
|
|
}
|
|
close($fh);
|
|
|
|
open(my $output, '>', 'sdl_keymap.cc');
|
|
print $output <<EOP;
|
|
|
|
#include <SDL.h>
|
|
|
|
const char * sdl_keymap[SDLK_LAST+1] = {
|
|
EOP
|
|
|
|
my $current_id = 0;
|
|
for my $id (sort { $a <=> $b } keys(%keys))
|
|
{
|
|
while ($current_id < $id)
|
|
{
|
|
printf $output " %-20s, /* %d */\n", '""', $current_id++;
|
|
}
|
|
printf $output " %-20s, /* %d */\n", '"' . $keys{$id} . '"', $id;
|
|
$current_id++;
|
|
}
|
|
print $output " \"last\"\n};\n";
|
|
close($output);
|
|
|
|
open(my $output_h, '>', 'sdl_keymap.h');
|
|
print $output_h <<EOP;
|
|
|
|
#ifndef SDL_KEYMAP_H
|
|
#define SDL_KEYMAP_H
|
|
|
|
extern char * sdl_keymap[SDLK_LAST+1];
|
|
|
|
#endif
|
|
EOP
|
|
close($output_h);
|
|
}
|
|
|
|
exit(0);
|