xkeysym.c 20 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. /*
  2. * xkeysym.c: mapping from X keysyms to Unicode values
  3. *
  4. * The basic idea of this is shamelessly cribbed from xterm. The
  5. * actual character data is generated from Markus Kuhn's proposed
  6. * redraft of the X11 keysym mapping table, using the following
  7. * piece of Perl/sh code:
  8. wget -q -O - http://www.cl.cam.ac.uk/~mgk25/ucs/X11.keysyms | \
  9. perl -ne '/^(\d+)\s+(\d+)\s+[\d\/]+\s+U\+([\dA-Fa-f]+)/ and' \
  10. -e ' do { $a{$1 * 256+ $2} = hex $3; };' \
  11. -e 'END { foreach $i (sort {$a <=> $b} keys %a) {' \
  12. -e ' printf " {0x%x, 0x%x},\n", $i, $a{$i} } }' \
  13. -e 'BEGIN { $a{0x13a4} = 0x20ac }'
  14. * (The BEGIN clause inserts a mapping for the Euro sign which for
  15. * some reason isn't in the list but xterm supports. *shrug*.)
  16. */
  17. #include "misc.h"
  18. struct keysym {
  19. /*
  20. * Currently nothing in here is above 0xFFFF, so I'll use
  21. * `unsigned short' to save space.
  22. */
  23. unsigned short keysym;
  24. unsigned short unicode;
  25. };
  26. static struct keysym keysyms[] = {
  27. {0x20, 0x20},
  28. {0x21, 0x21},
  29. {0x22, 0x22},
  30. {0x23, 0x23},
  31. {0x24, 0x24},
  32. {0x25, 0x25},
  33. {0x26, 0x26},
  34. {0x27, 0x27},
  35. {0x28, 0x28},
  36. {0x29, 0x29},
  37. {0x2a, 0x2a},
  38. {0x2b, 0x2b},
  39. {0x2c, 0x2c},
  40. {0x2d, 0x2d},
  41. {0x2e, 0x2e},
  42. {0x2f, 0x2f},
  43. {0x30, 0x30},
  44. {0x31, 0x31},
  45. {0x32, 0x32},
  46. {0x33, 0x33},
  47. {0x34, 0x34},
  48. {0x35, 0x35},
  49. {0x36, 0x36},
  50. {0x37, 0x37},
  51. {0x38, 0x38},
  52. {0x39, 0x39},
  53. {0x3a, 0x3a},
  54. {0x3b, 0x3b},
  55. {0x3c, 0x3c},
  56. {0x3d, 0x3d},
  57. {0x3e, 0x3e},
  58. {0x3f, 0x3f},
  59. {0x40, 0x40},
  60. {0x41, 0x41},
  61. {0x42, 0x42},
  62. {0x43, 0x43},
  63. {0x44, 0x44},
  64. {0x45, 0x45},
  65. {0x46, 0x46},
  66. {0x47, 0x47},
  67. {0x48, 0x48},
  68. {0x49, 0x49},
  69. {0x4a, 0x4a},
  70. {0x4b, 0x4b},
  71. {0x4c, 0x4c},
  72. {0x4d, 0x4d},
  73. {0x4e, 0x4e},
  74. {0x4f, 0x4f},
  75. {0x50, 0x50},
  76. {0x51, 0x51},
  77. {0x52, 0x52},
  78. {0x53, 0x53},
  79. {0x54, 0x54},
  80. {0x55, 0x55},
  81. {0x56, 0x56},
  82. {0x57, 0x57},
  83. {0x58, 0x58},
  84. {0x59, 0x59},
  85. {0x5a, 0x5a},
  86. {0x5b, 0x5b},
  87. {0x5c, 0x5c},
  88. {0x5d, 0x5d},
  89. {0x5e, 0x5e},
  90. {0x5f, 0x5f},
  91. {0x60, 0x60},
  92. {0x61, 0x61},
  93. {0x62, 0x62},
  94. {0x63, 0x63},
  95. {0x64, 0x64},
  96. {0x65, 0x65},
  97. {0x66, 0x66},
  98. {0x67, 0x67},
  99. {0x68, 0x68},
  100. {0x69, 0x69},
  101. {0x6a, 0x6a},
  102. {0x6b, 0x6b},
  103. {0x6c, 0x6c},
  104. {0x6d, 0x6d},
  105. {0x6e, 0x6e},
  106. {0x6f, 0x6f},
  107. {0x70, 0x70},
  108. {0x71, 0x71},
  109. {0x72, 0x72},
  110. {0x73, 0x73},
  111. {0x74, 0x74},
  112. {0x75, 0x75},
  113. {0x76, 0x76},
  114. {0x77, 0x77},
  115. {0x78, 0x78},
  116. {0x79, 0x79},
  117. {0x7a, 0x7a},
  118. {0x7b, 0x7b},
  119. {0x7c, 0x7c},
  120. {0x7d, 0x7d},
  121. {0x7e, 0x7e},
  122. {0xa0, 0xa0},
  123. {0xa1, 0xa1},
  124. {0xa2, 0xa2},
  125. {0xa3, 0xa3},
  126. {0xa4, 0xa4},
  127. {0xa5, 0xa5},
  128. {0xa6, 0xa6},
  129. {0xa7, 0xa7},
  130. {0xa8, 0xa8},
  131. {0xa9, 0xa9},
  132. {0xaa, 0xaa},
  133. {0xab, 0xab},
  134. {0xac, 0xac},
  135. {0xad, 0xad},
  136. {0xae, 0xae},
  137. {0xaf, 0xaf},
  138. {0xb0, 0xb0},
  139. {0xb1, 0xb1},
  140. {0xb2, 0xb2},
  141. {0xb3, 0xb3},
  142. {0xb4, 0xb4},
  143. {0xb5, 0xb5},
  144. {0xb6, 0xb6},
  145. {0xb7, 0xb7},
  146. {0xb8, 0xb8},
  147. {0xb9, 0xb9},
  148. {0xba, 0xba},
  149. {0xbb, 0xbb},
  150. {0xbc, 0xbc},
  151. {0xbd, 0xbd},
  152. {0xbe, 0xbe},
  153. {0xbf, 0xbf},
  154. {0xc0, 0xc0},
  155. {0xc1, 0xc1},
  156. {0xc2, 0xc2},
  157. {0xc3, 0xc3},
  158. {0xc4, 0xc4},
  159. {0xc5, 0xc5},
  160. {0xc6, 0xc6},
  161. {0xc7, 0xc7},
  162. {0xc8, 0xc8},
  163. {0xc9, 0xc9},
  164. {0xca, 0xca},
  165. {0xcb, 0xcb},
  166. {0xcc, 0xcc},
  167. {0xcd, 0xcd},
  168. {0xce, 0xce},
  169. {0xcf, 0xcf},
  170. {0xd0, 0xd0},
  171. {0xd1, 0xd1},
  172. {0xd2, 0xd2},
  173. {0xd3, 0xd3},
  174. {0xd4, 0xd4},
  175. {0xd5, 0xd5},
  176. {0xd6, 0xd6},
  177. {0xd7, 0xd7},
  178. {0xd8, 0xd8},
  179. {0xd9, 0xd9},
  180. {0xda, 0xda},
  181. {0xdb, 0xdb},
  182. {0xdc, 0xdc},
  183. {0xdd, 0xdd},
  184. {0xde, 0xde},
  185. {0xdf, 0xdf},
  186. {0xe0, 0xe0},
  187. {0xe1, 0xe1},
  188. {0xe2, 0xe2},
  189. {0xe3, 0xe3},
  190. {0xe4, 0xe4},
  191. {0xe5, 0xe5},
  192. {0xe6, 0xe6},
  193. {0xe7, 0xe7},
  194. {0xe8, 0xe8},
  195. {0xe9, 0xe9},
  196. {0xea, 0xea},
  197. {0xeb, 0xeb},
  198. {0xec, 0xec},
  199. {0xed, 0xed},
  200. {0xee, 0xee},
  201. {0xef, 0xef},
  202. {0xf0, 0xf0},
  203. {0xf1, 0xf1},
  204. {0xf2, 0xf2},
  205. {0xf3, 0xf3},
  206. {0xf4, 0xf4},
  207. {0xf5, 0xf5},
  208. {0xf6, 0xf6},
  209. {0xf7, 0xf7},
  210. {0xf8, 0xf8},
  211. {0xf9, 0xf9},
  212. {0xfa, 0xfa},
  213. {0xfb, 0xfb},
  214. {0xfc, 0xfc},
  215. {0xfd, 0xfd},
  216. {0xfe, 0xfe},
  217. {0xff, 0xff},
  218. {0x1a1, 0x104},
  219. {0x1a2, 0x2d8},
  220. {0x1a3, 0x141},
  221. {0x1a5, 0x13d},
  222. {0x1a6, 0x15a},
  223. {0x1a9, 0x160},
  224. {0x1aa, 0x15e},
  225. {0x1ab, 0x164},
  226. {0x1ac, 0x179},
  227. {0x1ae, 0x17d},
  228. {0x1af, 0x17b},
  229. {0x1b1, 0x105},
  230. {0x1b2, 0x2db},
  231. {0x1b3, 0x142},
  232. {0x1b5, 0x13e},
  233. {0x1b6, 0x15b},
  234. {0x1b7, 0x2c7},
  235. {0x1b9, 0x161},
  236. {0x1ba, 0x15f},
  237. {0x1bb, 0x165},
  238. {0x1bc, 0x17a},
  239. {0x1bd, 0x2dd},
  240. {0x1be, 0x17e},
  241. {0x1bf, 0x17c},
  242. {0x1c0, 0x154},
  243. {0x1c3, 0x102},
  244. {0x1c5, 0x139},
  245. {0x1c6, 0x106},
  246. {0x1c8, 0x10c},
  247. {0x1ca, 0x118},
  248. {0x1cc, 0x11a},
  249. {0x1cf, 0x10e},
  250. {0x1d0, 0x110},
  251. {0x1d1, 0x143},
  252. {0x1d2, 0x147},
  253. {0x1d5, 0x150},
  254. {0x1d8, 0x158},
  255. {0x1d9, 0x16e},
  256. {0x1db, 0x170},
  257. {0x1de, 0x162},
  258. {0x1e0, 0x155},
  259. {0x1e3, 0x103},
  260. {0x1e5, 0x13a},
  261. {0x1e6, 0x107},
  262. {0x1e8, 0x10d},
  263. {0x1ea, 0x119},
  264. {0x1ec, 0x11b},
  265. {0x1ef, 0x10f},
  266. {0x1f0, 0x111},
  267. {0x1f1, 0x144},
  268. {0x1f2, 0x148},
  269. {0x1f5, 0x151},
  270. {0x1f8, 0x159},
  271. {0x1f9, 0x16f},
  272. {0x1fb, 0x171},
  273. {0x1fe, 0x163},
  274. {0x1ff, 0x2d9},
  275. {0x2a1, 0x126},
  276. {0x2a6, 0x124},
  277. {0x2a9, 0x130},
  278. {0x2ab, 0x11e},
  279. {0x2ac, 0x134},
  280. {0x2b1, 0x127},
  281. {0x2b6, 0x125},
  282. {0x2b9, 0x131},
  283. {0x2bb, 0x11f},
  284. {0x2bc, 0x135},
  285. {0x2c5, 0x10a},
  286. {0x2c6, 0x108},
  287. {0x2d5, 0x120},
  288. {0x2d8, 0x11c},
  289. {0x2dd, 0x16c},
  290. {0x2de, 0x15c},
  291. {0x2e5, 0x10b},
  292. {0x2e6, 0x109},
  293. {0x2f5, 0x121},
  294. {0x2f8, 0x11d},
  295. {0x2fd, 0x16d},
  296. {0x2fe, 0x15d},
  297. {0x3a2, 0x138},
  298. {0x3a3, 0x156},
  299. {0x3a5, 0x128},
  300. {0x3a6, 0x13b},
  301. {0x3aa, 0x112},
  302. {0x3ab, 0x122},
  303. {0x3ac, 0x166},
  304. {0x3b3, 0x157},
  305. {0x3b5, 0x129},
  306. {0x3b6, 0x13c},
  307. {0x3ba, 0x113},
  308. {0x3bb, 0x123},
  309. {0x3bc, 0x167},
  310. {0x3bd, 0x14a},
  311. {0x3bf, 0x14b},
  312. {0x3c0, 0x100},
  313. {0x3c7, 0x12e},
  314. {0x3cc, 0x116},
  315. {0x3cf, 0x12a},
  316. {0x3d1, 0x145},
  317. {0x3d2, 0x14c},
  318. {0x3d3, 0x136},
  319. {0x3d9, 0x172},
  320. {0x3dd, 0x168},
  321. {0x3de, 0x16a},
  322. {0x3e0, 0x101},
  323. {0x3e7, 0x12f},
  324. {0x3ec, 0x117},
  325. {0x3ef, 0x12b},
  326. {0x3f1, 0x146},
  327. {0x3f2, 0x14d},
  328. {0x3f3, 0x137},
  329. {0x3f9, 0x173},
  330. {0x3fd, 0x169},
  331. {0x3fe, 0x16b},
  332. {0x47e, 0x203e},
  333. {0x4a1, 0x3002},
  334. {0x4a2, 0x300c},
  335. {0x4a3, 0x300d},
  336. {0x4a4, 0x3001},
  337. {0x4a5, 0x30fb},
  338. {0x4a6, 0x30f2},
  339. {0x4a7, 0x30a1},
  340. {0x4a8, 0x30a3},
  341. {0x4a9, 0x30a5},
  342. {0x4aa, 0x30a7},
  343. {0x4ab, 0x30a9},
  344. {0x4ac, 0x30e3},
  345. {0x4ad, 0x30e5},
  346. {0x4ae, 0x30e7},
  347. {0x4af, 0x30c3},
  348. {0x4b0, 0x30fc},
  349. {0x4b1, 0x30a2},
  350. {0x4b2, 0x30a4},
  351. {0x4b3, 0x30a6},
  352. {0x4b4, 0x30a8},
  353. {0x4b5, 0x30aa},
  354. {0x4b6, 0x30ab},
  355. {0x4b7, 0x30ad},
  356. {0x4b8, 0x30af},
  357. {0x4b9, 0x30b1},
  358. {0x4ba, 0x30b3},
  359. {0x4bb, 0x30b5},
  360. {0x4bc, 0x30b7},
  361. {0x4bd, 0x30b9},
  362. {0x4be, 0x30bb},
  363. {0x4bf, 0x30bd},
  364. {0x4c0, 0x30bf},
  365. {0x4c1, 0x30c1},
  366. {0x4c2, 0x30c4},
  367. {0x4c3, 0x30c6},
  368. {0x4c4, 0x30c8},
  369. {0x4c5, 0x30ca},
  370. {0x4c6, 0x30cb},
  371. {0x4c7, 0x30cc},
  372. {0x4c8, 0x30cd},
  373. {0x4c9, 0x30ce},
  374. {0x4ca, 0x30cf},
  375. {0x4cb, 0x30d2},
  376. {0x4cc, 0x30d5},
  377. {0x4cd, 0x30d8},
  378. {0x4ce, 0x30db},
  379. {0x4cf, 0x30de},
  380. {0x4d0, 0x30df},
  381. {0x4d1, 0x30e0},
  382. {0x4d2, 0x30e1},
  383. {0x4d3, 0x30e2},
  384. {0x4d4, 0x30e4},
  385. {0x4d5, 0x30e6},
  386. {0x4d6, 0x30e8},
  387. {0x4d7, 0x30e9},
  388. {0x4d8, 0x30ea},
  389. {0x4d9, 0x30eb},
  390. {0x4da, 0x30ec},
  391. {0x4db, 0x30ed},
  392. {0x4dc, 0x30ef},
  393. {0x4dd, 0x30f3},
  394. {0x4de, 0x309b},
  395. {0x4df, 0x309c},
  396. {0x5ac, 0x60c},
  397. {0x5bb, 0x61b},
  398. {0x5bf, 0x61f},
  399. {0x5c1, 0x621},
  400. {0x5c2, 0x622},
  401. {0x5c3, 0x623},
  402. {0x5c4, 0x624},
  403. {0x5c5, 0x625},
  404. {0x5c6, 0x626},
  405. {0x5c7, 0x627},
  406. {0x5c8, 0x628},
  407. {0x5c9, 0x629},
  408. {0x5ca, 0x62a},
  409. {0x5cb, 0x62b},
  410. {0x5cc, 0x62c},
  411. {0x5cd, 0x62d},
  412. {0x5ce, 0x62e},
  413. {0x5cf, 0x62f},
  414. {0x5d0, 0x630},
  415. {0x5d1, 0x631},
  416. {0x5d2, 0x632},
  417. {0x5d3, 0x633},
  418. {0x5d4, 0x634},
  419. {0x5d5, 0x635},
  420. {0x5d6, 0x636},
  421. {0x5d7, 0x637},
  422. {0x5d8, 0x638},
  423. {0x5d9, 0x639},
  424. {0x5da, 0x63a},
  425. {0x5e0, 0x640},
  426. {0x5e1, 0x641},
  427. {0x5e2, 0x642},
  428. {0x5e3, 0x643},
  429. {0x5e4, 0x644},
  430. {0x5e5, 0x645},
  431. {0x5e6, 0x646},
  432. {0x5e7, 0x647},
  433. {0x5e8, 0x648},
  434. {0x5e9, 0x649},
  435. {0x5ea, 0x64a},
  436. {0x5eb, 0x64b},
  437. {0x5ec, 0x64c},
  438. {0x5ed, 0x64d},
  439. {0x5ee, 0x64e},
  440. {0x5ef, 0x64f},
  441. {0x5f0, 0x650},
  442. {0x5f1, 0x651},
  443. {0x5f2, 0x652},
  444. {0x6a1, 0x452},
  445. {0x6a2, 0x453},
  446. {0x6a3, 0x451},
  447. {0x6a4, 0x454},
  448. {0x6a5, 0x455},
  449. {0x6a6, 0x456},
  450. {0x6a7, 0x457},
  451. {0x6a8, 0x458},
  452. {0x6a9, 0x459},
  453. {0x6aa, 0x45a},
  454. {0x6ab, 0x45b},
  455. {0x6ac, 0x45c},
  456. {0x6ae, 0x45e},
  457. {0x6af, 0x45f},
  458. {0x6b0, 0x2116},
  459. {0x6b1, 0x402},
  460. {0x6b2, 0x403},
  461. {0x6b3, 0x401},
  462. {0x6b4, 0x404},
  463. {0x6b5, 0x405},
  464. {0x6b6, 0x406},
  465. {0x6b7, 0x407},
  466. {0x6b8, 0x408},
  467. {0x6b9, 0x409},
  468. {0x6ba, 0x40a},
  469. {0x6bb, 0x40b},
  470. {0x6bc, 0x40c},
  471. {0x6be, 0x40e},
  472. {0x6bf, 0x40f},
  473. {0x6c0, 0x44e},
  474. {0x6c1, 0x430},
  475. {0x6c2, 0x431},
  476. {0x6c3, 0x446},
  477. {0x6c4, 0x434},
  478. {0x6c5, 0x435},
  479. {0x6c6, 0x444},
  480. {0x6c7, 0x433},
  481. {0x6c8, 0x445},
  482. {0x6c9, 0x438},
  483. {0x6ca, 0x439},
  484. {0x6cb, 0x43a},
  485. {0x6cc, 0x43b},
  486. {0x6cd, 0x43c},
  487. {0x6ce, 0x43d},
  488. {0x6cf, 0x43e},
  489. {0x6d0, 0x43f},
  490. {0x6d1, 0x44f},
  491. {0x6d2, 0x440},
  492. {0x6d3, 0x441},
  493. {0x6d4, 0x442},
  494. {0x6d5, 0x443},
  495. {0x6d6, 0x436},
  496. {0x6d7, 0x432},
  497. {0x6d8, 0x44c},
  498. {0x6d9, 0x44b},
  499. {0x6da, 0x437},
  500. {0x6db, 0x448},
  501. {0x6dc, 0x44d},
  502. {0x6dd, 0x449},
  503. {0x6de, 0x447},
  504. {0x6df, 0x44a},
  505. {0x6e0, 0x42e},
  506. {0x6e1, 0x410},
  507. {0x6e2, 0x411},
  508. {0x6e3, 0x426},
  509. {0x6e4, 0x414},
  510. {0x6e5, 0x415},
  511. {0x6e6, 0x424},
  512. {0x6e7, 0x413},
  513. {0x6e8, 0x425},
  514. {0x6e9, 0x418},
  515. {0x6ea, 0x419},
  516. {0x6eb, 0x41a},
  517. {0x6ec, 0x41b},
  518. {0x6ed, 0x41c},
  519. {0x6ee, 0x41d},
  520. {0x6ef, 0x41e},
  521. {0x6f0, 0x41f},
  522. {0x6f1, 0x42f},
  523. {0x6f2, 0x420},
  524. {0x6f3, 0x421},
  525. {0x6f4, 0x422},
  526. {0x6f5, 0x423},
  527. {0x6f6, 0x416},
  528. {0x6f7, 0x412},
  529. {0x6f8, 0x42c},
  530. {0x6f9, 0x42b},
  531. {0x6fa, 0x417},
  532. {0x6fb, 0x428},
  533. {0x6fc, 0x42d},
  534. {0x6fd, 0x429},
  535. {0x6fe, 0x427},
  536. {0x6ff, 0x42a},
  537. {0x7a1, 0x386},
  538. {0x7a2, 0x388},
  539. {0x7a3, 0x389},
  540. {0x7a4, 0x38a},
  541. {0x7a5, 0x3aa},
  542. {0x7a7, 0x38c},
  543. {0x7a8, 0x38e},
  544. {0x7a9, 0x3ab},
  545. {0x7ab, 0x38f},
  546. {0x7ae, 0x385},
  547. {0x7af, 0x2015},
  548. {0x7b1, 0x3ac},
  549. {0x7b2, 0x3ad},
  550. {0x7b3, 0x3ae},
  551. {0x7b4, 0x3af},
  552. {0x7b5, 0x3ca},
  553. {0x7b6, 0x390},
  554. {0x7b7, 0x3cc},
  555. {0x7b8, 0x3cd},
  556. {0x7b9, 0x3cb},
  557. {0x7ba, 0x3b0},
  558. {0x7bb, 0x3ce},
  559. {0x7c1, 0x391},
  560. {0x7c2, 0x392},
  561. {0x7c3, 0x393},
  562. {0x7c4, 0x394},
  563. {0x7c5, 0x395},
  564. {0x7c6, 0x396},
  565. {0x7c7, 0x397},
  566. {0x7c8, 0x398},
  567. {0x7c9, 0x399},
  568. {0x7ca, 0x39a},
  569. {0x7cb, 0x39b},
  570. {0x7cc, 0x39c},
  571. {0x7cd, 0x39d},
  572. {0x7ce, 0x39e},
  573. {0x7cf, 0x39f},
  574. {0x7d0, 0x3a0},
  575. {0x7d1, 0x3a1},
  576. {0x7d2, 0x3a3},
  577. {0x7d4, 0x3a4},
  578. {0x7d5, 0x3a5},
  579. {0x7d6, 0x3a6},
  580. {0x7d7, 0x3a7},
  581. {0x7d8, 0x3a8},
  582. {0x7d9, 0x3a9},
  583. {0x7e1, 0x3b1},
  584. {0x7e2, 0x3b2},
  585. {0x7e3, 0x3b3},
  586. {0x7e4, 0x3b4},
  587. {0x7e5, 0x3b5},
  588. {0x7e6, 0x3b6},
  589. {0x7e7, 0x3b7},
  590. {0x7e8, 0x3b8},
  591. {0x7e9, 0x3b9},
  592. {0x7ea, 0x3ba},
  593. {0x7eb, 0x3bb},
  594. {0x7ec, 0x3bc},
  595. {0x7ed, 0x3bd},
  596. {0x7ee, 0x3be},
  597. {0x7ef, 0x3bf},
  598. {0x7f0, 0x3c0},
  599. {0x7f1, 0x3c1},
  600. {0x7f2, 0x3c3},
  601. {0x7f3, 0x3c2},
  602. {0x7f4, 0x3c4},
  603. {0x7f5, 0x3c5},
  604. {0x7f6, 0x3c6},
  605. {0x7f7, 0x3c7},
  606. {0x7f8, 0x3c8},
  607. {0x7f9, 0x3c9},
  608. {0x8a1, 0x23b7},
  609. {0x8a2, 0x250c},
  610. {0x8a3, 0x2500},
  611. {0x8a4, 0x2320},
  612. {0x8a5, 0x2321},
  613. {0x8a6, 0x2502},
  614. {0x8a7, 0x23a1},
  615. {0x8a8, 0x23a3},
  616. {0x8a9, 0x23a4},
  617. {0x8aa, 0x23a6},
  618. {0x8ab, 0x239b},
  619. {0x8ac, 0x239d},
  620. {0x8ad, 0x239e},
  621. {0x8ae, 0x23a0},
  622. {0x8af, 0x23a8},
  623. {0x8b0, 0x23ac},
  624. {0x8bc, 0x2264},
  625. {0x8bd, 0x2260},
  626. {0x8be, 0x2265},
  627. {0x8bf, 0x222b},
  628. {0x8c0, 0x2234},
  629. {0x8c1, 0x221d},
  630. {0x8c2, 0x221e},
  631. {0x8c5, 0x2207},
  632. {0x8c8, 0x223c},
  633. {0x8c9, 0x2243},
  634. {0x8cd, 0x21d4},
  635. {0x8ce, 0x21d2},
  636. {0x8cf, 0x2261},
  637. {0x8d6, 0x221a},
  638. {0x8da, 0x2282},
  639. {0x8db, 0x2283},
  640. {0x8dc, 0x2229},
  641. {0x8dd, 0x222a},
  642. {0x8de, 0x2227},
  643. {0x8df, 0x2228},
  644. {0x8ef, 0x2202},
  645. {0x8f6, 0x192},
  646. {0x8fb, 0x2190},
  647. {0x8fc, 0x2191},
  648. {0x8fd, 0x2192},
  649. {0x8fe, 0x2193},
  650. {0x9e0, 0x25c6},
  651. {0x9e1, 0x2592},
  652. {0x9e2, 0x2409},
  653. {0x9e3, 0x240c},
  654. {0x9e4, 0x240d},
  655. {0x9e5, 0x240a},
  656. {0x9e8, 0x2424},
  657. {0x9e9, 0x240b},
  658. {0x9ea, 0x2518},
  659. {0x9eb, 0x2510},
  660. {0x9ec, 0x250c},
  661. {0x9ed, 0x2514},
  662. {0x9ee, 0x253c},
  663. {0x9ef, 0x23ba},
  664. {0x9f0, 0x23bb},
  665. {0x9f1, 0x2500},
  666. {0x9f2, 0x23bc},
  667. {0x9f3, 0x23bd},
  668. {0x9f4, 0x251c},
  669. {0x9f5, 0x2524},
  670. {0x9f6, 0x2534},
  671. {0x9f7, 0x252c},
  672. {0x9f8, 0x2502},
  673. {0xaa1, 0x2003},
  674. {0xaa2, 0x2002},
  675. {0xaa3, 0x2004},
  676. {0xaa4, 0x2005},
  677. {0xaa5, 0x2007},
  678. {0xaa6, 0x2008},
  679. {0xaa7, 0x2009},
  680. {0xaa8, 0x200a},
  681. {0xaa9, 0x2014},
  682. {0xaaa, 0x2013},
  683. {0xaae, 0x2026},
  684. {0xaaf, 0x2025},
  685. {0xab0, 0x2153},
  686. {0xab1, 0x2154},
  687. {0xab2, 0x2155},
  688. {0xab3, 0x2156},
  689. {0xab4, 0x2157},
  690. {0xab5, 0x2158},
  691. {0xab6, 0x2159},
  692. {0xab7, 0x215a},
  693. {0xab8, 0x2105},
  694. {0xabb, 0x2012},
  695. {0xabc, 0x2329},
  696. {0xabe, 0x232a},
  697. {0xac3, 0x215b},
  698. {0xac4, 0x215c},
  699. {0xac5, 0x215d},
  700. {0xac6, 0x215e},
  701. {0xac9, 0x2122},
  702. {0xaca, 0x2613},
  703. {0xacc, 0x25c1},
  704. {0xacd, 0x25b7},
  705. {0xace, 0x25cb},
  706. {0xacf, 0x25af},
  707. {0xad0, 0x2018},
  708. {0xad1, 0x2019},
  709. {0xad2, 0x201c},
  710. {0xad3, 0x201d},
  711. {0xad4, 0x211e},
  712. {0xad6, 0x2032},
  713. {0xad7, 0x2033},
  714. {0xad9, 0x271d},
  715. {0xadb, 0x25ac},
  716. {0xadc, 0x25c0},
  717. {0xadd, 0x25b6},
  718. {0xade, 0x25cf},
  719. {0xadf, 0x25ae},
  720. {0xae0, 0x25e6},
  721. {0xae1, 0x25ab},
  722. {0xae2, 0x25ad},
  723. {0xae3, 0x25b3},
  724. {0xae4, 0x25bd},
  725. {0xae5, 0x2606},
  726. {0xae6, 0x2022},
  727. {0xae7, 0x25aa},
  728. {0xae8, 0x25b2},
  729. {0xae9, 0x25bc},
  730. {0xaea, 0x261c},
  731. {0xaeb, 0x261e},
  732. {0xaec, 0x2663},
  733. {0xaed, 0x2666},
  734. {0xaee, 0x2665},
  735. {0xaf0, 0x2720},
  736. {0xaf1, 0x2020},
  737. {0xaf2, 0x2021},
  738. {0xaf3, 0x2713},
  739. {0xaf4, 0x2717},
  740. {0xaf5, 0x266f},
  741. {0xaf6, 0x266d},
  742. {0xaf7, 0x2642},
  743. {0xaf8, 0x2640},
  744. {0xaf9, 0x260e},
  745. {0xafa, 0x2315},
  746. {0xafb, 0x2117},
  747. {0xafc, 0x2038},
  748. {0xafd, 0x201a},
  749. {0xafe, 0x201e},
  750. {0xba3, 0x3c},
  751. {0xba6, 0x3e},
  752. {0xba8, 0x2228},
  753. {0xba9, 0x2227},
  754. {0xbc0, 0xaf},
  755. {0xbc2, 0x22a5},
  756. {0xbc3, 0x2229},
  757. {0xbc4, 0x230a},
  758. {0xbc6, 0x5f},
  759. {0xbca, 0x2218},
  760. {0xbcc, 0x2395},
  761. {0xbce, 0x22a4},
  762. {0xbcf, 0x25cb},
  763. {0xbd3, 0x2308},
  764. {0xbd6, 0x222a},
  765. {0xbd8, 0x2283},
  766. {0xbda, 0x2282},
  767. {0xbdc, 0x22a2},
  768. {0xbfc, 0x22a3},
  769. {0xcdf, 0x2017},
  770. {0xce0, 0x5d0},
  771. {0xce1, 0x5d1},
  772. {0xce2, 0x5d2},
  773. {0xce3, 0x5d3},
  774. {0xce4, 0x5d4},
  775. {0xce5, 0x5d5},
  776. {0xce6, 0x5d6},
  777. {0xce7, 0x5d7},
  778. {0xce8, 0x5d8},
  779. {0xce9, 0x5d9},
  780. {0xcea, 0x5da},
  781. {0xceb, 0x5db},
  782. {0xcec, 0x5dc},
  783. {0xced, 0x5dd},
  784. {0xcee, 0x5de},
  785. {0xcef, 0x5df},
  786. {0xcf0, 0x5e0},
  787. {0xcf1, 0x5e1},
  788. {0xcf2, 0x5e2},
  789. {0xcf3, 0x5e3},
  790. {0xcf4, 0x5e4},
  791. {0xcf5, 0x5e5},
  792. {0xcf6, 0x5e6},
  793. {0xcf7, 0x5e7},
  794. {0xcf8, 0x5e8},
  795. {0xcf9, 0x5e9},
  796. {0xcfa, 0x5ea},
  797. {0xda1, 0xe01},
  798. {0xda2, 0xe02},
  799. {0xda3, 0xe03},
  800. {0xda4, 0xe04},
  801. {0xda5, 0xe05},
  802. {0xda6, 0xe06},
  803. {0xda7, 0xe07},
  804. {0xda8, 0xe08},
  805. {0xda9, 0xe09},
  806. {0xdaa, 0xe0a},
  807. {0xdab, 0xe0b},
  808. {0xdac, 0xe0c},
  809. {0xdad, 0xe0d},
  810. {0xdae, 0xe0e},
  811. {0xdaf, 0xe0f},
  812. {0xdb0, 0xe10},
  813. {0xdb1, 0xe11},
  814. {0xdb2, 0xe12},
  815. {0xdb3, 0xe13},
  816. {0xdb4, 0xe14},
  817. {0xdb5, 0xe15},
  818. {0xdb6, 0xe16},
  819. {0xdb7, 0xe17},
  820. {0xdb8, 0xe18},
  821. {0xdb9, 0xe19},
  822. {0xdba, 0xe1a},
  823. {0xdbb, 0xe1b},
  824. {0xdbc, 0xe1c},
  825. {0xdbd, 0xe1d},
  826. {0xdbe, 0xe1e},
  827. {0xdbf, 0xe1f},
  828. {0xdc0, 0xe20},
  829. {0xdc1, 0xe21},
  830. {0xdc2, 0xe22},
  831. {0xdc3, 0xe23},
  832. {0xdc4, 0xe24},
  833. {0xdc5, 0xe25},
  834. {0xdc6, 0xe26},
  835. {0xdc7, 0xe27},
  836. {0xdc8, 0xe28},
  837. {0xdc9, 0xe29},
  838. {0xdca, 0xe2a},
  839. {0xdcb, 0xe2b},
  840. {0xdcc, 0xe2c},
  841. {0xdcd, 0xe2d},
  842. {0xdce, 0xe2e},
  843. {0xdcf, 0xe2f},
  844. {0xdd0, 0xe30},
  845. {0xdd1, 0xe31},
  846. {0xdd2, 0xe32},
  847. {0xdd3, 0xe33},
  848. {0xdd4, 0xe34},
  849. {0xdd5, 0xe35},
  850. {0xdd6, 0xe36},
  851. {0xdd7, 0xe37},
  852. {0xdd8, 0xe38},
  853. {0xdd9, 0xe39},
  854. {0xdda, 0xe3a},
  855. {0xddf, 0xe3f},
  856. {0xde0, 0xe40},
  857. {0xde1, 0xe41},
  858. {0xde2, 0xe42},
  859. {0xde3, 0xe43},
  860. {0xde4, 0xe44},
  861. {0xde5, 0xe45},
  862. {0xde6, 0xe46},
  863. {0xde7, 0xe47},
  864. {0xde8, 0xe48},
  865. {0xde9, 0xe49},
  866. {0xdea, 0xe4a},
  867. {0xdeb, 0xe4b},
  868. {0xdec, 0xe4c},
  869. {0xded, 0xe4d},
  870. {0xdf0, 0xe50},
  871. {0xdf1, 0xe51},
  872. {0xdf2, 0xe52},
  873. {0xdf3, 0xe53},
  874. {0xdf4, 0xe54},
  875. {0xdf5, 0xe55},
  876. {0xdf6, 0xe56},
  877. {0xdf7, 0xe57},
  878. {0xdf8, 0xe58},
  879. {0xdf9, 0xe59},
  880. {0xea1, 0x3131},
  881. {0xea2, 0x3132},
  882. {0xea3, 0x3133},
  883. {0xea4, 0x3134},
  884. {0xea5, 0x3135},
  885. {0xea6, 0x3136},
  886. {0xea7, 0x3137},
  887. {0xea8, 0x3138},
  888. {0xea9, 0x3139},
  889. {0xeaa, 0x313a},
  890. {0xeab, 0x313b},
  891. {0xeac, 0x313c},
  892. {0xead, 0x313d},
  893. {0xeae, 0x313e},
  894. {0xeaf, 0x313f},
  895. {0xeb0, 0x3140},
  896. {0xeb1, 0x3141},
  897. {0xeb2, 0x3142},
  898. {0xeb3, 0x3143},
  899. {0xeb4, 0x3144},
  900. {0xeb5, 0x3145},
  901. {0xeb6, 0x3146},
  902. {0xeb7, 0x3147},
  903. {0xeb8, 0x3148},
  904. {0xeb9, 0x3149},
  905. {0xeba, 0x314a},
  906. {0xebb, 0x314b},
  907. {0xebc, 0x314c},
  908. {0xebd, 0x314d},
  909. {0xebe, 0x314e},
  910. {0xebf, 0x314f},
  911. {0xec0, 0x3150},
  912. {0xec1, 0x3151},
  913. {0xec2, 0x3152},
  914. {0xec3, 0x3153},
  915. {0xec4, 0x3154},
  916. {0xec5, 0x3155},
  917. {0xec6, 0x3156},
  918. {0xec7, 0x3157},
  919. {0xec8, 0x3158},
  920. {0xec9, 0x3159},
  921. {0xeca, 0x315a},
  922. {0xecb, 0x315b},
  923. {0xecc, 0x315c},
  924. {0xecd, 0x315d},
  925. {0xece, 0x315e},
  926. {0xecf, 0x315f},
  927. {0xed0, 0x3160},
  928. {0xed1, 0x3161},
  929. {0xed2, 0x3162},
  930. {0xed3, 0x3163},
  931. {0xed4, 0x11a8},
  932. {0xed5, 0x11a9},
  933. {0xed6, 0x11aa},
  934. {0xed7, 0x11ab},
  935. {0xed8, 0x11ac},
  936. {0xed9, 0x11ad},
  937. {0xeda, 0x11ae},
  938. {0xedb, 0x11af},
  939. {0xedc, 0x11b0},
  940. {0xedd, 0x11b1},
  941. {0xede, 0x11b2},
  942. {0xedf, 0x11b3},
  943. {0xee0, 0x11b4},
  944. {0xee1, 0x11b5},
  945. {0xee2, 0x11b6},
  946. {0xee3, 0x11b7},
  947. {0xee4, 0x11b8},
  948. {0xee5, 0x11b9},
  949. {0xee6, 0x11ba},
  950. {0xee7, 0x11bb},
  951. {0xee8, 0x11bc},
  952. {0xee9, 0x11bd},
  953. {0xeea, 0x11be},
  954. {0xeeb, 0x11bf},
  955. {0xeec, 0x11c0},
  956. {0xeed, 0x11c1},
  957. {0xeee, 0x11c2},
  958. {0xeef, 0x316d},
  959. {0xef0, 0x3171},
  960. {0xef1, 0x3178},
  961. {0xef2, 0x317f},
  962. {0xef3, 0x3181},
  963. {0xef4, 0x3184},
  964. {0xef5, 0x3186},
  965. {0xef6, 0x318d},
  966. {0xef7, 0x318e},
  967. {0xef8, 0x11eb},
  968. {0xef9, 0x11f0},
  969. {0xefa, 0x11f9},
  970. {0xeff, 0x20a9},
  971. {0x13a4, 0x20ac},
  972. {0x13bc, 0x152},
  973. {0x13bd, 0x153},
  974. {0x13be, 0x178},
  975. {0x20a0, 0x20a0},
  976. {0x20a1, 0x20a1},
  977. {0x20a2, 0x20a2},
  978. {0x20a3, 0x20a3},
  979. {0x20a4, 0x20a4},
  980. {0x20a5, 0x20a5},
  981. {0x20a6, 0x20a6},
  982. {0x20a7, 0x20a7},
  983. {0x20a8, 0x20a8},
  984. {0x20aa, 0x20aa},
  985. {0x20ab, 0x20ab},
  986. {0x20ac, 0x20ac},
  987. };
  988. int keysym_to_unicode(int keysym)
  989. {
  990. int i, j, k;
  991. i = -1;
  992. j = lenof(keysyms);
  993. while (j - i >= 2) {
  994. k = (j + i) / 2;
  995. if (keysyms[k].keysym == keysym)
  996. return keysyms[k].unicode;
  997. else if (keysyms[k].keysym < keysym)
  998. i = k;
  999. else
  1000. j = k;
  1001. }
  1002. return -1;
  1003. }