/**************************************************************************
 * This program is Copyright (C) 1986-2002 by Jonathan Payne.  JOVE is    *
 * provided by Jonathan and Jovehacks without charge and without          *
 * warranty.  You may copy, modify, and/or distribute JOVE, provided that *
 * this notice is included in all the source files and documentation.     *
 **************************************************************************/

/* keys.c is derived from keys.txt by setmaps */

/* Only edit keys.txt, not keys.c.
 *
 * keys.txt is processed as text by setmaps.  This means that what follows
 * is a very restricted subset of C.
 *
 * - Lines beginning with "#if", "#else", and "#endif" are understood
 *   to be the parts of conditional compilation.
 *   They will not be recognized if they are "spelled" differently
 *   (say, with whitespace).  Generally, there ought to be the same
 *   number of table entries in each branch of the if.
 *
 * - On a Mac, lines begining with "#MENU" are used to specify that
 *   the table is for a menu.
 *
 * - Lines begining with a tab followed by a " are treated as table entries.
 *
 * - Other lines are passed through, and are assumed to delimit tables.
 *   This means that they must not be within tables.
 */

#include "jove.h"
#include "commands.h"
#include "vars.h"

/* IDX_TAG do not change this comment: used by setmaps to add cmdidx & varidx */

data_obj *MainKeys[NCHARS] = {
	"set-mark",			/* ^@ */
	"beginning-of-line",		/* ^A */
	"backward-character",		/* ^B */
	"unbound",			/* ^C */
	"delete-next-character",	/* ^D */
	"end-of-line",			/* ^E */
	"forward-character",		/* ^F */
	"unbound",			/* ^G */
	"delete-previous-character",	/* ^H */
	"handle-tab",			/* ^I */
	"newline-and-indent",		/* ^J */
	"kill-to-end-of-line",		/* ^K */
	"redraw-display",		/* ^L */
	"newline",			/* ^M */
	"next-line",			/* ^N */
	"newline-and-backup",		/* ^O */
	"previous-line",		/* ^P */
	"quoted-insert",		/* ^Q */
	"search-reverse",		/* ^R */
	"search-forward",		/* ^S */
	"transpose-characters",		/* ^T */
	"gather-numeric-argument",	/* ^U */
	"next-page",			/* ^V */
	"kill-region",			/* ^W */
	"unbound",			/* ^X */
	"yank",				/* ^Y */
	"scroll-up",			/* ^Z */
	"unbound",			/* ^[ */
#ifdef MAC	/* peculiar cursor key codes */
	"backward-character",		/* ^\ */
	"forward-character",		/* ^] */
	"previous-line",		/* ^^ */
	"next-line",			/* ^_ */
#else
	"search-forward",		/* ^\ */
	"find-tag-at-point",		/* ^] */
	"quoted-insert",		/* ^^ */
	"unbound",			/* ^_ */
#endif
	"self-insert",			/*    */
	"self-insert",			/* !  */
	"self-insert",			/* "  */
	"self-insert",			/* #  */
	"self-insert",			/* $  */
	"self-insert",			/* %  */
	"self-insert",			/* &  */
	"self-insert",			/* '  */
	"self-insert",			/* (  */
	"paren-flash",			/* )  */
	"self-insert",			/* *  */
	"self-insert",			/* +  */
	"self-insert",			/* ,  */
	"self-insert",			/* -  */
	"self-insert",			/* .  */
	"self-insert",			/* /  */
	"self-insert",			/* 0  */
	"self-insert",			/* 1  */
	"self-insert",			/* 2  */
	"self-insert",			/* 3  */
	"self-insert",			/* 4  */
	"self-insert",			/* 5  */
	"self-insert",			/* 6  */
	"self-insert",			/* 7  */
	"self-insert",			/* 8  */
	"self-insert",			/* 9  */
	"self-insert",			/* :  */
	"self-insert",			/* ;  */
	"self-insert",			/* <  */
	"self-insert",			/* =  */
	"self-insert",			/* >  */
	"self-insert",			/* ?  */
	"self-insert",			/* @  */
	"self-insert",			/* A  */
	"self-insert",			/* B  */
	"self-insert",			/* C  */
	"self-insert",			/* D  */
	"self-insert",			/* E  */
	"self-insert",			/* F  */
	"self-insert",			/* G  */
	"self-insert",			/* H  */
	"self-insert",			/* I  */
	"self-insert",			/* J  */
	"self-insert",			/* K  */
	"self-insert",			/* L  */
	"self-insert",			/* M  */
	"self-insert",			/* N  */
	"self-insert",			/* O  */
	"self-insert",			/* P  */
	"self-insert",			/* Q  */
	"self-insert",			/* R  */
	"self-insert",			/* S  */
	"self-insert",			/* T  */
	"self-insert",			/* U  */
	"self-insert",			/* V  */
	"self-insert",			/* W  */
	"self-insert",			/* X  */
	"self-insert",			/* Y  */
	"self-insert",			/* Z  */
	"self-insert",			/* [  */
	"self-insert",			/* \  */
	"paren-flash",			/* ]  */
	"self-insert",			/* ^  */
	"self-insert",			/* _  */
	"self-insert",			/* `  */
	"self-insert",			/* a  */
	"self-insert",			/* b  */
	"self-insert",			/* c  */
	"self-insert",			/* d  */
	"self-insert",			/* e  */
	"self-insert",			/* f  */
	"self-insert",			/* g  */
	"self-insert",			/* h  */
	"self-insert",			/* i  */
	"self-insert",			/* j  */
	"self-insert",			/* k  */
	"self-insert",			/* l  */
	"self-insert",			/* m  */
	"self-insert",			/* n  */
	"self-insert",			/* o  */
	"self-insert",			/* p  */
	"self-insert",			/* q  */
	"self-insert",			/* r  */
	"self-insert",			/* s  */
	"self-insert",			/* t  */
	"self-insert",			/* u  */
	"self-insert",			/* v  */
	"self-insert",			/* w  */
	"self-insert",			/* x  */
	"self-insert",			/* y  */
	"self-insert",			/* z  */
	"self-insert",			/* {  */
	"self-insert",			/* |  */
	"paren-flash",			/* }  */
	"self-insert",			/* ~  */
	"delete-previous-character"	/* ^? */
#if NCHARS != 128
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
	"self-insert",			/* ALT- or Option-	 */
#ifdef PCNONASCII
	"unbound"			/* "PCNONASCII" */
#else
	"self-insert"			/* ALT- or Option-	 */
#endif
#endif /* NCHARS != 128 */
};

