1 /*
2  *    Terminal Module.
3  *
4  *    based on NxEdit2.04     :: term.c
5  *             FD clone 1.03g :: term.c
6  *             ne 3.00pre17   :: term.c
7  *
8  * Copyright (c) 1999, 2000 SASAKI Shunsuke.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification, immediately at the beginning of the file.
17  * 2. The name of the author may not be used to endorse or promote products
18  *    derived from this software without specific prior written permission.
19  *
20  * Where this Software is combined with software released under the terms of
21  * the GNU Public License ("GPL") and the terms of the GPL would require the
22  * combined work to also be released under the terms of the GPL, the terms
23  * and conditions of this License will apply in addition to those of the
24  * GPL with the exception of any terms or conditions of this License that
25  * conflict with, or are expressly prohibited by, the GPL.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
28  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
31  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37  * SUCH DAMAGE.
38  */
39 
40 #include	"config.h"
41 
42 #include	<stdio.h>
43 #include	<stdlib.h>
44 #include	<string.h>
45 
46 #include	<errno.h>
47 
48 #ifdef  HAVE_UNISTD_H
49 #   include <unistd.h>
50 #endif
51 
52 
53 #include	"generic.h"
54 #include	"term.h"
55 
56 #define	SENSEPERSEC	50
57 #define	WAITKEYPAD	360		/* msec */
58 
59 
60 
61 
62 #define	MAX_esc	1024
63 typedef	struct
64 {
65 	char	*seq;
66 	int 	scode;
67 
68 	int 	len;
69 }	esc_t;
70 
71 static	esc_t	esc[MAX_esc];
72 static	int 	esc_num=0;
73 
term_keyreport()74 void	term_keyreport()
75 {
76 	int 	i;
77 
78 	report_puts("������������:\n");
79 	for (i=0; i<esc_num; ++i)
80 		report_printf("  [%s] -> %x\n",esc[i].seq, esc[i].scode);
81 }
82 
83 
term_escset(int n,const char * e,const char * d)84 void	term_escset(int n, const char *e, const char *d)
85 {
86 	if (esc_num>=MAX_esc || *e=='\0')
87 		return;
88 
89 	esc[esc_num].scode= n;
90 	esc[esc_num].seq = mem_strdup(e);
91 
92 	switch (*e)
93 		{
94 	 case '&':
95 	 	 esc[esc_num].seq = term_getent(e+1, d);
96 	 	 if (esc[esc_num].seq == NULL || *esc[esc_num].seq == '\0')
97 	 	 	return;
98 	 	}
99 
100 	esc[esc_num].len = strlen(esc[esc_num].seq);
101 //fprintf(stderr, "[%s]\n", esc[esc_num].seq);
102 
103 	++esc_num;
104 }
105 
106 
107 #if 0
108 
109 
110 
111 
112 
113 #define	MAX_keyring	64
114 #define	MAX_skip	4
115 
116 int 	key_ring[MAX_keyring];
117 int 	key_ring_in=0;
118 int 	key_ring_out=0;
119 
120 int 	key_skip=0;
121 
122 
123 void	key_ring_pushall(long n)
124 {
125 	int 	ch;
126 
127 	for (;;)
128 		{
129 		 if ((key_ring_in+1)%MAX_keyring == key_ring_out || !term_kbhit(n))
130 		 	return;
131 
132 		 ch=term_getch();
133 		 if (ch!=-1)
134 		 	{
135 		 	 key_ring[key_ring_in++]=ch;
136 		 	 if (key_ring_in>=MAX_keyring)
137 		 	 	key_ring_in=0;
138 		 	}
139 		}
140 }
141 
142 int 	key_ring_pop()
143 {
144 	int 	ch;
145 
146 	while(key_ring_in == key_ring_out)
147 		key_ring_pushall(1000L);
148 
149 	ch=key_ring[key_ring_out++];
150 	if (key_ring_out>=MAX_keyring)
151 		key_ring_out=0;
152 
153 	return ch;
154 }
155 
156 void	key_ring_push(int ch)
157 {
158 	--key_ring_out;
159 	if (key_ring_out<0)
160 		key_ring_out=MAX_keyring;
161 
162 	key_ring[key_ring_out]=ch;
163 }
164 
165 int 	term_inkey()
166 {
167 	int i, j, ch, key, start, end, s, e;
168 
169 
170 	if (key_ring_in!=key_ring_out && key_skip<MAX_skip)
171 		++key_skip; else
172 		{
173 		 key_skip=0;
174 		 term_csr_flush();
175 		}
176 
177 //term_csr_flush();
178 
179 	key = ch = key_ring_pop();
180 
181 	start = 0;
182 	end   = esc_num;
183 
184 	for (i=0;;i++)
185 	{
186 		s = start;
187 		e = end;
188 		start = end = -1;
189 
190 		for (j=s; j<e; j++)
191 			{
192 			 if (i>=esc[j].len || esc[j].seq[i]!=ch)
193 			 	{
194 			 	 if (end!=-1)
195 			 	 	break;
196 			 	} else
197 			 	{
198 			 	 if (esc[j].len == i+1)
199 			 	 	return(esc[j].scode);
200 
201 		 	 	 if (start==-1)
202 		 	 	 	start=j;
203 			 	 end = j+1;
204 			 	}
205 			}
206 		if (start==-1)
207 			break;
208 
209 		if (key_ring_in==key_ring_out && !term_kbhit(WAITKEYPAD*1000L))
210 			break;
211 
212 /*		if (key_ring_in==key_ring_out)
213 			{
214 			 key_ring_pushall(WAITKEYPAD * 1000L);
215 			 if (key_ring_in==key_ring_out)
216 			 	break;
217 			}
218 */
219 		ch = key_ring_pop();
220 	}
221 
222 	if (i>0)
223 		{
224 		 key_ring_push(ch);
225 		 while(--i>0)
226 		 	key_ring_push(esc[j-1].seq[i]);
227 		}
228 	return (key);
229 }
230 
231 
232 
233 
234 
235 
236 
237 
238 
239 
240 
241 
242 
243 
244 
245 
246 
247 
248 
249 
250 
251 
252 
253 
254 
255 
256 
257 
258 
259 
260 
261 
262 
263 #else
264 
265 #define	MAX_keyring	64
266 #define	MAX_skip	4
267 
268 int 	key_ring[MAX_keyring];
269 int 	key_ring_in=0;
270 int 	key_ring_out=0;
271 
272 int 	key_skip=0;
273 
274 
key_ring_pushall(long n)275 void	key_ring_pushall(long n)
276 {
277 	int 	ch;
278 
279 	for (;;)
280 		{
281 		 if ((key_ring_in+1)%MAX_keyring == key_ring_out || !term_kbhit(n))
282 		 	return;
283 
284 		 ch=term_getch();
285 		 if (ch!=-1)
286 		 	{
287 		 	 key_ring[key_ring_in++]=ch;
288 		 	 if (key_ring_in>=MAX_keyring)
289 		 	 	key_ring_in=0;
290 		 	}
291 		}
292 }
293 
key_ring_pop()294 int 	key_ring_pop()
295 {
296 	int 	ch;
297 
298 	while(key_ring_in == key_ring_out)
299 		key_ring_pushall(1000L);
300 
301 	ch=key_ring[key_ring_out++];
302 	if (key_ring_out>=MAX_keyring)
303 		key_ring_out=0;
304 
305 	return ch;
306 }
307 
key_ring_push(int ch)308 void	key_ring_push(int ch)
309 {
310 	--key_ring_out;
311 	if (key_ring_out<0)
312 		key_ring_out=MAX_keyring;
313 
314 	key_ring[key_ring_out]=ch;
315 }
316 
term_inkey()317 int 	term_inkey()
318 {
319 	int i, j, ch, key, start, end, s, e;
320 
321 
322 	if (key_ring_in!=key_ring_out && key_skip<MAX_skip)
323 		++key_skip; else
324 		{
325 		 key_skip=0;
326 		 term_csr_flush();
327 		}
328 
329 //term_csr_flush();
330 
331 	key = ch = key_ring_pop();
332 
333 	start = 0;
334 	end   = esc_num;
335 
336 	for (i=0;;i++)
337 	{
338 		s = start;
339 		e = end;
340 		start = end = -1;
341 
342 		for (j=s; j<e; j++)
343 			{
344 			 if (i>=esc[j].len || esc[j].seq[i]!=ch)
345 			 	{
346 			 	 if (end!=-1)
347 			 	 	break;
348 			 	} else
349 			 	{
350 			 	 if (esc[j].len == i+1)
351 			 	 	return(esc[j].scode);
352 
353 		 	 	 if (start==-1)
354 		 	 	 	start=j;
355 			 	 end = j+1;
356 			 	}
357 			}
358 		if (start==-1)
359 			break;
360 
361 		if (key_ring_in==key_ring_out && !term_kbhit(WAITKEYPAD*1000L))
362 			break;
363 
364 /*		if (key_ring_in==key_ring_out)
365 			{
366 			 key_ring_pushall(WAITKEYPAD * 1000L);
367 			 if (key_ring_in==key_ring_out)
368 			 	break;
369 			}
370 */
371 		ch = key_ring_pop();
372 	}
373 
374 	if (i>0)
375 		{
376 		 key_ring_push(ch);
377 		 while(--i>0)
378 		 	key_ring_push(esc[j-1].seq[i]);
379 		}
380 	return (key);
381 }
382 
383 #endif
384 
385 
386 
387 
388 #define	KS_shift	0x10000
389 #define	KS_ctrl		0x20000
390 #define	KS_alt		0x40000
391 
392 typedef	struct
393 {
394 	char	*name;
395 	int 	scode;
396 }	keysdef_t;
397 
398 keysdef_t	keysdef[]=
399 {
400 	{"Tab",							0x09},
401 	{"Linefeed",					0x0A},
402 	{"Return",						0x0D},
403 	{"CR",							0x0D},
404 	{"Escape",						0x1B},
405 	{"ESC",							0x1B},
406 	{"SPACE",						' '},
407 
408 
409 	{"BackSpace", 					0xFF08},
410 	{"BS",		 					0xFF08},
411 	{"Clear",						0xFF0B},
412 	{"CLR",							0xFF0B},
413 	{"Pause",						0xFF13},
414 	{"Scroll_Lock",					0xFF14},
415 	{"Sys_Req",						0xFF15},
416 	{"Delete",						0xFFFF},
417 	{"DEL",							0xFFFF},
418 
419 	{"Multi_key",					0xFF20},
420 	{"Codeinput",					0xFF37},
421 	{"SingleCandidate",				0xFF3C},
422 	{"MultipleCandidate",			0xFF3D},
423 	{"PreviousCandidate",			0xFF3E},
424 
425 	{"Kanji",						0xFF21},
426 	{"Muhenkan",					0xFF22},
427 	{"Henkan_Mode",					0xFF23},
428 	{"Henkan",						0xFF23},
429 	{"Romaji",						0xFF24},
430 	{"Hiragana",					0xFF25},
431 	{"Katakana",					0xFF26},
432 	{"Hiragana_Katakana",			0xFF27},
433 	{"Zenkaku",						0xFF28},
434 	{"Hankaku",						0xFF29},
435 	{"Zenkaku_Hankaku",				0xFF2A},
436 	{"Touroku",						0xFF2B},
437 	{"Massyo",						0xFF2C},
438 	{"Kana_Lock",					0xFF2D},
439 	{"Kana_Shift",					0xFF2E},
440 	{"Eisu_Shift",					0xFF2F},
441 	{"Eisu_toggle",					0xFF30},
442 	{"Kanji_Bangou",				0xFF37},
443 	{"Zen_Koho",					0xFF3D},
444 	{"Mae_Koho",					0xFF3E},
445 
446 	{"Home",						0xFF50},
447 	{"Left",						0xFF51},
448 	{"Up",							0xFF52},
449 	{"Right",						0xFF53},
450 	{"Down",						0xFF54},
451 	{"Prior",						0xFF55},
452 	{"Page_Up",						0xFF55},
453 	{"PGUP",						0xFF55},
454 	{"RLDN",						0xFF55},
455 	{"Next",						0xFF56},
456 	{"Page_Down",					0xFF56},
457 	{"PGDN",						0xFF56},
458 	{"RLUP",						0xFF56},
459 	{"End",							0xFF57},
460 	{"Begin",						0xFF58},
461 
462 	{"Select",						0xFF60},
463 	{"Print",						0xFF61},
464 	{"Execute",						0xFF62},
465 	{"Insert",						0xFF63},
466 	{"INS",							0xFF63},
467 	{"Undo",						0xFF65},
468 	{"Redo",						0xFF66},
469 	{"Menu",						0xFF67},
470 	{"Find",						0xFF68},
471 	{"Cancel",						0xFF69},
472 	{"Help",						0xFF6A},
473 	{"Break",						0xFF6B},
474 	{"Mode_switch",					0xFF7E},
475 	{"script_switch",				0xFF7E},
476 	{"Num_Lock",					0xFF7F},
477 
478 
479 	{"KP_Space",					0xFF80},
480 	{"KP_Tab",						0xFF89},
481 	{"KP_Enter",					0xFF8D},
482 	{"KP_F1",						0xFF91},
483 	{"KP_F2",						0xFF92},
484 	{"KP_F3",						0xFF93},
485 	{"KP_F4",						0xFF94},
486 	{"KP_Home",						0xFF95},
487 	{"KP_Left",						0xFF96},
488 	{"KP_Up",						0xFF97},
489 	{"KP_Right",					0xFF98},
490 	{"KP_Down",						0xFF99},
491 	{"KP_Prior",					0xFF9A},
492 	{"KP_Page_Up",					0xFF9A},
493 	{"KP_Next",						0xFF9B},
494 	{"KP_Page_Down",				0xFF9B},
495 	{"KP_End",						0xFF9C},
496 	{"KP_Begin",					0xFF9D},
497 	{"KP_Insert",					0xFF9E},
498 	{"KP_Delete",					0xFF9F},
499 	{"KP_Equal",					0xFFBD},
500 	{"KP_Multiply",					0xFFAA},
501 	{"KP_Add",						0xFFAB},
502 	{"KP_Separator",				0xFFAC},
503 	{"KP_Subtract",					0xFFAD},
504 	{"KP_Decimal",					0xFFAE},
505 	{"KP_Divide",					0xFFAF},
506 
507 	{"KP_0",						0xFFB0},
508 	{"KP_1",						0xFFB1},
509 	{"KP_2",						0xFFB2},
510 	{"KP_3",						0xFFB3},
511 	{"KP_4",						0xFFB4},
512 	{"KP_5",						0xFFB5},
513 	{"KP_6",						0xFFB6},
514 	{"KP_7",						0xFFB7},
515 	{"KP_8",						0xFFB8},
516 	{"KP_9",						0xFFB9},
517 
518 	{"F1",							0xFFBE},
519 	{"F01",							0xFFBE},
520 	{"F2",							0xFFBF},
521 	{"F02",							0xFFBF},
522 	{"F3",							0xFFC0},
523 	{"F03",							0xFFC0},
524 	{"F4",							0xFFC1},
525 	{"F04",							0xFFC1},
526 	{"F5",							0xFFC2},
527 	{"F05",							0xFFC2},
528 	{"F6",							0xFFC3},
529 	{"F06",							0xFFC3},
530 	{"F7",							0xFFC4},
531 	{"F07",							0xFFC4},
532 	{"F8",							0xFFC5},
533 	{"F08",							0xFFC5},
534 	{"F9",							0xFFC6},
535 	{"F09",							0xFFC6},
536 	{"F10",							0xFFC7},
537 	{"F11",							0xFFC8},
538 	{"L1",							0xFFC8},
539 	{"F12",							0xFFC9},
540 	{"L2",							0xFFC9},
541 	{"F13",							0xFFCA},
542 	{"L3",							0xFFCA},
543 	{"F14",							0xFFCB},
544 	{"L4",							0xFFCB},
545 	{"F15",							0xFFCC},
546 	{"L5",							0xFFCC},
547 	{"F16",							0xFFCD},
548 	{"L6",							0xFFCD},
549 	{"F17",							0xFFCE},
550 	{"L7",							0xFFCE},
551 	{"F18",							0xFFCF},
552 	{"L8",							0xFFCF},
553 	{"F19",							0xFFD0},
554 	{"L9",							0xFFD0},
555 	{"F20",							0xFFD1},
556 	{"L10",							0xFFD1},
557 	{"F21",							0xFFD2},
558 	{"R1",							0xFFD2},
559 	{"F22",							0xFFD3},
560 	{"R2",							0xFFD3},
561 	{"F23",							0xFFD4},
562 	{"R3",							0xFFD4},
563 	{"F24",							0xFFD5},
564 	{"R4",							0xFFD5},
565 	{"F25",							0xFFD6},
566 	{"R5",							0xFFD6},
567 	{"F26",							0xFFD7},
568 	{"R6",							0xFFD7},
569 	{"F27",							0xFFD8},
570 	{"R7",							0xFFD8},
571 	{"F28",							0xFFD9},
572 	{"R8",							0xFFD9},
573 	{"F29",							0xFFDA},
574 	{"R9",							0xFFDA},
575 	{"F30",							0xFFDB},
576 	{"R10",							0xFFDB},
577 	{"F31",							0xFFDC},
578 	{"R11",							0xFFDC},
579 	{"F32",							0xFFDD},
580 	{"R12",							0xFFDD},
581 	{"F33",							0xFFDE},
582 	{"R13",							0xFFDE},
583 	{"F34",							0xFFDF},
584 	{"R14",							0xFFDF},
585 	{"F35",							0xFFE0},
586 	{"R15",							0xFFE0},
587 
588 	{"Shift_L",						0xFFE1},
589 	{"Shift_R",						0xFFE2},
590 	{"Control_L",					0xFFE3},
591 	{"Control_R",					0xFFE4},
592 	{"Caps_Lock",					0xFFE5},
593 	{"Shift_Lock",					0xFFE6},
594 
595 	{"Meta_L",						0xFFE7},
596 	{"Meta_R",						0xFFE8},
597 	{"Alt_L",						0xFFE9},
598 	{"Alt_R",						0xFFEA},
599 	{"Super_L",						0xFFEB},
600 	{"Super_R",						0xFFEC},
601 	{"Hyper_L",						0xFFED},
602 	{"Hyper_R",						0xFFEE},
603 
604 
605 	{"ISO_Lock",					0xFE01},
606 	{"ISO_Level2_Latch",			0xFE02},
607 	{"ISO_Level3_Shift",			0xFE03},
608 	{"ISO_Level3_Latch",			0xFE04},
609 	{"ISO_Level3_Lock",				0xFE05},
610 	{"ISO_Group_Shift",				0xFF7E},
611 	{"ISO_Group_Latch",				0xFE06},
612 	{"ISO_Group_Lock",				0xFE07},
613 	{"ISO_Next_Group",				0xFE08},
614 	{"ISO_Next_Group_Lock",			0xFE09},
615 	{"ISO_Prev_Group",				0xFE0A},
616 	{"ISO_Prev_Group_Lock",			0xFE0B},
617 	{"ISO_First_Group",				0xFE0C},
618 	{"ISO_First_Group_Lock",		0xFE0D},
619 	{"ISO_Last_Group",				0xFE0E},
620 	{"ISO_Last_Group_Lock",			0xFE0F},
621 
622 	{"ISO_Left_Tab",				0xFE20},
623 	{"ISO_Move_Line_Up",			0xFE21},
624 	{"ISO_Move_Line_Down",			0xFE22},
625 	{"ISO_Partial_Line_Up",			0xFE23},
626 	{"ISO_Partial_Line_Down",		0xFE24},
627 	{"ISO_Partial_Space_Left",		0xFE25},
628 	{"ISO_Partial_Space_Right",		0xFE26},
629 	{"ISO_Set_Margin_Left",			0xFE27},
630 	{"ISO_Set_Margin_Right",		0xFE28},
631 	{"ISO_Release_Margin_Left",		0xFE29},
632 	{"ISO_Release_Margin_Right",	0xFE2A},
633 	{"ISO_Release_Both_Margins",	0xFE2B},
634 	{"ISO_Fast_Cursor_Left",		0xFE2C},
635 	{"ISO_Fast_Cursor_Right",		0xFE2D},
636 	{"ISO_Fast_Cursor_Up",			0xFE2E},
637 	{"ISO_Fast_Cursor_Down",		0xFE2F},
638 	{"ISO_Continuous_Underline",	0xFE30},
639 	{"ISO_Discontinuous_Underline",	0xFE31},
640 	{"ISO_Emphasize",				0xFE32},
641 	{"ISO_Center_Object",			0xFE33},
642 	{"ISO_Enter",					0xFE34},
643 
644 	{"dead_grave",					0xFE50},
645 	{"dead_acute",					0xFE51},
646 	{"dead_circumflex",				0xFE52},
647 	{"dead_tilde",					0xFE53},
648 	{"dead_macron",					0xFE54},
649 	{"dead_breve",					0xFE55},
650 	{"dead_abovedot",				0xFE56},
651 	{"dead_diaeresis",				0xFE57},
652 	{"dead_abovering",				0xFE58},
653 	{"dead_doubleacute",			0xFE59},
654 	{"dead_caron",					0xFE5A},
655 	{"dead_cedilla",				0xFE5B},
656 	{"dead_ogonek",					0xFE5C},
657 	{"dead_iota",					0xFE5D},
658 	{"dead_voiced_sound",			0xFE5E},
659 	{"dead_semivoiced_sound",		0xFE5F},
660 	{"dead_belowdot",				0xFE60},
661 
662 	{"First_Virtual_Screen",		0xFED0},
663 	{"Prev_Virtual_Screen",			0xFED1},
664 	{"Next_Virtual_Screen",			0xFED2},
665 	{"Last_Virtual_Screen",			0xFED4},
666 	{"Terminate_Server",			0xFED5},
667 
668 	{"AccessX_Enable",				0xFE70},
669 	{"AccessX_Feedback_Enable",		0xFE71},
670 	{"RepeatKeys_Enable",			0xFE72},
671 	{"SlowKeys_Enable",				0xFE73},
672 	{"BounceKeys_Enable",			0xFE74},
673 	{"StickyKeys_Enable",			0xFE75},
674 	{"MouseKeys_Enable",			0xFE76},
675 	{"MouseKeys_Accel_Enable",		0xFE77},
676 	{"Overlay1_Enable",				0xFE78},
677 	{"Overlay2_Enable",				0xFE79},
678 	{"AudibleBell_Enable",			0xFE7A},
679 
680 	{"Pointer_Left",				0xFEE0},
681 	{"Pointer_Right",				0xFEE1},
682 	{"Pointer_Up",					0xFEE2},
683 	{"Pointer_Down",				0xFEE3},
684 	{"Pointer_UpLeft",				0xFEE4},
685 	{"Pointer_UpRight",				0xFEE5},
686 	{"Pointer_DownLeft",			0xFEE6},
687 	{"Pointer_DownRight",			0xFEE7},
688 	{"Pointer_Button_Dflt",			0xFEE8},
689 	{"Pointer_Button1",				0xFEE9},
690 	{"Pointer_Button2",				0xFEEA},
691 	{"Pointer_Button3",				0xFEEB},
692 	{"Pointer_Button4",				0xFEEC},
693 	{"Pointer_Button5",				0xFEED},
694 	{"Pointer_DblClick_Dflt",		0xFEEE},
695 	{"Pointer_DblClick1",			0xFEEF},
696 	{"Pointer_DblClick2",			0xFEF0},
697 	{"Pointer_DblClick3",			0xFEF1},
698 	{"Pointer_DblClick4",			0xFEF2},
699 	{"Pointer_DblClick5",			0xFEF3},
700 	{"Pointer_Drag_Dflt",			0xFEF4},
701 	{"Pointer_Drag1",				0xFEF5},
702 	{"Pointer_Drag2",				0xFEF6},
703 	{"Pointer_Drag3",				0xFEF7},
704 	{"Pointer_Drag4",				0xFEF8},
705 	{"Pointer_Drag5",				0xFEFD},
706 
707 	{"Pointer_EnableKeys",			0xFEF9},
708 	{"Pointer_Accelerate",			0xFEFA},
709 	{"Pointer_DfltBtnNext",			0xFEFB},
710 	{"Pointer_DfltBtnPrev",			0xFEFC},
711 
712 /*
713 	{"nobreakspace",				0x0a0},
714 	{"exclamdown",					0x0a1},
715 	{"cent",						0x0a2},
716 	{"sterling",					0x0a3},
717 	{"currency",					0x0a4},
718 	{"yen",							0x0a5},
719 	{"brokenbar",					0x0a6},
720 	{"section",						0x0a7},
721 	{"diaeresis",					0x0a8},
722 	{"copyright",					0x0a9},
723 	{"ordfeminine",					0x0aa},
724 	{"guillemotleft",				0x0ab},
725 	{"notsign",						0x0ac},
726 	{"hyphen",						0x0ad},
727 	{"registered",					0x0ae},
728 	{"macron",						0x0af},
729 	{"degree",						0x0b0},
730 	{"plusminus",					0x0b1},
731 	{"twosuperior",					0x0b2},
732 	{"threesuperior",				0x0b3},
733 	{"acute",						0x0b4},
734 	{"mu",							0x0b5},
735 	{"paragraph",					0x0b6},
736 	{"periodcentered",				0x0b7},
737 	{"cedilla",						0x0b8},
738 	{"onesuperior",					0x0b9},
739 	{"masculine",					0x0ba},
740 	{"guillemotright",				0x0bb},
741 	{"onequarter",					0x0bc},
742 	{"onehalf",						0x0bd},
743 	{"threequarters",				0x0be},
744 	{"questiondown",				0x0bf},
745 	{"Agrave",						0x0c0},
746 	{"Aacute",						0x0c1},
747 	{"Acircumflex",					0x0c2},
748 	{"Atilde",						0x0c3},
749 	{"Adiaeresis",					0x0c4},
750 	{"Aring",						0x0c5},
751 	{"AE",							0x0c6},
752 	{"Ccedilla",					0x0c7},
753 	{"Egrave",						0x0c8},
754 	{"Eacute",						0x0c9},
755 	{"Ecircumflex",					0x0ca},
756 	{"Ediaeresis",					0x0cb},
757 	{"Igrave",						0x0cc},
758 	{"Iacute",						0x0cd},
759 	{"Icircumflex",					0x0ce},
760 	{"Idiaeresis",					0x0cf},
761 	{"ETH",							0x0d0},
762 	{"Eth",							0x0d0},
763 	{"Ntilde",						0x0d1},
764 	{"Ograve",						0x0d2},
765 	{"Oacute",						0x0d3},
766 	{"Ocircumflex",					0x0d4},
767 	{"Otilde",						0x0d5},
768 	{"Odiaeresis",					0x0d6},
769 	{"multiply",					0x0d7},
770 	{"Ooblique",					0x0d8},
771 	{"Ugrave",						0x0d9},
772 	{"Uacute",						0x0da},
773 	{"Ucircumflex",					0x0db},
774 	{"Udiaeresis",					0x0dc},
775 	{"Yacute",						0x0dd},
776 	{"THORN",						0x0de},
777 	{"Thorn",						0x0de},
778 	{"ssharp",						0x0df},
779 	{"agrave",						0x0e0},
780 	{"aacute",						0x0e1},
781 	{"acircumflex",					0x0e2},
782 	{"atilde",						0x0e3},
783 	{"adiaeresis",					0x0e4},
784 	{"aring",						0x0e5},
785 	{"ae",							0x0e6},
786 	{"ccedilla",					0x0e7},
787 	{"egrave",						0x0e8},
788 	{"eacute",						0x0e9},
789 	{"ecircumflex",					0x0ea},
790 	{"ediaeresis",					0x0eb},
791 	{"igrave",						0x0ec},
792 	{"iacute",						0x0ed},
793 	{"icircumflex",					0x0ee},
794 	{"idiaeresis",					0x0ef},
795 	{"eth",							0x0f0},
796 	{"ntilde",						0x0f1},
797 	{"ograve",						0x0f2},
798 	{"oacute",						0x0f3},
799 	{"ocircumflex",					0x0f4},
800 	{"otilde",						0x0f5},
801 	{"odiaeresis",					0x0f6},
802 	{"division",					0x0f7},
803 	{"oslash",						0x0f8},
804 	{"ugrave",						0x0f9},
805 	{"uacute",						0x0fa},
806 	{"ucircumflex",					0x0fb},
807 	{"udiaeresis",					0x0fc},
808 	{"yacute",						0x0fd},
809 	{"thorn",						0x0fe},
810 	{"ydiaeresis",					0x0ff},
811 */
812 	{"Aogonek",						0x1a1},
813 	{"breve",						0x1a2},
814 	{"Lstroke",						0x1a3},
815 	{"Lcaron",						0x1a5},
816 	{"Sacute",						0x1a6},
817 	{"Scaron",						0x1a9},
818 	{"Scedilla",					0x1aa},
819 	{"Tcaron",						0x1ab},
820 	{"Zacute",						0x1ac},
821 	{"Zcaron",						0x1ae},
822 	{"Zabovedot",					0x1af},
823 	{"aogonek",						0x1b1},
824 	{"ogonek",						0x1b2},
825 	{"lstroke",						0x1b3},
826 	{"lcaron",						0x1b5},
827 	{"sacute",						0x1b6},
828 	{"caron",						0x1b7},
829 	{"scaron",						0x1b9},
830 	{"scedilla",					0x1ba},
831 	{"tcaron",						0x1bb},
832 	{"zacute",						0x1bc},
833 	{"doubleacute",					0x1bd},
834 	{"zcaron",						0x1be},
835 	{"zabovedot",					0x1bf},
836 	{"Racute",						0x1c0},
837 	{"Abreve",						0x1c3},
838 	{"Lacute",						0x1c5},
839 	{"Cacute",						0x1c6},
840 	{"Ccaron",						0x1c8},
841 	{"Eogonek",						0x1ca},
842 	{"Ecaron",						0x1cc},
843 	{"Dcaron",						0x1cf},
844 	{"Dstroke",						0x1d0},
845 	{"Nacute",						0x1d1},
846 	{"Ncaron",						0x1d2},
847 	{"Odoubleacute",				0x1d5},
848 	{"Rcaron",						0x1d8},
849 	{"Uring",						0x1d9},
850 	{"Udoubleacute",				0x1db},
851 	{"Tcedilla",					0x1de},
852 	{"racute",						0x1e0},
853 	{"abreve",						0x1e3},
854 	{"lacute",						0x1e5},
855 	{"cacute",						0x1e6},
856 	{"ccaron",						0x1e8},
857 	{"eogonek",						0x1ea},
858 	{"ecaron",						0x1ec},
859 	{"dcaron",						0x1ef},
860 	{"dstroke",						0x1f0},
861 	{"nacute",						0x1f1},
862 	{"ncaron",						0x1f2},
863 	{"odoubleacute",				0x1f5},
864 	{"udoubleacute",				0x1fb},
865 	{"rcaron",						0x1f8},
866 	{"uring",						0x1f9},
867 	{"tcedilla",					0x1fe},
868 	{"abovedot",					0x1ff},
869 
870 
871 	{"Hstroke",						0x2a1},
872 	{"Hcircumflex",					0x2a6},
873 	{"Iabovedot",					0x2a9},
874 	{"Gbreve",						0x2ab},
875 	{"Jcircumflex",					0x2ac},
876 	{"hstroke",						0x2b1},
877 	{"hcircumflex",					0x2b6},
878 	{"idotless",					0x2b9},
879 	{"gbreve",						0x2bb},
880 	{"jcircumflex",					0x2bc},
881 	{"Cabovedot",					0x2c5},
882 	{"Ccircumflex",					0x2c6},
883 	{"Gabovedot",					0x2d5},
884 	{"Gcircumflex",					0x2d8},
885 	{"Ubreve",						0x2dd},
886 	{"Scircumflex",					0x2de},
887 	{"cabovedot",					0x2e5},
888 	{"ccircumflex",					0x2e6},
889 	{"gabovedot",					0x2f5},
890 	{"gcircumflex",					0x2f8},
891 	{"ubreve",						0x2fd},
892 	{"scircumflex",					0x2fe},
893 
894 
895 	{"kra",							0x3a2},
896 	{"kappa",						0x3a2},
897 	{"Rcedilla",					0x3a3},
898 	{"Itilde",						0x3a5},
899 	{"Lcedilla",					0x3a6},
900 	{"Emacron",						0x3aa},
901 	{"Gcedilla",					0x3ab},
902 	{"Tslash",						0x3ac},
903 	{"rcedilla",					0x3b3},
904 	{"itilde",						0x3b5},
905 	{"lcedilla",					0x3b6},
906 	{"emacron",						0x3ba},
907 	{"gcedilla",					0x3bb},
908 	{"tslash",						0x3bc},
909 	{"ENG",							0x3bd},
910 	{"eng",							0x3bf},
911 	{"Amacron",						0x3c0},
912 	{"Iogonek",						0x3c7},
913 	{"Eabovedot",					0x3cc},
914 	{"Imacron",						0x3cf},
915 	{"Ncedilla",					0x3d1},
916 	{"Omacron",						0x3d2},
917 	{"Kcedilla",					0x3d3},
918 	{"Uogonek",						0x3d9},
919 	{"Utilde",						0x3dd},
920 	{"Umacron",						0x3de},
921 	{"amacron",						0x3e0},
922 	{"iogonek",						0x3e7},
923 	{"eabovedot",					0x3ec},
924 	{"imacron",						0x3ef},
925 	{"ncedilla",					0x3f1},
926 	{"omacron",						0x3f2},
927 	{"kcedilla",					0x3f3},
928 	{"uogonek",						0x3f9},
929 	{"utilde",						0x3fd},
930 	{"umacron",						0x3fe},
931 
932 	{"OE",							0x13bc},
933 	{"oe",							0x13bd},
934 	{"Ydiaeresis",					0x13be},
935 
936 	{"overline",					0x47e},
937 	{"kana_fullstop",				0x4a1},
938 	{"kana_openingbracket",			0x4a2},
939 	{"kana_closingbracket",			0x4a3},
940 	{"kana_comma",					0x4a4},
941 	{"kana_conjunctive",			0x4a5},
942 	{"kana_middledot",				0x4a5},
943 	{"kana_WO",						0x4a6},
944 	{"kana_a",						0x4a7},
945 	{"kana_i",						0x4a8},
946 	{"kana_u",						0x4a9},
947 	{"kana_e",						0x4aa},
948 	{"kana_o",						0x4ab},
949 	{"kana_ya",						0x4ac},
950 	{"kana_yu",						0x4ad},
951 	{"kana_yo",						0x4ae},
952 	{"kana_tsu",					0x4af},
953 	{"kana_tu",						0x4af},
954 	{"prolongedsound",				0x4b0},
955 	{"kana_A",						0x4b1},
956 	{"kana_I",						0x4b2},
957 	{"kana_U",						0x4b3},
958 	{"kana_E",						0x4b4},
959 	{"kana_O",						0x4b5},
960 	{"kana_KA",						0x4b6},
961 	{"kana_KI",						0x4b7},
962 	{"kana_KU",						0x4b8},
963 	{"kana_KE",						0x4b9},
964 	{"kana_KO",						0x4ba},
965 	{"kana_SA",						0x4bb},
966 	{"kana_SHI",					0x4bc},
967 	{"kana_SU",						0x4bd},
968 	{"kana_SE",						0x4be},
969 	{"kana_SO",						0x4bf},
970 	{"kana_TA",						0x4c0},
971 	{"kana_CHI",					0x4c1},
972 	{"kana_TI",						0x4c1},
973 	{"kana_TSU",					0x4c2},
974 	{"kana_TU",						0x4c2},
975 	{"kana_TE",						0x4c3},
976 	{"kana_TO",						0x4c4},
977 	{"kana_NA",						0x4c5},
978 	{"kana_NI",						0x4c6},
979 	{"kana_NU",						0x4c7},
980 	{"kana_NE",						0x4c8},
981 	{"kana_NO",						0x4c9},
982 	{"kana_HA",						0x4ca},
983 	{"kana_HI",						0x4cb},
984 	{"kana_FU",						0x4cc},
985 	{"kana_HU",						0x4cc},
986 	{"kana_HE",						0x4cd},
987 	{"kana_HO",						0x4ce},
988 	{"kana_MA",						0x4cf},
989 	{"kana_MI",						0x4d0},
990 	{"kana_MU",						0x4d1},
991 	{"kana_ME",						0x4d2},
992 	{"kana_MO",						0x4d3},
993 	{"kana_YA",						0x4d4},
994 	{"kana_YU",						0x4d5},
995 	{"kana_YO",						0x4d6},
996 	{"kana_RA",						0x4d7},
997 	{"kana_RI",						0x4d8},
998 	{"kana_RU",						0x4d9},
999 	{"kana_RE",						0x4da},
1000 	{"kana_RO",						0x4db},
1001 	{"kana_WA",						0x4dc},
1002 	{"kana_N",						0x4dd},
1003 	{"voicedsound",					0x4de},
1004 	{"semivoicedsound",				0x4df},
1005 	{"kana_switch",					0xFF7E},
1006 
1007 	{"Arabic_comma",				0x5ac},
1008 	{"Arabic_semicolon",			0x5bb},
1009 	{"Arabic_question_mark",		0x5bf},
1010 	{"Arabic_hamza",				0x5c1},
1011 	{"Arabic_maddaonalef",			0x5c2},
1012 	{"Arabic_hamzaonalef",			0x5c3},
1013 	{"Arabic_hamzaonwaw",			0x5c4},
1014 	{"Arabic_hamzaunderalef",		0x5c5},
1015 	{"Arabic_hamzaonyeh",			0x5c6},
1016 	{"Arabic_alef",					0x5c7},
1017 	{"Arabic_beh",					0x5c8},
1018 	{"Arabic_tehmarbuta",			0x5c9},
1019 	{"Arabic_teh",					0x5ca},
1020 	{"Arabic_theh",					0x5cb},
1021 	{"Arabic_jeem",					0x5cc},
1022 	{"Arabic_hah",					0x5cd},
1023 	{"Arabic_khah",					0x5ce},
1024 	{"Arabic_dal",					0x5cf},
1025 	{"Arabic_thal",					0x5d0},
1026 	{"Arabic_ra",					0x5d1},
1027 	{"Arabic_zain",					0x5d2},
1028 	{"Arabic_seen",					0x5d3},
1029 	{"Arabic_sheen",				0x5d4},
1030 	{"Arabic_sad",					0x5d5},
1031 	{"Arabic_dad",					0x5d6},
1032 	{"Arabic_tah",					0x5d7},
1033 	{"Arabic_zah",					0x5d8},
1034 	{"Arabic_ain",					0x5d9},
1035 	{"Arabic_ghain",				0x5da},
1036 	{"Arabic_tatweel",				0x5e0},
1037 	{"Arabic_feh",					0x5e1},
1038 	{"Arabic_qaf",					0x5e2},
1039 	{"Arabic_kaf",					0x5e3},
1040 	{"Arabic_lam",					0x5e4},
1041 	{"Arabic_meem",					0x5e5},
1042 	{"Arabic_noon",					0x5e6},
1043 	{"Arabic_ha",					0x5e7},
1044 	{"Arabic_heh",					0x5e7},
1045 	{"Arabic_waw",					0x5e8},
1046 	{"Arabic_alefmaksura",			0x5e9},
1047 	{"Arabic_yeh",					0x5ea},
1048 	{"Arabic_fathatan",				0x5eb},
1049 	{"Arabic_dammatan",				0x5ec},
1050 	{"Arabic_kasratan",				0x5ed},
1051 	{"Arabic_fatha",				0x5ee},
1052 	{"Arabic_damma",				0x5ef},
1053 	{"Arabic_kasra",				0x5f0},
1054 	{"Arabic_shadda",				0x5f1},
1055 	{"Arabic_sukun",				0x5f2},
1056 	{"Arabic_switch",				0xFF7E},
1057 
1058 
1059 	{"Serbian_dje",					0x6a1},
1060 	{"Macedonia_gje",				0x6a2},
1061 	{"Cyrillic_io",					0x6a3},
1062 	{"Ukrainian_ie",				0x6a4},
1063 	{"Ukranian_je",					0x6a4},
1064 	{"Macedonia_dse",				0x6a5},
1065 	{"Ukrainian_i",					0x6a6},
1066 	{"Ukranian_i",					0x6a6},
1067 	{"Ukrainian_yi",				0x6a7},
1068 	{"Ukranian_yi",					0x6a7},
1069 	{"Cyrillic_je",					0x6a8},
1070 	{"Serbian_je",					0x6a8},
1071 	{"Cyrillic_lje",				0x6a9},
1072 	{"Serbian_lje",					0x6a9},
1073 	{"Cyrillic_nje",				0x6aa},
1074 	{"Serbian_nje",					0x6aa},
1075 	{"Serbian_tshe",				0x6ab},
1076 	{"Macedonia_kje",				0x6ac},
1077 	{"Byelorussian_shortu",			0x6ae},
1078 	{"Cyrillic_dzhe",				0x6af},
1079 	{"Serbian_dze",					0x6af},
1080 	{"numerosign",					0x6b0},
1081 	{"Serbian_DJE",					0x6b1},
1082 	{"Macedonia_GJE",				0x6b2},
1083 	{"Cyrillic_IO",					0x6b3},
1084 	{"Ukrainian_IE",				0x6b4},
1085 	{"Ukranian_JE",					0x6b4},
1086 	{"Macedonia_DSE",				0x6b5},
1087 	{"Ukrainian_I",					0x6b6},
1088 	{"Ukranian_I",					0x6b6},
1089 	{"Ukrainian_YI",				0x6b7},
1090 	{"Ukranian_YI",					0x6b7},
1091 	{"Cyrillic_JE",					0x6b8},
1092 	{"Serbian_JE",					0x6b8},
1093 	{"Cyrillic_LJE",				0x6b9},
1094 	{"Serbian_LJE",					0x6b9},
1095 	{"Cyrillic_NJE",				0x6ba},
1096 	{"Serbian_NJE",					0x6ba},
1097 	{"Serbian_TSHE",				0x6bb},
1098 	{"Macedonia_KJE",				0x6bc},
1099 	{"Byelorussian_SHORTU",			0x6be},
1100 	{"Cyrillic_DZHE",				0x6bf},
1101 	{"Serbian_DZE",					0x6bf},
1102 	{"Cyrillic_yu",					0x6c0},
1103 	{"Cyrillic_a",					0x6c1},
1104 	{"Cyrillic_be",					0x6c2},
1105 	{"Cyrillic_tse",				0x6c3},
1106 	{"Cyrillic_de",					0x6c4},
1107 	{"Cyrillic_ie",					0x6c5},
1108 	{"Cyrillic_ef",					0x6c6},
1109 	{"Cyrillic_ghe",				0x6c7},
1110 	{"Cyrillic_ha",					0x6c8},
1111 	{"Cyrillic_i",					0x6c9},
1112 	{"Cyrillic_shorti",				0x6ca},
1113 	{"Cyrillic_ka",					0x6cb},
1114 	{"Cyrillic_el",					0x6cc},
1115 	{"Cyrillic_em",					0x6cd},
1116 	{"Cyrillic_en",					0x6ce},
1117 	{"Cyrillic_o",					0x6cf},
1118 	{"Cyrillic_pe",					0x6d0},
1119 	{"Cyrillic_ya",					0x6d1},
1120 	{"Cyrillic_er",					0x6d2},
1121 	{"Cyrillic_es",					0x6d3},
1122 	{"Cyrillic_te",					0x6d4},
1123 	{"Cyrillic_u",					0x6d5},
1124 	{"Cyrillic_zhe",				0x6d6},
1125 	{"Cyrillic_ve",					0x6d7},
1126 	{"Cyrillic_softsign",			0x6d8},
1127 	{"Cyrillic_yeru",				0x6d9},
1128 	{"Cyrillic_ze",					0x6da},
1129 	{"Cyrillic_sha",				0x6db},
1130 	{"Cyrillic_e",					0x6dc},
1131 	{"Cyrillic_shcha",				0x6dd},
1132 	{"Cyrillic_che",				0x6de},
1133 	{"Cyrillic_hardsign",			0x6df},
1134 	{"Cyrillic_YU",					0x6e0},
1135 	{"Cyrillic_A",					0x6e1},
1136 	{"Cyrillic_BE",					0x6e2},
1137 	{"Cyrillic_TSE",				0x6e3},
1138 	{"Cyrillic_DE",					0x6e4},
1139 	{"Cyrillic_IE",					0x6e5},
1140 	{"Cyrillic_EF",					0x6e6},
1141 	{"Cyrillic_GHE",				0x6e7},
1142 	{"Cyrillic_HA",					0x6e8},
1143 	{"Cyrillic_I",					0x6e9},
1144 	{"Cyrillic_SHORTI",				0x6ea},
1145 	{"Cyrillic_KA",					0x6eb},
1146 	{"Cyrillic_EL",					0x6ec},
1147 	{"Cyrillic_EM",					0x6ed},
1148 	{"Cyrillic_EN",					0x6ee},
1149 	{"Cyrillic_O",					0x6ef},
1150 	{"Cyrillic_PE",					0x6f0},
1151 	{"Cyrillic_YA",					0x6f1},
1152 	{"Cyrillic_ER",					0x6f2},
1153 	{"Cyrillic_ES",					0x6f3},
1154 	{"Cyrillic_TE",					0x6f4},
1155 	{"Cyrillic_U",					0x6f5},
1156 	{"Cyrillic_ZHE",				0x6f6},
1157 	{"Cyrillic_VE",					0x6f7},
1158 	{"Cyrillic_SOFTSIGN",			0x6f8},
1159 	{"Cyrillic_YERU",				0x6f9},
1160 	{"Cyrillic_ZE",					0x6fa},
1161 	{"Cyrillic_SHA",				0x6fb},
1162 	{"Cyrillic_E",					0x6fc},
1163 	{"Cyrillic_SHCHA",				0x6fd},
1164 	{"Cyrillic_CHE",				0x6fe},
1165 	{"Cyrillic_HARDSIGN",			0x6ff},
1166 
1167 	{"Greek_ALPHAaccent",			0x7a1},
1168 	{"Greek_EPSILONaccent",			0x7a2},
1169 	{"Greek_ETAaccent",				0x7a3},
1170 	{"Greek_IOTAaccent",			0x7a4},
1171 	{"Greek_IOTAdiaeresis",			0x7a5},
1172 	{"Greek_OMICRONaccent",			0x7a7},
1173 	{"Greek_UPSILONaccent",			0x7a8},
1174 	{"Greek_UPSILONdieresis",		0x7a9},
1175 	{"Greek_OMEGAaccent",			0x7ab},
1176 	{"Greek_accentdieresis",		0x7ae},
1177 	{"Greek_horizbar",				0x7af},
1178 	{"Greek_alphaaccent",			0x7b1},
1179 	{"Greek_epsilonaccent",			0x7b2},
1180 	{"Greek_etaaccent",				0x7b3},
1181 	{"Greek_iotaaccent",			0x7b4},
1182 	{"Greek_iotadieresis",			0x7b5},
1183 	{"Greek_iotaaccentdieresis",	0x7b6},
1184 	{"Greek_omicronaccent",			0x7b7},
1185 	{"Greek_upsilonaccent",			0x7b8},
1186 	{"Greek_upsilondieresis",		0x7b9},
1187 	{"Greek_upsilonaccentdieresis",	0x7ba},
1188 	{"Greek_omegaaccent",			0x7bb},
1189 	{"Greek_ALPHA",					0x7c1},
1190 	{"Greek_BETA",					0x7c2},
1191 	{"Greek_GAMMA",					0x7c3},
1192 	{"Greek_DELTA",					0x7c4},
1193 	{"Greek_EPSILON",				0x7c5},
1194 	{"Greek_ZETA",					0x7c6},
1195 	{"Greek_ETA",					0x7c7},
1196 	{"Greek_THETA",					0x7c8},
1197 	{"Greek_IOTA",					0x7c9},
1198 	{"Greek_KAPPA",					0x7ca},
1199 	{"Greek_LAMDA",					0x7cb},
1200 	{"Greek_LAMBDA",				0x7cb},
1201 	{"Greek_MU",					0x7cc},
1202 	{"Greek_NU",					0x7cd},
1203 	{"Greek_XI",					0x7ce},
1204 	{"Greek_OMICRON",				0x7cf},
1205 	{"Greek_PI",					0x7d0},
1206 	{"Greek_RHO",					0x7d1},
1207 	{"Greek_SIGMA",					0x7d2},
1208 	{"Greek_TAU",					0x7d4},
1209 	{"Greek_UPSILON",				0x7d5},
1210 	{"Greek_PHI",					0x7d6},
1211 	{"Greek_CHI",					0x7d7},
1212 	{"Greek_PSI",					0x7d8},
1213 	{"Greek_OMEGA",					0x7d9},
1214 	{"Greek_alpha",					0x7e1},
1215 	{"Greek_beta",					0x7e2},
1216 	{"Greek_gamma",					0x7e3},
1217 	{"Greek_delta",					0x7e4},
1218 	{"Greek_epsilon",				0x7e5},
1219 	{"Greek_zeta",					0x7e6},
1220 	{"Greek_eta",					0x7e7},
1221 	{"Greek_theta",					0x7e8},
1222 	{"Greek_iota",					0x7e9},
1223 	{"Greek_kappa",					0x7ea},
1224 	{"Greek_lamda",					0x7eb},
1225 	{"Greek_lambda",				0x7eb},
1226 	{"Greek_mu",					0x7ec},
1227 	{"Greek_nu",					0x7ed},
1228 	{"Greek_xi",					0x7ee},
1229 	{"Greek_omicron",				0x7ef},
1230 	{"Greek_pi",					0x7f0},
1231 	{"Greek_rho",					0x7f1},
1232 	{"Greek_sigma",					0x7f2},
1233 	{"Greek_finalsmallsigma",		0x7f3},
1234 	{"Greek_tau",					0x7f4},
1235 	{"Greek_upsilon",				0x7f5},
1236 	{"Greek_phi",					0x7f6},
1237 	{"Greek_chi",					0x7f7},
1238 	{"Greek_psi",					0x7f8},
1239 	{"Greek_omega",					0x7f9},
1240 	{"Greek_switch",				0xFF7E},
1241 
1242 	{"leftradical",					0x8a1},
1243 	{"topleftradical",				0x8a2},
1244 	{"horizconnector",				0x8a3},
1245 	{"topintegral",					0x8a4},
1246 	{"botintegral",					0x8a5},
1247 	{"vertconnector",				0x8a6},
1248 	{"topleftsqbracket",			0x8a7},
1249 	{"botleftsqbracket",			0x8a8},
1250 	{"toprightsqbracket",			0x8a9},
1251 	{"botrightsqbracket",			0x8aa},
1252 	{"topleftparens",				0x8ab},
1253 	{"botleftparens",				0x8ac},
1254 	{"toprightparens",				0x8ad},
1255 	{"botrightparens",				0x8ae},
1256 	{"leftmiddlecurlybrace",		0x8af},
1257 	{"rightmiddlecurlybrace",		0x8b0},
1258 	{"topleftsummation",			0x8b1},
1259 	{"botleftsummation",			0x8b2},
1260 	{"topvertsummationconnector",	0x8b3},
1261 	{"botvertsummationconnector",	0x8b4},
1262 	{"toprightsummation",			0x8b5},
1263 	{"botrightsummation",			0x8b6},
1264 	{"rightmiddlesummation",		0x8b7},
1265 	{"lessthanequal",				0x8bc},
1266 	{"notequal",					0x8bd},
1267 	{"greaterthanequal",			0x8be},
1268 	{"integral",					0x8bf},
1269 	{"therefore",					0x8c0},
1270 	{"variation",					0x8c1},
1271 	{"infinity",					0x8c2},
1272 	{"nabla",						0x8c5},
1273 	{"approximate",					0x8c8},
1274 	{"similarequal",				0x8c9},
1275 	{"ifonlyif",					0x8cd},
1276 	{"implies",						0x8ce},
1277 	{"identical",					0x8cf},
1278 	{"radical",						0x8d6},
1279 	{"includedin",					0x8da},
1280 	{"includes",					0x8db},
1281 	{"intersection",				0x8dc},
1282 	{"union",						0x8dd},
1283 	{"logicaland",					0x8de},
1284 	{"logicalor",					0x8df},
1285 	{"partialderivative",			0x8ef},
1286 	{"function",					0x8f6},
1287 	{"leftarrow",					0x8fb},
1288 	{"uparrow",						0x8fc},
1289 	{"rightarrow",					0x8fd},
1290 	{"downarrow",					0x8fe},
1291 
1292 
1293 	{"blank",						0x9df},
1294 	{"soliddiamond",				0x9e0},
1295 	{"checkerboard",				0x9e1},
1296 	{"ht",							0x9e2},
1297 	{"ff",							0x9e3},
1298 /*	{"cr",							0x9e4},*/
1299 	{"lf",							0x9e5},
1300 	{"nl",							0x9e8},
1301 	{"vt",							0x9e9},
1302 	{"lowrightcorner",				0x9ea},
1303 	{"uprightcorner",				0x9eb},
1304 	{"upleftcorner",				0x9ec},
1305 	{"lowleftcorner",				0x9ed},
1306 	{"crossinglines",				0x9ee},
1307 	{"horizlinescan1",				0x9ef},
1308 	{"horizlinescan3",				0x9f0},
1309 	{"horizlinescan5",				0x9f1},
1310 	{"horizlinescan7",				0x9f2},
1311 	{"horizlinescan9",				0x9f3},
1312 	{"leftt",						0x9f4},
1313 	{"rightt",						0x9f5},
1314 	{"bott",						0x9f6},
1315 	{"topt",						0x9f7},
1316 	{"vertbar",						0x9f8},
1317 
1318 	{"emspace",						0xaa1},
1319 	{"enspace",						0xaa2},
1320 	{"em3space",					0xaa3},
1321 	{"em4space",					0xaa4},
1322 	{"digitspace",					0xaa5},
1323 	{"punctspace",					0xaa6},
1324 	{"thinspace",					0xaa7},
1325 	{"hairspace",					0xaa8},
1326 	{"emdash",						0xaa9},
1327 	{"endash",						0xaaa},
1328 	{"signifblank",					0xaac},
1329 	{"ellipsis",					0xaae},
1330 	{"doubbaselinedot",				0xaaf},
1331 	{"onethird",					0xab0},
1332 	{"twothirds",					0xab1},
1333 	{"onefifth",					0xab2},
1334 	{"twofifths",					0xab3},
1335 	{"threefifths",					0xab4},
1336 	{"fourfifths",					0xab5},
1337 	{"onesixth",					0xab6},
1338 	{"fivesixths",					0xab7},
1339 	{"careof",						0xab8},
1340 	{"figdash",						0xabb},
1341 	{"leftanglebracket",			0xabc},
1342 	{"decimalpoint",				0xabd},
1343 	{"rightanglebracket",			0xabe},
1344 	{"marker",						0xabf},
1345 	{"oneeighth",					0xac3},
1346 	{"threeeighths",				0xac4},
1347 	{"fiveeighths",					0xac5},
1348 	{"seveneighths",				0xac6},
1349 	{"trademark",					0xac9},
1350 	{"signaturemark",				0xaca},
1351 	{"trademarkincircle",			0xacb},
1352 	{"leftopentriangle",			0xacc},
1353 	{"rightopentriangle",			0xacd},
1354 	{"emopencircle",				0xace},
1355 	{"emopenrectangle",				0xacf},
1356 	{"leftsinglequotemark",			0xad0},
1357 	{"rightsinglequotemark",		0xad1},
1358 	{"leftdoublequotemark",			0xad2},
1359 	{"rightdoublequotemark",		0xad3},
1360 	{"prescription",				0xad4},
1361 	{"minutes",						0xad6},
1362 	{"seconds",						0xad7},
1363 	{"latincross",					0xad9},
1364 	{"hexagram",					0xada},
1365 	{"filledrectbullet",			0xadb},
1366 	{"filledlefttribullet",			0xadc},
1367 	{"filledrighttribullet",		0xadd},
1368 	{"emfilledcircle",				0xade},
1369 	{"emfilledrect",				0xadf},
1370 	{"enopencircbullet",			0xae0},
1371 	{"enopensquarebullet",			0xae1},
1372 	{"openrectbullet",				0xae2},
1373 	{"opentribulletup",				0xae3},
1374 	{"opentribulletdown",			0xae4},
1375 	{"openstar",					0xae5},
1376 	{"enfilledcircbullet",			0xae6},
1377 	{"enfilledsqbullet",			0xae7},
1378 	{"filledtribulletup",			0xae8},
1379 	{"filledtribulletdown",			0xae9},
1380 	{"leftpointer",					0xaea},
1381 	{"rightpointer",				0xaeb},
1382 	{"club",						0xaec},
1383 	{"diamond",						0xaed},
1384 	{"heart",						0xaee},
1385 	{"maltesecross",				0xaf0},
1386 	{"dagger",						0xaf1},
1387 	{"doubledagger",				0xaf2},
1388 	{"checkmark",					0xaf3},
1389 	{"ballotcross",					0xaf4},
1390 	{"musicalsharp",				0xaf5},
1391 	{"musicalflat",					0xaf6},
1392 	{"malesymbol",					0xaf7},
1393 	{"femalesymbol",				0xaf8},
1394 	{"telephone",					0xaf9},
1395 	{"telephonerecorder",			0xafa},
1396 	{"phonographcopyright",			0xafb},
1397 	{"caret",						0xafc},
1398 	{"singlelowquotemark",			0xafd},
1399 	{"doublelowquotemark",			0xafe},
1400 	{"cursor",						0xaff},
1401 
1402 
1403 	{"leftcaret",					0xba3},
1404 	{"rightcaret",					0xba6},
1405 	{"downcaret",					0xba8},
1406 	{"upcaret",						0xba9},
1407 	{"overbar",						0xbc0},
1408 	{"downtack",					0xbc2},
1409 	{"upshoe",						0xbc3},
1410 	{"downstile",					0xbc4},
1411 	{"underbar",					0xbc6},
1412 	{"jot",							0xbca},
1413 	{"quad",						0xbcc},
1414 	{"uptack",						0xbce},
1415 	{"circle",						0xbcf},
1416 	{"upstile",						0xbd3},
1417 	{"downshoe",					0xbd6},
1418 	{"rightshoe",					0xbd8},
1419 	{"leftshoe",					0xbda},
1420 	{"lefttack",					0xbdc},
1421 	{"righttack",					0xbfc},
1422 
1423 	{"hebrew_doublelowline",		0xcdf},
1424 	{"hebrew_aleph",				0xce0},
1425 	{"hebrew_bet",					0xce1},
1426 	{"hebrew_beth",					0xce1},
1427 	{"hebrew_gimel",				0xce2},
1428 	{"hebrew_gimmel",				0xce2},
1429 	{"hebrew_dalet",				0xce3},
1430 	{"hebrew_daleth",				0xce3},
1431 	{"hebrew_he",					0xce4},
1432 	{"hebrew_waw",					0xce5},
1433 	{"hebrew_zain",					0xce6},
1434 	{"hebrew_zayin",				0xce6},
1435 	{"hebrew_chet",					0xce7},
1436 	{"hebrew_het",					0xce7},
1437 	{"hebrew_tet",					0xce8},
1438 	{"hebrew_teth",					0xce8},
1439 	{"hebrew_yod",					0xce9},
1440 	{"hebrew_kaph",					0xceb},
1441 	{"hebrew_lamed",				0xcec},
1442 	{"hebrew_finalkaph",			0xcea},
1443 	{"hebrew_finalmem",				0xced},
1444 	{"hebrew_mem",					0xcee},
1445 	{"hebrew_finalnun",				0xcef},
1446 	{"hebrew_nun",					0xcf0},
1447 	{"hebrew_samech",				0xcf1},
1448 	{"hebrew_samekh",				0xcf1},
1449 	{"hebrew_ayin",					0xcf2},
1450 	{"hebrew_finalpe",				0xcf3},
1451 	{"hebrew_pe",					0xcf4},
1452 	{"hebrew_finalzade",			0xcf5},
1453 	{"hebrew_finalzadi",			0xcf5},
1454 	{"hebrew_zade",					0xcf6},
1455 	{"hebrew_zadi",					0xcf6},
1456 	{"hebrew_qoph",					0xcf7},
1457 	{"hebrew_kuf",					0xcf7},
1458 	{"hebrew_resh",					0xcf8},
1459 	{"hebrew_shin",					0xcf9},
1460 	{"hebrew_taw",					0xcfa},
1461 	{"hebrew_taf",					0xcfa},
1462 	{"Hebrew_switch",				0xFF7E},
1463 
1464 	{"Thai_kokai",					0xda1},
1465 	{"Thai_khokhai",				0xda2},
1466 	{"Thai_khokhuat",				0xda3},
1467 	{"Thai_khokhwai",				0xda4},
1468 	{"Thai_khokhon",				0xda5},
1469 	{"Thai_khorakhang",				0xda6},
1470 	{"Thai_ngongu",					0xda7},
1471 	{"Thai_chochan",				0xda8},
1472 	{"Thai_choching",				0xda9},
1473 	{"Thai_chochang",				0xdaa},
1474 	{"Thai_soso",					0xdab},
1475 	{"Thai_chochoe",				0xdac},
1476 	{"Thai_yoying",					0xdad},
1477 	{"Thai_dochada",				0xdae},
1478 	{"Thai_topatak",				0xdaf},
1479 	{"Thai_thothan",				0xdb0},
1480 	{"Thai_thonangmontho",			0xdb1},
1481 	{"Thai_thophuthao",				0xdb2},
1482 	{"Thai_nonen",					0xdb3},
1483 	{"Thai_dodek",					0xdb4},
1484 	{"Thai_totao",					0xdb5},
1485 	{"Thai_thothung",				0xdb6},
1486 	{"Thai_thothahan",				0xdb7},
1487 	{"Thai_thothong",				0xdb8},
1488 	{"Thai_nonu",					0xdb9},
1489 	{"Thai_bobaimai",				0xdba},
1490 	{"Thai_popla",					0xdbb},
1491 	{"Thai_phophung",				0xdbc},
1492 	{"Thai_fofa",					0xdbd},
1493 	{"Thai_phophan",				0xdbe},
1494 	{"Thai_fofan",					0xdbf},
1495 	{"Thai_phosamphao",				0xdc0},
1496 	{"Thai_moma",					0xdc1},
1497 	{"Thai_yoyak",					0xdc2},
1498 	{"Thai_rorua",					0xdc3},
1499 	{"Thai_ru",						0xdc4},
1500 	{"Thai_loling",					0xdc5},
1501 	{"Thai_lu",						0xdc6},
1502 	{"Thai_wowaen",					0xdc7},
1503 	{"Thai_sosala",					0xdc8},
1504 	{"Thai_sorusi",					0xdc9},
1505 	{"Thai_sosua",					0xdca},
1506 	{"Thai_hohip",					0xdcb},
1507 	{"Thai_lochula",				0xdcc},
1508 	{"Thai_oang",					0xdcd},
1509 	{"Thai_honokhuk",				0xdce},
1510 	{"Thai_paiyannoi",				0xdcf},
1511 	{"Thai_saraa",					0xdd0},
1512 	{"Thai_maihanakat",				0xdd1},
1513 	{"Thai_saraaa",					0xdd2},
1514 	{"Thai_saraam",					0xdd3},
1515 	{"Thai_sarai",					0xdd4},
1516 	{"Thai_saraii",					0xdd5},
1517 	{"Thai_saraue",					0xdd6},
1518 	{"Thai_sarauee",				0xdd7},
1519 	{"Thai_sarau",					0xdd8},
1520 	{"Thai_sarauu",					0xdd9},
1521 	{"Thai_phinthu",				0xdda},
1522 	{"Thai_maihanakat_maitho",		0xdde},
1523 	{"Thai_baht",					0xddf},
1524 	{"Thai_sarae",					0xde0},
1525 	{"Thai_saraae",					0xde1},
1526 	{"Thai_sarao",					0xde2},
1527 	{"Thai_saraaimaimuan",			0xde3},
1528 	{"Thai_saraaimaimalai",			0xde4},
1529 	{"Thai_lakkhangyao",			0xde5},
1530 	{"Thai_maiyamok",				0xde6},
1531 	{"Thai_maitaikhu",				0xde7},
1532 	{"Thai_maiek",					0xde8},
1533 	{"Thai_maitho",					0xde9},
1534 	{"Thai_maitri",					0xdea},
1535 	{"Thai_maichattawa",			0xdeb},
1536 	{"Thai_thanthakhat",			0xdec},
1537 	{"Thai_nikhahit",				0xded},
1538 	{"Thai_leksun",					0xdf0},
1539 	{"Thai_leknung",				0xdf1},
1540 	{"Thai_leksong",				0xdf2},
1541 	{"Thai_leksam",					0xdf3},
1542 	{"Thai_leksi",					0xdf4},
1543 	{"Thai_lekha",					0xdf5},
1544 	{"Thai_lekhok",					0xdf6},
1545 	{"Thai_lekchet",				0xdf7},
1546 	{"Thai_lekpaet",				0xdf8},
1547 	{"Thai_lekkao",					0xdf9},
1548 
1549 	{"Hangul",						0xff31},
1550 	{"Hangul_Start",				0xff32},
1551 	{"Hangul_End",					0xff33},
1552 	{"Hangul_Hanja",				0xff34},
1553 	{"Hangul_Jamo",					0xff35},
1554 	{"Hangul_Romaja",				0xff36},
1555 	{"Hangul_Codeinput",			0xff37},
1556 	{"Hangul_Jeonja",				0xff38},
1557 	{"Hangul_Banja",				0xff39},
1558 	{"Hangul_PreHanja",				0xff3a},
1559 	{"Hangul_PostHanja",			0xff3b},
1560 	{"Hangul_SingleCandidate",		0xff3c},
1561 	{"Hangul_MultipleCandidate",	0xff3d},
1562 	{"Hangul_PreviousCandidate",	0xff3e},
1563 	{"Hangul_Special",				0xff3f},
1564 	{"Hangul_switch",				0xFF7E},
1565 
1566 	{"Hangul_Kiyeog",				0xea1},
1567 	{"Hangul_SsangKiyeog",			0xea2},
1568 	{"Hangul_KiyeogSios",			0xea3},
1569 	{"Hangul_Nieun",				0xea4},
1570 	{"Hangul_NieunJieuj",			0xea5},
1571 	{"Hangul_NieunHieuh",			0xea6},
1572 	{"Hangul_Dikeud",				0xea7},
1573 	{"Hangul_SsangDikeud",			0xea8},
1574 	{"Hangul_Rieul",				0xea9},
1575 	{"Hangul_RieulKiyeog",			0xeaa},
1576 	{"Hangul_RieulMieum",			0xeab},
1577 	{"Hangul_RieulPieub",			0xeac},
1578 	{"Hangul_RieulSios",			0xead},
1579 	{"Hangul_RieulTieut",			0xeae},
1580 	{"Hangul_RieulPhieuf",			0xeaf},
1581 	{"Hangul_RieulHieuh",			0xeb0},
1582 	{"Hangul_Mieum",				0xeb1},
1583 	{"Hangul_Pieub",				0xeb2},
1584 	{"Hangul_SsangPieub",			0xeb3},
1585 	{"Hangul_PieubSios",			0xeb4},
1586 	{"Hangul_Sios",					0xeb5},
1587 	{"Hangul_SsangSios",			0xeb6},
1588 	{"Hangul_Ieung",				0xeb7},
1589 	{"Hangul_Jieuj",				0xeb8},
1590 	{"Hangul_SsangJieuj",			0xeb9},
1591 	{"Hangul_Cieuc",				0xeba},
1592 	{"Hangul_Khieuq",				0xebb},
1593 	{"Hangul_Tieut",				0xebc},
1594 	{"Hangul_Phieuf",				0xebd},
1595 	{"Hangul_Hieuh",				0xebe},
1596 
1597 	{"Hangul_A",					0xebf},
1598 	{"Hangul_AE",					0xec0},
1599 	{"Hangul_YA",					0xec1},
1600 	{"Hangul_YAE",					0xec2},
1601 	{"Hangul_EO",					0xec3},
1602 	{"Hangul_E",					0xec4},
1603 	{"Hangul_YEO",					0xec5},
1604 	{"Hangul_YE",					0xec6},
1605 	{"Hangul_O",					0xec7},
1606 	{"Hangul_WA",					0xec8},
1607 	{"Hangul_WAE",					0xec9},
1608 	{"Hangul_OE",					0xeca},
1609 	{"Hangul_YO",					0xecb},
1610 	{"Hangul_U",					0xecc},
1611 	{"Hangul_WEO",					0xecd},
1612 	{"Hangul_WE",					0xece},
1613 	{"Hangul_WI",					0xecf},
1614 	{"Hangul_YU",					0xed0},
1615 	{"Hangul_EU",					0xed1},
1616 	{"Hangul_YI",					0xed2},
1617 	{"Hangul_I",					0xed3},
1618 
1619 	{"Hangul_J_Kiyeog",				0xed4},
1620 	{"Hangul_J_SsangKiyeog",		0xed5},
1621 	{"Hangul_J_KiyeogSios",			0xed6},
1622 	{"Hangul_J_Nieun",				0xed7},
1623 	{"Hangul_J_NieunJieuj",			0xed8},
1624 	{"Hangul_J_NieunHieuh",			0xed9},
1625 	{"Hangul_J_Dikeud",				0xeda},
1626 	{"Hangul_J_Rieul",				0xedb},
1627 	{"Hangul_J_RieulKiyeog",		0xedc},
1628 	{"Hangul_J_RieulMieum",			0xedd},
1629 	{"Hangul_J_RieulPieub",			0xede},
1630 	{"Hangul_J_RieulSios",			0xedf},
1631 	{"Hangul_J_RieulTieut",			0xee0},
1632 	{"Hangul_J_RieulPhieuf",		0xee1},
1633 	{"Hangul_J_RieulHieuh",			0xee2},
1634 	{"Hangul_J_Mieum",				0xee3},
1635 	{"Hangul_J_Pieub",				0xee4},
1636 	{"Hangul_J_PieubSios",			0xee5},
1637 	{"Hangul_J_Sios",				0xee6},
1638 	{"Hangul_J_SsangSios",			0xee7},
1639 	{"Hangul_J_Ieung",				0xee8},
1640 	{"Hangul_J_Jieuj",				0xee9},
1641 	{"Hangul_J_Cieuc",				0xeea},
1642 	{"Hangul_J_Khieuq",				0xeeb},
1643 	{"Hangul_J_Tieut",				0xeec},
1644 	{"Hangul_J_Phieuf",				0xeed},
1645 	{"Hangul_J_Hieuh",				0xeee},
1646 
1647 	{"Hangul_RieulYeorinHieuh",		0xeef},
1648 	{"Hangul_SunkyeongeumMieum",	0xef0},
1649 	{"Hangul_SunkyeongeumPieub",	0xef1},
1650 	{"Hangul_PanSios",				0xef2},
1651 	{"Hangul_KkogjiDalrinIeung",	0xef3},
1652 	{"Hangul_SunkyeongeumPhieuf",	0xef4},
1653 	{"Hangul_YeorinHieuh",			0xef5},
1654 
1655 	{"Hangul_AraeA",				0xef6},
1656 	{"Hangul_AraeAE",				0xef7},
1657 
1658 	{"Hangul_J_PanSios",			0xef8},
1659 	{"Hangul_J_KkogjiDalrinIeung",	0xef9},
1660 	{"Hangul_J_YeorinHieuh",		0xefa},
1661 
1662 	{"Korean_Won",					0xeff},
1663 
1664 
1665 	{"EcuSign",						0x20a0},
1666 	{"ColonSign",					0x20a1},
1667 	{"CruzeiroSign",				0x20a2},
1668 	{"FFrancSign",					0x20a3},
1669 	{"LiraSign",					0x20a4},
1670 	{"MillSign",					0x20a5},
1671 	{"NairaSign",					0x20a6},
1672 	{"PesetaSign",					0x20a7},
1673 	{"RupeeSign",					0x20a8},
1674 	{"WonSign",						0x20a9},
1675 	{"NewSheqelSign",				0x20aa},
1676 	{"DongSign",					0x20ab},
1677 	{"EuroSign",					0x20ac},
1678 
1679 	{NULL,							0}
1680 };
1681 
keysdef_getcode(const char * s,int k[],int num)1682 int 	keysdef_getcode(const char *s, int k[], int num)
1683 {
1684 	int 	i;
1685 	int 	n, ln;
1686 	char	*p;
1687 
1688 
1689 	for (n=0; n<num&& *s!='\0'; ++n)
1690 		{
1691 		 k[n]=0;
1692 		 switch(*s)
1693 		 	{
1694 		  case '^':
1695 		  	 k[n]=KS_ctrl;
1696 		  	 ++s;
1697 		  	 break;
1698 		  case '\\':
1699 		  	 k[n]=KS_shift;
1700 		  	 ++s;
1701 		  	 break;
1702 		  case '@':
1703 		  	 k[n]=KS_alt;
1704 		  	 ++s;
1705 		  	}
1706 		 if (*s=='\0')
1707 		 	break;
1708 
1709 		 if (*s!='[')
1710 		 	{
1711 		 	 k[n]= k[n]==KS_ctrl? *s&0x1f: *s;
1712 		 	 ++s;
1713 		 	 continue;
1714 		 	}
1715 
1716 		 ++s;
1717 		 p=strchr(s, ']');
1718 		 ln=p-s;
1719 
1720 		 for (i=0;;++i)
1721 		 	{
1722 		 	 if (keysdef[i].name==NULL)
1723 		 	 	return 0;
1724 		 	 if (strncasecmp(keysdef[i].name, s, ln)==0)
1725 		 	 	{
1726 		 	 	 k[n] |= keysdef[i].scode;
1727 		 	 	 s=p+1;
1728 		 	 	 break;
1729 		 	 	}
1730 		 	}
1731 		}
1732 	for (i=n; i<num; ++i)
1733 		k[i]=-1;
1734 
1735 	return n;
1736 }
1737 
keys_set(const char * k,const char * e,const char * d)1738 void	keys_set(const char *k, const char *e, const char *d)
1739 {
1740 	int 	n;
1741 
1742 	if (keysdef_getcode(k, &n, 1)==0)
1743 		return;
1744 
1745 //fprintf(stderr, "%d[%s] [%s][%s]\n",n ,k ,e, d);
1746 
1747 	term_escset(n, e, d);
1748 }
1749 
1750 
1751 
1752 
1753 
1754 
1755 
1756 
1757 
1758 
1759 
1760 
term_escdefault_cmp(const void * v,const void * w)1761 int 	term_escdefault_cmp(const void *v,const void *w)
1762 {
1763 	esc_t	*kp_v,*kp_w;
1764 
1765 	return strcmp(((esc_t *)v)->seq, ((esc_t *)w)->seq);
1766 }
1767 
term_escdefault()1768 void	term_escdefault()
1769 {
1770 	if (esc_num==0)
1771 		{
1772 		 char	*p, buf[1024+1];
1773 
1774 		 keys_set("[UP]",        "&ku", "\033OA");
1775 		 keys_set("[DOWN]",      "&kd", "\033OB");
1776 		 keys_set("[RIGHT]",     "&kr", "\033OC");
1777 		 keys_set("[LEFT]",      "&kl", "\033OD");
1778 		 keys_set("[HOME]",      "&kh", "\033[4~");
1779 		 keys_set("[BS]",        "&kb", "\010");
1780 		 keys_set("[DEL]",       "&kD", "\177");
1781 		 keys_set("[INS]",       "&kI", "\033[2~");
1782 		 keys_set("[Page_Up]",   "&kP", "\033[5~");
1783 		 keys_set("[Page_Down]", "&kN", "\033[6~");
1784 		 keys_set("[END]",       "&@7", "\033[1~");
1785 //		 keys_set("[CR]",        "&@8","\033[9~");
1786 
1787 		 keys_set("[F01]",       "&k1", "\033[11~");
1788 		 keys_set("[F02]",       "&k2", "\033[12~");
1789 		 keys_set("[F03]",       "&k3", "\033[13~");
1790 		 keys_set("[F04]",       "&k4", "\033[14~");
1791 		 keys_set("[F05]",       "&k5", "\033[15~");
1792 		 keys_set("[F06]",       "&k6", "\033[17~");
1793 		 keys_set("[F07]",       "&k7", "\033[18~");
1794 		 keys_set("[F08]",       "&k8", "\033[19~");
1795 		 keys_set("[F09]",       "&k9", "\033[20~");
1796 		 keys_set("[F10]",       "&k0", "\033[21~");
1797 		 keys_set("[F11]",       "&ka", "\033[23~");
1798 		 keys_set("[F12]",       "&kb", "\033[24~");
1799 
1800 		 keys_set("[F01]",       "&l1", "\033OP");
1801 		 keys_set("[F02]",       "&l2", "\033OQ");
1802 		 keys_set("[F03]",       "&l3", "\033OR");
1803 		 keys_set("[F04]",       "&l4", "\033OS");
1804 		 keys_set("[F05]",       "&l5", "\033OT");
1805 		 keys_set("[F06]",       "&l6", "\033OU");
1806 		 keys_set("[F07]",       "&l7", "\033OV");
1807 		 keys_set("[F08]",       "&l8", "\033OW");
1808 		 keys_set("[F09]",       "&l9", "\033OX");
1809 		 keys_set("[F10]",       "&l0", "\033OY");
1810 
1811 		 keys_set("*",           "\033Oj", "");
1812 		 keys_set("+",           "\033Ok", "");
1813 		 keys_set(",",           "\033Ol", "");
1814 		 keys_set("-",           "\033Om", "");
1815 		 keys_set(".",           "\033On", "");
1816 		 keys_set("/",           "\033Oo", "");
1817 		 keys_set("0",           "\033Op", "");
1818 		 keys_set("1",           "\033Oq", "");
1819 		 keys_set("2",           "\033Or", "");
1820 		 keys_set("3",           "\033Os", "");
1821 		 keys_set("4",           "\033Ot", "");
1822 		 keys_set("5",           "\033Ou", "");
1823 		 keys_set("6",           "\033Ov", "");
1824 		 keys_set("7",           "\033Ow", "");
1825 		 keys_set("8",           "\033Ox", "");
1826 		 keys_set("9",           "\033Oy", "");
1827 //		 keys_set("[CR]",        "\033OM", "");
1828 
1829 
1830 		 p=getenv("NE_TERM");
1831 		 if (p!=NULL)
1832 		 	sprintf(buf, "term.%s", p); else
1833 		 	{
1834 		 	 p=getenv("TERM");
1835 		 	 if (p!=NULL)
1836 		 	 	sprintf(buf, "term.%s", p);
1837 		 	}
1838 		 if (p!=NULL)
1839 		 	config_read(buf);
1840 
1841 		}
1842 
1843 
1844 	qsort(esc, esc_num, sizeof(esc_t), term_escdefault_cmp);
1845 }
1846 
1847