1# shift map
2
3# letters
4shift_map = {
5    'a': 'A',
6    'b': 'B',
7    'c': 'C',
8    'd': 'D',
9    'e': 'E',
10    'f': 'F',
11    'g': 'G',
12    'h': 'H',
13    'i': 'I',
14    'j': 'J',
15    'k': 'K',
16    'l': 'L',
17    'm': 'M',
18    'n': 'N',
19    'o': 'O',
20    'p': 'P',
21    'q': 'Q',
22    'r': 'R',
23    's': 'S',
24    't': 'T',
25    'u': 'U',
26    'v': 'V',
27    'w': 'W',
28    'x': 'X',
29    'y': 'Y',
30    'z': 'Z',
31    # numbers
32    '1': '!',
33    '2': '@',
34    '3': '#',
35    '4': '$',
36    '5': '%',
37    '6': '^',
38    '7': '&',
39    '8': '*',
40    '9': '(',
41    '0': ')',
42    # symbols
43    '-': '_',
44    '=': '+',
45    '[': '{',
46    ']': '}',
47    '\\': '|',
48    ';': ':',
49    '\'': '"',
50    ',': '<',
51    '.': '>',
52    '/': '?',
53    '`': '~',
54}
55
56# hex map
57
58# modifier keys
59mod_keys = {
60    '00': '',
61    '01': 'left_ctrl',
62    '02': 'left_shift',
63    '04': 'left_alt',
64    '08': 'left_meta',
65    '10': 'right_ctrl',
66    '20': 'right_shift',
67    '40': 'right_alt',
68    '80': 'right_meta',
69}
70
71# base keys
72
73base_keys = {
74    # meta
75    '00': '',  # none
76    '01': 'error_ovf',
77    # letters
78    '04': 'a',
79    '05': 'b',
80    '06': 'c',
81    '07': 'd',
82    '08': 'e',
83    '09': 'f',
84    '0a': 'g',
85    '0b': 'h',
86    '0c': 'i',
87    '0d': 'j',
88    '0e': 'k',
89    '0f': 'l',
90    '10': 'm',
91    '11': 'n',
92    '12': 'o',
93    '13': 'p',
94    '14': 'q',
95    '15': 'r',
96    '16': 's',
97    '17': 't',
98    '18': 'u',
99    '19': 'v',
100    '1a': 'w',
101    '1b': 'x',
102    '1c': 'y',
103    '1d': 'z',
104    # numbers
105    '1e': '1',
106    '1f': '2',
107    '20': '3',
108    '21': '4',
109    '22': '5',
110    '23': '6',
111    '24': '7',
112    '25': '8',
113    '26': '9',
114    '27': '0',
115    # misc
116    '28': 'enter',  # enter \n
117    '29': 'esc',
118    '2a': 'backspace',
119    '2b': 'tab',
120    '2c': 'spacebar',  # space
121    '2d': '-',
122    '2e': '=',
123    '2f': '[',
124    '30': ']',
125    '31': '\\',
126    '32': '=',
127    '33': '_SEMICOLON',
128    '34': 'KEY_APOSTROPHE',
129    '35': 'KEY_GRAVE',
130    '36': 'KEY_COMMA',
131    '37': 'KEY_DOT',
132    '38': 'KEY_SLASH',
133    '39': 'KEY_CAPSLOCK',
134    '3a': 'KEY_F1',
135    '3b': 'KEY_F2',
136    '3c': 'KEY_F3',
137    '3d': 'KEY_F4',
138    '3e': 'KEY_F5',
139    '3f': 'KEY_F6',
140    '40': 'KEY_F7',
141    '41': 'KEY_F8',
142    '42': 'KEY_F9',
143    '43': 'KEY_F10',
144    '44': 'KEY_F11',
145    '45': 'KEY_F12',
146    '46': 'KEY_SYSRQ',
147    '47': 'KEY_SCROLLLOCK',
148    '48': 'KEY_PAUSE',
149    '49': 'KEY_INSERT',
150    '4a': 'KEY_HOME',
151    '4b': 'KEY_PAGEUP',
152    '4c': 'KEY_DELETE',
153    '4d': 'KEY_END',
154    '4e': 'KEY_PAGEDOWN',
155    '4f': 'KEY_RIGHT',
156    '50': 'KEY_LEFT',
157    '51': 'KEY_DOWN',
158    '52': 'KEY_UP',
159    '53': 'KEY_NUMLOCK',
160    '54': 'KEY_KPSLASH',
161    '55': 'KEY_KPASTERISK',
162    '56': 'KEY_KPMINUS',
163    '57': 'KEY_KPPLUS',
164    '58': 'KEY_KPENTER',
165    '59': 'KEY_KP1',
166    '5a': 'KEY_KP2',
167    '5b': 'KEY_KP3',
168    '5c': 'KEY_KP4',
169    '5d': 'KEY_KP5',
170    '5e': 'KEY_KP6',
171    '5f': 'KEY_KP7',
172    '60': 'KEY_KP8',
173    '61': 'KEY_KP9',
174    '62': 'KEY_KP0',
175    '63': 'KEY_KPDOT',
176    '64': 'KEY_102ND',
177    '65': 'KEY_COMPOSE',
178    '66': 'KEY_POWER',
179    '67': 'KEY_KPEQUAL',
180    '68': 'KEY_F13',
181    '69': 'KEY_F14',
182    '6a': 'KEY_F15',
183    '6b': 'KEY_F16',
184    '6c': 'KEY_F17',
185    '6d': 'KEY_F18',
186    '6e': 'KEY_F19',
187    '6f': 'KEY_F20',
188    '70': 'KEY_F21',
189    '71': 'KEY_F22',
190    '72': 'KEY_F23',
191    '73': 'KEY_F24',
192    '74': 'KEY_OPEN',
193    '75': 'KEY_HELP',
194    '76': 'KEY_PROPS',
195    '77': 'KEY_FRONT',
196    '78': 'KEY_STOP',
197    '79': 'KEY_AGAIN',
198    '7a': 'KEY_UNDO',
199    '7b': 'KEY_CUT',
200    '7c': 'KEY_COPY',
201    '7d': 'KEY_PASTE',
202    '7e': 'KEY_FIND',
203    '7f': 'KEY_MUTE',
204    '80': 'KEY_VOLUMEUP',
205    '81': 'KEY_VOLUMEDOWN',
206    '85': 'KEY_KPCOMMA',
207    '87': 'KEY_RO',
208    '88': 'KEY_KATAKANAHIRAGANA',
209    '89': 'KEY_YEN',
210    '8a': 'KEY_HENKAN',
211    '8b': 'KEY_MUHENKAN',
212    '8c': 'KEY_KPJPCOMMA',
213    '90': 'KEY_HANGEUL',
214    '91': 'KEY_HANJA',
215    '92': 'KEY_KATAKANA',
216    '93': 'KEY_HIRAGANA',
217    '94': 'KEY_ZENKAKUHANKAKU',
218    'b6': 'KEY_KPLEFTPAREN',
219    'b7': 'KEY_KPRIGHTPAREN',
220    'e0': 'KEY_LEFTCTRL',
221    'e1': 'KEY_LEFTSHIFT',
222    'e2': 'KEY_LEFTALT',
223    'e3': 'KEY_LEFTMETA',
224    'e4': 'KEY_RIGHTCTRL',
225    'e5': 'KEY_RIGHTSHIFT',
226    'e6': 'KEY_RIGHTALT',
227    'e7': 'KEY_RIGHTMETA',
228    'e8': 'KEY_MEDIA_PLAYPAUSE',
229    'e9': 'KEY_MEDIA_STOPCD',
230    'ea': 'KEY_MEDIA_PREVIOUSSONG',
231    'eb': 'KEY_MEDIA_NEXTSONG',
232    'ec': 'KEY_MEDIA_EJECTCD',
233    'ed': 'KEY_MEDIA_VOLUMEUP',
234    'ee': 'KEY_MEDIA_VOLUMEDOWN',
235    'ef': 'KEY_MEDIA_MUTE',
236    'f0': 'KEY_MEDIA_WWW',
237    'f1': 'KEY_MEDIA_BACK',
238    'f2': 'KEY_MEDIA_FORWARD',
239    'f3': 'KEY_MEDIA_STOP',
240    'f4': 'KEY_MEDIA_FIND',
241    'f5': 'KEY_MEDIA_SCROLLUP',
242    'f6': 'KEY_MEDIA_SCROLLDOWN',
243    'f7': 'KEY_MEDIA_EDIT',
244    'f8': 'KEY_MEDIA_SLEEP',
245    'f9': 'KEY_MEDIA_COFFEE',
246    'fa': 'KEY_MEDIA_REFRESH',
247    'fb': 'KEY_MEDIA_CALC',
248}
249