]> git.proxmox.com Git - spiceterm.git/blame - genkeysym.pl
d/control: fix priority-extra-is-replaced-by-priority-optional
[spiceterm.git] / genkeysym.pl
CommitLineData
7f3ff8c0
DM
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6
7my $header = "/usr/include/X11/keysymdef.h";
8
9print <<__EOD;
10typedef struct {
11 const char* name;
12 int keysym;
13 int unicode;
14} name2keysym_t;
15
16static const name2keysym_t name2keysym[] = {
17__EOD
18
19open(TMP, "<$header");
20while (defined(my $line = <TMP>)) {
21 next if $line !~ m/\#define /;
22 my @ea = split(/\s+/, $line, 4);
23
24 next if $ea[1] !~ m/^XK_(\S+)$/;
25 my $name = $1;
26
27 next if $ea[2] !~ m/^0x([A-Za-z0-9]+)$/;
28 my $keysym = hex($ea[2]);
29
30 my $unicode = 0;
31 if ($ea[3] && $ea[3] =~ m/\/\* U\+([0-9A-Fa-f]{4,6}) /) {
32 $unicode = hex($1);
33 }
34
35 if (!$unicode) {
36 # Latin-1 characters (1:1 mapping)
37 if (($keysym >= 0x0020 && $keysym <= 0x007e) ||
38 ($keysym >= 0x00a0 && $keysym <= 0x00ff)) {
39 $unicode = $keysym;
40 } elsif (($keysym & 0xff000000) == 0x01000000) {
41 # directly encoded 24-bit UCS characters */
42 $unicode = $keysym & 0x00ffffff;
43 } elsif ($keysym >= 0x0ff08 && $keysym <= 0x0ff1b) {
44 # tty BS, LF, RETURN, Delete
45 $unicode = $keysym - 0x0ff00;
46 } elsif ($keysym >= 0x0ffaa && $keysym <= 0x0ffaf) {
47 # keypad +*-/
48 $unicode = $keysym - 0x0ff80;
49 } elsif ($keysym >= 0x0ffb0 && $keysym <= 0x0ffb9) {
50 # keypad 01234...
51 $unicode = $keysym - 0x0ff80;
52 }
53 }
54
55 printf(" { \"%s\", 0x%03x, 0x%04x },\n", $name, $keysym, $unicode);
56}
57
58printf(" { NULL, 0x%03x, 0x%04x },\n", 0, 0);
59
60print <<__EOD;
61};
62__EOD