KLL Compiler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

hid_dict.py 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. #!/usr/bin/env python3
  2. # KLL Compiler - HID Dictionary Lookup
  3. #
  4. # USB Code Lookup Dictionary
  5. #
  6. # Copyright (C) 2014 by Jacob Alexander
  7. #
  8. # This file is free software: you can redistribute it and/or modify
  9. # it under the terms of the GNU General Public License as published by
  10. # the Free Software Foundation, either version 3 of the License, or
  11. # (at your option) any later version.
  12. #
  13. # This file is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. # GNU General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU General Public License
  19. # along with this file. If not, see <http://www.gnu.org/licenses/>.
  20. # Rather than generating tables of hex USB codes for the keymapping tables, readable defines are used (which correspond to usb_hid.h)
  21. hid_lookup_dictionary = dict([
  22. ( 0x00, 'KEY_NOEVENT' ), # Event, not a physical key
  23. ( 0x01, 'KEY_ERRORROLLOVER' ), # Event, not a physical key
  24. ( 0x02, 'KEY_POSTFAIL' ), # Event, not a physical key
  25. ( 0x03, 'KEY_ERRORUNDEFINED' ), # Event, not a physical key
  26. ( 0x04, 'KEY_A' ),
  27. ( 0x05, 'KEY_B' ),
  28. ( 0x06, 'KEY_C' ),
  29. ( 0x07, 'KEY_D' ),
  30. ( 0x08, 'KEY_E' ),
  31. ( 0x09, 'KEY_F' ),
  32. ( 0x0A, 'KEY_G' ),
  33. ( 0x0B, 'KEY_H' ),
  34. ( 0x0C, 'KEY_I' ),
  35. ( 0x0D, 'KEY_J' ),
  36. ( 0x0E, 'KEY_K' ),
  37. ( 0x0F, 'KEY_L' ),
  38. ( 0x10, 'KEY_M' ),
  39. ( 0x11, 'KEY_N' ),
  40. ( 0x12, 'KEY_O' ),
  41. ( 0x13, 'KEY_P' ),
  42. ( 0x14, 'KEY_Q' ),
  43. ( 0x15, 'KEY_R' ),
  44. ( 0x16, 'KEY_S' ),
  45. ( 0x17, 'KEY_T' ),
  46. ( 0x18, 'KEY_U' ),
  47. ( 0x19, 'KEY_V' ),
  48. ( 0x1A, 'KEY_W' ),
  49. ( 0x1B, 'KEY_X' ),
  50. ( 0x1C, 'KEY_Y' ),
  51. ( 0x1D, 'KEY_Z' ),
  52. ( 0x1E, 'KEY_1' ),
  53. ( 0x1F, 'KEY_2' ),
  54. ( 0x20, 'KEY_3' ),
  55. ( 0x21, 'KEY_4' ),
  56. ( 0x22, 'KEY_5' ),
  57. ( 0x23, 'KEY_6' ),
  58. ( 0x24, 'KEY_7' ),
  59. ( 0x25, 'KEY_8' ),
  60. ( 0x26, 'KEY_9' ),
  61. ( 0x27, 'KEY_0' ),
  62. ( 0x28, 'KEY_ENTER' ),
  63. ( 0x29, 'KEY_ESC' ),
  64. ( 0x2A, 'KEY_BACKSPACE' ),
  65. ( 0x2B, 'KEY_TAB' ),
  66. ( 0x2C, 'KEY_SPACE' ),
  67. ( 0x2D, 'KEY_MINUS' ),
  68. ( 0x2E, 'KEY_EQUAL' ),
  69. ( 0x2F, 'KEY_LEFT_BRACE' ),
  70. ( 0x30, 'KEY_RIGHT_BRACE' ),
  71. ( 0x31, 'KEY_BACKSLASH' ),
  72. ( 0x32, 'KEY_NUMBER' ),
  73. ( 0x33, 'KEY_SEMICOLON' ),
  74. ( 0x34, 'KEY_QUOTE' ),
  75. ( 0x35, 'KEY_BACKTICK' ),
  76. ( 0x36, 'KEY_COMMA' ),
  77. ( 0x37, 'KEY_PERIOD' ),
  78. ( 0x38, 'KEY_SLASH' ),
  79. ( 0x39, 'KEY_CAPS_LOCK' ),
  80. ( 0x3A, 'KEY_F1' ),
  81. ( 0x3B, 'KEY_F2' ),
  82. ( 0x3C, 'KEY_F3' ),
  83. ( 0x3D, 'KEY_F4' ),
  84. ( 0x3E, 'KEY_F5' ),
  85. ( 0x3F, 'KEY_F6' ),
  86. ( 0x40, 'KEY_F7' ),
  87. ( 0x41, 'KEY_F8' ),
  88. ( 0x42, 'KEY_F9' ),
  89. ( 0x43, 'KEY_F10' ),
  90. ( 0x44, 'KEY_F11' ),
  91. ( 0x45, 'KEY_F12' ),
  92. ( 0x46, 'KEY_PRINTSCREEN' ),
  93. ( 0x47, 'KEY_SCROLL_LOCK' ),
  94. ( 0x48, 'KEY_PAUSE' ),
  95. ( 0x49, 'KEY_INSERT' ),
  96. ( 0x4A, 'KEY_HOME' ),
  97. ( 0x4B, 'KEY_PAGE_UP' ),
  98. ( 0x4C, 'KEY_DELETE' ),
  99. ( 0x4D, 'KEY_END' ),
  100. ( 0x4E, 'KEY_PAGE_DOWN' ),
  101. ( 0x4F, 'KEY_RIGHT' ),
  102. ( 0x50, 'KEY_LEFT' ),
  103. ( 0x51, 'KEY_DOWN' ),
  104. ( 0x52, 'KEY_UP' ),
  105. ( 0x53, 'KEY_NUM_LOCK' ),
  106. ( 0x54, 'KEYPAD_SLASH' ),
  107. ( 0x55, 'KEYPAD_ASTERIX' ),
  108. ( 0x56, 'KEYPAD_MINUS' ),
  109. ( 0x57, 'KEYPAD_PLUS' ),
  110. ( 0x58, 'KEYPAD_ENTER' ),
  111. ( 0x59, 'KEYPAD_1' ),
  112. ( 0x5A, 'KEYPAD_2' ),
  113. ( 0x5B, 'KEYPAD_3' ),
  114. ( 0x5C, 'KEYPAD_4' ),
  115. ( 0x5D, 'KEYPAD_5' ),
  116. ( 0x5E, 'KEYPAD_6' ),
  117. ( 0x5F, 'KEYPAD_7' ),
  118. ( 0x60, 'KEYPAD_8' ),
  119. ( 0x61, 'KEYPAD_9' ),
  120. ( 0x62, 'KEYPAD_0' ),
  121. ( 0x63, 'KEYPAD_PERIOD' ),
  122. ( 0x64, 'KEY_ISO_SLASH' ),
  123. ( 0x65, 'KEY_APP' ),
  124. ( 0x66, 'KEYBOARD_STATUS' ), # Used for indicating status or errors, not a key
  125. ( 0x67, 'KEYPAD_EQUAL' ),
  126. ( 0x68, 'KEY_F13' ),
  127. ( 0x69, 'KEY_F14' ),
  128. ( 0x6A, 'KEY_F15' ),
  129. ( 0x6B, 'KEY_F16' ),
  130. ( 0x6C, 'KEY_F17' ),
  131. ( 0x6D, 'KEY_F18' ),
  132. ( 0x6E, 'KEY_F19' ),
  133. ( 0x6F, 'KEY_F20' ),
  134. ( 0x70, 'KEY_F21' ),
  135. ( 0x71, 'KEY_F22' ),
  136. ( 0x72, 'KEY_F23' ),
  137. ( 0x73, 'KEY_F24' ),
  138. ( 0x74, 'KEY_EXEC' ),
  139. ( 0x75, 'KEY_HELP' ),
  140. ( 0x76, 'KEY_MENU' ),
  141. ( 0x77, 'KEY_SELECT' ),
  142. ( 0x78, 'KEY_STOP' ),
  143. ( 0x79, 'KEY_AGAIN' ),
  144. ( 0x7A, 'KEY_UNDO' ),
  145. ( 0x7B, 'KEY_CUT' ),
  146. ( 0x7C, 'KEY_COPY' ),
  147. ( 0x7D, 'KEY_PASTE' ),
  148. ( 0x7E, 'KEY_FIND' ),
  149. ( 0x7F, 'KEY_MUTE' ),
  150. ( 0x80, 'KEY_VOL_UP' ),
  151. ( 0x81, 'KEY_VOL_DOWN' ),
  152. ( 0x82, 'KEY_CAPS_TLOCK' ), # Toggle "Locking" Scroll Lock (Old keyboards with Locking Caps Lock)
  153. ( 0x83, 'KEY_NUM_TLOCK' ),
  154. ( 0x84, 'KEY_SCROLL_TLOCK' ),
  155. ( 0x85, 'KEYPAD_COMMA' ), # Brazillian (See spec)
  156. ( 0x86, 'KEYPAD_EQUAL_AS' ), # AS/400 Keyboard (See spec)
  157. ( 0x87, 'KEY_INTER1' ), # KANJI1 - Brazillian and Japanese "Ru" and "-"
  158. ( 0x88, 'KEY_INTER2' ), # KANJI2 - Japanese Katakana/Hiragana
  159. ( 0x89, 'KEY_INTER3' ), # KANJI3 - Japanese Yen
  160. ( 0x8A, 'KEY_INTER4' ), # KANJI4 - Japanese Henkan
  161. ( 0x8B, 'KEY_INTER5' ), # KANJI5 - Japanese Muhenkan
  162. ( 0x8C, 'KEY_INTER6' ), # KANJI6 - PC0x62 Comma (Ka-m-ma)
  163. ( 0x8D, 'KEY_INTER7' ), # KANJI7 - Double-Byte/Single-Byte Toggle
  164. ( 0x8E, 'KEY_INTER8' ), # KANJI8 - Undefined
  165. ( 0x8F, 'KEY_INTER9' ), # KANJI9 - Undefined
  166. ( 0x90, 'KEY_LANG1' ), # Korean Hangul/English Toggle
  167. ( 0x91, 'KEY_LANG2' ), # Korean Hanja Conversion - Japanese Eisu
  168. ( 0x92, 'KEY_LANG3' ), # Japanese Katakana Key (USB)
  169. ( 0x93, 'KEY_LANG4' ), # Japanese Hiragana Key (USB)
  170. ( 0x94, 'KEY_LANG5' ), # Japanese Zenkaku/Hankaku Key (USB)
  171. ( 0x95, 'KEY_LANG6' ), # Reserved (Application Specific)
  172. ( 0x96, 'KEY_LANG7' ), # Reserved (Application Specific)
  173. ( 0x97, 'KEY_LANG8' ), # Reserved (Application Specific)
  174. ( 0x98, 'KEY_LANG9' ), # Reserved (Application Specific)
  175. ( 0x99, 'KEY_ALT_ERASE' ), # Special Erase (See Spec)
  176. ( 0x9A, 'KEY_SYSREQ_ATT' ), # Modifier Type
  177. ( 0x9B, 'KEY_CANCEL' ),
  178. ( 0x9C, 'KEY_CLEAR' ),
  179. ( 0x9D, 'KEY_PRIOR' ),
  180. ( 0x9E, 'KEY_RETURN' ),
  181. ( 0x9F, 'KEY_SEPARATOR' ),
  182. ( 0xA0, 'KEY_OUT' ),
  183. ( 0xA1, 'KEY_OPER' ),
  184. ( 0xA2, 'KEY_CLEAR_AGAIN' ),
  185. ( 0xA3, 'KEY_CRSEL_PROPS' ),
  186. ( 0xA4, 'KEY_EXSEL' ),
  187. # 0xA5 - 0xAF Reserved
  188. ( 0xB0, 'KEYPAD_00' ),
  189. ( 0xB1, 'KEYPAD_000' ),
  190. ( 0xB2, 'KEY_1000_SEP' ),
  191. ( 0xB3, 'KEY_DECIMAL_SEP' ),
  192. ( 0xB4, 'KEY_CURRENCY_MAIN' ),
  193. ( 0xB5, 'KEY_CURRENCY_SUB' ),
  194. ( 0xB6, 'KEYPAD_LPAREN' ),
  195. ( 0xB7, 'KEYPAD_RPAREN' ),
  196. ( 0xB8, 'KEYPAD_LBRACE' ),
  197. ( 0xB9, 'KEYPAD_RBRACE' ),
  198. ( 0xBA, 'KEYPAD_TAB' ),
  199. ( 0xBB, 'KEYPAD_BACKSPACE' ),
  200. ( 0xBC, 'KEYPAD_A' ),
  201. ( 0xBD, 'KEYPAD_B' ),
  202. ( 0xBE, 'KEYPAD_C' ),
  203. ( 0xBF, 'KEYPAD_D' ),
  204. ( 0xC0, 'KEYPAD_E' ),
  205. ( 0xC1, 'KEYPAD_F' ),
  206. ( 0xC2, 'KEYPAD_XOR' ),
  207. ( 0xC3, 'KEYPAD_CHEVRON' ),
  208. ( 0xC4, 'KEYPAD_PERCENT' ),
  209. ( 0xC5, 'KEYPAD_LTHAN' ),
  210. ( 0xC6, 'KEYPAD_GTHAN' ),
  211. ( 0xC7, 'KEYPAD_BITAND' ),
  212. ( 0xC8, 'KEYPAD_AND' ),
  213. ( 0xC9, 'KEYPAD_BITOR' ),
  214. ( 0xCA, 'KEYPAD_OR' ),
  215. ( 0xCB, 'KEYPAD_COLON' ),
  216. ( 0xCC, 'KEYPAD_POUND' ),
  217. ( 0xCD, 'KEYPAD_SPACE' ),
  218. ( 0xCE, 'KEYPAD_AT' ),
  219. ( 0xCF, 'KEYPAD_EXCLAIM' ),
  220. ( 0xD0, 'KEYPAD_MEM_STORE' ),
  221. ( 0xD1, 'KEYPAD_MEM_RECALL' ),
  222. ( 0xD2, 'KEYPAD_MEM_CLEAR' ),
  223. ( 0xD3, 'KEYPAD_MEM_ADD' ),
  224. ( 0xD4, 'KEYPAD_MEM_SUB' ),
  225. ( 0xD5, 'KEYPAD_MEM_MULT' ),
  226. ( 0xD6, 'KEYPAD_MEM_DIV' ),
  227. ( 0xD7, 'KEYPAD_PLUS_MINUS' ),
  228. ( 0xD8, 'KEYPAD_CLEAR' ),
  229. ( 0xD9, 'KEYPAD_CLEAR_ENTRY' ),
  230. ( 0xDA, 'KEYPAD_BINARY' ),
  231. ( 0xDB, 'KEYPAD_OCTAL' ),
  232. ( 0xDC, 'KEYPAD_DECIMAL' ),
  233. ( 0xDD, 'KEYPAD_HEX' ),
  234. # 0xDE - 0xDF Reserved
  235. ( 0xE0, 'KEY_LCTRL' ),
  236. ( 0xE1, 'KEY_LSHIFT' ),
  237. ( 0xE2, 'KEY_LALT' ),
  238. ( 0xE3, 'KEY_LGUI' ),
  239. ( 0xE4, 'KEY_RCTRL' ),
  240. ( 0xE5, 'KEY_RSHIFT' ),
  241. ( 0xE6, 'KEY_RALT' ),
  242. ( 0xE7, 'KEY_RGUI' ),
  243. # 0xE8 - 0xFFFF Reserved, using 0xF0 to 0xFF for function key placeholders
  244. ( 0xF0, 'KEY_FUN1' ),
  245. ( 0xF1, 'KEY_FUN2' ),
  246. ( 0xF2, 'KEY_FUN3' ),
  247. ( 0xF3, 'KEY_FUN4' ),
  248. ( 0xF4, 'KEY_FUN5' ),
  249. ( 0xF5, 'KEY_FUN6' ),
  250. ( 0xF6, 'KEY_FUN7' ),
  251. ( 0xF7, 'KEY_FUN8' ),
  252. ( 0xF8, 'KEY_FUN9' ),
  253. ( 0xF9, 'KEY_FUN10' ),
  254. ( 0xFA, 'KEY_FUN11' ),
  255. ( 0xFB, 'KEY_FUN12' ),
  256. ( 0xFC, 'KEY_FUN13' ),
  257. ( 0xFD, 'KEY_FUN14' ),
  258. ( 0xFE, 'KEY_FUN15' ),
  259. ( 0xFF, 'KEY_FUN16' ),
  260. ])
  261. # Lookup for KLL defined HID values, internally the compiler uses numbers to combine the keymaps
  262. kll_hid_lookup_dictionary = dict([
  263. ( 'A', 0x04 ),
  264. ( 'B', 0x05 ),
  265. ( 'C', 0x06 ),
  266. ( 'D', 0x07 ),
  267. ( 'E', 0x08 ),
  268. ( 'F', 0x09 ),
  269. ( 'G', 0x0A ),
  270. ( 'H', 0x0B ),
  271. ( 'I', 0x0C ),
  272. ( 'J', 0x0D ),
  273. ( 'K', 0x0E ),
  274. ( 'L', 0x0F ),
  275. ( 'M', 0x10 ),
  276. ( 'N', 0x11 ),
  277. ( 'O', 0x12 ),
  278. ( 'P', 0x13 ),
  279. ( 'Q', 0x14 ),
  280. ( 'R', 0x15 ),
  281. ( 'S', 0x16 ),
  282. ( 'T', 0x17 ),
  283. ( 'U', 0x18 ),
  284. ( 'V', 0x19 ),
  285. ( 'W', 0x1A ),
  286. ( 'X', 0x1B ),
  287. ( 'Y', 0x1C ),
  288. ( 'Z', 0x1D ),
  289. ( '1', 0x1E ),
  290. ( '2', 0x1F ),
  291. ( '3', 0x20 ),
  292. ( '4', 0x21 ),
  293. ( '5', 0x22 ),
  294. ( '6', 0x23 ),
  295. ( '7', 0x24 ),
  296. ( '8', 0x25 ),
  297. ( '9', 0x26 ),
  298. ( '0', 0x27 ),
  299. ( 'ENTER', 0x28 ),
  300. ( 'ESC', 0x29 ),
  301. ( 'BACKSPACE', 0x2A ),
  302. ( 'TAB', 0x2B ),
  303. ( 'SPACE', 0x2C ),
  304. ( '-', 0x2D ), ( 'MINUS', 0x2D ),
  305. ( '=', 0x2E ), ( 'EQUALS', 0x2E ), ( 'EQUAL', 0x2E ),
  306. ( '{', 0x2F ), ( 'LEFT BRACE', 0x2F ), ( 'LBRACE', 0x2F ),
  307. ( '}', 0x30 ), ( 'RIGHT BRACE', 0x30 ), ( 'RBRACE', 0x30 ),
  308. ( '\\', 0x31 ), ( 'BACKSLASH', 0x31 ),
  309. ( '#', 0x32 ), ( 'NUMBER', 0x32 ), ( 'HASH', 0x32 ),
  310. ( ';', 0x33 ), ( 'SEMICOLON', 0x33 ),
  311. ( "'", 0x34 ), ( 'QUOTE', 0x34 ),
  312. ( '`', 0x35 ), ( 'BACKTICK', 0x35 ),
  313. ( ',', 0x36 ), ( 'COMMA', 0x36 ),
  314. ( '.', 0x37 ), ( 'PERIOD', 0x37 ),
  315. ( '/', 0x38 ), ( 'SLASH', 0x38 ),
  316. ( 'CAPSLOCK', 0x39 ),
  317. ( 'F1', 0x3A ),
  318. ( 'F2', 0x3B ),
  319. ( 'F3', 0x3C ),
  320. ( 'F4', 0x3D ),
  321. ( 'F5', 0x3E ),
  322. ( 'F6', 0x3F ),
  323. ( 'F7', 0x40 ),
  324. ( 'F8', 0x41 ),
  325. ( 'F9', 0x42 ),
  326. ( 'F10', 0x43 ),
  327. ( 'F11', 0x44 ),
  328. ( 'F12', 0x45 ),
  329. ( 'PRINTSCREEN', 0x46 ),
  330. ( 'SCROLLLOCK', 0x47 ),
  331. ( 'PAUSE', 0x48 ),
  332. ( 'INSERT', 0x49 ),
  333. ( 'HOME', 0x4A ),
  334. ( 'PAGEUP', 0x4B ),
  335. ( 'DELETE', 0x4C ),
  336. ( 'END', 0x4D ),
  337. ( 'PAGEDOWN', 0x4E ),
  338. ( 'RIGHT', 0x4F ),
  339. ( 'LEFT', 0x50 ),
  340. ( 'DOWN', 0x51 ),
  341. ( 'UP', 0x52 ),
  342. ( 'NUMLOCK', 0x53 ),
  343. ( 'P/', 0x54 ), ( 'KEYPAD SLASH', 0x54 ),
  344. ( 'P*', 0x55 ), ( 'KEYPAD ASTERIX', 0x55 ),
  345. ( 'P-', 0x56 ), ( 'KEYPAD MINUS', 0x56 ),
  346. ( 'P+', 0x57 ), ( 'KEYPAD PLUS', 0x57 ),
  347. ( 'PENTER', 0x58 ), ( 'KEYPAD ENTER', 0x58 ),
  348. ( 'P1', 0x59 ), ( 'KEYPAD 1', 0x59 ),
  349. ( 'P2', 0x5A ), ( 'KEYPAD 2', 0x5A ),
  350. ( 'P3', 0x5B ), ( 'KEYPAD 3', 0x5B ),
  351. ( 'P4', 0x5C ), ( 'KEYPAD 4', 0x5C ),
  352. ( 'P5', 0x5D ), ( 'KEYPAD 5', 0x5D ),
  353. ( 'P6', 0x5E ), ( 'KEYPAD 6', 0x5E ),
  354. ( 'P7', 0x5F ), ( 'KEYPAD 7', 0x5F ),
  355. ( 'P8', 0x60 ), ( 'KEYPAD 8', 0x60 ),
  356. ( 'P9', 0x61 ), ( 'KEYPAD 9', 0x61 ),
  357. ( 'P0', 0x62 ), ( 'KEYPAD 0', 0x62 ),
  358. ( 'P.', 0x63 ), ( 'KEYPAD PERIOD', 0x63 ),
  359. ( 'ISO/', 0x64 ), ( 'ISO SLASH', 0x64 ),
  360. ( 'APP', 0x65 ),
  361. ( 'P=', 0x67 ), ( 'KEYPAD EQUAL', 0x67 ),
  362. ( 'F13', 0x68 ),
  363. ( 'F14', 0x69 ),
  364. ( 'F15', 0x6A ),
  365. ( 'F16', 0x6B ),
  366. ( 'F17', 0x6C ),
  367. ( 'F18', 0x6D ),
  368. ( 'F19', 0x6E ),
  369. ( 'F20', 0x6F ),
  370. ( 'F21', 0x70 ),
  371. ( 'F22', 0x71 ),
  372. ( 'F23', 0x72 ),
  373. ( 'F24', 0x73 ),
  374. ( 'EXEC', 0x74 ),
  375. ( 'HELP', 0x75 ),
  376. ( 'MENU', 0x76 ),
  377. ( 'SELECT', 0x77 ),
  378. ( 'STOP', 0x78 ),
  379. ( 'AGAIN', 0x79 ),
  380. ( 'UNDO', 0x7A ),
  381. ( 'CUT', 0x7B ),
  382. ( 'COPY', 0x7C ),
  383. ( 'PASTE', 0x7D ),
  384. ( 'FIND', 0x7E ),
  385. ( 'MUTE', 0x7F ),
  386. ( 'VOLUMEUP', 0x80 ),
  387. ( 'VOLUMEDOWN', 0x81 ),
  388. ( 'CAPSTOGGLELOCK', 0x82 ),
  389. ( 'NUMTOGGLELOCK', 0x83 ),
  390. ( 'SCROLLTOGGLELOCK', 0x84 ),
  391. ( 'P,', 0x85 ),
  392. ( 'KEYPAD AS400 EQUAL', 0x86 ),
  393. ( 'INTER1', 0x87 ), ( 'KANJI1', 0x87 ),
  394. ( 'INTER2', 0x88 ), ( 'KANJI2', 0x88 ), ( 'KANA', 0x88 ),
  395. ( 'INTER3', 0x89 ), ( 'KANJI3', 0x89 ), ( 'YEN', 0x89 ),
  396. ( 'INTER4', 0x8A ), ( 'KANJI4', 0x8A ), ( 'HENKAN', 0x8A ),
  397. ( 'INTER5', 0x8B ), ( 'KANJI5', 0x8B ), ( 'MUHENKAN', 0x8B ),
  398. ( 'INTER6', 0x8C ), ( 'KANJI6', 0x8C ),
  399. ( 'INTER7', 0x8D ), ( 'KANJI7', 0x8D ), ( 'BYTETOGGLE', 0x8D ),
  400. ( 'INTER8', 0x8E ), ( 'KANJI8', 0x8E ),
  401. ( 'INTER9', 0x8F ), ( 'KANJI9', 0x8F ),
  402. ( 'LANG1', 0x90 ), ( 'HANGULENGLISH', 0x90 ),
  403. ( 'LANG2', 0x91 ), ( 'HANJA', 0x91 ), ( 'EISU', 0x91 ),
  404. ( 'LANG3', 0x92 ), ( 'KATAKANA', 0x92 ),
  405. ( 'LANG4', 0x93 ), ( 'HIRAGANA', 0x93 ),
  406. ( 'LANG5', 0x94 ), ( 'ZENKAKUHANKAKU', 0x94 ),
  407. ( 'LANG6', 0x95 ),
  408. ( 'LANG7', 0x96 ),
  409. ( 'LANG8', 0x97 ),
  410. ( 'LANG9', 0x98 ),
  411. ( 'ALTERASE', 0x99 ),
  412. ( 'SYSREQATT', 0x9A ),
  413. ( 'CANCEL', 0x9B ),
  414. ( 'CLEAR', 0x9C ),
  415. ( 'PRIOR', 0x9D ),
  416. ( 'RETURN', 0x9E ),
  417. ( 'SEP', 0x9F ), ( 'SEPARATOR', 0x9F ),
  418. ( 'OUT', 0xA0 ),
  419. ( 'OPER', 0xA1 ),
  420. ( 'CLEAR_AGAIN', 0xA2 ),
  421. ( 'CRSEL_PROPS', 0xA3 ),
  422. ( 'EXSEL', 0xA4 ),
  423. ( 'P00', 0xB0 ), ( 'KEYPAD 00', 0xB0 ),
  424. ( 'P000', 0xB1 ), ( 'KEYPAD 000', 0xB1 ),
  425. ( '1000SEP', 0xB2 ), ( 'THOUSANDSEPARATOR', 0xB2 ),
  426. ( 'DECIMALSEP', 0xB3 ), ( 'DECIMALSEPARATOR', 0xB3 ),
  427. ( 'CURRENCY', 0xB4 ), ( 'CURRENCYUNIT', 0xB4 ),
  428. ( 'CURRENCYSUB', 0xB5 ), ( 'CURRENCYSUBUNIT', 0xB5 ),
  429. ( 'P(', 0xB6 ), ( 'KEYPAD LEFT PARENTHESES', 0xB6 ),
  430. ( 'P)', 0xB7 ), ( 'KEYPAD RIGHT PARENTHESES', 0xB7 ),
  431. ( 'P{', 0xB8 ), ( 'KEYPAD LEFT BRACE', 0xB8 ),
  432. ( 'P}', 0xB9 ), ( 'KEYPAD RIGHT BRACE', 0xB9 ),
  433. ( 'PTAB', 0xBA ), ( 'KEYPAD TAB', 0xBA ),
  434. ( 'PBACKSPACE', 0xBB ), ( 'KEYPAD BACKSPACE', 0xBB ),
  435. ( 'PA', 0xBC ), ( 'KEYPAD A', 0xBC ),
  436. ( 'PB', 0xBD ), ( 'KEYPAD B', 0xBD ),
  437. ( 'PC', 0xBE ), ( 'KEYPAD C', 0xBE ),
  438. ( 'PD', 0xBF ), ( 'KEYPAD D', 0xBF ),
  439. ( 'PE', 0xC0 ), ( 'KEYPAD E', 0xC0 ),
  440. ( 'PF', 0xC1 ), ( 'KEYPAD F', 0xC1 ),
  441. ( 'PXOR', 0xC2 ), ( 'KEYPAD XOR', 0xC2 ),
  442. ( 'P^', 0xC3 ), ( 'KEYPAD CHEVRON', 0xC3 ),
  443. ( 'P%', 0xC4 ), ( 'KEYPAD PERCENT', 0xC4 ),
  444. ( 'P<', 0xC5 ), ( 'KEYPAD LESSTHAN', 0xC5 ),
  445. ( 'P>', 0xC6 ), ( 'KEYPAD GREATERTHAN', 0xC6 ),
  446. ( 'P&', 0xC7 ), ( 'KEYPAD BITAND', 0xC7 ),
  447. ( 'P&&', 0xC8 ), ( 'KEYPAD AND', 0xC8 ),
  448. ( 'P|', 0xC9 ), ( 'KEYPAD BITOR', 0xC9 ),
  449. ( 'P||', 0xCA ), ( 'KEYPAD OR', 0xCA ),
  450. ( 'P:', 0xCB ), ( 'KEYPAD COLON', 0xCB ),
  451. ( 'P#', 0xCC ), ( 'KEYPAD NUMBER', 0xCC ), ( 'KEYPAD HASH', 0xCC ),
  452. ( 'PSPACE', 0xCD ), ( 'KEYPAD SPACE', 0xCD ),
  453. ( 'P@', 0xCE ), ( 'KEYPAD AT', 0xCE ),
  454. ( 'P!', 0xCF ), ( 'KEYPAD EXCLAIM', 0xCF ),
  455. ( 'PMEMSTORE', 0xD0 ), ( 'KEYPAD MEMSTORE', 0xD0 ),
  456. ( 'PMEMRECALL', 0xD1 ), ( 'KEYPAD MEMRECALL', 0xD1 ),
  457. ( 'PMEMCLEAR', 0xD2 ), ( 'KEYPAD MEMCLEAR', 0xD2 ),
  458. ( 'PMEMADD', 0xD3 ), ( 'KEYPAD MEMADD', 0xD3 ),
  459. ( 'PMEMSUB', 0xD4 ), ( 'KEYPAD MEMSUB', 0xD4 ),
  460. ( 'PMEMMULT', 0xD5 ), ( 'KEYPAD MEMMULT', 0xD5 ),
  461. ( 'PMEMDIV', 0xD6 ), ( 'KEYPAD MEMDIV', 0xD6 ),
  462. ( 'P+/-', 0xD7 ), ( 'KEYPAD PLUSMINUS', 0xD7 ),
  463. ( 'PCLEAR', 0xD8 ), ( 'KEYPAD CLEAR', 0xD8 ),
  464. ( 'PCLEARENTRY', 0xD9 ), ( 'KEYPAD CLEARENTRY', 0xD9 ),
  465. ( 'PBINARY', 0xDA ), ( 'KEYPAD BINARY', 0xDA ),
  466. ( 'POCTAL', 0xDB ), ( 'KEYPAD OCTAL', 0xDB ),
  467. ( 'PDECIMAL', 0xDC ), ( 'KEYPAD DECIMAL', 0xDC ),
  468. ( 'PHEX', 0xDD ), ( 'KEYPAD HEX', 0xDD ),
  469. ( 'LCTRL', 0xE0 ), ( 'LEFT CTRL', 0xE0 ), ( 'CTRL', 0xE0 ),
  470. ( 'LSHIFT', 0xE1 ), ( 'LEFT SHIFT', 0xE1 ), ( 'SHIFT', 0xE1 ),
  471. ( 'LALT', 0xE2 ), ( 'LEFT ALT', 0xE2 ), ( 'ALT', 0xE2 ),
  472. ( 'LGUI', 0xE3 ), ( 'LEFT GUI', 0xE3 ), ( 'GUI', 0xE3 ),
  473. ( 'RCTRL', 0xE4 ), ( 'RIGHT CTRL', 0xE4 ),
  474. ( 'RSHIFT', 0xE5 ), ( 'RIGHT SHIFT', 0xE5 ),
  475. ( 'RALT', 0xE6 ), ( 'RIGHT ALT', 0xE6 ),
  476. ( 'RGUI', 0xE7 ), ( 'RIGHT GUI', 0xE7 ),
  477. ( 'FUN1', 0xF0 ), ( 'FUNCTION1', 0xF0 ), ( 'FUN', 0xF0 ),
  478. ( 'FUN2', 0xF1 ), ( 'FUNCTION2', 0xF1 ),
  479. ( 'FUN3', 0xF2 ), ( 'FUNCTION3', 0xF2 ),
  480. ( 'FUN4', 0xF3 ), ( 'FUNCTION4', 0xF3 ),
  481. ( 'FUN5', 0xF4 ), ( 'FUNCTION5', 0xF4 ),
  482. ( 'FUN6', 0xF5 ), ( 'FUNCTION6', 0xF5 ),
  483. ( 'FUN7', 0xF6 ), ( 'FUNCTION7', 0xF6 ),
  484. ( 'FUN8', 0xF7 ), ( 'FUNCTION8', 0xF7 ),
  485. ( 'FUN9', 0xF8 ), ( 'FUNCTION9', 0xF8 ),
  486. ( 'FUN10', 0xF9 ), ( 'FUNCTION10', 0xF9 ),
  487. ( 'FUN11', 0xFA ), ( 'FUNCTION11', 0xFA ),
  488. ( 'FUN12', 0xFB ), ( 'FUNCTION12', 0xFB ),
  489. ( 'FUN13', 0xFC ), ( 'FUNCTION13', 0xFC ),
  490. ( 'FUN14', 0xFD ), ( 'FUNCTION14', 0xFD ),
  491. ( 'FUN15', 0xFE ), ( 'FUNCTION15', 0xFE ),
  492. ( 'FUN16', 0xFF ), ( 'FUNCTION16', 0xFF ),
  493. ])