virkeycode-mapgen.py 1.5 KB
Newer Older
1
#!/usr/bin/python
L
Lai Jiangshan 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

"""
Generate the big keycodes table for virkeys.
It read keymaps.csv from stdin and put the generated code to stdout.

Please keep keymaps.csv be exactly the same as:
http://git.gnome.org/browse/gtk-vnc/plain/src/keymaps.csv.
If anything inconsistent happens, please change this file
instead of keymaps.csv which is a mirror.
"""

import sys
import re

namecolums = (0,2,10)
17
xtkbdkey_index = 8
L
Lai Jiangshan 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

def quotestring(str):
    if str[0] != '"':
        return '"' + str + '"'
    return str

print '''
/* Generated file, DON'T edit it */

#ifndef VIRT_KEY_INTERNAL
# error do not use this; it is not a public header
#endif

struct keycode virKeycodes[] = {
'''

sys.stdin.readline() # eat the fist line.

for line in sys.stdin.xreadlines():
    a = re.match("([^,]*)," * 13 + "([^,]*)$", line[0:-1]).groups()
    b = ""
39
    rfbkey = 0
L
Lai Jiangshan 已提交
40 41 42 43
    for i in namecolums:
        b = b + (a[i] and quotestring(a[i]) or 'NULL') + ','
    for i in [ x for x in range(12) if not x in namecolums ]:
        b = b + (a[i] or '0') + ','
44 45 46 47 48 49 50 51 52 53
        if i == xtkbdkey_index:
            # RFB keycodes are XT kbd keycodes with a slightly
            # different encoding of 0xe0 scan codes. RFB uses
            # the high bit of the first byte, instead of the low
            # bit of the second byte.
            rfbkey = int(a[i] or '0')
            rfbkey = (rfbkey & 0x100) >> 1 | (rfbkey & 0x7f)

    # Append RFB keycode as the last column
    b = b + str(rfbkey)
L
Lai Jiangshan 已提交
54 55 56
    print "    { " + b + "},"

print '};'