timeout/untimeout ==> callout_*
[dragonfly.git] / sys / dev / video / pcvt / i386 / pcvt_kbd.h
1 /*
2  * Copyright (c) 1999 Hellmuth Michaelis
3  *
4  * Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
5  *
6  * Copyright (c) 1992, 1993 Brian Dunford-Shore and Holger Veit.
7  *
8  * All rights reserved.
9  *
10  * This code is derived from software contributed to Berkeley by
11  * William Jolitz and Don Ahn.
12  *
13  * This code is derived from software contributed to 386BSD by
14  * Holger Veit.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions
18  * are met:
19  * 1. Redistributions of source code must retain the above copyright
20  *    notice, this list of conditions and the following disclaimer.
21  * 2. Redistributions in binary form must reproduce the above copyright
22  *    notice, this list of conditions and the following disclaimer in the
23  *    documentation and/or other materials provided with the distribution.
24  * 3. All advertising materials mentioning features or use of this software
25  *    must display the following acknowledgement:
26  *      This product includes software developed by Hellmuth Michaelis,
27  *      Brian Dunford-Shore and Joerg Wunsch.
28  * 4. The name authors may not be used to endorse or promote products
29  *    derived from this software without specific prior written permission.
30  *
31  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
32  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
33  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
34  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
35  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
36  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
40  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  */
42
43 /*---------------------------------------------------------------------------*
44  *
45  *      pcvt_kbd.h      VT220 Driver Keyboard Interface Header
46  *      ------------------------------------------------------
47  *
48  *      Last Edit-Date: [Tue Dec 28 08:13:32 1999]
49  *
50  * $FreeBSD: src/sys/i386/isa/pcvt/pcvt_kbd.h,v 1.10 1999/12/30 16:17:10 hm Exp $
51  * $DragonFly: src/sys/dev/video/pcvt/i386/Attic/pcvt_kbd.h,v 1.2 2003/06/17 04:28:38 dillon Exp $
52  *
53  *---------------------------------------------------------------------------*/
54
55 /*---------------------------------------------------------------------------*
56  *      this is one sub-entry for the table. the type can be either
57  *      "pointer to a string" or "pointer to a function"
58  *---------------------------------------------------------------------------*/
59 typedef struct
60 {
61         u_char subtype;                 /* subtype, string or function */
62 #ifdef PCVT_ALT_ENH
63         u_short str_leng;               /* if string, stringlength */
64 #endif
65         union what
66         {
67                 u_char *string;         /* ptr to string, null terminated */
68                 void (*func)(void);     /* ptr to function */
69         } what;
70 } entry;
71
72 /*---------------------------------------------------------------------------*
73  *      this is the "outer" table
74  *---------------------------------------------------------------------------*/
75 typedef struct
76 {
77         u_short type;                   /* type of key */
78         u_short ovlindex;               /* -hv- index into overload table */
79         entry   unshift;                /* normal default codes/funcs */
80         entry   shift;                  /* shifted default codes/funcs */
81         entry   ctrl;                   /* control default codes/funcs */
82 #ifdef PCVT_ALT_ENH
83         entry   alt;                    /* normal default codes/funcs */
84         entry   alt_shift;              /* shifted default codes/funcs */
85         entry   alt_ctrl;               /* control default codes/funcs */
86         entry   alt_ctrl_shift;         /* normal default codes/funcs */
87 #endif
88 } Keycap_def;
89
90 #define IDX0            0       /* default indexvalue into ovl table */
91
92 #define STR             KBD_SUBT_STR    /* subtype = ptr to string */
93 #define FNC             KBD_SUBT_FNC    /* subtype = ptr to function */
94
95 #define CODE_SIZE       5
96
97 /*---------------------------------------------------------------------------*
98  * the overlaytable table is a static fixed size scratchpad where all the
99  * overloaded definitions are stored.
100  * an entry consists of a short (holding the new type attribute) and
101  * four entries for a new keydefinition.
102  *---------------------------------------------------------------------------*/
103
104 #define OVLTBL_SIZE     64              /* 64 keys can be overloaded */
105
106 #define Ovl_tbl struct kbd_ovlkey
107
108 static Ovl_tbl *ovltbl;                 /* the table itself */
109
110 static int ovlinitflag = 0;             /* the init flag for the table */
111
112 /*
113  * key codes >= 128 denote "virtual" shift/control
114  * They are resolved before any keymapping is handled
115  */
116
117 #if PCVT_SCANSET == 2
118 static u_char scantokey[] = {
119 /*      -0- -1- -2- -3- -4- -5- -6- -7-    This layout is valid for US only */
120 /*00*/   0,120,  0,116,114,112,113,123,  /* ??  F9  ??  F5  F3  F1  F2  F12 */
121 /*08*/   0,121,119,117,115, 16,  1,  0,  /* ??  F10 F8  F6  F4  TAB `   ??  */
122 /*10*/   0, 60, 44,  0, 58, 17,  2,  0,  /* ??  ALl SHl ??  CTl Q   1   ??  */
123 /*18*/   0,  0, 46, 32, 31, 18,  3,  0,  /* ??  Z   S   A   W   2   ??  ??  */
124 /*20*/   0, 48, 47, 33, 19,  5,  4,  0,  /* ??  C   X   D   E   4   3   ??  */
125 /*28*/   0, 61, 49, 34, 21, 20,  6,  0,  /* ??  SP  V   F   T   R   5   ??  */
126 /*30*/   0, 51, 50, 36, 35, 22,  7,  0,  /* ??  N   B   H   G   Y   6   ??  */
127 /*38*/   0,  0, 52, 37, 23,  8,  9,  0,  /* ??  ??  M   J   U   7   8   ??  */
128 /*40*/   0, 53, 38, 24, 25, 11, 10,  0,  /* ??  ,   K   I   O   0   9   ??  */
129 /*48*/   0, 54, 55, 39, 40, 26, 12,  0,  /* ??  .   /   L   ;   P   -   ??  */
130 /*50*/   0,  0, 41,  0, 27, 13,  0,  0,  /* ??  ??  "   ??  [   =   ??  ??  */
131 /*58*/  30, 57, 43, 28,  0, 29,  0,  0,  /* CAP SHr ENT ]   ??  \   ??  ??  */
132 /*60*/   0, 45,  0,  0,  0,  0, 15,  0,  /* ??  NL1 ??  ??  ??  ??  BS  ??  */
133 /*68*/   0, 93,  0, 92, 91,  0,  0,  0,  /* ??  KP1 ??  KP4 KP7 ??  ??  ??  */
134 /*70*/  99,104, 98, 97,102, 96,110, 90,  /* KP0 KP. KP2 KP5 KP6 KP8 ESC NUM */
135 /*78*/ 122,106,103,105,100,101,125,  0,  /* F11 KP+ KP3 KP- KP* KP9 LOC ??  */
136 /*80*/   0,  0,  0,118,127               /* ??  ??  ??  F7 SyRQ */
137 };
138
139 static u_char extscantokey[] = {
140 /*      -0- -1- -2- -3- -4- -5- -6- -7-    This layout is valid for US only */
141 /*00*/   0,120,  0,116,114,112,113,123,  /* ??  F9  ??  F5  F3  F1  F2  F12 */
142 /*08*/   0,121,119,117,115, 16,  1,  0,  /* ??  F10 F8  F6  F4  TAB `   ??  */
143 /*10*/   0, 62,128,  0, 64, 17,  2,  0,  /* ??  ALr vSh ??  CTr Q   1   ??  */
144 /*18*/   0,  0, 46, 32, 31, 18,  3,  0,  /* ??  Z   S   A   W   2   ??  ??  */
145 /*20*/   0, 48, 47, 33, 19,  5,  4,  0,  /* ??  C   X   D   E   4   3   ??  */
146 /*28*/   0, 61, 49, 34, 21, 20,  6,  0,  /* ??  SP  V   F   T   R   5   ??  */
147 /*30*/   0, 51, 50, 36, 35, 22,  7,  0,  /* ??  N   B   H   G   Y   6   ??  */
148 /*38*/   0,  0, 52, 37, 23,  8,  9,  0,  /* ??  ??  M   J   U   7   8   ??  */
149 /*40*/   0, 53, 38, 24, 25, 11, 10,  0,  /* ??  ,   K   I   O   0   9   ??  */
150 /*48*/   0, 54, 95, 39, 40, 26, 12,  0,  /* ??  .   KP/ L   ;   P   -   ??  */
151 /*50*/   0,  0, 41,  0, 27, 13,  0,  0,  /* ??  ??  "   ??  [   =   ??  ??  */
152 /*58*/  30, 57,108, 28,  0, 29,  0,  0,  /* CAP  SHr KPE ]   ??  \  ??  ??  */
153 /*60*/   0, 45,  0,  0,  0,  0, 15,  0,  /* ??  NL1 ??  ??  ??  ??  BS  ??  */
154 /*68*/   0, 81,  0, 79, 80,  0,  0,  0,  /* ??  END ??  LA  HOM ??  ??  ??  */
155 /*70*/  75, 76, 84, 97, 89, 83,110, 90,  /* INS DEL DA  KP5 RA  UA  ESC NUM */
156 /*78*/ 122,106, 86,105,124, 85,126,  0,  /* F11 KP+ PD  KP- PSc PU  Brk ??  */
157 /*80*/   0,  0,  0,118,127               /* ??  ??  ??  F7 SysRq */
158 };
159
160 #else   /* PCVT_SCANSET != 2 */
161
162 static u_char scantokey[] = {
163 /*       -0- -1- -2- -3- -4- -5- -6- -7-    This layout is valid for US only */
164 /*00*/    0,110,  2,  3,  4,  5,  6,  7,  /* ??  ESC 1   2   3   4   5   6   */
165 /*08*/    8,  9, 10, 11, 12, 13, 15, 16,  /* 7   8   9   0   -   =   BS  TAB */
166 /*10*/   17, 18, 19, 20, 21, 22, 23, 24,  /* Q   W   E   R   T   Y   U   I   */
167 /*18*/   25, 26, 27, 28, 43, 58, 31, 32,  /* O   P   [   ]   ENT CTl A   S   */
168 /*20*/   33, 34, 35, 36, 37, 38, 39, 40,  /* D   F   G   H   J   K   L   ;   */
169 /*28*/   41,  1, 44, 29, 46, 47, 48, 49,  /* '   `   SHl \   Z   X   C   V   */
170 /*30*/   50, 51, 52, 53, 54, 55, 57,100,  /* B   N   M   ,   .   /   SHr KP* */
171 /*38*/   60, 61, 30,112,113,114,115,116,  /* ALl SP  CAP F1  F2  F3  F4  F5  */
172 /*40*/  117,118,119,120,121, 90,125, 91,  /* F6  F7  F8  F9  F10 NUM LOC KP7 */
173 /*48*/   96,101,105, 92, 97,102,106, 93,  /* KP8 KP9 KP- KP4 KP5 KP6 KP+ KP1 */
174 /*50*/   98,103, 99,104,127,  0, 45,122,  /* KP2 KP3 KP0 KP. SyRq??  NL1 F11 */
175 /*58*/  123                               /* F12 */
176 };
177
178 static u_char extscantokey[] = {
179 /*       -0- -1- -2- -3- -4- -5- -6- -7-    This layout is valid for US only */
180 /*00*/    0,110,  2,  3,  4,  5,  6,  7,  /* ??  ESC 1   2   3   4   5   6   */
181 /*08*/    8,  9, 10, 11, 12, 13, 15, 16,  /* 7   8   9   0   -   =   BS  TAB */
182 /*10*/   17, 18, 19, 20, 21, 22, 23, 24,  /* Q   W   E   R   T   Y   U   I   */
183 /*18*/   25, 26, 27, 28,108, 64, 31, 32,  /* O   P   [   ]   KPE CTr A   S   */
184 /*20*/   33, 34, 35, 36, 37, 38, 39, 40,  /* D   F   G   H   J   K   L   ;   */
185 /*28*/   41,  1,128, 29, 46, 47, 48, 49,  /* '   `   vSh \   Z   X   C   V   */
186 /*30*/   50, 51, 52, 53, 54, 95, 57,124,  /* B   N   M   ,   .   KP/ SHr KP* */
187 /*38*/   62, 61, 30,112,113,114,115,116,  /* ALr SP  CAP F1  F2  F3  F4  F5  */
188 /*40*/  117,118,119,120,121, 90,126, 80,  /* F6  F7  F8  F9  F10 NUM Brk HOM */
189 /*48*/   83, 85,105, 79, 97, 89,106, 81,  /* UA  PU  KP- LA  KP5 RA  KP+ END */
190 /*50*/   84, 86, 75, 76,  0,  0, 45,122,  /* DA  PD  INS DEL ??  ??  NL1 F11 */
191 /*58*/  123,                              /* F12 */
192 };
193 #endif  /* PCVT_SCANSET == 2 */
194
195 static Keycap_def       key2ascii[] =
196 {
197
198 #ifdef PCVT_ALT_ENH
199
200 #define C (u_char *)
201 #define U (u_short)
202 #define V (void *)
203 #define S STR
204 #define F FNC
205 #define I IDX0
206
207 #define DFAULT  {S, 0, C ""}
208
209 /* DONT EVER OVERLOAD KEY 0, THIS IS A KEY THAT MUSTN'T EXIST */
210
211 /*      type   index  unshift            shift              ctrl               alt                alt_shift          alt_ctrl           alt_ctrl_shift     */
212 /*      -------------------------------------------------------------------------------------------------------------------------------------------------- */
213 /*  0*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
214 /*  1*/ KBD_ASCII, I, {S,1,C "`"},       {S,1,C "~"},       {S,1,C "`"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
215 /*  2*/ KBD_ASCII, I, {S,1,C "1"},       {S,1,C "!"},       {S,1,C "1"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
216 /*  3*/ KBD_ASCII, I, {S,1,C "2"},       {S,1,C "@"},       {S,1,C "\000"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
217 /*  4*/ KBD_ASCII, I, {S,1,C "3"},       {S,1,C "#"},       {S,1,C "3"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
218 /*  5*/ KBD_ASCII, I, {S,1,C "4"},       {S,1,C "$"},       {S,1,C "4"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
219 /*  6*/ KBD_ASCII, I, {S,1,C "5"},       {S,1,C "%"},       {S,1,C "5"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
220 /*  7*/ KBD_ASCII, I, {S,1,C "6"},       {S,1,C "^"},       {S,1,C "\036"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
221 /*  8*/ KBD_ASCII, I, {S,1,C "7"},       {S,1,C "&"},       {S,1,C "7"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
222 /*  9*/ KBD_ASCII, I, {S,1,C "8"},       {S,1,C "*"},       {S,1,C "9"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
223 /* 10*/ KBD_ASCII, I, {S,1,C "9"},       {S,1,C "("},       {S,1,C "9"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
224 /* 11*/ KBD_ASCII, I, {S,1,C "0"},       {S,1,C ")"},       {S,1,C "0"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
225 /* 12*/ KBD_ASCII, I, {S,1,C "-"},       {S,1,C "_"},       {S,1,C "\037"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
226 /* 13*/ KBD_ASCII, I, {S,1,C "="},       {S,1,C "+"},       {S,1,C "="},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
227 /* 14*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
228 /* 15*/ KBD_ASCII, I, {S,1,C "\177"},    {S,1,C "\010"},    {S,1,C "\177"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
229 /* 16*/ KBD_ASCII, I, {S,1,C "\t"},      {S,1,C "\t"},      {S,1,C "\t"},      DFAULT,            DFAULT,            DFAULT,            DFAULT,
230 /* 17*/ KBD_ASCII, I, {S,1,C "q"},       {S,1,C "Q"},       {S,1,C "\021"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
231 /* 18*/ KBD_ASCII, I, {S,1,C "w"},       {S,1,C "W"},       {S,1,C "\027"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
232 /* 19*/ KBD_ASCII, I, {S,1,C "e"},       {S,1,C "E"},       {S,1,C "\005"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
233 /* 20*/ KBD_ASCII, I, {S,1,C "r"},       {S,1,C "R"},       {S,1,C "\022"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
234 /* 21*/ KBD_ASCII, I, {S,1,C "t"},       {S,1,C "T"},       {S,1,C "\024"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
235 /* 22*/ KBD_ASCII, I, {S,1,C "y"},       {S,1,C "Y"},       {S,1,C "\031"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
236 /* 23*/ KBD_ASCII, I, {S,1,C "u"},       {S,1,C "U"},       {S,1,C "\025"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
237 /* 24*/ KBD_ASCII, I, {S,1,C "i"},       {S,1,C "I"},       {S,1,C "\011"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
238 /* 25*/ KBD_ASCII, I, {S,1,C "o"},       {S,1,C "O"},       {S,1,C "\017"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
239 /* 26*/ KBD_ASCII, I, {S,1,C "p"},       {S,1,C "P"},       {S,1,C "\020"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
240 /* 27*/ KBD_ASCII, I, {S,1,C "["},       {S,1,C "{"},       {S,1,C "\033"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
241 /* 28*/ KBD_ASCII, I, {S,1,C "]"},       {S,1,C "}"},       {S,1,C "\035"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
242 /* 29*/ KBD_ASCII, I, {S,1,C "\\"},      {S,1,C "|"},       {S,1,C "\034"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
243 /* 30*/ KBD_CAPS,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
244 /* 31*/ KBD_ASCII, I, {S,1,C "a"},       {S,1,C "A"},       {S,1,C "\001"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
245 /* 32*/ KBD_ASCII, I, {S,1,C "s"},       {S,1,C "S"},       {S,1,C "\023"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
246 /* 33*/ KBD_ASCII, I, {S,1,C "d"},       {S,1,C "D"},       {S,1,C "\004"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
247 /* 34*/ KBD_ASCII, I, {S,1,C "f"},       {S,1,C "F"},       {S,1,C "\006"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
248 /* 35*/ KBD_ASCII, I, {S,1,C "g"},       {S,1,C "G"},       {S,1,C "\007"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
249 /* 36*/ KBD_ASCII, I, {S,1,C "h"},       {S,1,C "H"},       {S,1,C "\010"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
250 /* 37*/ KBD_ASCII, I, {S,1,C "j"},       {S,1,C "J"},       {S,1,C "\n"},      DFAULT,            DFAULT,            DFAULT,            DFAULT,
251 /* 38*/ KBD_ASCII, I, {S,1,C "k"},       {S,1,C "K"},       {S,1,C "\013"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
252 /* 39*/ KBD_ASCII, I, {S,1,C "l"},       {S,1,C "L"},       {S,1,C "\014"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
253 /* 40*/ KBD_ASCII, I, {S,1,C ";"},       {S,1,C ":"},       {S,1,C ";"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
254 /* 41*/ KBD_ASCII, I, {S,1,C "'"},       {S,1,C "\""},      {S,1,C "'"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
255 /* 42*/ KBD_ASCII, I, {S,1,C "\\"},      {S,1,C "|"},       {S,1,C "\034"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
256 /* 43*/ KBD_RETURN,I, {S,1,C "\r"},      {S,1,C "\r"},      {S,1,C "\r"},      DFAULT,            DFAULT,            DFAULT,            DFAULT,
257 /* 44*/ KBD_SHIFT, I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
258 /* 45*/ KBD_ASCII, I, {S,1,C "<"},       {S,1,C ">"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
259 /* 46*/ KBD_ASCII, I, {S,1,C "z"},       {S,1,C "Z"},       {S,1,C "\032"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
260 /* 47*/ KBD_ASCII, I, {S,1,C "x"},       {S,1,C "X"},       {S,1,C "\030"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
261 /* 48*/ KBD_ASCII, I, {S,1,C "c"},       {S,1,C "C"},       {S,1,C "\003"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
262 /* 49*/ KBD_ASCII, I, {S,1,C "v"},       {S,1,C "V"},       {S,1,C "\026"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
263 /* 50*/ KBD_ASCII, I, {S,1,C "b"},       {S,1,C "B"},       {S,1,C "\002"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
264 /* 51*/ KBD_ASCII, I, {S,1,C "n"},       {S,1,C "N"},       {S,1,C "\016"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
265 /* 52*/ KBD_ASCII, I, {S,1,C "m"},       {S,1,C "M"},       {S,1,C "\r"},      DFAULT,            DFAULT,            DFAULT,            DFAULT,
266 /* 53*/ KBD_ASCII, I, {S,1,C ","},       {S,1,C "<"},       {S,1,C ","},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
267 /* 54*/ KBD_ASCII, I, {S,1,C "."},       {S,1,C ">"},       {S,1,C "."},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
268 /* 55*/ KBD_ASCII, I, {S,1,C "/"},       {S,1,C "?"},       {S,1,C "/"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
269 /* 56*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
270 /* 57*/ KBD_SHIFT, I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
271 /* 58*/ KBD_CTL,   I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
272 /* 59*/ KBD_ASCII, I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
273 /* 60*/ KBD_META,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
274 #if !PCVT_NULLCHARS
275 /* 61*/ KBD_ASCII, I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
276 #else
277 /* 61*/ KBD_ASCII, I, DFAULT,            DFAULT,            {S,1,C "\000"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
278 #endif /* PCVT_NULLCHARS */
279 /* 62*/ KBD_META,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
280 /* 63*/ KBD_ASCII, I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
281 /* 64*/ KBD_CTL,   I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
282 /* 65*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
283 /* 66*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
284 /* 67*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
285 /* 68*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
286 /* 69*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
287 /* 70*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
288 /* 71*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
289 /* 72*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
290 /* 73*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
291 /* 74*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
292 /* 75*/ KBD_FUNC,  I, {S,4,C "\033[2~"}, {S,4,C "\033[2~"}, {S,4,C "\033[2~"}, DFAULT,            DFAULT,            DFAULT,            DFAULT,
293 /* 76*/ KBD_FUNC,  I, {S,4,C "\033[3~"}, {S,4,C "\033[3~"}, {S,4,C "\033[3~"}, DFAULT,            DFAULT,            DFAULT,            DFAULT,
294 /* 77*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
295 /* 78*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
296 /* 79*/ KBD_CURSOR,I, {S,4,C "\033[D"},  {S,4,C "\033OD"},  {S,4,C "\033[D"},  DFAULT,            DFAULT,            DFAULT,            DFAULT,
297 /* 80*/ KBD_FUNC,  I, {S,4,C "\033[1~"}, {S,4,C "\033[1~"}, {S,4,C "\033[1~"}, DFAULT,            DFAULT,            DFAULT,            DFAULT,
298 /* 81*/ KBD_FUNC,  I, {S,4,C "\033[4~"}, {S,4,C "\033[4~"}, {S,4,C "\033[4~"}, DFAULT,            DFAULT,            DFAULT,            DFAULT,
299 /* 82*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
300 /* 83*/ KBD_CURSOR,I, {S,4,C "\033[A"},  {S,4,C "\033OA"},  {S,4,C "\033[A"},  DFAULT,            DFAULT,            DFAULT,            DFAULT,
301 /* 84*/ KBD_CURSOR,I, {S,4,C "\033[B"},  {S,4,C "\033OB"},  {S,4,C "\033[B"},  DFAULT,            DFAULT,            DFAULT,            DFAULT,
302 /* 85*/ KBD_FUNC,  I, {S,4,C "\033[5~"}, {S,4,C "\033[5~"}, {S,4,C "\033[5~"}, DFAULT,            DFAULT,            DFAULT,            DFAULT,
303 /* 86*/ KBD_FUNC,  I, {S,4,C "\033[6~"}, {S,4,C "\033[6~"}, {S,4,C "\033[6~"}, DFAULT,            DFAULT,            DFAULT,            DFAULT,
304 /* 87*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
305 /* 88*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
306 /* 89*/ KBD_CURSOR,I, {S,3,C "\033[C"},  {S,3,C "\033OC"},  {S,3,C "\033[C"},  DFAULT,            DFAULT,            DFAULT,            DFAULT,
307 /* 90*/ KBD_NUM,   I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
308 /* 91*/ KBD_KP,    I, {S,1,C "7"},       {S,2,C "\033Ow"},  {S,1,C "7"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
309 /* 92*/ KBD_KP,    I, {S,1,C "4"},       {S,2,C "\033Ot"},  {S,1,C "4"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
310 /* 93*/ KBD_KP,    I, {S,1,C "1"},       {S,2,C "\033Oq"},  {S,1,C "1"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
311 /* 94*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
312 /* 95*/ KBD_KP,    I, {S,1,C "/"},       {S,1,C "/"},       {S,1,C "/"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
313 /* 96*/ KBD_KP,    I, {S,1,C "8"},       {S,2,C "\033Ox"},  {S,1,C "8"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
314 /* 97*/ KBD_KP,    I, {S,1,C "5"},       {S,2,C "\033Ou"},  {S,1,C "5"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
315 /* 98*/ KBD_KP,    I, {S,1,C "2"},       {S,2,C "\033Or"},  {S,1,C "2"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
316 /* 99*/ KBD_KP,    I, {S,1,C "0"},       {S,2,C "\033Op"},  {S,1,C "0"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
317 /*100*/ KBD_KP,    I, {S,1,C "*"},       {S,1,C "*"},       {S,1,C "*"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
318 /*101*/ KBD_KP,    I, {S,1,C "9"},       {S,2,C "\033Oy"},  {S,1,C "9"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
319 /*102*/ KBD_KP,    I, {S,1,C "6"},       {S,2,C "\033Ov"},  {S,1,C "6"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
320 /*103*/ KBD_KP,    I, {S,1,C "3"},       {S,2,C "\033Os"},  {S,1,C "3"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
321 /*104*/ KBD_KP,    I, {S,1,C "."},       {S,2,C "\033On"},  {S,1,C "."},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
322 /*105*/ KBD_KP,    I, {S,1,C "-"},       {S,2,C "\033Om"},  {S,1,C "-"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
323 /*106*/ KBD_KP,    I, {S,1,C "+"},       {S,1,C "+"},       {S,1,C "+"},       DFAULT,            DFAULT,            DFAULT,            DFAULT,
324 /*107*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
325 /*108*/ KBD_RETURN,I, {S,1,C "\r"},      {S,2,C "\033OM"},  {S,1,C "\r"},      DFAULT,            DFAULT,            DFAULT,            DFAULT,
326 /*109*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
327 /*110*/ KBD_ASCII, I, {S,1,C "\033"},    {S,2,C "\033"},    {S,1,C "\033"},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
328 /*111*/ KBD_NONE,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
329 /*112*/ KBD_FUNC,  I, {F,0,V fkey1},     {F,0,V sfkey1},    {F,0,V cfkey1},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
330 /*113*/ KBD_FUNC,  I, {F,0,V fkey2},     {F,0,V sfkey2},    {F,0,V cfkey2},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
331 /*114*/ KBD_FUNC,  I, {F,0,V fkey3},     {F,0,V sfkey3},    {F,0,V cfkey3},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
332 /*115*/ KBD_FUNC,  I, {F,0,V fkey4},     {F,0,V sfkey4},    {F,0,V cfkey4},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
333 /*116*/ KBD_FUNC,  I, {F,0,V fkey5},     {F,0,V sfkey5},    {F,0,V cfkey5},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
334 /*117*/ KBD_FUNC,  I, {F,0,V fkey6},     {F,0,V sfkey6},    {F,0,V cfkey6},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
335 /*118*/ KBD_FUNC,  I, {F,0,V fkey7},     {F,0,V sfkey7},    {F,0,V cfkey7},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
336 /*119*/ KBD_FUNC,  I, {F,0,V fkey8},     {F,0,V sfkey8},    {F,0,V cfkey8},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
337 /*120*/ KBD_FUNC,  I, {F,0,V fkey9},     {F,0,V sfkey9},    {F,0,V cfkey9},    DFAULT,            DFAULT,            DFAULT,            DFAULT,
338 /*121*/ KBD_FUNC,  I, {F,0,V fkey10},    {F,0,V sfkey10},   {F,0,V cfkey10},   DFAULT,            DFAULT,            DFAULT,            DFAULT,
339 /*122*/ KBD_FUNC,  I, {F,0,V fkey11},    {F,0,V sfkey11},   {F,0,V cfkey11},   DFAULT,            DFAULT,            DFAULT,            DFAULT,
340 /*123*/ KBD_FUNC,  I, {F,0,V fkey12},    {F,0,V sfkey12},   {F,0,V cfkey12},   DFAULT,            DFAULT,            DFAULT,            DFAULT,
341 /*124*/ KBD_KP,    I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
342 /*125*/ KBD_SCROLL,I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
343 /*126*/ KBD_BREAK, I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
344 /*127*/ KBD_FUNC,  I, DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,            DFAULT,
345
346 #undef C
347 #undef U
348 #undef V
349 #undef S
350 #undef F
351 #undef I
352 #undef DFLT
353 };
354
355 #else /* PCVT_ALT_ENH */
356
357 /* define some shorthands to make the table (almost) fit into 80 columns */
358 #define C (u_char *)
359 #define V (void *)
360 #define S STR
361 #define F FNC
362 #define I IDX0
363
364 /* DONT EVER OVERLOAD KEY 0, THIS IS A KEY THAT MUSTN'T EXIST */
365
366 /*      type   index   unshift        shift           ctrl         */
367 /*      ---------------------------------------------------------- */
368 /*  0*/ {KBD_NONE,  I, {S,{C "df"}},    {S,{C ""}},      {S,{C ""}}},
369 /*  1*/ {KBD_ASCII, I, {S,{C "`"}},     {S,{C "~"}},     {S,{C "`"}}},
370 /*  2*/ {KBD_ASCII, I, {S,{C "1"}},     {S,{C "!"}},     {S,{C "1"}}},
371 /*  3*/ {KBD_ASCII, I, {S,{C "2"}},     {S,{C "@"}},     {S,{C "\000"}}},
372 /*  4*/ {KBD_ASCII, I, {S,{C "3"}},     {S,{C "#"}},     {S,{C "3"}}},
373 /*  5*/ {KBD_ASCII, I, {S,{C "4"}},     {S,{C "$"}},     {S,{C "4"}}},
374 /*  6*/ {KBD_ASCII, I, {S,{C "5"}},     {S,{C "%"}},     {S,{C "5"}}},
375 /*  7*/ {KBD_ASCII, I, {S,{C "6"}},     {S,{C "^"}},     {S,{C "\036"}}},
376 /*  8*/ {KBD_ASCII, I, {S,{C "7"}},     {S,{C "&"}},     {S,{C "7"}}},
377 /*  9*/ {KBD_ASCII, I, {S,{C "8"}},     {S,{C "*"}},     {S,{C "8"}}},
378 /* 10*/ {KBD_ASCII, I, {S,{C "9"}},     {S,{C "("}},     {S,{C "9"}}},
379 /* 11*/ {KBD_ASCII, I, {S,{C "0"}},     {S,{C ")"}},     {S,{C "0"}}},
380 /* 12*/ {KBD_ASCII, I, {S,{C "-"}},     {S,{C "_"}},     {S,{C "\037"}}},
381 /* 13*/ {KBD_ASCII, I, {S,{C "="}},     {S,{C "+"}},     {S,{C "="}}},
382 /* 14*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
383 /* 15*/ {KBD_ASCII, I, {S,{C "\177"}},  {S,{C "\010"}},  {S,{C "\177"}}}, /* BS */
384 /* 16*/ {KBD_ASCII, I, {S,{C "\t"}},    {S,{C "\t"}},    {S,{C "\t"}}},   /* TAB */
385 /* 17*/ {KBD_ASCII, I, {S,{C "q"}},     {S,{C "Q"}},     {S,{C "\021"}}},
386 /* 18*/ {KBD_ASCII, I, {S,{C "w"}},     {S,{C "W"}},     {S,{C "\027"}}},
387 /* 19*/ {KBD_ASCII, I, {S,{C "e"}},     {S,{C "E"}},     {S,{C "\005"}}},
388 /* 20*/ {KBD_ASCII, I, {S,{C "r"}},     {S,{C "R"}},     {S,{C "\022"}}},
389 /* 21*/ {KBD_ASCII, I, {S,{C "t"}},     {S,{C "T"}},     {S,{C "\024"}}},
390 /* 22*/ {KBD_ASCII, I, {S,{C "y"}},     {S,{C "Y"}},     {S,{C "\031"}}},
391 /* 23*/ {KBD_ASCII, I, {S,{C "u"}},     {S,{C "U"}},     {S,{C "\025"}}},
392 /* 24*/ {KBD_ASCII, I, {S,{C "i"}},     {S,{C "I"}},     {S,{C "\011"}}},
393 /* 25*/ {KBD_ASCII, I, {S,{C "o"}},     {S,{C "O"}},     {S,{C "\017"}}},
394 /* 26*/ {KBD_ASCII, I, {S,{C "p"}},     {S,{C "P"}},     {S,{C "\020"}}},
395 /* 27*/ {KBD_ASCII, I, {S,{C "["}},     {S,{C "{"}},     {S,{C "\033"}}},
396 /* 28*/ {KBD_ASCII, I, {S,{C "]"}},     {S,{C "}"}},     {S,{C "\035"}}},
397 /* 29*/ {KBD_ASCII, I, {S,{C "\\"}},    {S,{C "|"}},     {S,{C "\034"}}},
398 /* 30*/ {KBD_CAPS,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
399 /* 31*/ {KBD_ASCII, I, {S,{C "a"}},     {S,{C "A"}},     {S,{C "\001"}}},
400 /* 32*/ {KBD_ASCII, I, {S,{C "s"}},     {S,{C "S"}},     {S,{C "\023"}}},
401 /* 33*/ {KBD_ASCII, I, {S,{C "d"}},     {S,{C "D"}},     {S,{C "\004"}}},
402 /* 34*/ {KBD_ASCII, I, {S,{C "f"}},     {S,{C "F"}},     {S,{C "\006"}}},
403 /* 35*/ {KBD_ASCII, I, {S,{C "g"}},     {S,{C "G"}},     {S,{C "\007"}}},
404 /* 36*/ {KBD_ASCII, I, {S,{C "h"}},     {S,{C "H"}},     {S,{C "\010"}}},
405 /* 37*/ {KBD_ASCII, I, {S,{C "j"}},     {S,{C "J"}},     {S,{C "\n"}}},
406 /* 38*/ {KBD_ASCII, I, {S,{C "k"}},     {S,{C "K"}},     {S,{C "\013"}}},
407 /* 39*/ {KBD_ASCII, I, {S,{C "l"}},     {S,{C "L"}},     {S,{C "\014"}}},
408 /* 40*/ {KBD_ASCII, I, {S,{C ";"}},     {S,{C ":"}},     {S,{C ";"}}},
409 /* 41*/ {KBD_ASCII, I, {S,{C "'"}},     {S,{C "\""}},    {S,{C "'"}}},
410 /* 42*/ {KBD_ASCII, I, {S,{C "\\"}},    {S,{C "|"}},     {S,{C "\034"}}}, /* special */
411 /* 43*/ {KBD_RETURN,I, {S,{C "\r"}},    {S,{C "\r"}},    {S,{C "\r"}}},   /* RETURN */
412 /* 44*/ {KBD_SHIFT, I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},     /* SHIFT left */
413 /* 45*/ {KBD_ASCII, I, {S,{C "<"}},     {S,{C ">"}},     {S,{C ""}}},
414 /* 46*/ {KBD_ASCII, I, {S,{C "z"}},     {S,{C "Z"}},     {S,{C "\032"}}},
415 /* 47*/ {KBD_ASCII, I, {S,{C "x"}},     {S,{C "X"}},     {S,{C "\030"}}},
416 /* 48*/ {KBD_ASCII, I, {S,{C "c"}},     {S,{C "C"}},     {S,{C "\003"}}},
417 /* 49*/ {KBD_ASCII, I, {S,{C "v"}},     {S,{C "V"}},     {S,{C "\026"}}},
418 /* 50*/ {KBD_ASCII, I, {S,{C "b"}},     {S,{C "B"}},     {S,{C "\002"}}},
419 /* 51*/ {KBD_ASCII, I, {S,{C "n"}},     {S,{C "N"}},     {S,{C "\016"}}},
420 /* 52*/ {KBD_ASCII, I, {S,{C "m"}},     {S,{C "M"}},     {S,{C "\r"}}},
421 /* 53*/ {KBD_ASCII, I, {S,{C ","}},     {S,{C "<"}},     {S,{C ","}}},
422 /* 54*/ {KBD_ASCII, I, {S,{C "."}},     {S,{C ">"}},     {S,{C "."}}},
423 /* 55*/ {KBD_ASCII, I, {S,{C "/"}},     {S,{C "?"}},     {S,{C "/"}}},
424 /* 56*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
425 /* 57*/ {KBD_SHIFT, I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},     /* SHIFT right */
426 /* 58*/ {KBD_CTL,   I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},     /* CTL left */
427 /* 59*/ {KBD_ASCII, I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
428 /* 60*/ {KBD_META,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},     /* ALT left */
429 #if !PCVT_NULLCHARS
430 /* 61*/ {KBD_ASCII, I, {S,{C " "}},     {S,{C " "}},     {S,{C " "}}},    /* SPACE */
431 #else
432 /* 61*/ {KBD_ASCII, I, {S,{C " "}},     {S,{C " "}},     {S,{C "\000"}}}, /* SPACE */
433 #endif /* PCVT_NULLCHARS */
434 /* 62*/ {KBD_META,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},     /* ALT right */
435 /* 63*/ {KBD_ASCII, I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
436 /* 64*/ {KBD_CTL,   I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},     /* CTL right */
437 /* 65*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
438 /* 66*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
439 /* 67*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
440 /* 68*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
441 /* 69*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
442 /* 70*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
443 /* 71*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
444 /* 72*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
445 /* 73*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
446 /* 74*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
447 /* 75*/ {KBD_FUNC,  I, {S,{C "\033[2~"}},{S,{C "\033[2~"}},{S,{C "\033[2~"}}},/* INS */
448 /* 76*/ {KBD_FUNC,  I, {S,{C "\033[3~"}},{S,{C "\033[3~"}},{S,{C "\033[3~"}}},/* DEL */
449 /* 77*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
450 /* 78*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
451 /* 79*/ {KBD_CURSOR,I, {S,{C "\033[D"}},{S,{C "\033OD"}},{S,{C "\033[D"}}},   /* CU <- */
452 /* 80*/ {KBD_FUNC,  I, {S,{C "\033[1~"}},{S,{C "\033[1~"}},{S,{C "\033[1~"}}},/* HOME = FIND*/
453 /* 81*/ {KBD_FUNC,  I, {S,{C "\033[4~"}},{S,{C "\033[4~"}},{S,{C "\033[4~"}}},/* END = SELECT */
454 /* 82*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
455 /* 83*/ {KBD_CURSOR,I, {S,{C "\033[A"}},{S,{C "\033OA"}},{S,{C "\033[A"}}},   /* CU ^ */
456 /* 84*/ {KBD_CURSOR,I, {S,{C "\033[B"}},{S,{C "\033OB"}},{S,{C "\033[B"}}},   /* CU v */
457 /* 85*/ {KBD_FUNC,  I, {S,{C "\033[5~"}},{S,{C "\033[5~"}},{S,{C "\033[5~"}}},/*PG UP*/
458 /* 86*/ {KBD_FUNC,  I, {S,{C "\033[6~"}},{S,{C "\033[6~"}},{S,{C "\033[6~"}}},/*PG DN*/
459 /* 87*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
460 /* 88*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
461 /* 89*/ {KBD_CURSOR,I, {S,{C "\033[C"}},{S,{C "\033OC"}},{S,{C "\033[C"}}},   /* CU -> */
462 /* 90*/ {KBD_NUM,   I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
463 /* 91*/ {KBD_KP,    I, {S,{C "7"}},     {S,{C "\033Ow"}},{S,{C "7"}}},
464 /* 92*/ {KBD_KP,    I, {S,{C "4"}},     {S,{C "\033Ot"}},{S,{C "4"}}},
465 /* 93*/ {KBD_KP,    I, {S,{C "1"}},     {S,{C "\033Oq"}},{S,{C "1"}}},
466 /* 94*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
467 /* 95*/ {KBD_KP,    I, {S,{C "/"}},     {S,{C "/"}},     {S,{C "/"}}},
468 /* 96*/ {KBD_KP,    I, {S,{C "8"}},     {S,{C "\033Ox"}},{S,{C "8"}}},
469 /* 97*/ {KBD_KP,    I, {S,{C "5"}},     {S,{C "\033Ou"}},{S,{C "5"}}},
470 /* 98*/ {KBD_KP,    I, {S,{C "2"}},     {S,{C "\033Or"}},{S,{C "2"}}},
471 /* 99*/ {KBD_KP,    I, {S,{C "0"}},     {S,{C "\033Op"}},{S,{C "0"}}},
472 /*100*/ {KBD_KP,    I, {S,{C "*"}},     {S,{C "*"}},     {S,{C "*"}}},
473 /*101*/ {KBD_KP,    I, {S,{C "9"}},     {S,{C "\033Oy"}},{S,{C "9"}}},
474 /*102*/ {KBD_KP,    I, {S,{C "6"}},     {S,{C "\033Ov"}},{S,{C "6"}}},
475 /*103*/ {KBD_KP,    I, {S,{C "3"}},     {S,{C "\033Os"}},{S,{C "3"}}},
476 /*104*/ {KBD_KP,    I, {S,{C "."}},     {S,{C "\033On"}},{S,{C "."}}},
477 /*105*/ {KBD_KP,    I, {S,{C "-"}},     {S,{C "\033Om"}},{S,{C "-"}}},
478 /*106*/ {KBD_KP,    I, {S,{C "+"}},     {S,{C "+"}},     {S,{C "+"}}},
479 /*107*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
480 /*108*/ {KBD_RETURN,I, {S,{C "\r"}},    {S,{C "\033OM"}},{S,{C "\r"}}},    /* KP ENTER */
481 /*109*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
482 /*110*/ {KBD_ASCII, I, {S,{C "\033"}},  {S,{C "\033"}},  {S,{C "\033"}}},
483 /*111*/ {KBD_NONE,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
484 /*112*/ {KBD_FUNC,  I, {F,{V fkey1}},   {F,{V sfkey1}},  {F,{V cfkey1}}},  /* F1 */
485 /*113*/ {KBD_FUNC,  I, {F,{V fkey2}},   {F,{V sfkey2}},  {F,{V cfkey2}}},  /* F2 */
486 /*114*/ {KBD_FUNC,  I, {F,{V fkey3}},   {F,{V sfkey3}},  {F,{V cfkey3}}},  /* F3 */
487 /*115*/ {KBD_FUNC,  I, {F,{V fkey4}},   {F,{V sfkey4}},  {F,{V cfkey4}}},  /* F4 */
488 /*116*/ {KBD_FUNC,  I, {F,{V fkey5}},   {F,{V sfkey5}},  {F,{V cfkey5}}},  /* F5 */
489 /*117*/ {KBD_FUNC,  I, {F,{V fkey6}},   {F,{V sfkey6}},  {F,{V cfkey6}}},  /* F6 */
490 /*118*/ {KBD_FUNC,  I, {F,{V fkey7}},   {F,{V sfkey7}},  {F,{V cfkey7}}},  /* F7 */
491 /*119*/ {KBD_FUNC,  I, {F,{V fkey8}},   {F,{V sfkey8}},  {F,{V cfkey8}}},  /* F8 */
492 /*120*/ {KBD_FUNC,  I, {F,{V fkey9}},   {F,{V sfkey9}},  {F,{V cfkey9}}},  /* F9 */
493 /*121*/ {KBD_FUNC,  I, {F,{V fkey10}},  {F,{V sfkey10}}, {F,{V cfkey10}}}, /* F10 */
494 /*122*/ {KBD_FUNC,  I, {F,{V fkey11}},  {F,{V sfkey11}}, {F,{V cfkey11}}}, /* F11 */
495 /*123*/ {KBD_FUNC,  I, {F,{V fkey12}},  {F,{V sfkey12}}, {F,{V cfkey12}}}, /* F12 */
496 /*124*/ {KBD_KP,    I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
497 /*125*/ {KBD_SCROLL,I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
498 /*126*/ {KBD_BREAK, I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},
499 /*127*/ {KBD_FUNC,  I, {S,{C ""}},      {S,{C ""}},      {S,{C ""}}},      /* SysRq */
500
501 #undef C
502 #undef V
503 #undef S
504 #undef F
505 #undef I
506 };
507
508 #endif /* PCVT_ALT_ENH */
509
510 static short    keypad2num[] = {
511         7, 4, 1, -1, -1, 8, 5, 2, 0, -1, 9, 6, 3, -1, -1, -1, -1
512 };
513
514 #if PCVT_USL_VT_COMPAT
515
516 #define N_KEYNUMS 128
517
518 /*
519  * this is the reverse mapping from keynumbers to scanset 1 codes
520  * it is used to emulate the SysV-style GIO_KEYMAP ioctl cmd
521  */
522
523 static u_char key2scan1[N_KEYNUMS] = {
524            0,0x29,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, /*   0 */
525         0x0a,0x0b,0x0c,0x0d,   0,0x0e,0x0f,0x10,0x11,0x12, /*  10 */
526         0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x2b, /*  20 */
527         0x3a,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26, /*  30 */
528         0x27,0x28,   0,0x1c,0x2a,0x56,0x2c,0x2d,0x2e,0x2f, /*  40 */
529         0x30,0x31,0x32,0x33,0x34,0x35,0x56,0x36,0x1d,   0, /*  50 */
530         0x38,0x39,   0,   0,   0,   0,   0,   0,   0,   0, /*  60 */
531            0,   0,   0,   0,   0,   0,   0,   0,   0,   0, /*  70 */
532            0,   0,   0,   0,   0,   0,   0,   0,   0,   0, /*  80 */
533         0x45,0x47,0x4b,0x4f,   0,   0,0x48,0x4c,0x50,0x52, /*  90 */
534         0x37,0x49,0x4d,0x51,0x53,0x4a,0x4e,   0,   0,   0, /* 100 */
535         0x01,   0,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42, /* 110 */
536         0x43,0x44,0x57,0x58,   0,0x46,   0,0x54            /* 120 */
537 };
538
539 /*
540  * SysV is brain-dead enough to stick on the IBM code page 437. So we
541  * have to translate our keymapping into IBM 437 (possibly losing keys),
542  * in order to have the X server convert it back into ISO8859.1
543  */
544
545 /* NB: this table only contains the mapping for codes >= 128 */
546
547 static u_char iso2ibm437[] =
548 {
549            0,     0,     0,     0,     0,     0,     0,     0,
550            0,     0,     0,     0,     0,     0,     0,     0,
551            0,     0,     0,     0,     0,     0,     0,     0,
552            0,     0,     0,     0,     0,     0,     0,     0,
553         0xff,  0xad,  0x9b,  0x9c,     0,  0x9d,     0,  0x40,
554         0x6f,  0x63,  0x61,  0xae,     0,     0,     0,     0,
555         0xf8,  0xf1,  0xfd,  0x33,     0,  0xe6,     0,  0xfa,
556            0,  0x31,  0x6f,  0xaf,  0xac,  0xab,     0,  0xa8,
557         0x41,  0x41,  0x41,  0x41,  0x8e,  0x8f,  0x92,  0x80,
558         0x45,  0x90,  0x45,  0x45,  0x49,  0x49,  0x49,  0x49,
559         0x81,  0xa5,  0x4f,  0x4f,  0x4f,  0x4f,  0x99,  0x4f,
560         0x4f,  0x55,  0x55,  0x55,  0x9a,  0x59,     0,  0xe1,
561         0x85,  0xa0,  0x83,  0x61,  0x84,  0x86,  0x91,  0x87,
562         0x8a,  0x82,  0x88,  0x89,  0x8d,  0xa1,  0x8c,  0x8b,
563            0,  0xa4,  0x95,  0xa2,  0x93,  0x6f,  0x94,  0x6f,
564         0x6f,  0x97,  0xa3,  0x96,  0x81,  0x98,     0,     0
565 };
566
567 #endif /* PCVT_USL_VT_COMPAT */
568