data_obj *EscKeys[NCHARS] = {
	"set-mark",			/* ^@ */
	"unbound",			/* ^A */
	"backward-s-expression",	/* ^B */
	"unbound",			/* ^C */
	"down-list",			/* ^D */
	"unbound",			/* ^E */
	"forward-s-expression",		/* ^F */
	"unbound",			/* ^G */
	"unbound",			/* ^H */
	"unbound",			/* ^I */
	"unbound",			/* ^J */
	"kill-s-expression",		/* ^K */
	"clear-and-redraw",		/* ^L */
	"unbound",			/* ^M */
	"forward-list",			/* ^N */
	"unbound",			/* ^O */
	"backward-list",		/* ^P */
	"unbound",			/* ^Q */
	"unbound",			/* ^R */
	"unbound",			/* ^S */
	"unbound",			/* ^T */
	"backward-up-list",		/* ^U */
	"page-next-window",		/* ^V */
	"unbound",			/* ^W */
	"unbound",			/* ^X */
	"unbound",			/* ^Y */
	"unbound",			/* ^Z */
	"unbound",			/* ^[ */
	"unbound",			/* ^\ */
	"unbound",			/* ^] */
	"unbound",			/* ^^ */
	"unbound",			/* ^_ */
	"unbound",			/*    */
	"unbound",			/* !  */
	"unbound",			/* "  */
	"unbound",			/* #  */
	"unbound",			/* $  */
	"unbound",			/* %  */
	"unbound",			/* &  */
	"unbound",			/* '  */
	"unbound",			/* (  */
	"unbound",			/* )  */
	"unbound",			/* *  */
	"unbound",			/* +  */
	"beginning-of-window",		/* ,  */
	"digit-minus",			/* -  */
	"end-of-window",		/* .  */
	"unbound",			/* /  */
	"digit",			/* 0  */
	"digit",			/* 1  */
	"digit",			/* 2  */
	"digit",			/* 3  */
	"digit",			/* 4  */
	"digit",			/* 5  */
	"digit",			/* 6  */
	"digit",			/* 7  */
	"digit",			/* 8  */
	"digit",			/* 9  */
	"unbound",			/* :  */
	"unbound",			/* ;  */
	"beginning-of-file",		/* <  */
	"unbound",			/* =  */
	"end-of-file",			/* >  */
	"describe-command",		/* ?  */
	"unbound",			/* @  */
	"backward-sentence",		/* A  */
	"backward-word",		/* B  */
	"case-word-capitalize",		/* C  */
	"kill-next-word",		/* D  */
	"forward-sentence",		/* E  */
	"forward-word",			/* F  */
	"goto-line",			/* G  */
	"unbound",			/* H  */
	"make-macro-interactive",	/* I  */
	"fill-paragraph",		/* J  */
	"kill-to-end-of-sentence",	/* K  */
	"case-word-lower",		/* L  */
	"first-non-blank",		/* M  */
	"unbound",			/* N  */
	"unbound",			/* O  */
	"unbound",			/* P  */
	"query-replace-string",		/* Q  */
	"replace-string",		/* R  */
#ifdef JOB_CONTROL
	"pause-jove",			/* S  */
#else
	"unbound",			/* S  */
#endif
	"unbound",			/* T  */
	"case-word-upper",		/* U  */
	"previous-page",		/* V  */
	"copy-region",			/* W  */
	"execute-named-command",	/* X  */
	"yank-pop",			/* Y  */
	"scroll-down",			/* Z  */
	"backward-paragraph",		/* [  */
	"delete-white-space",		/* \  */
	"forward-paragraph",		/* ]  */
	"unbound",			/* ^  */
	"unbound",			/* _  */
	"unbound",			/* `  */
	"backward-sentence",		/* a  */
	"backward-word",		/* b  */
	"case-word-capitalize",		/* c  */
	"kill-next-word",		/* d  */
	"forward-sentence",		/* e  */
	"forward-word",			/* f  */
	"goto-line",			/* g  */
	"unbound",			/* h  */
	"make-macro-interactive",	/* i  */
	"fill-paragraph",		/* j  */
	"kill-to-end-of-sentence",	/* k  */
	"case-word-lower",		/* l  */
	"first-non-blank",		/* m  */
	"unbound",			/* n  */
	"unbound",			/* o  */
	"unbound",			/* p  */
	"query-replace-string",		/* q  */
	"replace-string",		/* r  */
#ifdef JOB_CONTROL
	"pause-jove",			/* s  */
#else
	"unbound",			/* s  */
#endif
	"unbound",			/* t  */
	"case-word-upper",		/* u  */
	"previous-page",		/* v  */
	"copy-region",			/* w  */
	"execute-named-command",	/* x  */
	"yank-pop",			/* y  */
	"scroll-down",			/* z  */
	"unbound",			/* {  */
	"unbound",			/* |  */
	"unbound",			/* }  */
	"make-buffer-unmodified",	/* ~  */
	"kill-previous-word"		/* ^? */
#if NCHARS != 128
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound"			/* ALT- or Option-	 */
#endif /* NCHARS != 128 */
};

