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