xref: /freebsd/contrib/tcsh/ed.defns.c (revision 23f282aa31e9b6fceacd449020e936e98d6f2298)
1 /* $Header: /src/pub/tcsh/ed.defns.c,v 3.33 1998/11/24 18:17:18 christos Exp $ */
2 /*
3  * ed.defns.c: Editor function definitions and initialization
4  */
5 /*-
6  * Copyright (c) 1980, 1991 The Regents of the University of California.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. All advertising materials mentioning features or use of this software
18  *    must display the following acknowledgement:
19  *	This product includes software developed by the University of
20  *	California, Berkeley and its contributors.
21  * 4. Neither the name of the University nor the names of its contributors
22  *    may be used to endorse or promote products derived from this software
23  *    without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35  * SUCH DAMAGE.
36  */
37 #include "sh.h"
38 
39 RCSID("$Id: ed.defns.c,v 3.33 1998/11/24 18:17:18 christos Exp $")
40 
41 #include "ed.h"
42 
43 static	void		ed_InitMetaBindings 	__P((void));
44 
45 PFCmd   CcFuncTbl[] = {		/* table of available commands */
46     e_unassigned,
47 /* no #define here -- this is a dummy to detect initing of the key map */
48     e_unassigned,
49 #define		F_UNASSIGNED	1
50     e_insert,
51 #define		F_INSERT	2
52     e_newline,
53 #define		F_NEWLINE	3
54     e_delprev,
55 #define		F_DELPREV	4
56     e_delnext,
57 #define		F_DELNEXT	5
58     e_toend,
59 #define		F_TOEND		6
60     e_tobeg,
61 #define		F_TOBEG		7
62     e_charback,
63 #define		F_CHARBACK	8
64     e_charfwd,
65 #define		F_CHARFWD	9
66     e_quote,
67 #define		F_QUOTE		10
68     e_startover,
69 #define		F_STARTOVER	11
70     e_redisp,
71 #define		F_REDISP	12
72     e_tty_int,
73 #define		F_TTY_INT	13
74     e_wordback,
75 #define		F_WORDBACK	14
76     e_wordfwd,
77 #define		F_WORDFWD	15
78     e_cleardisp,
79 #define		F_CLEARDISP	16
80     e_complete,
81 #define		F_COMPLETE	17
82     e_correct,
83 #define		F_CORRECT	18
84     e_up_hist,
85 #define		F_UP_HIST	19
86     e_down_hist,
87 #define		F_DOWN_HIST	20
88     e_up_search_hist,
89 #define		F_UP_SEARCH_HIST	21
90     e_down_search_hist,
91 #define		F_DOWN_SEARCH_HIST	22
92     e_helpme,
93 #define		F_HELPME	23
94     e_list_choices,
95 #define		F_LIST_CHOICES	24
96     e_delwordprev,
97 #define		F_DELWORDPREV	25
98     e_delwordnext,
99 #define		F_DELWORDNEXT	26
100     e_digit,
101 #define		F_DIGIT		27
102     e_killend,
103 #define		F_KILLEND	28
104     e_killbeg,
105 #define		F_KILLBEG	29
106     e_metanext,
107 #define		F_METANEXT	30
108     e_send_eof,
109 #define		F_SEND_EOF	31
110     e_charswitch,
111 #define		F_CHARSWITCH	32
112     e_which,
113 #define		F_WHICH		33
114     e_yank_kill,
115 #define		F_YANK_KILL	34
116     e_tty_dsusp,
117 #define		F_TTY_DSUSP	35
118     e_tty_flusho,
119 #define		F_TTY_FLUSHO	36
120     e_tty_quit,
121 #define		F_TTY_QUIT	37
122     e_tty_tsusp,
123 #define		F_TTY_TSUSP	38
124     e_tty_stopo,
125 #define		F_TTY_STOPO	39
126     e_tty_starto,
127 #define		F_TTY_STARTO	40
128     e_argfour,
129 #define		F_ARGFOUR	41
130     e_set_mark,
131 #define		F_SET_MARK	42
132     e_exchange_mark,
133 #define		F_EXCHANGE_MARK	43
134     e_last_item,
135 #define		F_LAST_ITEM	44
136     e_delnext_list_eof,
137 #define		F_DELNEXT_LIST_EOF	45
138     v_cmd_mode,
139 #define		V_CMD_MODE	46
140     v_insert,
141 #define		V_INSERT	47
142     e_argdigit,
143 #define		F_ARGDIGIT	48
144     e_killregion,
145 #define		F_KILLREGION	49
146     e_copyregion,
147 #define		F_COPYREGION	50
148     e_gcharswitch,
149 #define		F_GCHARSWITCH	51
150     e_run_fg_editor,
151 #define		F_RUN_FG_EDITOR	52
152     e_unassigned,	/* place holder for sequence lead in character */
153 #define		F_XKEY		53
154     e_uppercase,
155 #define         F_CASEUPPER     54
156     e_lowercase,
157 #define         F_CASELOWER     55
158     e_capitolcase,
159 #define         F_CASECAPITAL   56
160     v_zero,
161 #define		V_ZERO		57
162     v_add,
163 #define		V_ADD		58
164     v_addend,
165 #define		V_ADDEND	59
166     v_wordbegnext,
167 #define		V_WORDBEGNEXT	60
168     e_killall,
169 #define		F_KILLALL	61
170     e_unassigned,
171 /* F_EXTENDNEXT removed */
172     v_insbeg,
173 #define		V_INSBEG	63
174     v_replmode,
175 #define		V_REPLMODE	64
176     v_replone,
177 #define		V_REPLONE	65
178     v_substline,
179 #define		V_SUBSTLINE	66
180     v_substchar,
181 #define		V_SUBSTCHAR	67
182     v_chgtoend,
183 #define		V_CHGTOEND	68
184     e_list_eof,
185 #define		F_LIST_EOF	69
186     e_list_glob,
187 #define		F_LIST_GLOB	70
188     e_expand_history,
189 #define		F_EXPAND_HISTORY	71
190     e_magic_space,
191 #define		F_MAGIC_SPACE	72
192     e_insovr,
193 #define		F_INSOVR	73
194     v_cm_complete,
195 #define		V_CM_COMPLETE	74
196     e_copyprev,
197 #define		F_COPYPREV	75
198     e_correctl,
199 #define		F_CORRECT_L	76
200     e_expand_glob,
201 #define		F_EXPAND_GLOB	77
202     e_expand_vars,
203 #define		F_EXPAND_VARS	78
204     e_toggle_hist,
205 #define		F_TOGGLE_HIST	79
206     v_change_case,
207 #define		V_CHGCASE	80
208     e_expand,
209 #define		F_EXPAND	81
210     e_load_average,
211 #define		F_LOAD_AVERAGE	82
212     v_delprev,
213 #define		V_DELPREV	83
214     v_delmeta,
215 #define		V_DELMETA	84
216     v_wordfwd,
217 #define		V_WORDFWD	85
218     v_wordback,
219 #define		V_WORDBACK	86
220     v_endword,
221 #define		V_ENDWORD	87
222     v_eword,
223 #define		V_EWORD		88
224     v_undo,
225 #define		V_UNDO		89
226     v_ush_meta,
227 #define		V_USH_META	90
228     v_dsh_meta,
229 #define		V_DSH_META	91
230     v_rsrch_fwd,
231 #define		V_RSRCH_FWD	92
232     v_rsrch_back,
233 #define		V_RSRCH_BACK	93
234     v_char_fwd,
235 #define		V_CHAR_FWD	94
236     v_char_back,
237 #define		V_CHAR_BACK	95
238     v_chgmeta,
239 #define		V_CHGMETA	96
240     e_inc_fwd,
241 #define		F_INC_FWD	97
242     e_inc_back,
243 #define		F_INC_BACK	98
244     v_rchar_fwd,
245 #define		V_RCHAR_FWD	99
246     v_rchar_back,
247 #define		V_RCHAR_BACK	100
248     v_charto_fwd,
249 #define		V_CHARTO_FWD	101
250     v_charto_back,
251 #define		V_CHARTO_BACK	102
252     e_normalize_path,
253 #define		F_PATH_NORM	103
254     e_delnext_eof,		/* added by mtk@ari.ncl.omron.co.jp (920818) */
255 #define		F_DELNEXT_EOF	104
256     e_stuff_char,
257 #define		F_STUFF_CHAR	105
258     e_complete_all,
259 #define		F_COMPLETE_ALL	106
260     e_list_all,
261 #define		F_LIST_ALL	107
262     e_complete_fwd,
263 #define		F_COMPLETE_FWD	108
264     e_complete_back,
265 #define		F_COMPLETE_BACK	109
266     e_delnext_list,
267 #define		F_DELNEXT_LIST	110
268     e_normalize_command,
269 #define		F_COMMAND_NORM	111
270     e_dabbrev_expand,
271 #define		F_DABBREV_EXPAND	112
272 	e_copy_to_clipboard,
273 #define		F_COPY_CLIP		113
274 	e_paste_from_clipboard,
275 #define		F_PASTE_CLIP	114
276 	e_dosify_next,
277 #define		F_DOSIFY_NEXT	115
278 	e_dosify_prev,
279 #define		F_DOSIFY_PREV	116
280     0				/* DUMMY VALUE */
281 #define		F_NUM_FNS	117
282 
283 };
284 
285 KEYCMD  NumFuns = F_NUM_FNS;
286 
287 KEYCMD  CcKeyMap[NT_NUM_KEYS];		/* the real key map */
288 KEYCMD  CcAltMap[NT_NUM_KEYS];		/* the alternative key map */
289 #define	F_NUM_FUNCNAMES	(F_NUM_FNS + 2)
290 struct KeyFuncs FuncNames[F_NUM_FUNCNAMES];
291 
292 #ifdef WINNT
293 extern KEYCMD CcEmacsMap[];
294 extern KEYCMD CcViMap[];
295 extern KEYCMD  CcViCmdMap[];
296 #else /* !WINNT*/
297 KEYCMD  CcEmacsMap[] = {
298 /* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
299    bytes long */
300 
301     F_SET_MARK,			/* ^@ */
302     F_TOBEG,			/* ^A */
303     F_CHARBACK,			/* ^B */
304     F_TTY_INT,			/* ^C */
305     F_DELNEXT_LIST_EOF,		/* ^D */
306     F_TOEND,			/* ^E */
307     F_CHARFWD,			/* ^F */
308     F_UNASSIGNED,		/* ^G */
309     F_DELPREV,			/* ^H */
310     F_COMPLETE,			/* ^I */
311     F_NEWLINE,			/* ^J */
312     F_KILLEND,			/* ^K */
313     F_CLEARDISP,		/* ^L */
314     F_NEWLINE,			/* ^M */
315     F_DOWN_HIST,		/* ^N */
316     F_TTY_FLUSHO,		/* ^O */
317     F_UP_HIST,			/* ^P */
318     F_TTY_STARTO,		/* ^Q */
319     F_REDISP,			/* ^R */
320     F_TTY_STOPO,		/* ^S */
321     F_CHARSWITCH,		/* ^T */
322     F_KILLALL,			/* ^U */
323     F_QUOTE,			/* ^V */
324     F_KILLREGION,		/* ^W */
325     F_XKEY,			/* ^X */
326     F_YANK_KILL,		/* ^Y */
327     F_TTY_TSUSP,		/* ^Z */
328     F_METANEXT,			/* ^[ */
329     F_TTY_QUIT,			/* ^\ */
330     F_TTY_DSUSP,		/* ^] */
331     F_UNASSIGNED,		/* ^^ */
332     F_UNASSIGNED,		/* ^_ */
333     F_INSERT,			/* SPACE */
334     F_INSERT,			/* ! */
335     F_INSERT,			/* " */
336     F_INSERT,			/* # */
337     F_INSERT,			/* $ */
338     F_INSERT,			/* % */
339     F_INSERT,			/* & */
340     F_INSERT,			/* ' */
341     F_INSERT,			/* ( */
342     F_INSERT,			/* ) */
343     F_INSERT,			/* * */
344     F_INSERT,			/* + */
345     F_INSERT,			/* , */
346     F_INSERT,			/* - */
347     F_INSERT,			/* . */
348     F_INSERT,			/* / */
349     F_DIGIT,			/* 0 */
350     F_DIGIT,			/* 1 */
351     F_DIGIT,			/* 2 */
352     F_DIGIT,			/* 3 */
353     F_DIGIT,			/* 4 */
354     F_DIGIT,			/* 5 */
355     F_DIGIT,			/* 6 */
356     F_DIGIT,			/* 7 */
357     F_DIGIT,			/* 8 */
358     F_DIGIT,			/* 9 */
359     F_INSERT,			/* : */
360     F_INSERT,			/* ; */
361     F_INSERT,			/* < */
362     F_INSERT,			/* = */
363     F_INSERT,			/* > */
364     F_INSERT,			/* ? */
365     F_INSERT,			/* @ */
366     F_INSERT,			/* A */
367     F_INSERT,			/* B */
368     F_INSERT,			/* C */
369     F_INSERT,			/* D */
370     F_INSERT,			/* E */
371     F_INSERT,			/* F */
372     F_INSERT,			/* G */
373     F_INSERT,			/* H */
374     F_INSERT,			/* I */
375     F_INSERT,			/* J */
376     F_INSERT,			/* K */
377     F_INSERT,			/* L */
378     F_INSERT,			/* M */
379     F_INSERT,			/* N */
380     F_INSERT,			/* O */
381     F_INSERT,			/* P */
382     F_INSERT,			/* Q */
383     F_INSERT,			/* R */
384     F_INSERT,			/* S */
385     F_INSERT,			/* T */
386     F_INSERT,			/* U */
387     F_INSERT,			/* V */
388     F_INSERT,			/* W */
389     F_INSERT,			/* X */
390     F_INSERT,			/* Y */
391     F_INSERT,			/* Z */
392     F_INSERT,			/* [ */
393     F_INSERT,			/* \ */
394     F_INSERT,			/* ] */
395     F_INSERT,			/* ^ */
396     F_INSERT,			/* _ */
397     F_INSERT,			/* ` */
398     F_INSERT,			/* a */
399     F_INSERT,			/* b */
400     F_INSERT,			/* c */
401     F_INSERT,			/* d */
402     F_INSERT,			/* e */
403     F_INSERT,			/* f */
404     F_INSERT,			/* g */
405     F_INSERT,			/* h */
406     F_INSERT,			/* i */
407     F_INSERT,			/* j */
408     F_INSERT,			/* k */
409     F_INSERT,			/* l */
410     F_INSERT,			/* m */
411     F_INSERT,			/* n */
412     F_INSERT,			/* o */
413     F_INSERT,			/* p */
414     F_INSERT,			/* q */
415     F_INSERT,			/* r */
416     F_INSERT,			/* s */
417     F_INSERT,			/* t */
418     F_INSERT,			/* u */
419     F_INSERT,			/* v */
420     F_INSERT,			/* w */
421     F_INSERT,			/* x */
422     F_INSERT,			/* y */
423     F_INSERT,			/* z */
424     F_INSERT,			/* { */
425     F_INSERT,			/* | */
426     F_INSERT,			/* } */
427     F_INSERT,			/* ~ */
428     F_DELPREV,			/* ^? */
429     F_UNASSIGNED,		/* M-^@ */
430     F_UNASSIGNED,		/* M-^A */
431     F_UNASSIGNED,		/* M-^B */
432     F_UNASSIGNED,		/* M-^C */
433     F_LIST_CHOICES,		/* M-^D */
434     F_UNASSIGNED,		/* M-^E */
435     F_UNASSIGNED,		/* M-^F */
436     F_UNASSIGNED,		/* M-^G */
437     F_DELWORDPREV,		/* M-^H */
438     F_COMPLETE,			/* M-^I */
439     F_UNASSIGNED,		/* M-^J */
440     F_UNASSIGNED,		/* M-^K */
441     F_CLEARDISP,		/* M-^L */
442     F_UNASSIGNED,		/* M-^M */
443     F_UNASSIGNED,		/* M-^N */
444     F_UNASSIGNED,		/* M-^O */
445     F_UNASSIGNED,		/* M-^P */
446     F_UNASSIGNED,		/* M-^Q */
447     F_UNASSIGNED,		/* M-^R */
448     F_UNASSIGNED,		/* M-^S */
449     F_UNASSIGNED,		/* M-^T */
450     F_UNASSIGNED,		/* M-^U */
451     F_UNASSIGNED,		/* M-^V */
452     F_UNASSIGNED,		/* M-^W */
453     F_UNASSIGNED,		/* M-^X */
454     F_UNASSIGNED,		/* M-^Y */
455     F_RUN_FG_EDITOR,		/* M-^Z */
456     F_COMPLETE,			/* M-^[ */
457     F_UNASSIGNED,		/* M-^\ */
458     F_UNASSIGNED,		/* M-^] */
459     F_UNASSIGNED,		/* M-^^ */
460     F_COPYPREV,			/* M-^_ */
461     F_EXPAND_HISTORY,		/* M-SPACE */
462     F_EXPAND_HISTORY,		/* M-! */
463     F_UNASSIGNED,		/* M-" */
464     F_UNASSIGNED,		/* M-# */
465     F_CORRECT_L,		/* M-$ */
466     F_UNASSIGNED,		/* M-% */
467     F_UNASSIGNED,		/* M-& */
468     F_UNASSIGNED,		/* M-' */
469     F_UNASSIGNED,		/* M-( */
470     F_UNASSIGNED,		/* M-) */
471     F_UNASSIGNED,		/* M-* */
472     F_UNASSIGNED,		/* M-+ */
473     F_UNASSIGNED,		/* M-, */
474     F_UNASSIGNED,		/* M-- */
475     F_UNASSIGNED,		/* M-. */
476     F_DABBREV_EXPAND,		/* M-/ */
477     F_ARGDIGIT,			/* M-0 */
478     F_ARGDIGIT,			/* M-1 */
479     F_ARGDIGIT,			/* M-2 */
480     F_ARGDIGIT,			/* M-3 */
481     F_ARGDIGIT,			/* M-4 */
482     F_ARGDIGIT,			/* M-5 */
483     F_ARGDIGIT,			/* M-6 */
484     F_ARGDIGIT,			/* M-7 */
485     F_ARGDIGIT,			/* M-8 */
486     F_ARGDIGIT,			/* M-9 */
487     F_UNASSIGNED,		/* M-: */
488     F_UNASSIGNED,		/* M-; */
489     F_UNASSIGNED,		/* M-< */
490     F_UNASSIGNED,		/* M-= */
491     F_UNASSIGNED,		/* M-> */
492     F_WHICH,			/* M-? */
493     F_UNASSIGNED,		/* M-@ */
494     F_UNASSIGNED,		/* M-A */
495     F_WORDBACK,			/* M-B */
496     F_CASECAPITAL,		/* M-C */
497     F_DELWORDNEXT,		/* M-D */
498     F_UNASSIGNED,		/* M-E */
499     F_WORDFWD,			/* M-F */
500     F_UNASSIGNED,		/* M-G */
501     F_HELPME,			/* M-H */
502     F_UNASSIGNED,		/* M-I */
503     F_UNASSIGNED,		/* M-J */
504     F_UNASSIGNED,		/* M-K */
505     F_CASELOWER,		/* M-L */
506     F_UNASSIGNED,		/* M-M */
507     F_DOWN_SEARCH_HIST,		/* M-N */
508     F_XKEY,			/* M-O *//* extended key esc PWP Mar 88 */
509     F_UP_SEARCH_HIST,		/* M-P */
510     F_UNASSIGNED,		/* M-Q */
511     F_TOGGLE_HIST,		/* M-R */
512     F_CORRECT,			/* M-S */
513     F_UNASSIGNED,		/* M-T */
514     F_CASEUPPER,		/* M-U */
515     F_UNASSIGNED,		/* M-V */
516     F_COPYREGION,		/* M-W */
517     F_UNASSIGNED,		/* M-X */
518     F_UNASSIGNED,		/* M-Y */
519     F_UNASSIGNED,		/* M-Z */
520     F_XKEY,			/* M-[ *//* extended key esc -mf Oct 87 */
521     F_UNASSIGNED,		/* M-\ */
522     F_UNASSIGNED,		/* M-] */
523     F_UNASSIGNED,		/* M-^ */
524     F_LAST_ITEM,		/* M-_ */
525     F_UNASSIGNED,		/* M-` */
526     F_UNASSIGNED,		/* M-a */
527     F_WORDBACK,			/* M-b */
528     F_CASECAPITAL,		/* M-c */
529     F_DELWORDNEXT,		/* M-d */
530     F_UNASSIGNED,		/* M-e */
531     F_WORDFWD,			/* M-f */
532     F_UNASSIGNED,		/* M-g */
533     F_HELPME,			/* M-h */
534     F_UNASSIGNED,		/* M-i */
535     F_UNASSIGNED,		/* M-j */
536     F_UNASSIGNED,		/* M-k */
537     F_CASELOWER,		/* M-l */
538     F_UNASSIGNED,		/* M-m */
539     F_DOWN_SEARCH_HIST,		/* M-n */
540     F_UNASSIGNED,		/* M-o */
541     F_UP_SEARCH_HIST,		/* M-p */
542     F_UNASSIGNED,		/* M-q */
543     F_TOGGLE_HIST,		/* M-r */
544     F_CORRECT,			/* M-s */
545     F_UNASSIGNED,		/* M-t */
546     F_CASEUPPER,		/* M-u */
547     F_UNASSIGNED,		/* M-v */
548     F_COPYREGION,		/* M-w */
549     F_UNASSIGNED,		/* M-x */
550     F_UNASSIGNED,		/* M-y */
551     F_UNASSIGNED,		/* M-z */
552     F_UNASSIGNED,		/* M-{ */
553     F_UNASSIGNED,		/* M-| */
554     F_UNASSIGNED,		/* M-} */
555     F_UNASSIGNED,		/* M-~ */
556     F_DELWORDPREV		/* M-^? */
557 };
558 
559 /*
560  * keymap table for vi.  Each index into above tbl; should be
561  * 256 entries long.  Vi mode uses a sticky-extend to do command mode:
562  * insert mode characters are in the normal keymap, and command mode
563  * in the extended keymap.
564  */
565 static KEYCMD  CcViMap[] = {
566 #ifdef KSHVI
567     F_UNASSIGNED,		/* ^@ */
568     F_INSERT,			/* ^A */
569     F_INSERT,			/* ^B */
570     F_INSERT,			/* ^C */
571     F_INSERT,			/* ^D */
572     F_INSERT,			/* ^E */
573     F_INSERT,			/* ^F */
574     F_INSERT,			/* ^G */
575     V_DELPREV,			/* ^H */   /* BackSpace key */
576     F_COMPLETE,			/* ^I */   /* Tab Key  */
577     F_NEWLINE,			/* ^J */
578     F_INSERT,			/* ^K */
579     F_INSERT,			/* ^L */
580     F_NEWLINE,			/* ^M */
581     F_INSERT,			/* ^N */
582     F_INSERT,			/* ^O */
583     F_INSERT,			/* ^P */
584     F_TTY_STARTO,		/* ^Q */
585     F_INSERT,			/* ^R */
586     F_INSERT,			/* ^S */
587     F_INSERT,			/* ^T */
588     F_INSERT,			/* ^U */
589     F_QUOTE,			/* ^V */
590     F_DELWORDPREV,		/* ^W */  /* Only until start edit pos */
591     F_INSERT,			/* ^X */
592     F_INSERT,			/* ^Y */
593     F_INSERT,			/* ^Z */
594     V_CMD_MODE,			/* ^[ */  /* [ Esc ] key */
595     F_TTY_QUIT,			/* ^\ */
596     F_INSERT,			/* ^] */
597     F_INSERT,			/* ^^ */
598     F_INSERT,			/* ^_ */
599 #else /* !KSHVI */
600     F_UNASSIGNED,		/* ^@ */   /* NOTE: These mapping do NOT */
601     F_TOBEG,			/* ^A */   /* Correspond well to the KSH */
602     F_CHARBACK,			/* ^B */   /* VI editting assignments    */
603     F_TTY_INT,			/* ^C */   /* On the other hand they are */
604     F_LIST_EOF,			/* ^D */   /* convenient any many people */
605     F_TOEND,			/* ^E */   /* have gotten used to them   */
606     F_CHARFWD,			/* ^F */
607     F_LIST_GLOB,		/* ^G */
608     F_DELPREV,			/* ^H */   /* BackSpace key */
609     F_COMPLETE,			/* ^I */   /* Tab Key */
610     F_NEWLINE,			/* ^J */
611     F_KILLEND,			/* ^K */
612     F_CLEARDISP,		/* ^L */
613     F_NEWLINE,			/* ^M */
614     F_DOWN_HIST,		/* ^N */
615     F_TTY_FLUSHO,		/* ^O */
616     F_UP_HIST,			/* ^P */
617     F_TTY_STARTO,		/* ^Q */
618     F_REDISP,			/* ^R */
619     F_TTY_STOPO,		/* ^S */
620     F_CHARSWITCH,		/* ^T */
621     F_KILLBEG,			/* ^U */
622     F_QUOTE,			/* ^V */
623     F_DELWORDPREV,		/* ^W */
624     F_EXPAND,			/* ^X */
625     F_TTY_DSUSP,		/* ^Y */
626     F_TTY_TSUSP,		/* ^Z */
627     V_CMD_MODE,			/* ^[ */
628     F_TTY_QUIT,			/* ^\ */
629     F_UNASSIGNED,		/* ^] */
630     F_UNASSIGNED,		/* ^^ */
631     F_UNASSIGNED,		/* ^_ */
632 #endif  /* KSHVI */
633     F_INSERT,			/* SPACE */
634     F_INSERT,			/* ! */
635     F_INSERT,			/* " */
636     F_INSERT,			/* # */
637     F_INSERT,			/* $ */
638     F_INSERT,			/* % */
639     F_INSERT,			/* & */
640     F_INSERT,			/* ' */
641     F_INSERT,			/* ( */
642     F_INSERT,			/* ) */
643     F_INSERT,			/* * */
644     F_INSERT,			/* + */
645     F_INSERT,			/* , */
646     F_INSERT,			/* - */
647     F_INSERT,			/* . */
648     F_INSERT,			/* / */
649     F_INSERT,			/* 0 */
650     F_INSERT,			/* 1 */
651     F_INSERT,			/* 2 */
652     F_INSERT,			/* 3 */
653     F_INSERT,			/* 4 */
654     F_INSERT,			/* 5 */
655     F_INSERT,			/* 6 */
656     F_INSERT,			/* 7 */
657     F_INSERT,			/* 8 */
658     F_INSERT,			/* 9 */
659     F_INSERT,			/* : */
660     F_INSERT,			/* ; */
661     F_INSERT,			/* < */
662     F_INSERT,			/* = */
663     F_INSERT,			/* > */
664     F_INSERT,			/* ? */
665     F_INSERT,			/* @ */
666     F_INSERT,			/* A */
667     F_INSERT,			/* B */
668     F_INSERT,			/* C */
669     F_INSERT,			/* D */
670     F_INSERT,			/* E */
671     F_INSERT,			/* F */
672     F_INSERT,			/* G */
673     F_INSERT,			/* H */
674     F_INSERT,			/* I */
675     F_INSERT,			/* J */
676     F_INSERT,			/* K */
677     F_INSERT,			/* L */
678     F_INSERT,			/* M */
679     F_INSERT,			/* N */
680     F_INSERT,			/* O */
681     F_INSERT,			/* P */
682     F_INSERT,			/* Q */
683     F_INSERT,			/* R */
684     F_INSERT,			/* S */
685     F_INSERT,			/* T */
686     F_INSERT,			/* U */
687     F_INSERT,			/* V */
688     F_INSERT,			/* W */
689     F_INSERT,			/* X */
690     F_INSERT,			/* Y */
691     F_INSERT,			/* Z */
692     F_INSERT,			/* [ */
693     F_INSERT,			/* \ */
694     F_INSERT,			/* ] */
695     F_INSERT,			/* ^ */
696     F_INSERT,			/* _ */
697     F_INSERT,			/* ` */
698     F_INSERT,			/* a */
699     F_INSERT,			/* b */
700     F_INSERT,			/* c */
701     F_INSERT,			/* d */
702     F_INSERT,			/* e */
703     F_INSERT,			/* f */
704     F_INSERT,			/* g */
705     F_INSERT,			/* h */
706     F_INSERT,			/* i */
707     F_INSERT,			/* j */
708     F_INSERT,			/* k */
709     F_INSERT,			/* l */
710     F_INSERT,			/* m */
711     F_INSERT,			/* n */
712     F_INSERT,			/* o */
713     F_INSERT,			/* p */
714     F_INSERT,			/* q */
715     F_INSERT,			/* r */
716     F_INSERT,			/* s */
717     F_INSERT,			/* t */
718     F_INSERT,			/* u */
719     F_INSERT,			/* v */
720     F_INSERT,			/* w */
721     F_INSERT,			/* x */
722     F_INSERT,			/* y */
723     F_INSERT,			/* z */
724     F_INSERT,			/* { */
725     F_INSERT,			/* | */
726     F_INSERT,			/* } */
727     F_INSERT,			/* ~ */
728     F_DELPREV,			/* ^? */
729     F_UNASSIGNED,		/* M-^@ */
730     F_UNASSIGNED,		/* M-^A */
731     F_UNASSIGNED,		/* M-^B */
732     F_UNASSIGNED,		/* M-^C */
733     F_UNASSIGNED,		/* M-^D */
734     F_UNASSIGNED,		/* M-^E */
735     F_UNASSIGNED,		/* M-^F */
736     F_UNASSIGNED,		/* M-^G */
737     F_UNASSIGNED,		/* M-^H */
738     F_UNASSIGNED,		/* M-^I */
739     F_UNASSIGNED,		/* M-^J */
740     F_UNASSIGNED,		/* M-^K */
741     F_UNASSIGNED,		/* M-^L */
742     F_UNASSIGNED,		/* M-^M */
743     F_UNASSIGNED,		/* M-^N */
744     F_UNASSIGNED,		/* M-^O */
745     F_UNASSIGNED,		/* M-^P */
746     F_UNASSIGNED,		/* M-^Q */
747     F_UNASSIGNED,		/* M-^R */
748     F_UNASSIGNED,		/* M-^S */
749     F_UNASSIGNED,		/* M-^T */
750     F_UNASSIGNED,		/* M-^U */
751     F_UNASSIGNED,		/* M-^V */
752     F_UNASSIGNED,		/* M-^W */
753     F_UNASSIGNED,		/* M-^X */
754     F_UNASSIGNED,		/* M-^Y */
755     F_UNASSIGNED,		/* M-^Z */
756     F_UNASSIGNED,		/* M-^[ */
757     F_UNASSIGNED,		/* M-^\ */
758     F_UNASSIGNED,		/* M-^] */
759     F_UNASSIGNED,		/* M-^^ */
760     F_UNASSIGNED,		/* M-^_ */
761     F_UNASSIGNED,		/* M-SPACE */
762     F_UNASSIGNED,		/* M-! */
763     F_UNASSIGNED,		/* M-" */
764     F_UNASSIGNED,		/* M-# */
765     F_UNASSIGNED,		/* M-$ */
766     F_UNASSIGNED,		/* M-% */
767     F_UNASSIGNED,		/* M-& */
768     F_UNASSIGNED,		/* M-' */
769     F_UNASSIGNED,		/* M-( */
770     F_UNASSIGNED,		/* M-) */
771     F_UNASSIGNED,		/* M-* */
772     F_UNASSIGNED,		/* M-+ */
773     F_UNASSIGNED,		/* M-, */
774     F_UNASSIGNED,		/* M-- */
775     F_UNASSIGNED,		/* M-. */
776     F_UNASSIGNED,		/* M-/ */
777     F_UNASSIGNED,		/* M-0 */
778     F_UNASSIGNED,		/* M-1 */
779     F_UNASSIGNED,		/* M-2 */
780     F_UNASSIGNED,		/* M-3 */
781     F_UNASSIGNED,		/* M-4 */
782     F_UNASSIGNED,		/* M-5 */
783     F_UNASSIGNED,		/* M-6 */
784     F_UNASSIGNED,		/* M-7 */
785     F_UNASSIGNED,		/* M-8 */
786     F_UNASSIGNED,		/* M-9 */
787     F_UNASSIGNED,		/* M-: */
788     F_UNASSIGNED,		/* M-; */
789     F_UNASSIGNED,		/* M-< */
790     F_UNASSIGNED,		/* M-= */
791     F_UNASSIGNED,		/* M-> */
792     F_UNASSIGNED,		/* M-? */
793     F_UNASSIGNED,		/* M-@ */
794     F_UNASSIGNED,		/* M-A */
795     F_UNASSIGNED,		/* M-B */
796     F_UNASSIGNED,		/* M-C */
797     F_UNASSIGNED,		/* M-D */
798     F_UNASSIGNED,		/* M-E */
799     F_UNASSIGNED,		/* M-F */
800     F_UNASSIGNED,		/* M-G */
801     F_UNASSIGNED,		/* M-H */
802     F_UNASSIGNED,		/* M-I */
803     F_UNASSIGNED,		/* M-J */
804     F_UNASSIGNED,		/* M-K */
805     F_UNASSIGNED,		/* M-L */
806     F_UNASSIGNED,		/* M-M */
807     F_UNASSIGNED,		/* M-N */
808     F_UNASSIGNED,		/* M-O */
809     F_UNASSIGNED,		/* M-P */
810     F_UNASSIGNED,		/* M-Q */
811     F_UNASSIGNED,		/* M-R */
812     F_UNASSIGNED,		/* M-S */
813     F_UNASSIGNED,		/* M-T */
814     F_UNASSIGNED,		/* M-U */
815     F_UNASSIGNED,		/* M-V */
816     F_UNASSIGNED,		/* M-W */
817     F_UNASSIGNED,		/* M-X */
818     F_UNASSIGNED,		/* M-Y */
819     F_UNASSIGNED,		/* M-Z */
820     F_UNASSIGNED,		/* M-[ */
821     F_UNASSIGNED,		/* M-\ */
822     F_UNASSIGNED,		/* M-] */
823     F_UNASSIGNED,		/* M-^ */
824     F_UNASSIGNED,		/* M-_ */
825     F_UNASSIGNED,		/* M-` */
826     F_UNASSIGNED,		/* M-a */
827     F_UNASSIGNED,		/* M-b */
828     F_UNASSIGNED,		/* M-c */
829     F_UNASSIGNED,		/* M-d */
830     F_UNASSIGNED,		/* M-e */
831     F_UNASSIGNED,		/* M-f */
832     F_UNASSIGNED,		/* M-g */
833     F_UNASSIGNED,		/* M-h */
834     F_UNASSIGNED,		/* M-i */
835     F_UNASSIGNED,		/* M-j */
836     F_UNASSIGNED,		/* M-k */
837     F_UNASSIGNED,		/* M-l */
838     F_UNASSIGNED,		/* M-m */
839     F_UNASSIGNED,		/* M-n */
840     F_UNASSIGNED,		/* M-o */
841     F_UNASSIGNED,		/* M-p */
842     F_UNASSIGNED,		/* M-q */
843     F_UNASSIGNED,		/* M-r */
844     F_UNASSIGNED,		/* M-s */
845     F_UNASSIGNED,		/* M-t */
846     F_UNASSIGNED,		/* M-u */
847     F_UNASSIGNED,		/* M-v */
848     F_UNASSIGNED,		/* M-w */
849     F_UNASSIGNED,		/* M-x */
850     F_UNASSIGNED,		/* M-y */
851     F_UNASSIGNED,		/* M-z */
852     F_UNASSIGNED,		/* M-{ */
853     F_UNASSIGNED,		/* M-| */
854     F_UNASSIGNED,		/* M-} */
855     F_UNASSIGNED,		/* M-~ */
856     F_UNASSIGNED		/* M-^? */
857 };
858 
859 KEYCMD  CcViCmdMap[] = {
860     F_UNASSIGNED,		/* ^@ */
861     F_TOBEG,			/* ^A */
862     F_UNASSIGNED,		/* ^B */
863     F_TTY_INT,			/* ^C */
864     F_LIST_CHOICES,		/* ^D */
865     F_TOEND,			/* ^E */
866     F_UNASSIGNED,		/* ^F */
867     F_LIST_GLOB,		/* ^G */
868     F_CHARBACK,			/* ^H */
869     V_CM_COMPLETE,		/* ^I */
870     F_NEWLINE,			/* ^J */
871     F_KILLEND,			/* ^K */
872     F_CLEARDISP,		/* ^L */
873     F_NEWLINE,			/* ^M */
874     F_DOWN_HIST,		/* ^N */
875     F_TTY_FLUSHO,		/* ^O */
876     F_UP_HIST,			/* ^P */
877     F_TTY_STARTO,		/* ^Q */
878     F_REDISP,			/* ^R */
879     F_TTY_STOPO,		/* ^S */
880     F_UNASSIGNED,		/* ^T */
881     F_KILLBEG,			/* ^U */
882     F_UNASSIGNED,		/* ^V */
883     F_DELWORDPREV,		/* ^W */
884     F_EXPAND,			/* ^X */
885     F_UNASSIGNED,		/* ^Y */
886     F_UNASSIGNED,		/* ^Z */
887     F_METANEXT,			/* ^[ */
888     F_TTY_QUIT,			/* ^\ */
889     F_UNASSIGNED,		/* ^] */
890     F_UNASSIGNED,		/* ^^ */
891     F_UNASSIGNED,		/* ^_ */
892     F_CHARFWD,			/* SPACE */
893     F_EXPAND_HISTORY,		/* ! */
894     F_UNASSIGNED,		/* " */
895     F_UNASSIGNED,		/* # */
896     F_TOEND,			/* $ */
897     F_UNASSIGNED,		/* % */
898     F_UNASSIGNED,		/* & */
899     F_UNASSIGNED,		/* ' */
900     F_UNASSIGNED,		/* ( */
901     F_UNASSIGNED,		/* ) */
902     F_EXPAND_GLOB,		/* * */
903     F_DOWN_HIST,		/* + */
904     V_RCHAR_BACK,		/* , */
905     F_UP_HIST,			/* - */
906     F_UNASSIGNED,		/* . */
907     V_DSH_META,			/* / */
908     V_ZERO,			/* 0 */
909     F_ARGDIGIT,			/* 1 */
910     F_ARGDIGIT,			/* 2 */
911     F_ARGDIGIT,			/* 3 */
912     F_ARGDIGIT,			/* 4 */
913     F_ARGDIGIT,			/* 5 */
914     F_ARGDIGIT,			/* 6 */
915     F_ARGDIGIT,			/* 7 */
916     F_ARGDIGIT,			/* 8 */
917     F_ARGDIGIT,			/* 9 */
918     F_UNASSIGNED,		/* : */
919     V_RCHAR_FWD,		/* ; */
920     F_UNASSIGNED,		/* < */
921     F_UNASSIGNED,		/* = */
922     F_UNASSIGNED,		/* > */
923     V_USH_META,			/* ? */
924     F_UNASSIGNED,		/* @ */
925     V_ADDEND,			/* A */
926     V_WORDBACK,			/* B */
927     V_CHGTOEND,			/* C */
928     F_KILLEND,			/* D */
929     V_ENDWORD,			/* E */
930     V_CHAR_BACK,		/* F */
931     F_UNASSIGNED,		/* G */
932     F_UNASSIGNED,		/* H */
933     V_INSBEG,			/* I */
934     F_DOWN_SEARCH_HIST,		/* J */
935     F_UP_SEARCH_HIST,		/* K */
936     F_UNASSIGNED,		/* L */
937     F_UNASSIGNED,		/* M */
938     V_RSRCH_BACK,		/* N */
939     F_XKEY,			/* O */
940     F_UNASSIGNED,		/* P */
941     F_UNASSIGNED,		/* Q */
942     V_REPLMODE,			/* R */
943     V_SUBSTLINE,		/* S */
944     V_CHARTO_BACK,		/* T */
945     F_UNASSIGNED,		/* U */
946     F_EXPAND_VARS,		/* V */
947     V_WORDFWD,			/* W */
948     F_DELPREV,			/* X */
949     F_UNASSIGNED,		/* Y */
950     F_UNASSIGNED,		/* Z */
951     F_XKEY,			/* [ */
952     F_UNASSIGNED,		/* \ */
953     F_UNASSIGNED,		/* ] */
954     F_TOBEG,			/* ^ */
955     F_UNASSIGNED,		/* _ */
956     F_UNASSIGNED,		/* ` */
957     V_ADD,			/* a */
958     F_WORDBACK,			/* b */
959     V_CHGMETA,			/* c */
960     V_DELMETA,			/* d */
961     V_EWORD,			/* e */
962     V_CHAR_FWD,			/* f */
963     F_UNASSIGNED,		/* g */
964     F_CHARBACK,			/* h */
965     V_INSERT,			/* i */
966     F_DOWN_HIST,		/* j */
967     F_UP_HIST,			/* k */
968     F_CHARFWD,			/* l */
969     F_UNASSIGNED,		/* m */
970     V_RSRCH_FWD,		/* n */
971     F_UNASSIGNED,		/* o */
972     F_UNASSIGNED,		/* p */
973     F_UNASSIGNED,		/* q */
974     V_REPLONE,			/* r */
975     V_SUBSTCHAR,		/* s */
976     V_CHARTO_FWD,		/* t */
977     V_UNDO,			/* u */
978     F_EXPAND_VARS,		/* v */
979     V_WORDBEGNEXT,		/* w */
980     F_DELNEXT_EOF,		/* x */
981     F_UNASSIGNED,		/* y */
982     F_UNASSIGNED,		/* z */
983     F_UNASSIGNED,		/* { */
984     F_UNASSIGNED,		/* | */
985     F_UNASSIGNED,		/* } */
986     V_CHGCASE,			/* ~ */
987     F_DELPREV,			/* ^? */
988     F_UNASSIGNED,		/* M-^@ */
989     F_UNASSIGNED,		/* M-^A */
990     F_UNASSIGNED,		/* M-^B */
991     F_UNASSIGNED,		/* M-^C */
992     F_UNASSIGNED,		/* M-^D */
993     F_UNASSIGNED,		/* M-^E */
994     F_UNASSIGNED,		/* M-^F */
995     F_UNASSIGNED,		/* M-^G */
996     F_UNASSIGNED,		/* M-^H */
997     F_UNASSIGNED,		/* M-^I */
998     F_UNASSIGNED,		/* M-^J */
999     F_UNASSIGNED,		/* M-^K */
1000     F_UNASSIGNED,		/* M-^L */
1001     F_UNASSIGNED,		/* M-^M */
1002     F_UNASSIGNED,		/* M-^N */
1003     F_UNASSIGNED,		/* M-^O */
1004     F_UNASSIGNED,		/* M-^P */
1005     F_UNASSIGNED,		/* M-^Q */
1006     F_UNASSIGNED,		/* M-^R */
1007     F_UNASSIGNED,		/* M-^S */
1008     F_UNASSIGNED,		/* M-^T */
1009     F_UNASSIGNED,		/* M-^U */
1010     F_UNASSIGNED,		/* M-^V */
1011     F_UNASSIGNED,		/* M-^W */
1012     F_UNASSIGNED,		/* M-^X */
1013     F_UNASSIGNED,		/* M-^Y */
1014     F_UNASSIGNED,		/* M-^Z */
1015     F_UNASSIGNED,		/* M-^[ */
1016     F_UNASSIGNED,		/* M-^\ */
1017     F_UNASSIGNED,		/* M-^] */
1018     F_UNASSIGNED,		/* M-^^ */
1019     F_UNASSIGNED,		/* M-^_ */
1020     F_UNASSIGNED,		/* M-SPACE */
1021     F_UNASSIGNED,		/* M-! */
1022     F_UNASSIGNED,		/* M-" */
1023     F_UNASSIGNED,		/* M-# */
1024     F_UNASSIGNED,		/* M-$ */
1025     F_UNASSIGNED,		/* M-% */
1026     F_UNASSIGNED,		/* M-& */
1027     F_UNASSIGNED,		/* M-' */
1028     F_UNASSIGNED,		/* M-( */
1029     F_UNASSIGNED,		/* M-) */
1030     F_UNASSIGNED,		/* M-* */
1031     F_UNASSIGNED,		/* M-+ */
1032     F_UNASSIGNED,		/* M-, */
1033     F_UNASSIGNED,		/* M-- */
1034     F_UNASSIGNED,		/* M-. */
1035     F_UNASSIGNED,		/* M-/ */
1036     F_UNASSIGNED,		/* M-0 */
1037     F_UNASSIGNED,		/* M-1 */
1038     F_UNASSIGNED,		/* M-2 */
1039     F_UNASSIGNED,		/* M-3 */
1040     F_UNASSIGNED,		/* M-4 */
1041     F_UNASSIGNED,		/* M-5 */
1042     F_UNASSIGNED,		/* M-6 */
1043     F_UNASSIGNED,		/* M-7 */
1044     F_UNASSIGNED,		/* M-8 */
1045     F_UNASSIGNED,		/* M-9 */
1046     F_UNASSIGNED,		/* M-: */
1047     F_UNASSIGNED,		/* M-; */
1048     F_UNASSIGNED,		/* M-< */
1049     F_UNASSIGNED,		/* M-= */
1050     F_UNASSIGNED,		/* M-> */
1051     F_HELPME,			/* M-? */
1052     F_UNASSIGNED,		/* M-@ */
1053     F_UNASSIGNED,		/* M-A */
1054     F_UNASSIGNED,		/* M-B */
1055     F_UNASSIGNED,		/* M-C */
1056     F_UNASSIGNED,		/* M-D */
1057     F_UNASSIGNED,		/* M-E */
1058     F_UNASSIGNED,		/* M-F */
1059     F_UNASSIGNED,		/* M-G */
1060     F_UNASSIGNED,		/* M-H */
1061     F_UNASSIGNED,		/* M-I */
1062     F_UNASSIGNED,		/* M-J */
1063     F_UNASSIGNED,		/* M-K */
1064     F_UNASSIGNED,		/* M-L */
1065     F_UNASSIGNED,		/* M-M */
1066     F_UNASSIGNED,		/* M-N */
1067     F_XKEY,			/* M-O *//* extended key esc PWP Mar 88 */
1068     F_UNASSIGNED,		/* M-P */
1069     F_UNASSIGNED,		/* M-Q */
1070     F_UNASSIGNED,		/* M-R */
1071     F_UNASSIGNED,		/* M-S */
1072     F_UNASSIGNED,		/* M-T */
1073     F_UNASSIGNED,		/* M-U */
1074     F_UNASSIGNED,		/* M-V */
1075     F_UNASSIGNED,		/* M-W */
1076     F_UNASSIGNED,		/* M-X */
1077     F_UNASSIGNED,		/* M-Y */
1078     F_UNASSIGNED,		/* M-Z */
1079     F_XKEY,			/* M-[ *//* extended key esc -mf Oct 87 */
1080     F_UNASSIGNED,		/* M-\ */
1081     F_UNASSIGNED,		/* M-] */
1082     F_UNASSIGNED,		/* M-^ */
1083     F_UNASSIGNED,		/* M-_ */
1084     F_UNASSIGNED,		/* M-` */
1085     F_UNASSIGNED,		/* M-a */
1086     F_UNASSIGNED,		/* M-b */
1087     F_UNASSIGNED,		/* M-c */
1088     F_UNASSIGNED,		/* M-d */
1089     F_UNASSIGNED,		/* M-e */
1090     F_UNASSIGNED,		/* M-f */
1091     F_UNASSIGNED,		/* M-g */
1092     F_UNASSIGNED,		/* M-h */
1093     F_UNASSIGNED,		/* M-i */
1094     F_UNASSIGNED,		/* M-j */
1095     F_UNASSIGNED,		/* M-k */
1096     F_UNASSIGNED,		/* M-l */
1097     F_UNASSIGNED,		/* M-m */
1098     F_UNASSIGNED,		/* M-n */
1099     F_UNASSIGNED,		/* M-o */
1100     F_UNASSIGNED,		/* M-p */
1101     F_UNASSIGNED,		/* M-q */
1102     F_UNASSIGNED,		/* M-r */
1103     F_UNASSIGNED,		/* M-s */
1104     F_UNASSIGNED,		/* M-t */
1105     F_UNASSIGNED,		/* M-u */
1106     F_UNASSIGNED,		/* M-v */
1107     F_UNASSIGNED,		/* M-w */
1108     F_UNASSIGNED,		/* M-x */
1109     F_UNASSIGNED,		/* M-y */
1110     F_UNASSIGNED,		/* M-z */
1111     F_UNASSIGNED,		/* M-{ */
1112     F_UNASSIGNED,		/* M-| */
1113     F_UNASSIGNED,		/* M-} */
1114     F_UNASSIGNED,		/* M-~ */
1115     F_UNASSIGNED		/* M-^? */
1116 };
1117 #endif /* WINNT */
1118 
1119 
1120 void
1121 editinit()
1122 {
1123     struct KeyFuncs *f;
1124 
1125 #if defined(NLS_CATALOGS) || defined(WINNT)
1126     int i;
1127 
1128     for (i = 0; i < F_NUM_FUNCNAMES; i++)
1129 	xfree((ptr_t) FuncNames[i].desc);
1130 #endif
1131 
1132     f = FuncNames;
1133     f->name = "backward-char";
1134     f->func = F_CHARBACK;
1135     f->desc = CSAVS(3, 1, "Move back a character");
1136 
1137     f++;
1138     f->name = "backward-delete-char";
1139     f->func = F_DELPREV;
1140     f->desc = CSAVS(3, 2, "Delete the character behind cursor");
1141 
1142     f++;
1143     f->name = "backward-delete-word";
1144     f->func = F_DELWORDPREV;
1145     f->desc = CSAVS(3, 3,
1146 	"Cut from beginning of current word to cursor - saved in cut buffer");
1147 
1148     f++;
1149     f->name = "backward-kill-line";
1150     f->func = F_KILLBEG;
1151     f->desc = CSAVS(3, 4,
1152 	"Cut from beginning of line to cursor - save in cut buffer");
1153 
1154     f++;
1155     f->name = "backward-word";
1156     f->func = F_WORDBACK;
1157     f->desc = CSAVS(3, 5, "Move to beginning of current word");
1158 
1159     f++;
1160     f->name = "beginning-of-line";
1161     f->func = F_TOBEG;
1162     f->desc = CSAVS(3, 6, "Move to beginning of line");
1163 
1164     f++;
1165     f->name = "capitalize-word";
1166     f->func = F_CASECAPITAL;
1167     f->desc = CSAVS(3, 7,
1168 	"Capitalize the characters from cursor to end of current word");
1169 
1170     f++;
1171     f->name = "change-case";
1172     f->func = V_CHGCASE;
1173     f->desc = CSAVS(3, 8,
1174 	"Vi change case of character under cursor and advance one character");
1175 
1176     f++;
1177     f->name = "change-till-end-of-line";
1178     f->func = V_CHGTOEND;	/* backward compat. */
1179     f->desc = CSAVS(3, 9, "Vi change to end of line");
1180 
1181     f++;
1182     f->name = "clear-screen";
1183     f->func = F_CLEARDISP;
1184     f->desc = CSAVS(3, 10, "Clear screen leaving current line on top");
1185 
1186     f++;
1187     f->name = "complete-word";
1188     f->func = F_COMPLETE;
1189     f->desc = CSAVS(3, 11, "Complete current word");
1190 
1191     f++;
1192     f->name = "complete-word-fwd";
1193     f->func = F_COMPLETE_FWD;
1194     f->desc = CSAVS(3, 12, "Tab forward through files");
1195 
1196     f++;
1197     f->name = "complete-word-back";
1198     f->func = F_COMPLETE_BACK;
1199     f->desc = CSAVS(3, 13, "Tab backward through files");
1200 
1201     f++;
1202     f->name = "complete-word-raw";
1203     f->func = F_COMPLETE_ALL;
1204     f->desc = CSAVS(3, 14,
1205 	"Complete current word ignoring programmable completions");
1206 
1207     f++;
1208     f->name = "copy-prev-word";
1209     f->func = F_COPYPREV;
1210     f->desc = CSAVS(3, 15, "Copy current word to cursor");
1211 
1212     f++;
1213     f->name = "copy-region-as-kill";
1214     f->func = F_COPYREGION;
1215     f->desc = CSAVS(3, 16, "Copy area between mark and cursor to cut buffer");
1216 
1217     f++;
1218     f->name = "dabbrev-expand";
1219     f->func = F_DABBREV_EXPAND;
1220     f->desc = CSAVS(3, 17,
1221 		    "Expand to preceding word for which this is a prefix");
1222 
1223     f++;
1224     f->name = "delete-char";
1225     f->func = F_DELNEXT;
1226     f->desc = CSAVS(3, 18, "Delete character under cursor");
1227 
1228     f++;
1229     f->name = "delete-char-or-eof";
1230     f->func = F_DELNEXT_EOF;
1231     f->desc = CSAVS(3, 19,
1232 	"Delete character under cursor or signal end of file on an empty line");
1233 
1234     f++;
1235     f->name = "delete-char-or-list";
1236     f->func = F_DELNEXT_LIST;
1237     f->desc = CSAVS(3, 20,
1238 	"Delete character under cursor or list completions if at end of line");
1239 
1240     f++;
1241     f->name = "delete-char-or-list-or-eof";
1242     f->func = F_DELNEXT_LIST_EOF;
1243     f->desc = CSAVS(3, 21,
1244     "Delete character under cursor, list completions or signal end of file");
1245 
1246     f++;
1247     f->name = "delete-word";
1248     f->func = F_DELWORDNEXT;
1249     f->desc = CSAVS(3, 22,
1250 	"Cut from cursor to end of current word - save in cut buffer");
1251 
1252     f++;
1253     f->name = "digit";
1254     f->func = F_DIGIT;
1255     f->desc = CSAVS(3, 23, "Adds to argument if started or enters digit");
1256 
1257     f++;
1258     f->name = "digit-argument";
1259     f->func = F_ARGDIGIT;
1260     f->desc = CSAVS(3, 24, "Digit that starts argument");
1261 
1262     f++;
1263     f->name = "down-history";
1264     f->func = F_DOWN_HIST;
1265     f->desc = CSAVS(3, 25, "Move to next history line");
1266 
1267     f++;
1268     f->name = "downcase-word";
1269     f->func = F_CASELOWER;
1270     f->desc = CSAVS(3, 26,
1271 	"Lowercase the characters from cursor to end of current word");
1272 
1273     f++;
1274     f->name = "end-of-file";
1275     f->func = F_SEND_EOF;
1276     f->desc = CSAVS(3, 27, "Indicate end of file");
1277 
1278     f++;
1279     f->name = "end-of-line";
1280     f->func = F_TOEND;
1281     f->desc = CSAVS(3, 28, "Move cursor to end of line");
1282 
1283     f++;
1284     f->name = "exchange-point-and-mark";
1285     f->func = F_EXCHANGE_MARK;
1286     f->desc = CSAVS(3, 29, "Exchange the cursor and mark");
1287 
1288     f++;
1289     f->name = "expand-glob";
1290     f->func = F_EXPAND_GLOB;
1291     f->desc = CSAVS(3, 30, "Expand file name wildcards");
1292 
1293     f++;
1294     f->name = "expand-history";
1295     f->func = F_EXPAND_HISTORY;
1296     f->desc = CSAVS(3, 31, "Expand history escapes");
1297 
1298     f++;
1299     f->name = "expand-line";
1300     f->func = F_EXPAND;
1301     f->desc = CSAVS(3, 32, "Expand the history escapes in a line");
1302 
1303     f++;
1304     f->name = "expand-variables";
1305     f->func = F_EXPAND_VARS;
1306     f->desc = CSAVS(3, 33, "Expand variables");
1307 
1308     f++;
1309     f->name = "forward-char";
1310     f->func = F_CHARFWD;
1311     f->desc = CSAVS(3, 34, "Move forward one character");
1312 
1313     f++;
1314     f->name = "forward-word";
1315     f->func = F_WORDFWD;
1316     f->desc = CSAVS(3, 35, "Move forward to end of current word");
1317 
1318     f++;
1319     f->name = "gosmacs-transpose-chars";
1320     f->func = F_GCHARSWITCH;
1321     f->desc = CSAVS(3, 36, "Exchange the two characters before the cursor");
1322 
1323     f++;
1324     f->name = "history-search-backward";
1325     f->func = F_UP_SEARCH_HIST;
1326     f->desc = CSAVS(3, 37,
1327 	"Search in history backward for line beginning as current");
1328 
1329     f++;
1330     f->name = "history-search-forward";
1331     f->func = F_DOWN_SEARCH_HIST;
1332     f->desc = CSAVS(3, 38,
1333 	"Search in history forward for line beginning as current");
1334 
1335     f++;
1336     f->name = "insert-last-word";
1337     f->func = F_LAST_ITEM;
1338     f->desc = CSAVS(3, 39, "Insert last item of previous command");
1339 
1340     f++;
1341     f->name = "i-search-fwd";
1342     f->func = F_INC_FWD;
1343     f->desc = CSAVS(3, 40, "Incremental search forward");
1344 
1345     f++;
1346     f->name = "i-search-back";
1347     f->func = F_INC_BACK;
1348     f->desc = CSAVS(3, 41, "Incremental search backward");
1349 
1350     f++;
1351     f->name = "keyboard-quit";
1352     f->func = F_STARTOVER;
1353     f->desc = CSAVS(3, 42, "Clear line");
1354 
1355     f++;
1356     f->name = "kill-line";
1357     f->func = F_KILLEND;
1358     f->desc = CSAVS(3, 43, "Cut to end of line and save in cut buffer");
1359 
1360     f++;
1361     f->name = "kill-region";
1362     f->func = F_KILLREGION;
1363     f->desc = CSAVS(3, 44,
1364 	"Cut area between mark and cursor and save in cut buffer");
1365 
1366     f++;
1367     f->name = "kill-whole-line";
1368     f->func = F_KILLALL;
1369     f->desc = CSAVS(3, 45, "Cut the entire line and save in cut buffer");
1370 
1371     f++;
1372     f->name = "list-choices";
1373     f->func = F_LIST_CHOICES;
1374     f->desc = CSAVS(3, 46, "List choices for completion");
1375 
1376     f++;
1377     f->name = "list-choices-raw";
1378     f->func = F_LIST_ALL;
1379     f->desc = CSAVS(3, 47,
1380 	"List choices for completion overriding programmable completion");
1381 
1382     f++;
1383     f->name = "list-glob";
1384     f->func = F_LIST_GLOB;
1385     f->desc = CSAVS(3, 48, "List file name wildcard matches");
1386 
1387     f++;
1388     f->name = "list-or-eof";
1389     f->func = F_LIST_EOF;
1390     f->desc = CSAVS(3, 49,
1391 	"List choices for completion or indicate end of file if empty line");
1392 
1393     f++;
1394     f->name = "load-average";
1395     f->func = F_LOAD_AVERAGE;
1396     f->desc = CSAVS(3, 50, "Display load average and current process status");
1397 
1398     f++;
1399     f->name = "magic-space";
1400     f->func = F_MAGIC_SPACE;
1401     f->desc = CSAVS(3, 51, "Expand history escapes and insert a space");
1402 
1403     f++;
1404     f->name = "newline";
1405     f->func = F_NEWLINE;
1406     f->desc = CSAVS(3, 52, "Execute command");
1407 
1408     f++;
1409     f->name = "normalize-path";
1410     f->func = F_PATH_NORM;
1411     f->desc = CSAVS(3, 53,
1412 		    "Expand pathnames, eliminating leading .'s and ..'s");
1413 
1414     f++;
1415     f->name = "normalize-command";
1416     f->func = F_COMMAND_NORM;
1417     f->desc = CSAVS(3, 54,
1418 		    "Expand commands to the resulting pathname or alias");
1419 
1420     f++;
1421     f->name = "overwrite-mode";
1422     f->func = F_INSOVR;
1423     f->desc = CSAVS(3, 55,
1424 		    "Switch from insert to overwrite mode or vice versa");
1425 
1426     f++;
1427     f->name = "prefix-meta";
1428     f->func = F_METANEXT;
1429     f->desc = CSAVS(3, 56, "Add 8th bit to next character typed");
1430 
1431     f++;
1432     f->name = "quoted-insert";
1433     f->func = F_QUOTE;
1434     f->desc = CSAVS(3, 57, "Add the next character typed to the line verbatim");
1435 
1436     f++;
1437     f->name = "redisplay";
1438     f->func = F_REDISP;
1439     f->desc = CSAVS(3, 58, "Redisplay everything");
1440 
1441     f++;
1442     f->name = "run-fg-editor";
1443     f->func = F_RUN_FG_EDITOR;
1444     f->desc = CSAVS(3, 59, "Restart stopped editor");
1445 
1446     f++;
1447     f->name = "run-help";
1448     f->func = F_HELPME;
1449     f->desc = CSAVS(3, 60, "Look for help on current command");
1450 
1451     f++;
1452     f->name = "self-insert-command";
1453     f->func = F_INSERT;
1454     f->desc = CSAVS(3, 61, "This character is added to the line");
1455 
1456     f++;
1457     f->name = "sequence-lead-in";
1458     f->func = F_XKEY;
1459     f->desc = CSAVS(3, 62,
1460 	"This character is the first in a character sequence");
1461 
1462     f++;
1463     f->name = "set-mark-command";
1464     f->func = F_SET_MARK;
1465     f->desc = CSAVS(3, 63, "Set the mark at cursor");
1466 
1467     f++;
1468     f->name = "spell-word";
1469     f->func = F_CORRECT;
1470     f->desc = CSAVS(3, 64, "Correct the spelling of current word");
1471 
1472     f++;
1473     f->name = "spell-line";
1474     f->func = F_CORRECT_L;
1475     f->desc = CSAVS(3, 65, "Correct the spelling of entire line");
1476 
1477     f++;
1478     f->name = "stuff-char";
1479     f->func = F_STUFF_CHAR;
1480     f->desc = CSAVS(3, 66, "Send character to tty in cooked mode");
1481 
1482     f++;
1483     f->name = "toggle-literal-history";
1484     f->func = F_TOGGLE_HIST;
1485     f->desc = CSAVS(3, 67,
1486 	"Toggle between literal and lexical current history line");
1487 
1488     f++;
1489     f->name = "transpose-chars";
1490     f->func = F_CHARSWITCH;
1491     f->desc = CSAVS(3, 68,
1492 	"Exchange the character to the left of the cursor with the one under");
1493 
1494     f++;
1495     f->name = "transpose-gosling";
1496     f->func = F_GCHARSWITCH;
1497     f->desc = CSAVS(3, 69, "Exchange the two characters before the cursor");
1498 
1499     f++;
1500     f->name = "tty-dsusp";
1501     f->func = F_TTY_DSUSP;
1502     f->desc = CSAVS(3, 70, "Tty delayed suspend character");
1503 
1504     f++;
1505     f->name = "tty-flush-output";
1506     f->func = F_TTY_FLUSHO;
1507     f->desc = CSAVS(3, 71, "Tty flush output character");
1508 
1509     f++;
1510     f->name = "tty-sigintr";
1511     f->func = F_TTY_INT;
1512     f->desc = CSAVS(3, 72, "Tty interrupt character");
1513 
1514     f++;
1515     f->name = "tty-sigquit";
1516     f->func = F_TTY_QUIT;
1517     f->desc = CSAVS(3, 73, "Tty quit character");
1518 
1519     f++;
1520     f->name = "tty-sigtsusp";
1521     f->func = F_TTY_TSUSP;
1522     f->desc = CSAVS(3, 74, "Tty suspend character");
1523 
1524     f++;
1525     f->name = "tty-start-output";
1526     f->func = F_TTY_STARTO;
1527     f->desc = CSAVS(3, 75, "Tty allow output character");
1528 
1529     f++;
1530     f->name = "tty-stop-output";
1531     f->func = F_TTY_STOPO;
1532     f->desc = CSAVS(3, 76, "Tty disallow output character");
1533 
1534     f++;
1535     f->name = "undefined-key";
1536     f->func = F_UNASSIGNED;
1537     f->desc = CSAVS(3, 77, "Indicates unbound character");
1538 
1539     f++;
1540     f->name = "universal-argument";
1541     f->func = F_ARGFOUR;
1542     f->desc = CSAVS(3, 78, "Emacs universal argument (argument times 4)");
1543 
1544     f++;
1545     f->name = "up-history";
1546     f->func = F_UP_HIST;
1547     f->desc = CSAVS(3, 79, "Move to previous history line");
1548 
1549     f++;
1550     f->name = "upcase-word";
1551     f->func = F_CASEUPPER;
1552     f->desc = CSAVS(3, 80,
1553 	"Uppercase the characters from cursor to end of current word");
1554 
1555     f++;
1556     f->name = "vi-beginning-of-next-word";
1557     f->func = V_WORDBEGNEXT;
1558     f->desc = CSAVS(3, 81, "Vi goto the beginning of next word");
1559 
1560     f++;
1561     f->name = "vi-add";
1562     f->func = V_ADD;
1563     f->desc = CSAVS(3, 82, "Vi enter insert mode after the cursor");
1564 
1565     f++;
1566     f->name = "vi-add-at-eol";
1567     f->func = V_ADDEND;
1568     f->desc = CSAVS(3, 83, "Vi enter insert mode at end of line");
1569 
1570     f++;
1571     f->name = "vi-chg-case";
1572     f->func = V_CHGCASE;
1573     f->desc = CSAVS(3, 84,
1574 	"Vi change case of character under cursor and advance one character");
1575 
1576     f++;
1577     f->name = "vi-chg-meta";
1578     f->func = V_CHGMETA;
1579     f->desc = CSAVS(3, 85, "Vi change prefix command");
1580 
1581     f++;
1582     f->name = "vi-chg-to-eol";
1583     f->func = V_CHGTOEND;
1584     f->desc = CSAVS(3, 86, "Vi change to end of line");
1585 
1586     f++;
1587     f->name = "vi-cmd-mode";
1588     f->func = V_CMD_MODE;
1589     f->desc = CSAVS(3, 87,
1590 	"Enter vi command mode (use alternative key bindings)");
1591 
1592     f++;
1593     f->name = "vi-cmd-mode-complete";
1594     f->func = V_CM_COMPLETE;
1595     f->desc = CSAVS(3, 88, "Vi command mode complete current word");
1596 
1597     f++;
1598     f->name = "vi-delprev";
1599     f->func = V_DELPREV;
1600     f->desc = CSAVS(3, 89, "Vi move to previous character (backspace)");
1601 
1602     f++;
1603     f->name = "vi-delmeta";
1604     f->func = V_DELMETA;
1605     f->desc = CSAVS(3, 90, "Vi delete prefix command");
1606 
1607     f++;
1608     f->name = "vi-endword";
1609     f->func = V_ENDWORD;
1610     f->desc = CSAVS(3, 91,
1611 	"Vi move to the end of the current space delimited word");
1612 
1613     f++;
1614     f->name = "vi-eword";
1615     f->func = V_EWORD;
1616     f->desc = CSAVS(3, 92, "Vi move to the end of the current word");
1617 
1618     f++;
1619     f->name = "vi-char-back";
1620     f->func = V_CHAR_BACK;
1621     f->desc = CSAVS(3, 93, "Vi move to the character specified backward");
1622 
1623     f++;
1624     f->name = "vi-char-fwd";
1625     f->func = V_CHAR_FWD;
1626     f->desc = CSAVS(3, 94, "Vi move to the character specified forward");
1627 
1628     f++;
1629     f->name = "vi-charto-back";
1630     f->func = V_CHARTO_BACK;
1631     f->desc = CSAVS(3, 95, "Vi move up to the character specified backward");
1632 
1633     f++;
1634     f->name = "vi-charto-fwd";
1635     f->func = V_CHARTO_FWD;
1636     f->desc = CSAVS(3, 96, "Vi move up to the character specified forward");
1637 
1638     f++;
1639     f->name = "vi-insert";
1640     f->func = V_INSERT;
1641     f->desc = CSAVS(3, 97, "Enter vi insert mode");
1642 
1643     f++;
1644     f->name = "vi-insert-at-bol";
1645     f->func = V_INSBEG;
1646     f->desc = CSAVS(3, 98, "Enter vi insert mode at beginning of line");
1647 
1648     f++;
1649     f->name = "vi-repeat-char-fwd";
1650     f->func = V_RCHAR_FWD;
1651     f->desc = CSAVS(3, 99,
1652 	"Vi repeat current character search in the same search direction");
1653 
1654     f++;
1655     f->name = "vi-repeat-char-back";
1656     f->func = V_RCHAR_BACK;
1657     f->desc = CSAVS(3, 100,
1658 	"Vi repeat current character search in the opposite search direction");
1659 
1660     f++;
1661     f->name = "vi-repeat-search-fwd";
1662     f->func = V_RSRCH_FWD;
1663     f->desc = CSAVS(3, 101,
1664 	"Vi repeat current search in the same search direction");
1665 
1666     f++;
1667     f->name = "vi-repeat-search-back";
1668     f->func = V_RSRCH_BACK;
1669     f->desc = CSAVS(3, 102,
1670 	"Vi repeat current search in the opposite search direction");
1671 
1672     f++;
1673     f->name = "vi-replace-char";
1674     f->func = V_REPLONE;
1675     f->desc = CSAVS(3, 103,
1676 	"Vi replace character under the cursor with the next character typed");
1677 
1678     f++;
1679     f->name = "vi-replace-mode";
1680     f->func = V_REPLMODE;
1681     f->desc = CSAVS(3, 104, "Vi replace mode");
1682 
1683     f++;
1684     f->name = "vi-search-back";
1685     f->func = V_USH_META;
1686     f->desc = CSAVS(3, 105, "Vi search history backward");
1687 
1688     f++;
1689     f->name = "vi-search-fwd";
1690     f->func = V_DSH_META;
1691     f->desc = CSAVS(3, 106, "Vi search history forward");
1692 
1693     f++;
1694     f->name = "vi-substitute-char";
1695     f->func = V_SUBSTCHAR;
1696     f->desc = CSAVS(3, 107,
1697 	"Vi replace character under the cursor and enter insert mode");
1698 
1699     f++;
1700     f->name = "vi-substitute-line";
1701     f->func = V_SUBSTLINE;
1702     f->desc = CSAVS(3, 108, "Vi replace entire line");
1703 
1704     f++;
1705     f->name = "vi-word-back";
1706     f->func = V_WORDBACK;
1707     f->desc = CSAVS(3, 109, "Vi move to the previous word");
1708 
1709     f++;
1710     f->name = "vi-word-fwd";
1711     f->func = V_WORDFWD;
1712     f->desc = CSAVS(3, 110, "Vi move to the next word");
1713 
1714     f++;
1715     f->name = "vi-undo";
1716     f->func = V_UNDO;
1717     f->desc = CSAVS(3, 111, "Vi undo last change");
1718 
1719     f++;
1720     f->name = "vi-zero";
1721     f->func = V_ZERO;
1722     f->desc = CSAVS(3, 112, "Vi goto the beginning of line");
1723 
1724     f++;
1725     f->name = "which-command";
1726     f->func = F_WHICH;
1727     f->desc = CSAVS(3, 113, "Perform which of current command");
1728 
1729     f++;
1730     f->name = "yank";
1731     f->func = F_YANK_KILL;
1732     f->desc = CSAVS(3, 114, "Paste cut buffer at cursor position");
1733 
1734     f++;
1735     f->name = "e_copy_to_clipboard";
1736     f->func = F_COPY_CLIP;
1737     f->desc = CSAVS(3, 115, "(win32 only)Copy cut buffer to system clipboard");
1738     f++;
1739     f->name = "e_paste_from_clipboard";
1740     f->func = F_PASTE_CLIP;
1741     f->desc = CSAVS(3, 116, "(win32 only)Paste clipboard buffer at cursor position");
1742     f++;
1743     f->name = "e_dosify_next";
1744     f->func = F_DOSIFY_NEXT;
1745     f->desc = CSAVS(3, 117, "(win32 only)Convert each '/' in next word to '\\\\'");
1746     f++;
1747     f->name = "e_dosify_prev";
1748     f->func = F_DOSIFY_PREV;
1749     f->desc = CSAVS(3, 118, "(win32 only)Convert each '/' in previous word to '\\\\'");
1750 
1751     f++;
1752     f->name = NULL;
1753     f->func = 0;
1754     f->desc = NULL;
1755 
1756     f++;
1757     if (f - FuncNames != F_NUM_FUNCNAMES)
1758 	abort();
1759 }
1760 
1761 #ifdef DEBUG_EDIT
1762 void
1763 CheckMaps()
1764 {		/* check the size of the key maps */
1765     int     c1 = (NT_NUM_KEYS * sizeof(KEYCMD));
1766 
1767     if ((sizeof(CcKeyMap)) != c1)
1768 	xprintf("CcKeyMap should be %d entries, but is %d.\r\n",
1769 		NT_NUM_KEYS, sizeof(CcKeyMap) / sizeof(KEYCMD)));
1770 
1771     if ((sizeof(CcAltMap)) != c1)
1772 	xprintf("CcAltMap should be %d entries, but is %d.\r\n",
1773 		NT_NUM_KEYS, (sizeof(CcAltMap) / sizeof(KEYCMD)));
1774 
1775     if ((sizeof(CcEmacsMap)) != c1)
1776 	xprintf("CcEmacsMap should be %d entries, but is %d.\r\n",
1777 		NT_NUM_KEYS, (sizeof(CcEmacsMap) / sizeof(KEYCMD)));
1778 
1779     if ((sizeof(CcViMap)) != c1)
1780 	xprintf("CcViMap should be %d entries, but is %d.\r\n",
1781 		NT_NUM_KEYS, (sizeof(CcViMap) / sizeof(KEYCMD)));
1782 
1783     if ((sizeof(CcViCmdMap)) != c1)
1784 	xprintf("CcViCmdMap should be %d entries, but is %d.\r\n",
1785 		NT_NUM_KEYS, (sizeof(CcViCmdMap) / sizeof(KEYCMD)));
1786 }
1787 
1788 #endif
1789 
1790 bool    MapsAreInited = 0;
1791 bool    NLSMapsAreInited = 0;
1792 bool    NoNLSRebind;
1793 
1794 void
1795 ed_InitNLSMaps()
1796 {
1797     register int i;
1798 
1799     if (AsciiOnly)
1800 	return;
1801     if (NoNLSRebind)
1802 	return;
1803     for (i = 0200; i <= 0377; i++) {
1804 	if (Isprint(i)) {
1805 	    CcKeyMap[i] = F_INSERT;
1806 	}
1807     }
1808     NLSMapsAreInited = 1;
1809 }
1810 
1811 static void
1812 ed_InitMetaBindings()
1813 {
1814     Char    buf[3];
1815     int     i;
1816     CStr    cstr;
1817     KEYCMD *map;
1818 
1819     map = CcKeyMap;
1820     for (i = 0; i <= 0377 && CcKeyMap[i] != F_METANEXT; i++)
1821 	continue;
1822     if (i > 0377) {
1823 	for (i = 0; i <= 0377 && CcAltMap[i] != F_METANEXT; i++)
1824 	    continue;
1825 	if (i > 0377) {
1826 	    i = CTL_ESC('\033');
1827 	    if (VImode)
1828 		map = CcAltMap;
1829 	}
1830 	else {
1831 	    map = CcAltMap;
1832 	}
1833     }
1834     buf[0] = (Char) i;
1835     buf[2] = 0;
1836     cstr.buf = buf;
1837     cstr.len = 2;
1838     for (i = 0200; i <= 0377; i++) {
1839 	if (map[i] != F_INSERT && map[i] != F_UNASSIGNED && map[i] != F_XKEY) {
1840 #ifndef _OSD_POSIX
1841 	    buf[1] = i & ASCII;
1842 #else
1843 	    buf[1] = _toebcdic[_toascii[i] & ASCII];
1844 #endif
1845 	    AddXkey(&cstr, XmapCmd((int) map[i]), XK_CMD);
1846 	}
1847     }
1848     map[buf[0]] = F_XKEY;
1849 }
1850 
1851 void
1852 ed_InitVIMaps()
1853 {
1854     register int i;
1855 
1856     VImode = 1;
1857     ResetXmap();
1858     for (i = 0; i < NT_NUM_KEYS; i++) {
1859 	CcKeyMap[i] = CcViMap[i];
1860 	CcAltMap[i] = CcViCmdMap[i];
1861     }
1862     ed_InitMetaBindings();
1863     ed_InitNLSMaps();
1864     ResetArrowKeys();
1865     BindArrowKeys();
1866 }
1867 
1868 void
1869 ed_InitEmacsMaps()
1870 {
1871     int     i;
1872     Char    buf[3];
1873     CStr    cstr;
1874     cstr.buf = buf;
1875     cstr.len = 2;
1876 
1877     VImode = 0;
1878     ResetXmap();
1879     for (i = 0; i < NT_NUM_KEYS; i++) {
1880 	CcKeyMap[i] = CcEmacsMap[i];
1881 	CcAltMap[i] = F_UNASSIGNED;
1882     }
1883     ed_InitMetaBindings();
1884     ed_InitNLSMaps();
1885     buf[0] = CTL_ESC('\030');
1886     buf[2] = 0;
1887     buf[1] = CTL_ESC('\030');
1888     AddXkey(&cstr, XmapCmd(F_EXCHANGE_MARK), XK_CMD);
1889     buf[1] = '*';
1890     AddXkey(&cstr, XmapCmd(F_EXPAND_GLOB),   XK_CMD);
1891     buf[1] = '$';
1892     AddXkey(&cstr, XmapCmd(F_EXPAND_VARS),   XK_CMD);
1893     buf[1] = 'G';
1894     AddXkey(&cstr, XmapCmd(F_LIST_GLOB),     XK_CMD);
1895     buf[1] = 'g';
1896     AddXkey(&cstr, XmapCmd(F_LIST_GLOB),     XK_CMD);
1897     buf[1] = 'n';
1898     AddXkey(&cstr, XmapCmd(F_PATH_NORM),     XK_CMD);
1899     buf[1] = 'N';
1900     AddXkey(&cstr, XmapCmd(F_PATH_NORM),     XK_CMD);
1901     buf[1] = '?';
1902     AddXkey(&cstr, XmapCmd(F_COMMAND_NORM),  XK_CMD);
1903     buf[1] = '\t';
1904     AddXkey(&cstr, XmapCmd(F_COMPLETE_ALL),  XK_CMD);
1905     buf[1] = CTL_ESC('\004');	/* ^D */
1906     AddXkey(&cstr, XmapCmd(F_LIST_ALL),      XK_CMD);
1907     ResetArrowKeys();
1908     BindArrowKeys();
1909 }
1910 
1911 void
1912 ed_InitMaps()
1913 {
1914     if (MapsAreInited)
1915 	return;
1916 #ifdef _OSD_POSIX
1917     /* This machine has an EBCDIC charset. The assumptions made for the
1918      * initialized keymaps therefore don't hold, since they are based on
1919      * ASCII (or ISO8859-1).
1920      * Here, we do a one-time transformation to EBCDIC environment
1921      * for the key initializations.
1922      */
1923     {
1924 	KEYCMD temp[NT_NUM_KEYS];
1925 	static KEYCMD *const list[3] = { CcEmacsMap, CcViMap, CcViCmdMap };
1926 	register int i, table;
1927 
1928 	for (table=0; table<3; ++table)
1929 	{
1930 	    /* copy ASCII ordered map to temp table */
1931 	    for (i = 0; i < NT_NUM_KEYS; i++) {
1932 		temp[i] = list[table][i];
1933 	    }
1934 	    /* write back as EBCDIC ordered map */
1935 	    for (i = 0; i < NT_NUM_KEYS; i++) {
1936 		list[table][_toebcdic[i]] = temp[i];
1937 	    }
1938 	}
1939     }
1940 #endif /* _OSD_POSIX */
1941 
1942 #ifdef VIDEFAULT
1943     ed_InitVIMaps();
1944 #else
1945     ed_InitEmacsMaps();
1946 #endif
1947 
1948     MapsAreInited = 1;
1949 }
1950