data_obj	*CtlxKeys[NCHARS] = {
	"unbound",			/* ^@ */
	"unbound",			/* ^A */
	"list-buffers",			/* ^B */
	"exit-jove",			/* ^C */
	"unbound",			/* ^D */
#ifdef SUBSHELL
	"compile-it",			/* ^E */
#else
	"unbound"			/* ^E */
#endif
	"find-file",			/* ^F */
	"unbound",			/* ^G */
	"unbound",			/* ^H */
	"insert-file",			/* ^I */
	"unbound",			/* ^J */
	"unbound",			/* ^K */
	"unbound",			/* ^L */
	"write-modified-files",		/* ^M */
	"next-error",			/* ^N */
	"delete-blank-lines",		/* ^O */
	"previous-error",		/* ^P */
	"unbound",			/* ^Q */
	"visit-file",			/* ^R */
	"save-file",			/* ^S */
	"transpose-lines",		/* ^T */
	"unbound",			/* ^U */
	"visit-file",			/* ^V */
	"write-file",			/* ^W */
	"exchange-point-and-mark",	/* ^X */
	"unbound",			/* ^Y */
	"unbound",			/* ^Z */
	"unbound",			/* ^[ */
	"save-file",			/* ^\ */
	"unbound",			/* ^] */
	"unbound",			/* ^^ */
	"unbound",			/* ^_ */
	"unbound",			/*    */
#ifdef SUBSHELL
	"shell-command",		/* !  */
#else
	"unbound"			/* ! */
#endif
	"unbound",			/* "  */
	"unbound",			/* #  */
	"unbound",			/* $  */
	"unbound",			/* %  */
	"unbound",			/* &  */
	"unbound",			/* '  */
	"begin-kbd-macro",		/* (  */
	"end-kbd-macro",		/* )  */
	"unbound",			/* *  */
	"unbound",			/* +  */
	"unbound",			/* ,  */
	"unbound",			/* -  */
	"unbound",			/* .  */
	"unbound",			/* /  */
	"unbound",			/* 0  */
	"delete-other-windows",		/* 1  */
	"split-current-window",		/* 2  */
	"unbound",			/* 3  */
	"window-find",			/* 4  */
	"unbound",			/* 5  */
	"unbound",			/* 6  */
	"unbound",			/* 7  */
	"unbound",			/* 8  */
	"unbound",			/* 9  */
	"unbound",			/* :  */
	"unbound",			/* ;  */
	"unbound",			/* <  */
	"unbound",			/* =  */
	"unbound",			/* >  */
	"describe-key",			/* ?  */
	"unbound",			/* @  */
	"unbound",			/* A  */
	"select-buffer",		/* B  */
	"unbound",			/* C  */
	"delete-current-window",	/* D  */
	"execute-kbd-macro",		/* E  */
	"unbound",			/* F  */
	"unbound",			/* G  */
	"unbound",			/* H  */
	"unbound",			/* I  */
	"unbound",			/* J  */
	"delete-buffer",		/* K  */
	"unbound",			/* L  */
	"unbound",			/* M  */
	"next-window",			/* N  */
	"previous-window",		/* O  */
	"previous-window",		/* P  */
	"unbound",			/* Q  */
	"unbound",			/* R  */
	"save-file",		/* S  */
	"find-tag",			/* T  */
	"unbound",			/* U  */
	"unbound",			/* V  */
	"unbound",			/* W  */
	"unbound",			/* X  */
	"unbound",			/* Y  */
	"unbound",			/* Z  */
	"unbound",			/* [  */
	"unbound",			/* \  */
	"unbound",			/* ]  */
	"grow-window",			/* ^  */
	"unbound",			/* _  */
	"unbound",			/* `  */
	"unbound",			/* a  */
	"select-buffer",		/* b  */
	"unbound",			/* c  */
	"delete-current-window",	/* d  */
	"execute-kbd-macro",		/* e  */
	"unbound",			/* f  */
	"unbound",			/* g  */
	"unbound",			/* h  */
	"unbound",			/* i  */
	"unbound",			/* j  */
	"delete-buffer",		/* k  */
	"unbound",			/* l  */
	"unbound",			/* m  */
	"next-window",			/* n  */
	"previous-window",		/* o  */
	"previous-window",		/* p  */
	"unbound",			/* q  */
	"unbound",			/* r  */
	"save-file",		/* s  */
	"find-tag",			/* t  */
	"unbound",			/* u  */
	"unbound",			/* v  */
	"unbound",			/* w  */
	"unbound",			/* x  */
	"unbound",			/* y  */
	"unbound",			/* z  */
	"unbound",			/* {  */
	"unbound",			/* |  */
	"unbound",			/* }  */
	"unbound",			/* ~  */
	"kill-to-beginning-of-sentence" /* ^? */
#if NCHARS != 128
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound",			/* ALT- or Option-	 */
	"unbound"			/* ALT- or Option-	 */
#endif /* NCHARS != 128 */
};

