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