#ifdef PCNONASCII
/* These are codes generated by non-ASCII keys on an IBM-PC keyboard.
 * Codes marked with [E] are only generated by enhanced keyboards.
 * The codes 171 to 183 are synthesized by JOVE when it detects
 * shift + a code in 71 to 83.
 */
data_obj	*NonASCIIKeys[NCHARS] = {
	"unbound",			/* ^Break	 0 */
	"unbound",			/* alt Esc [E] */
	"unbound",
	"unbound",			/* [^@ and ^Space mapped to ASCII NUL] */
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",			/*		10 */
	"unbound",
	"unbound",
	"unbound",
	"unbound",			/* alt BackSpace [E] */
	"unbound",			/* shift Tab (BackTab) */
	"query-replace-string",		/* alt q */
	"copy-region",			/* alt w */
	"forward-sentence",		/* alt e */
	"replace-string",		/* alt r */
	"unbound",			/* alt t	20 */
	"yank-pop",			/* alt y */
	"case-word-upper",		/* alt u */
	"make-macro-interactive",	/* alt i */
	"unbound",			/* alt o */
	"unbound",			/* alt p */
	"unbound",			/* alt [ [E] */
	"unbound",			/* alt ] [E] */
	"unbound",			/* alt Return [E] */
	"unbound",
	"backward-sentence",		/* alt a	30 */
	"unbound",			/* alt s */
	"kill-next-word",		/* alt d */
	"forward-word",			/* alt f */
	"goto-line",			/* alt g */
	"unbound",			/* alt h */
	"fill-paragraph",		/* alt j */
	"kill-to-end-of-sentence",	/* alt k */
	"case-word-lower",		/* alt l */
	"unbound",			/* alt ; [E] */
	"unbound",			/* alt ' [E]	40 */
	"unbound",			/* alt ` [E] */
	"unbound",
	"unbound",			/* alt \ [E] */
	"scroll-down",			/* alt z */
	"execute-named-command",	/* alt x */
	"case-word-capitalize",		/* alt c */
	"previous-page",		/* alt v */
	"backward-word",		/* alt b */
	"unbound",			/* alt n */
	"first-non-blank",		/* alt m	50 */
	"unbound",			/* alt , [E] */
	"unbound",			/* alt . [E] */
	"unbound",			/* alt / [E] */
	"unbound",
	"unbound",			/* alt keypad* [E] */
	"unbound",
	"unbound",
	"unbound",
	"unbound",			/* F1 */
	"unbound",			/* F2		60 */
	"unbound",			/* F3 */
	"unbound",			/* F4 */
	"unbound",			/* F5 */
	"unbound",			/* F6 */
	"unbound",			/* F7 */
	"unbound",			/* F8 */
	"unbound",			/* F9 */
	"unbound",			/* F10 */
	"unbound",
	"unbound",			/*		70 */
	"beginning-of-line",		/* Home */
	"previous-line",		/* Up	*/
	"previous-page",		/* PgUp */
	"unbound",			/* alt keypad- [E] */
	"backward-character",		/* Left */
	"unbound",
	"forward-character",		/* Right*/
	"unbound",			/* alt keypad+ [E] */
	"end-of-line",			/* End	*/
	"next-line",			/* Down		80 */
	"next-page",			/* PgDn */
	"over-write-mode",		/* Ins	*/
	"unbound",			/* [Del mapped to ASCII DEL] */
	"unbound",			/* shift F1 */
	"unbound",			/* shift F2 */
	"unbound",			/* shift F3 */
	"unbound",			/* shift F4 */
	"unbound",			/* shift F5 */
	"unbound",			/* shift F6 */
	"unbound",			/* shift F7	90 */
	"unbound",			/* shift F8 */
	"unbound",			/* shift F9 */
	"unbound",			/* shift F10 */
	"unbound",			/* ^F1 */
	"unbound",			/* ^F2 */
	"unbound",			/* ^F3 */
	"unbound",			/* ^F4 */
	"unbound",			/* ^F5 */
	"unbound",			/* ^F6 */
	"unbound",			/* ^F7	100 */
	"unbound",			/* ^F8 */
	"unbound",			/* ^F9 */
	"unbound",			/* ^F10*/
	"unbound",			/* alt F1 */
	"unbound",			/* alt F2 */
	"unbound",			/* alt F3 */
	"unbound",			/* alt F4 */
	"unbound",			/* alt F5 */
	"unbound",			/* alt F6 */
	"unbound",			/* alt F7	110 */
	"unbound",			/* alt F8 */
	"unbound",			/* alt F9 */
	"unbound",			/* alt F10 */
	"unbound",			/* ^PrtScrn */
	"backward-word",		/* ^Left */
	"forward-word",			/* ^Right */
	"end-of-file",			/* ^End */
	"next-window",			/* ^PgDn */
	"beginning-of-file",		/* ^Home */
	"select-buffer-1",		/* alt 1	120 */
	"select-buffer-2",		/* alt 2 */
	"select-buffer-3",		/* alt 3 */
	"select-buffer-4",		/* alt 4 */
	"select-buffer-5",		/* alt 5 */
	"select-buffer-6",		/* alt 6 */
	"select-buffer-7",		/* alt 7 */
	"select-buffer-8",		/* alt 8 */
	"select-buffer-9",		/* alt 9 */
	"select-buffer-10",		/* alt 0 */
	"unbound",			/* alt -	130 */
	"unbound",			/* alt = */
	"previous-window",		/* ^PgUp */
	"unbound",			/* F11 [E] */
	"unbound",			/* F12 [E] */
	"unbound",			/* Shift F11 [E] */
	"unbound",			/* Shift F12 [E] */
	"unbound",			/* ^F11 [E] */
	"unbound",			/* ^F12 [E] */
	"unbound",			/* alt F11 [E] */
	"unbound",			/* alt F12 [E]	140 */
	"unbound",			/* ^Up [E] */
	"unbound",			/* ^keypad- [E] */
	"unbound",			/* ^keypad5 [E] */
	"unbound",			/* ^keypad+ [E] */
	"unbound",			/* ^Down [E] */
	"unbound",			/* ^Ins [E] */
	"unbound",			/* ^Del [E] */
	"unbound",			/* ^Tab [E] */
	"unbound",			/* ^keypad/ [E] */
	"unbound",			/* ^keypad* [E]	150 */
	"unbound",			/* alt Home [E] */
	"unbound",			/* alt Up [E] */
	"unbound",			/* alt PgUp [E] */
	"unbound",
	"unbound",			/* alt Left [E] */
	"unbound",
	"unbound",			/* alt Right [E] */
	"unbound",
	"unbound",			/* alt End [E] */
	"unbound",			/* alt Down [E]	160 */
	"unbound",			/* alt PgDn [E] */
	"unbound",			/* alt Ins [E] */
	"unbound",			/* alt Del [E] */
	"unbound",			/* alt keypad/ [E] */
	"unbound",			/* alt Tab [E] */
	"unbound",			/* alt Enter [E] */
	"unbound",
	"unbound",
	"unbound",
	"unbound",			/* 	170 */
	"unbound",			/* shift Home */
	"unbound",			/* shift Up */
	"unbound",			/* shift PgUp */
	"unbound",			/* shift alt keypad- [E] */
	"unbound",			/* shift Left */
	"unbound",
	"unbound",			/* shift Right */
	"unbound",			/* shift alt keypad+ [E] */
	"unbound",			/* shift End */
	"unbound",			/* shift Down	180 */
	"unbound",			/* shift PgDn */
	"unbound",			/* shift Ins */
	"unbound",			/* shift Del */
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound",
	"unbound"
};
#endif /* PCNONASCII */
