/*
 * $Header: /smsa/bsd:include/dev/key_table.h:bsd  1.6  $
 * $Source: /smsa/bsd:include/dev/key_table.h: $
 *
 * Copyright (c) 1988 Acorn Computers Ltd., Cambridge, England
 */

#ifndef __dev_key_table_h
#define __dev_key_table_h

/* key_table.h
 *
 * This rather large file is used for two different purposes.
 * When it is #included in a file where the pre-processor symbol
 * GENERATE_KEY_TABLE has been defined, it causes the definition
 * of the main keyboard key table to be compiled.  Otherwise it 
 * merely declares the existence of this table.  In either case
 * various symbols of the form "KX_..." are defined, for use in
 * code which needs the key table index values.
 *
 * Note that the layout of the table is slightly unusual - all the
 * macros defining a key-table entry INCLUDE a trailing ",", so
 * that successive entries are separated only by white-space or
 * comments.  This is to avoid the problem of what to do with all
 * the commas in the case where the table contents themselves are
 * not to be compiled, but the #define KX_... statements which are
 * interspersed must be.
 */


/*
 * Base key table - common keys are listed here.  Most of these keys
 * are common to all keyboards; the rest are found on one or other of
 * the base keyboards (A500/Archimedes UK).  A key is, in general,
 * identified in terms of what is marked on the key top to indicate
 * the function of the key.  Hence e.g. the key marked with "6" and
 * "&" on the top row of the main key block on an A500 keyboard is
 * defined to be different from the key marked with "6" and "^" on an
 * Archimedes UK keyboard.  Note however that some keys are viewed as
 * identical although the actual symbol or word is different between
 * two keyboards, e.g. "ESCAPE" (A500) and "Esc" (Archimedes UK) are
 * considered the same, as are "Delete" (Archimedes UK) and "Entf"
 * (proposed Archimedes German keyboard).  Note also that with respect
 * to the numeric keypad, the keys on the top row are distinguished
 * in terms of their position and not just their marking, because some
 * applications may assign functionality on the basis of the former 
 * attribute rather than the latter.  Keys which are duplicated on the
 * keyboard (SHIFT, CTRL, etc) are for the same reason given separate 
 * entries;  however the A500 keyboard does not distinguish between the
 * two SHIFT keys - the convention is that A500 SHIFT is always 
 * reported as a left-hand SHIFT key.
 *
 * The naming of symbols on keytops follows the conventions of PostScript
 * as listed in Appendix A: STANDARD FONTS of the PostScript Reference
 * Manual, with the following exceptions:
 *
 *	PostScript   asciicircum     is here called	circumflex
 *	 " "  " "    asciitilde        " "   " "	tilde
 *	 " "  " "    copyrightserif    " "   " "	copyright
 *	
 *
 * Within the context of this driver, and when this information is made
 * visible to user programs, a key is referred to by means of its "Key
 * indeX" (KX), which is its position (as an offset from 0) within the
 * key table defined below.  Groups of keys which have a logical
 * ordering relationship are given ordered sequential positions in the
 * table (and hence ordered sequential key indices).  Note that buttons 
 * on a mouse attached to the system are classified as keys in this
 * table.
 *
 * The table has (currently) 5 bytes per entry.  The first byte specifies
 * the key class; the remaining bytes are information to be interpreted
 * according to the key's class.  To save space, this table is implemented
 * using an array of unsigned chars: the following typedef gives the
 * notional layout, but is not actually used.  The macros below provide
 * access to an entry in the table - the "ki" parameter is a pointer to
 * the start of the entry.
 */

#ifdef NOTDEF
typedef struct
{
    unsigned char info;				/* class:4, alpha:1[4] */
    unsigned char code[4];
} KeyInfo, *KeyInfoRef;
#endif

typedef unsigned char *KeyInfoRef;
/* Number of bytes in a KeyInfo (compact form) */
#ifdef	EXTENDED_KEYS
#define KEY_INFO_SIZE	5
#else	EXTENDED_KEYS
#define KEY_INFO_SIZE	3
#endif	EXTENDED_KEYS
/* To address the nth entry in a key info table */
#define KI_ENTRY(tab,n)	(((unsigned char *)(tab))[(n)*KEY_INFO_SIZE])
/* To access the info field of a KeyInfo record: */
#define KI_INFO(ki)	((ki)[0])
/* To access the n'th code element of a KeyInfo record: */
#define KI_CODE(ki,n)	((ki)[1+n])
/* To access the key class field: */
#define KI_CLASS(ki)	(KI_INFO(ki) & 0x0F)
/* To decide whether a given code is alphabetic (i.e. caps/shift modifiable):
 * [N.B. CAPS/SHIFT MOD ASSUMES THAT LOWER_CODE = UPPER_CODE + 32 !!!]
 */
#define KI_ALPHA(n)		(1 << (4+(n)))
#define KI_ISALPHA(ki,n)	((KI_INFO(ki) & KI_ALPHA(n)) != 0)

/* =========== */
/* Key classes */
/* =========== */

/*
 * Mouse button.  Numbered left to right.  We allow space in the
 * table for up to 8(!!).
 */
#define KC_MOUSE	0x0

/*
 * Shifting key (Shift/Ctrl/Looks/Alt etc).  For the
 * reason merely that the hardware has them that way,
 * the HOME and PRINT keys on Archimedes have been 
 * defined to come into this category(!!).
 */
#define KC_SHIFT	0x1

/*
 * Locking key - shift lock, caps lock, num lock etc
 */
#define KC_LOCK		0x2

/*
 * Dedicated control key (e.g. ESC):
 * code[0] is basic control code.
 */
#define KC_CONTROL	0x3

/* 
 * Cursor movement key.
 */
#define KC_CURSOR	0x4

/*
 * Special key (a "funny") e.g. MENU, AGAIN, HELP etc on 
 * A500, BREAK, PAGE-UP/DOWN etc on Archimedes.
 */
#define KC_SPECIAL	0x5

/*
 * Numeric keypad key.
 * code[0] is basic ascii symbol/control code.
 * code[1] is numeric pad position index.
 */
#define KC_NUMPAD	0x6

/*
 * Function key.
 * code [0] is function key number.
 */
#define KC_FUNCTION	0x7

/*
 * Single-graphic key (e.g. A, _ on A500):
 * code[0] is value (upper case if alphabetic)
 */
#define KC_GLYPH1	0x8

/*
 * Simple alphabetic key - a version of GKEY1 where
 * the "alphabetic shifting" bit is set for the char.
 */
#define KC_ALPHA1	(KC_GLYPH1 | KI_ALPHA(0))

/*
 * Graphics-pair key (e.g. 1/!):
 * code[0] unshifted, code[1] shifted.
 */
#define KC_GLYPH2	0x9

/*
 * Graphics-trio key (used on some international k/bs)
 * code[0] unshifted, code[1] +shift, code[2] +alt.
 */
#define KC_GLYPH3	0xA

/*
 * Graphics-quad (not used yet)
 */
#define KC_GLYPH4	0xB

/*
 * RESERVED KEY CLASS CODE - DO NOT USE.
 */
#define KC_RESERVED	0xF

#ifdef GENERATE_KEY_TABLE

#ifdef	EXTENDED_KEYS
#define K_MOUSE(n)		KC_MOUSE,     n, 0xFF, 0xFF, 0xFF,
#define K_SHIFT(n)		KC_SHIFT,     n, 0xFF, 0xFF, 0xFF,
#define K_LOCK(n)		KC_LOCK,      n, 0xFF, 0xFF, 0xFF,
#define K_CONTROL(c)		KC_CONTROL,   c, 0xFF, 0xFF, 0xFF,
#define K_CURSOR(c)		KC_CURSOR,    c, 0xFF, 0xFF, 0xFF,
#define K_SPECIAL(c)		KC_SPECIAL,   c, 0xFF, 0xFF, 0xFF,
#define K_NUMPAD(c,n)		KC_NUMPAD,    c,    n, 0xFF, 0xFF,
#define K_FUNCTION(n)		KC_FUNCTION,  n, 0xFF, 0xFF, 0xFF,
#define K_GLYPH1(c)		KC_GLYPH1,    c, 0xFF, 0xFF, 0xFF,
#define K_ALPHA(c)		KC_ALPHA1,    c, 0xFF, 0xFF, 0xFF,
#define K_GLYPH2(a,b)		KC_GLYPH2,    a,    b, 0xFF, 0xFF,
#define K_GLYPH3(a,b,c)		KC_GLYPH3,    a,    b,    c, 0xFF,
#define K_GLYPH4(a,b,c,d)	KC_GLYPH4,    a,    b,    c,    d,
/* For table entries not yet filled - parameter for comment purposes */
#define K_RESERVED(x)		KC_RESERVED, 0xFF, 0xFF, 0xFF, 0xFF,
#else	EXTENDED_KEYS
#define K_MOUSE(n)		KC_MOUSE,     n, 0xFF,
#define K_SHIFT(n)		KC_SHIFT,     n, 0xFF,
#define K_LOCK(n)		KC_LOCK,      n, 0xFF,
#define K_CONTROL(c)		KC_CONTROL,   c, 0xFF,
#define K_CURSOR(c)		KC_CURSOR,    c, 0xFF,
#define K_SPECIAL(c)		KC_SPECIAL,   c, 0xFF,
#define K_NUMPAD(c,n)		KC_NUMPAD,    c,    n,
#define K_FUNCTION(n)		KC_FUNCTION,  n, 0xFF,
#define K_GLYPH1(c)		KC_GLYPH1,    c, 0xFF,
#define K_ALPHA(c)		KC_ALPHA1,    c, 0xFF,
#define K_GLYPH2(a,b)		KC_GLYPH2,    a,    b,
#define K_GLYPH3(a,b,c)		ERROR: K_GLYPH3
#define K_GLYPH4(a,b,c,d)	ERROR: K_GLYPH4
/* For table entries not yet filled - parameter for comment purposes */
#define K_RESERVED(x)		KC_RESERVED, 0xFF, 0xFF,
#endif	EXTENDED_KEYS
#else

/* If not defining, make all the generating macros reduce to nothing */

#define K_MOUSE(n)
#define K_SHIFT(n)
#define K_LOCK(n)
#define K_CONTROL(c)
#define K_CURSOR(c)
#define K_SPECIAL(c)
#define K_NUMPAD(c,n)
#define K_FUNCTION(n)
#define K_GLYPH1(c)
#define K_ALPHA(c)
#define K_GLYPH2(a,b)
#define K_GLYPH3(a,b,c)
#define K_GLYPH4(a,b,c,d)
#define K_RESERVED(x)

#endif



/* Now for the relevant declaration */

#ifndef GENERATE_KEY_TABLE

extern unsigned char base_key_table[];

#else

unsigned char base_key_table[] =
{

#endif

    K_RESERVED ("PERMANENTLY RESERVED")		/* 0  */
#define KX_NONE			0
#define KX_MOUSE__BASE		1
    K_MOUSE (0) 				/* 0  */
#define KX_MOUSE_BUTTON_0	  (KX_MOUSE__BASE+ 0)
#define KX_MOUSE__FIRST KX_MOUSE_BUTTON_0
    K_MOUSE (1) 				/* 1  */
#define KX_MOUSE_BUTTON_1	  (KX_MOUSE__BASE+ 1)
    K_MOUSE (2) 				/* 2  */
#define KX_MOUSE_BUTTON_2	  (KX_MOUSE__BASE+ 2)
#define KX_MOUSE__LAST KX_MOUSE_BUTTON_2
    K_RESERVED ("mouse") 			/* 3  */
    K_RESERVED ("mouse") 			/* 4  */
    K_RESERVED ("mouse") 			/* 5  */
    K_RESERVED ("mouse") 			/* 6  */
    K_RESERVED ("mouse") 			/* 7  */
#define KX_MOUSE__LIMIT		  (KX_MOUSE__BASE+ 7)
#define KX_SHIFT__BASE		  (KX_MOUSE__LIMIT+1)		
/* Shift-action keys */
    K_SHIFT (0)					/* 0 Archimedes UK/A500 */
#define  KX_SHIFT_SHIFT_L	  (KX_SHIFT__BASE+ 0)
#define KX_SHIFT__FIRST KX_SHIFT_SHIFT_L
    K_SHIFT (1)					/* 1 Archimedes UK */
#define  KX_SHIFT_SHIFT_R	  (KX_SHIFT__BASE+ 1)
    K_SHIFT (2)					/* 2 Archimedes UK/A500 */
#define  KX_SHIFT_CTRL_L	  (KX_SHIFT__BASE+ 2)
    K_SHIFT (3)					/* 3 Archimedes UK */
#define  KX_SHIFT_CTRL_R	  (KX_SHIFT__BASE+ 3)
    K_SHIFT (4)					/* 4 Archimedes UK/A500 (LOOKS) */
#define  KX_SHIFT_ALT_L		  (KX_SHIFT__BASE+ 4)
    K_SHIFT (5)					/* 5 Archimedes UK */
#define  KX_SHIFT_ALT_R		  (KX_SHIFT__BASE+ 5)
    K_SHIFT (6)					/* 6 Archimedes UK */
#define  KX_SHIFT_PRINT		  (KX_SHIFT__BASE+ 6)
    K_SHIFT (7)					/* 7 Archimedes UK */
#define  KX_SHIFT_HOME		  (KX_SHIFT__BASE+ 7)
#define KX_SHIFT__LAST KX_SHIFT_HOME
    K_RESERVED ("shift") 			/* 8  */
    K_RESERVED ("shift") 			/* 9  */
    K_RESERVED ("shift") 			/*10  */
    K_RESERVED ("shift") 			/*11  */
    K_RESERVED ("shift") 			/*12  */
    K_RESERVED ("shift") 			/*13  */
    K_RESERVED ("shift") 			/*14  */
    K_RESERVED ("shift") 			/*15  */
#define KX_SHIFT__LIMIT		  (KX_SHIFT__BASE+15)
#define KX_LOCK__BASE		  (KX_SHIFT__LIMIT+1)
/* Locking keys - caps  num  scroll etc */
    K_LOCK (0)					/* 0  */
#define  KX_LOCK_CAPS		   (KX_LOCK__BASE+ 0)
#define KX_LOCK__FIRST KX_LOCK_CAPS
    K_LOCK (1)					/* 1  */
#define  KX_LOCK_NUM		   (KX_LOCK__BASE+ 1)
    K_LOCK (2)					/* 2  */
#define  KX_LOCK_SCROLL		   (KX_LOCK__BASE+ 2)
#define KX_LOCK__LAST KX_LOCK_SCROLL
    K_RESERVED ("lock") 			/* 3  */
    K_RESERVED ("lock") 			/* 4  */
    K_RESERVED ("lock") 			/* 5  */
    K_RESERVED ("lock") 			/* 6  */
    K_RESERVED ("lock") 			/* 7  */
    K_RESERVED ("lock") 			/* 8  */
    K_RESERVED ("lock") 			/* 9  */
    K_RESERVED ("lock") 			/*10  */
    K_RESERVED ("lock") 			/*11  */
    K_RESERVED ("lock") 			/*12  */
    K_RESERVED ("lock") 			/*13  */
    K_RESERVED ("lock") 			/*14  */
    K_RESERVED ("lock") 			/*15  */
#define KX_LOCK__LIMIT		   (KX_LOCK__BASE+15)
#define KX_CONTROL__BASE	   (KX_LOCK__LIMIT+1)
/* Dedicated control keys */
    K_CONTROL (BS) 				/* 0 <-| key */
#define KX_CONTROL_BS		(KX_CONTROL__BASE+ 0)
#define KX_CONTROL__FIRST KX_CONTROL_BS
    K_CONTROL (HT) 				/* 1 TAB key */
#define KX_CONTROL_HT		(KX_CONTROL__BASE+ 1)
    K_CONTROL (CR) 				/* 2 main Return key */
#define KX_CONTROL_CR		(KX_CONTROL__BASE+ 2)
    K_CONTROL (ESC) 				/* 3 Esc/ESCAPE key */
#define KX_CONTROL_ESC		(KX_CONTROL__BASE+ 3)
    K_CONTROL (DEL) 				/* 4 Delete key (Archimedes) */
#define KX_CONTROL_DEL		(KX_CONTROL__BASE+ 4)
#define KX_CONTROL__LAST KX_CONTROL_DEL
    K_RESERVED ("control") 			/* 5  */
    K_RESERVED ("control") 			/* 6  */
    K_RESERVED ("control") 			/* 7  */
    K_RESERVED ("control") 			/* 8  */
    K_RESERVED ("control") 			/* 9  */
    K_RESERVED ("control") 			/*10  */
    K_RESERVED ("control") 			/*11  */
    K_RESERVED ("control") 			/*12  */
    K_RESERVED ("control") 			/*13  */
    K_RESERVED ("control") 			/*14  */
    K_RESERVED ("control") 			/*15  */
#define KX_CONTROL__LIMIT	(KX_CONTROL__BASE+15)
#define KX_CURSOR__BASE		(KX_CONTROL__LIMIT+1)
/* Cursor keys - base 4 + diagonals + 8 spare */
    K_CURSOR (0)				/* 0  */
#define KX_CURSOR_CUU		 (KX_CURSOR__BASE+ 0)
#define KX_CURSOR__FIRST KX_CURSOR_CUU
    K_CURSOR (1)				/* 1  */
#define KX_CURSOR_CUD		 (KX_CURSOR__BASE+ 1)
    K_CURSOR (2)				/* 2  */
#define KX_CURSOR_CUF		 (KX_CURSOR__BASE+ 2)
    K_CURSOR (3)				/* 3  */
#define KX_CURSOR_CUB		 (KX_CURSOR__BASE+ 3)
#define KX_CURSOR__LAST KX_CURSOR_CUB
    K_RESERVED ("CURS_UR") 			/* 4  up/right */
    K_RESERVED ("CURS_UL") 			/* 5  up/left */
    K_RESERVED ("CURS_DR") 			/* 6  down/right */
    K_RESERVED ("CURS_DL") 			/* 7  down/left */
    K_RESERVED ("cursor") 			/* 8  */
    K_RESERVED ("cursor") 			/* 9  */
    K_RESERVED ("cursor") 			/*10  */
    K_RESERVED ("cursor") 			/*11  */
    K_RESERVED ("cursor") 			/*12  */
    K_RESERVED ("cursor") 			/*13  */
    K_RESERVED ("cursor") 			/*14  */
    K_RESERVED ("cursor") 			/*15  */
#define KX_CURSOR__LIMIT	 (KX_CURSOR__BASE+15)
#define KX_SPECIAL__BASE	 (KX_CURSOR__LIMIT+1)
/* Special keys */
    K_SPECIAL (0)				/* 0  */
#define KX_SPECIAL_HELP		(KX_SPECIAL__BASE+ 0)
#define KX_SPECIAL__FIRST KX_SPECIAL_HELP
    K_SPECIAL (1)				/* 1  |-> key */
#define KX_SPECIAL_DEL_RIGHT	(KX_SPECIAL__BASE+ 1)
    K_SPECIAL (2)				/* 2  <-| key */
#define KX_SPECIAL_DEL_LEFT	(KX_SPECIAL__BASE+ 2)
    K_SPECIAL (3)				/* 3  */
#define KX_SPECIAL_MENU		(KX_SPECIAL__BASE+ 3)
    K_SPECIAL (4)				/* 4  */
#define KX_SPECIAL_AGAIN	(KX_SPECIAL__BASE+ 4)
    K_SPECIAL (5)				/* 5  */
#define KX_SPECIAL_BREAK	(KX_SPECIAL__BASE+ 5)
    K_SPECIAL (6)				/* 6  */
#define KX_SPECIAL_INSERT	(KX_SPECIAL__BASE+ 6)
    K_SPECIAL (7)				/* 7  */
#define KX_SPECIAL_PAGE_UP	(KX_SPECIAL__BASE+ 7)
    K_SPECIAL (8)				/* 8  */
#define KX_SPECIAL_COPY		(KX_SPECIAL__BASE+ 8)
    K_SPECIAL (9)				/* 9  */
#define KX_SPECIAL_PAGE_DOWN	(KX_SPECIAL__BASE+ 9)
    K_SPECIAL (10)				/*10  */
#define KX_SPECIAL_PRINT	(KX_SPECIAL__BASE+10)
    K_SPECIAL (11)				/*11  */
#define KX_SPECIAL_HOME		(KX_SPECIAL__BASE+11)
#define KX_SPECIAL__LAST KX_SPECIAL_HOME
    K_RESERVED ("special") 			/*12  */
    K_RESERVED ("special") 			/*13  */
    K_RESERVED ("special") 			/*14  */
    K_RESERVED ("special") 			/*15  */
    K_RESERVED ("special") 			/*16  */
    K_RESERVED ("special") 			/*17  */
    K_RESERVED ("special") 			/*18  */
    K_RESERVED ("special") 			/*19  */
    K_RESERVED ("special") 			/*20  */
    K_RESERVED ("special") 			/*21  */
    K_RESERVED ("special") 			/*22  */
    K_RESERVED ("special") 			/*23  */
    K_RESERVED ("special") 			/*24  */
    K_RESERVED ("special") 			/*25  */
    K_RESERVED ("special") 			/*26  */
    K_RESERVED ("special") 			/*27  */
    K_RESERVED ("special") 			/*28  */
    K_RESERVED ("special") 			/*29  */
    K_RESERVED ("special") 			/*30  */
    K_RESERVED ("special") 			/*31  */
#define KX_SPECIAL__LIMIT	(KX_SPECIAL__BASE+31)
#define KX_NUMPAD__BASE		(KX_SPECIAL__LIMIT+1)
/*
 * Numeric pad keys - the sequence is a bit strange  but 
 * it does have a logic of its own...
 *
 *	+----+----+----+----+
 *	|(17)| 16 | 15 | 14 |  (Key 17 is only classified as
 *	+----+----+----+----+   a numeric pad key on the A500.)
 *	| 7  | 8  | 9  | 13 |
 *	+----+----+----+----+
 *	| 4  | 5  | 6  | 12 |
 *	+----+----+----+----+
 *	| 1  | 2  | 3  |    |
 *	+----+----+----+ 11 |
 *	|    0    | 10 |    |
 *	+---------+----+----+
 *
 */
   K_NUMPAD ('0', 0) 				/* 0  */
#define KX_NUMPAD_0		 (KX_NUMPAD__BASE+ 0)
#define KX_NUMPAD__FIRST KX_NUMPAD_0
/* we define a macro for the digits.. */
#define KX_NUMPAD_(n)	(KX_NUMPAD_0 + (n))
   K_NUMPAD ('1', 1) 				/* 1  */
   K_NUMPAD ('2', 2) 				/* 2  */
   K_NUMPAD ('3', 3) 				/* 3  */
   K_NUMPAD ('4', 4) 				/* 4  */
   K_NUMPAD ('5', 5) 				/* 5  */
   K_NUMPAD ('6', 6) 				/* 6  */
   K_NUMPAD ('7', 7) 				/* 7  */
   K_NUMPAD ('8', 8) 				/* 8  */
   K_NUMPAD ('9', 9) 				/* 9  */
#define KX_NUMPAD_9			 (KX_NUMPAD__BASE+ 9)
   K_NUMPAD ('.', 10) 				/*10  */
#define KX_NUMPAD_10_PERIOD		 (KX_NUMPAD__BASE+10)
   K_NUMPAD (CR, 11) 				/*11  */
#define KX_NUMPAD_11_ENTER		 (KX_NUMPAD__BASE+11)
   K_NUMPAD ('+', 12) 				/*12  */
#define KX_NUMPAD_12_PLUS		 (KX_NUMPAD__BASE+12)
   K_NUMPAD ('-', 13) 				/*13  */
#define KX_NUMPAD_13_MINUS		 (KX_NUMPAD__BASE+13)
   K_NUMPAD ('*', 14) 				/*14 A500 */
#define KX_NUMPAD_14_ASTERISK	 (KX_NUMPAD__BASE+14)
   K_NUMPAD ('/', 15) 				/*15 A500 */
#define KX_NUMPAD_15_SLASH	 (KX_NUMPAD__BASE+15)
   K_NUMPAD ('%', 16) 				/*16 A500 */
#define KX_NUMPAD_16_PERCENT	 (KX_NUMPAD__BASE+16)
   K_NUMPAD ('#', 17) 				/*17 A500 */
#define KX_NUMPAD_17_NUMBERSIGN	 (KX_NUMPAD__BASE+17)
   K_NUMPAD ('#', 14) 				/*18 Archimedes */
#define KX_NUMPAD_14_NUMBERSIGN  (KX_NUMPAD__BASE+18)
   K_NUMPAD ('*', 15) 				/*19 Archimedes */
#define KX_NUMPAD_15_ASTERISK	 (KX_NUMPAD__BASE+19)
   K_NUMPAD ('/', 16) 				/*20 Archimedes */
#define KX_NUMPAD_16_SLASH	 (KX_NUMPAD__BASE+20)
#define KX_NUMPAD__LAST KX_NUMPAD_16_SLASH
    K_RESERVED ("numpad") 			/*21  */
    K_RESERVED ("numpad") 			/*22  */
    K_RESERVED ("numpad") 			/*23  */
    K_RESERVED ("numpad") 			/*24  */
    K_RESERVED ("numpad") 			/*25  */
    K_RESERVED ("numpad") 			/*21  */
    K_RESERVED ("numpad") 			/*27  */
    K_RESERVED ("numpad") 			/*28  */
    K_RESERVED ("numpad") 			/*29  */
    K_RESERVED ("numpad") 			/*30  */
    K_RESERVED ("numpad") 			/*31  */
#define KX_NUMPAD__LIMIT	 (KX_NUMPAD__BASE+31)
#define KX_FUNCTION__BASE	 (KX_NUMPAD__LIMIT+1)
/* Function keys - for key Fn  the KX is KX_FUNCTION__BASE + n.
 * We define a macro for this...
 */
#define KX_FUNCTION_(n)	(KX_FUNCTION__BASE + (n))
    K_RESERVED ("function") 			/* 0  */
    K_FUNCTION (1) 				/* 1  */
#define KX_FUNCTION__FIRST KX_FUNCTION_(0)
    K_FUNCTION (2) 				/* 2  */
    K_FUNCTION (3) 				/* 3  */
    K_FUNCTION (4) 				/* 4  */
    K_FUNCTION (5) 				/* 5  */
    K_FUNCTION (6) 				/* 6  */
    K_FUNCTION (7) 				/* 7  */
    K_FUNCTION (8) 				/* 8  */
    K_FUNCTION (9) 				/* 9  */
    K_FUNCTION (10) 				/*10  */
    K_FUNCTION (11) 				/*11 Archimedes */
    K_FUNCTION (12) 				/*12 Archimedes */
#define KX_FUNCTION__LAST KX_FUNCTION_(12)
    K_RESERVED ("function") 			/*13  */
    K_RESERVED ("function") 			/*14  */
    K_RESERVED ("function") 			/*15  */
    K_RESERVED ("function") 			/*16  */
    K_RESERVED ("function") 			/*17  */
    K_RESERVED ("function") 			/*18  */
    K_RESERVED ("function") 			/*19  */
    K_RESERVED ("function") 			/*20  */
    K_RESERVED ("function") 			/*21  */
    K_RESERVED ("function") 			/*22  */
    K_RESERVED ("function") 			/*23  */
    K_RESERVED ("function") 			/*24  */
    K_RESERVED ("function") 			/*25  */
    K_RESERVED ("function") 			/*26  */
    K_RESERVED ("function") 			/*27  */
    K_RESERVED ("function") 			/*28  */
    K_RESERVED ("function") 			/*29  */
    K_RESERVED ("function") 			/*30  */
    K_RESERVED ("function") 			/*31  */
#define KX_FUNCTION__LIMIT     (KX_FUNCTION__BASE+31)
#define KX_ALPHA__BASE	       (KX_FUNCTION__LIMIT+1)
/* Alphabetic keys */
    K_ALPHA ('A') 				/* 0 */
#define KX_ALPHA_A		  (KX_ALPHA__BASE+ 0)
#define KX_ALPHA__FIRST KX_ALPHA_A
/* macro to generate KX from upper case letter c in range 'A'-'Z' */
#define KX_ALPHA_(c)	(KX_ALPHA_A + (c) - 'A')
    K_ALPHA ('B') 				/* 1 */
    K_ALPHA ('C') 				/* 2 */
    K_ALPHA ('D') 				/* 3 */
    K_ALPHA ('E') 				/* 4 */
    K_ALPHA ('F') 				/* 5 */
    K_ALPHA ('G') 				/* 6 */
    K_ALPHA ('H') 				/* 7 */
    K_ALPHA ('I') 				/* 8 */
    K_ALPHA ('J') 				/* 9 */
    K_ALPHA ('K') 				/*10 */
    K_ALPHA ('L') 				/*11 */
    K_ALPHA ('M') 				/*12 */
    K_ALPHA ('N') 				/*13 */
    K_ALPHA ('O') 				/*14 */
    K_ALPHA ('P') 				/*15 */
    K_ALPHA ('Q') 				/*16 */
    K_ALPHA ('R') 				/*17 */
    K_ALPHA ('S') 				/*18 */
    K_ALPHA ('T') 				/*19 */
    K_ALPHA ('U') 				/*20 */
    K_ALPHA ('V') 				/*21 */
    K_ALPHA ('W') 				/*22 */
    K_ALPHA ('X') 				/*23 */
    K_ALPHA ('Y') 				/*24 */
    K_ALPHA ('Z') 				/*25 */
#define KX_ALPHA_Z		  (KX_ALPHA__BASE+25)
#define KX_ALPHA__LAST KX_ALPHA_Z 
    K_RESERVED ("alpha") 			/*26 */
    K_RESERVED ("alpha") 			/*27 */
    K_RESERVED ("alpha") 			/*28  */
    K_RESERVED ("alpha") 			/*29  */
    K_RESERVED ("alpha") 			/*30  */
    K_RESERVED ("alpha") 			/*31  */
    K_RESERVED ("alpha") 			/*32  */
    K_RESERVED ("alpha") 			/*33  */
    K_RESERVED ("alpha") 			/*34  */
    K_RESERVED ("alpha") 			/*35  */
    K_RESERVED ("alpha") 			/*36  */
    K_RESERVED ("alpha") 			/*37  */
    K_RESERVED ("alpha") 			/*38  */
    K_RESERVED ("alpha") 			/*39  */
    K_RESERVED ("alpha") 			/*40  */
    K_RESERVED ("alpha") 			/*41  */
    K_RESERVED ("alpha") 			/*42  */
    K_RESERVED ("alpha") 			/*43  */
    K_RESERVED ("alpha") 			/*44  */
    K_RESERVED ("alpha") 			/*45  */
    K_RESERVED ("alpha") 			/*46  */
    K_RESERVED ("alpha") 			/*47  */
    K_RESERVED ("alpha") 			/*48  */
    K_RESERVED ("alpha") 			/*49  */
    K_RESERVED ("alpha") 			/*50  */
    K_RESERVED ("alpha") 			/*51  */
    K_RESERVED ("alpha") 			/*52  */
    K_RESERVED ("alpha") 			/*53  */
    K_RESERVED ("alpha") 			/*54  */
    K_RESERVED ("alpha") 			/*55  */
    K_RESERVED ("alpha") 			/*56  */
    K_RESERVED ("alpha") 			/*57  */
    K_RESERVED ("alpha") 			/*58  */
    K_RESERVED ("alpha") 			/*59  */
    K_RESERVED ("alpha") 			/*60  */
    K_RESERVED ("alpha") 			/*61  */
    K_RESERVED ("alpha") 			/*62  */
    K_RESERVED ("alpha") 			/*63  */
    K_RESERVED ("alpha") 			/*64  */
    K_RESERVED ("alpha") 			/*65  */
    K_RESERVED ("alpha") 			/*66  */
    K_RESERVED ("alpha") 			/*67  */
    K_RESERVED ("alpha") 			/*68  */
    K_RESERVED ("alpha") 			/*69  */
    K_RESERVED ("alpha") 			/*70  */
    K_RESERVED ("alpha") 			/*71  */
    K_RESERVED ("alpha") 			/*72  */
    K_RESERVED ("alpha") 			/*73  */
    K_RESERVED ("alpha") 			/*74  */
    K_RESERVED ("alpha") 			/*75  */
    K_RESERVED ("alpha") 			/*76  */
    K_RESERVED ("alpha") 			/*77  */
    K_RESERVED ("alpha") 			/*78  */
    K_RESERVED ("alpha") 			/*79  */
    K_RESERVED ("alpha") 			/*80  */
    K_RESERVED ("alpha") 			/*81  */
    K_RESERVED ("alpha") 			/*82  */
    K_RESERVED ("alpha") 			/*83  */
    K_RESERVED ("alpha") 			/*84  */
    K_RESERVED ("alpha") 			/*85  */
    K_RESERVED ("alpha") 			/*86  */
    K_RESERVED ("alpha") 			/*87  */
    K_RESERVED ("alpha") 			/*88  */
    K_RESERVED ("alpha") 			/*89  */
    K_RESERVED ("alpha") 			/*90  */
    K_RESERVED ("alpha") 			/*91  */
    K_RESERVED ("alpha") 			/*92  */
    K_RESERVED ("alpha") 			/*93  */
    K_RESERVED ("alpha") 			/*94  */
    K_RESERVED ("alpha") 			/*95  */
#define KX_ALPHA__LIMIT		  (KX_ALPHA__BASE+95)
#define KX_GLYPH1__BASE		  (KX_ALPHA__LIMIT+1)
    K_GLYPH1 (' ') 				/* 0  */
#define KX_GLYPH1_SPACE		 (KX_GLYPH1__BASE+ 0)
#define KX_GLYPH1__FIRST KX_GLYPH1_SPACE
    K_GLYPH1 ('_') 				/* 1 A500 */
#define KX_GLYPH1_UNDERSCORE	 (KX_GLYPH1__BASE+ 1)
    K_GLYPH1 ('0') 				/* 2 A500 */
#define KX_GLYPH1_ZERO		 (KX_GLYPH1__BASE+ 2)
#define KX_GLYPH1__LAST KX_GLYPH_ZERO
    K_RESERVED ("glyph1") 			/* 3  */
    K_RESERVED ("glyph1") 			/* 4  */
    K_RESERVED ("glyph1") 			/* 5  */
    K_RESERVED ("glyph1") 			/* 6  */
    K_RESERVED ("glyph1") 			/* 7  */
    K_RESERVED ("glyph1") 			/* 8  */
    K_RESERVED ("glyph1") 			/* 9  */
    K_RESERVED ("glyph1") 			/*10  */
    K_RESERVED ("glyph1") 			/*11  */
    K_RESERVED ("glyph1") 			/*12  */
    K_RESERVED ("glyph1") 			/*13  */
    K_RESERVED ("glyph1") 			/*14  */
    K_RESERVED ("glyph1") 			/*15  */
    K_RESERVED ("glyph1") 			/*16  */
    K_RESERVED ("glyph1") 			/*17  */
    K_RESERVED ("glyph1") 			/*18  */
    K_RESERVED ("glyph1") 			/*19  */
    K_RESERVED ("glyph1") 			/*20  */
    K_RESERVED ("glyph1") 			/*21  */
    K_RESERVED ("glyph1") 			/*22  */
    K_RESERVED ("glyph1") 			/*23  */
    K_RESERVED ("glyph1") 			/*24  */
    K_RESERVED ("glyph1") 			/*25  */
    K_RESERVED ("glyph1") 			/*26  */
    K_RESERVED ("glyph1") 			/*27  */
    K_RESERVED ("glyph1") 			/*28  */
    K_RESERVED ("glyph1") 			/*29  */
    K_RESERVED ("glyph1") 			/*30  */
    K_RESERVED ("glyph1") 			/*31  */
#define KX_GLYPH1__LIMIT	 (KX_GLYPH1__BASE+31)
#define KX_GLYPH2__BASE		 (KX_GLYPH1__LIMIT+1)
    K_GLYPH2 ('1', '!') 			/* 0 */
#define KX_GLYPH2_ONE_EXCLAM     (KX_GLYPH2__BASE+ 0)
#define KX_GLYPH2__FIRST KX_GLYPH2_ONE_EXCLAM
    K_GLYPH2 ('2', '"') 			/* 1 A500 */
#define KX_GLYPH2_TWO_QUOTEDBL   (KX_GLYPH2__BASE+ 1)
    K_GLYPH2 ('2', '@') 			/* 2 Archimedes UK */
#define KX_GLYPH2_TWO_AT	 (KX_GLYPH2__BASE+ 2)
    K_GLYPH2 ('3', '#') 			/* 3  */
#define KX_GLYPH2_THREE_NUMBERSIGN (KX_GLYPH2__BASE+ 3)
    K_GLYPH2 ('4', '$') 			/* 4  */
#define KX_GLYPH2_FOUR_DOLLAR	 (KX_GLYPH2__BASE+ 4)
    K_GLYPH2 ('5', '%') 			/* 5  */
#define KX_GLYPH2_FIVE_PERCENT	 (KX_GLYPH2__BASE+ 5)
    K_GLYPH2 ('6', '&') 			/* 6 A500 */
#define KX_GLYPH2_SIX_AMPERSAND	 (KX_GLYPH2__BASE+ 6)
    K_GLYPH2 ('6', '^') 			/* 7 Archimedes UK */
#define KX_GLYPH2_SIX_CIRCUMFLEX (KX_GLYPH2__BASE+ 7)
    K_GLYPH2 ('7', '\'') 			/* 8 A500 */
#define KX_GLYPH2_SEVEN_QUOTERIGHT (KX_GLYPH2__BASE+ 8)
    K_GLYPH2 ('7', '&') 			/* 9 Archimedes UK */
#define KX_GLYPH2_SEVEN_AMPERSAND (KX_GLYPH2__BASE+ 9)
    K_GLYPH2 ('8', '(') 			/*10 A500 */
#define KX_GLYPH2_EIGHT_PARENLEFT (KX_GLYPH2__BASE+10)
    K_GLYPH2 ('8', '*') 			/*11 Archimedes UK */
#define KX_GLYPH2_EIGHT_ASTERISK (KX_GLYPH2__BASE+11)
    K_GLYPH2 ('9', ')') 			/*12 A500 */
#define KX_GLYPH2_NINE_PARENRIGHT (KX_GLYPH2__BASE+12)
    K_GLYPH2 ('9', '(') 			/*13 Archimedes UK */
#define KX_GLYPH2_NINE_PARENLEFT (KX_GLYPH2__BASE+13)
    K_GLYPH2 ('0', ')') 			/*14 Archimedes UK */
#define KX_GLYPH2_ZERO_PARENRIGHT (KX_GLYPH2__BASE+14)
    K_GLYPH2 ('[', '{') 			/*15 A500/Archimedes UK */
#define KX_GLYPH2_BRACKETLEFT_BRACELEFT (KX_GLYPH2__BASE+15)
    K_GLYPH2 (']', '}') 			/*16 A500/Archimedes UK */
#define KX_GLYPH2_BRACKETRIGHT_BRACERIGHT (KX_GLYPH2__BASE+16)
    K_GLYPH2 ('\\', '|') 			/*17 A500/Archimedes UK */
#define KX_GLYPH2_BACKSLASH_BAR	 (KX_GLYPH2__BASE+17)
    K_GLYPH2 (',', '<') 			/*18 A500/Archimedes UK */
#define KX_GLYPH2_COMMA_LESS	 (KX_GLYPH2__BASE+18)
    K_GLYPH2 ('.', '>') 			/*19 A500/Archimedes UK */
#define KX_GLYPH2_PERIOD_GREATER (KX_GLYPH2__BASE+19)
    K_GLYPH2 ('/', '?') 			/*20 A500/Archimedes UK */
#define KX_GLYPH2_SLASH_QUESTION (KX_GLYPH2__BASE+20)
    K_GLYPH2 ('-', '=') 			/*21 A500 */
#define KX_GLYPH2_HYPHEN_EQUAL	 (KX_GLYPH2__BASE+21)
    K_GLYPH2 ('^', '~') 			/*22 A500 */
#define KX_GLYPH2_CIRCUMFLEX_TILDE (KX_GLYPH2__BASE+22)
    K_GLYPH2 (C_COPYRIGHT, C_STERLING) 		/*23 A500 */
#define KX_GLYPH2_COPYRIGHT_STERLING (KX_GLYPH2__BASE+23)
    K_GLYPH2 ('@', '`') 			/*24 A500 */
#define KX_GLYPH2_AT_QUOTELEFT   (KX_GLYPH2__BASE+24)
    K_GLYPH2 (';', '+') 			/*25 A500 */
#define KX_GLYPH2_SEMICOLON_PLUS (KX_GLYPH2__BASE+25)
    K_GLYPH2 (':', '*') 			/*26 A500 */
#define KX_GLYPH2_COLON_ASTERISK (KX_GLYPH2__BASE+26)
    K_GLYPH2 ('`', '~') 			/*27 Archimedes UK */
#define KX_GLYPH2_QUOTELEFT_TILDE (KX_GLYPH2__BASE+27)
    K_GLYPH2 ('-', '_') 			/*28 Archimedes UK */
#define KX_GLYPH2_HYPHEN_UNDERSCORE (KX_GLYPH2__BASE+28)
    K_GLYPH2 ('=', '+') 			/*29 Archimedes UK */
#define KX_GLYPH2_EQUAL_PLUS	 (KX_GLYPH2__BASE+29)
    K_GLYPH2 (C_STERLING, C_CURRENCY) 		/*30 Archimedes UK */
#define KX_GLYPH2_STERLING_CURRENCY (KX_GLYPH2__BASE+30)
    K_GLYPH2 (';', ':') 			/*31 Archimedes UK */
#define KX_GLYPH2_SEMICOLON_COLON (KX_GLYPH2__BASE+31)
    K_GLYPH2 ('\'', '"') 			/*32 Archimedes UK */
#define KX_GLYPH2_QUOTERIGHT_QUOTEDBL (KX_GLYPH2__BASE+32)
#define KX_GLYPH2__LAST KX_GLYPH2_QUOTERIGHT_QUOTEDBL
    K_RESERVED ("glyph2") 			/*33  */
    K_RESERVED ("glyph2") 			/*34  */
    K_RESERVED ("glyph2") 			/*35  */
    K_RESERVED ("glyph2") 			/*36  */
    K_RESERVED ("glyph2") 			/*37  */
    K_RESERVED ("glyph2") 			/*38  */
    K_RESERVED ("glyph2") 			/*39  */
    K_RESERVED ("glyph2") 			/*40  */
    K_RESERVED ("glyph2") 			/*41  */
    K_RESERVED ("glyph2") 			/*42  */
    K_RESERVED ("glyph2") 			/*43  */
    K_RESERVED ("glyph2") 			/*44  */
    K_RESERVED ("glyph2") 			/*45  */
    K_RESERVED ("glyph2") 			/*46  */
    K_RESERVED ("glyph2") 			/*47  */
    K_RESERVED ("glyph2") 			/*48  */
    K_RESERVED ("glyph2") 			/*49  */
    K_RESERVED ("glyph2") 			/*50  */
    K_RESERVED ("glyph2") 			/*51  */
    K_RESERVED ("glyph2") 			/*52  */
    K_RESERVED ("glyph2") 			/*53  */
    K_RESERVED ("glyph2") 			/*54  */
    K_RESERVED ("glyph2") 			/*55  */
    K_RESERVED ("glyph2") 			/*56  */
    K_RESERVED ("glyph2") 			/*57  */
    K_RESERVED ("glyph2") 			/*58  */
    K_RESERVED ("glyph2") 			/*59  */
    K_RESERVED ("glyph2") 			/*60  */
    K_RESERVED ("glyph2") 			/*61  */
    K_RESERVED ("glyph2") 			/*62  */
    K_RESERVED ("glyph2") 			/*63  */
#define KX_GLYPH2__LIMIT	 (KX_GLYPH2__BASE+63)
#define KX_GLYPH3__BASE		 (KX_GLYPH2__LIMIT+1)
#define KX_GLYPH3__FIRST KX_GLYPH3__BASE
#define KX_GLYPH3__LAST (KX_GLYPH3__BASE-1)
    K_RESERVED ("glyph3") 			/* 0  */
    K_RESERVED ("glyph3") 			/* 1  */
    K_RESERVED ("glyph3") 			/* 2  */
    K_RESERVED ("glyph3") 			/* 3  */
    K_RESERVED ("glyph3") 			/* 4  */
    K_RESERVED ("glyph3") 			/* 5  */
    K_RESERVED ("glyph3") 			/* 6  */
    K_RESERVED ("glyph3") 			/* 7  */
    K_RESERVED ("glyph3") 			/* 8  */
    K_RESERVED ("glyph3") 			/* 9  */
    K_RESERVED ("glyph3") 			/*10  */
    K_RESERVED ("glyph3") 			/*11  */
    K_RESERVED ("glyph3") 			/*12  */
    K_RESERVED ("glyph3") 			/*13  */
    K_RESERVED ("glyph3") 			/*14  */
    K_RESERVED ("glyph3") 			/*15  */
    K_RESERVED ("glyph3") 			/*16  */
    K_RESERVED ("glyph3") 			/*17  */
    K_RESERVED ("glyph3") 			/*18  */
    K_RESERVED ("glyph3") 			/*19  */
    K_RESERVED ("glyph3") 			/*20  */
    K_RESERVED ("glyph3") 			/*21  */
    K_RESERVED ("glyph3") 			/*22  */
    K_RESERVED ("glyph3") 			/*23  */
    K_RESERVED ("glyph3") 			/*24  */
    K_RESERVED ("glyph3") 			/*25  */
    K_RESERVED ("glyph3") 			/*26  */
    K_RESERVED ("glyph3") 			/*27  */
    K_RESERVED ("glyph3") 			/*28  */
    K_RESERVED ("glyph3") 			/*29  */
    K_RESERVED ("glyph3") 			/*30  */
    K_RESERVED ("glyph3") 			/*31  */
    K_RESERVED ("glyph3") 			/*32  */
    K_RESERVED ("glyph3") 			/*33  */
    K_RESERVED ("glyph3") 			/*34  */
    K_RESERVED ("glyph3") 			/*35  */
    K_RESERVED ("glyph3") 			/*36  */
    K_RESERVED ("glyph3") 			/*37  */
    K_RESERVED ("glyph3") 			/*38  */
    K_RESERVED ("glyph3") 			/*39  */
    K_RESERVED ("glyph3") 			/*40  */
    K_RESERVED ("glyph3") 			/*41  */
    K_RESERVED ("glyph3") 			/*42  */
    K_RESERVED ("glyph3") 			/*43  */
    K_RESERVED ("glyph3") 			/*44  */
    K_RESERVED ("glyph3") 			/*45  */
    K_RESERVED ("glyph3") 			/*46  */
    K_RESERVED ("glyph3") 			/*47  */
    K_RESERVED ("glyph3") 			/*48  */
    K_RESERVED ("glyph3") 			/*49  */
    K_RESERVED ("glyph3") 			/*50  */
    K_RESERVED ("glyph3") 			/*51  */
    K_RESERVED ("glyph3") 			/*52  */
    K_RESERVED ("glyph3") 			/*53  */
    K_RESERVED ("glyph3") 			/*54  */
    K_RESERVED ("glyph3") 			/*55  */
    K_RESERVED ("glyph3") 			/*56  */
    K_RESERVED ("glyph3") 			/*57  */
    K_RESERVED ("glyph3") 			/*58  */
    K_RESERVED ("glyph3") 			/*59  */
    K_RESERVED ("glyph3") 			/*60  */
    K_RESERVED ("glyph3") 			/*61  */
    K_RESERVED ("glyph3") 			/*62  */
    K_RESERVED ("glyph3") 			/*63  */
#define KX_GLYPH3__LIMIT	 (KX_GLYPH3__BASE+63)
#define KX_GLYPH4__BASE		 (KX_GLYPH3__LIMIT+1)
#define KX_GLYPH4__FIRST KX_GLYPH4__BASE
#define KX_GLYPH4__LAST (KX_GLYPH4__BASE-1)
    K_RESERVED ("glyph4") 			/* 0  */
    K_RESERVED ("glyph4") 			/* 1  */
    K_RESERVED ("glyph4") 			/* 2  */
    K_RESERVED ("glyph4") 			/* 3  */
    K_RESERVED ("glyph4") 			/* 4  */
    K_RESERVED ("glyph4") 			/* 5  */
    K_RESERVED ("glyph4") 			/* 6  */
    K_RESERVED ("glyph4") 			/* 7  */
    K_RESERVED ("glyph4") 			/* 8  */
    K_RESERVED ("glyph4") 			/* 9  */
    K_RESERVED ("glyph4") 			/*10  */
    K_RESERVED ("glyph4") 			/*11  */
    K_RESERVED ("glyph4") 			/*12  */
    K_RESERVED ("glyph4") 			/*13  */
    K_RESERVED ("glyph4") 			/*14  */
    K_RESERVED ("glyph4") 			/*15  */
    K_RESERVED ("glyph4") 			/*16  */
    K_RESERVED ("glyph4") 			/*17  */
    K_RESERVED ("glyph4") 			/*18  */
    K_RESERVED ("glyph4") 			/*19  */
    K_RESERVED ("glyph4") 			/*20  */
    K_RESERVED ("glyph4") 			/*21  */
    K_RESERVED ("glyph4") 			/*22  */
    K_RESERVED ("glyph4") 			/*23  */
    K_RESERVED ("glyph4") 			/*24  */
    K_RESERVED ("glyph4") 			/*25  */
    K_RESERVED ("glyph4") 			/*26  */
    K_RESERVED ("glyph4") 			/*27  */
    K_RESERVED ("glyph4") 			/*28  */
    K_RESERVED ("glyph4") 			/*29  */
    K_RESERVED ("glyph4") 			/*30  */
    K_RESERVED ("glyph4") 			/*31  */
    K_RESERVED ("glyph4") 			/*32  */
    K_RESERVED ("glyph4") 			/*33  */
    K_RESERVED ("glyph4") 			/*34  */
    K_RESERVED ("glyph4") 			/*35  */
    K_RESERVED ("glyph4") 			/*36  */
    K_RESERVED ("glyph4") 			/*37  */
    K_RESERVED ("glyph4") 			/*38  */
    K_RESERVED ("glyph4") 			/*39  */
    K_RESERVED ("glyph4") 			/*40  */
    K_RESERVED ("glyph4") 			/*41  */
    K_RESERVED ("glyph4") 			/*42  */
    K_RESERVED ("glyph4") 			/*43  */
    K_RESERVED ("glyph4") 			/*44  */
    K_RESERVED ("glyph4") 			/*45  */
    K_RESERVED ("glyph4") 			/*46  */
    K_RESERVED ("glyph4") 			/*47  */
    K_RESERVED ("glyph4") 			/*48  */
    K_RESERVED ("glyph4") 			/*49  */
    K_RESERVED ("glyph4") 			/*50  */
    K_RESERVED ("glyph4") 			/*51  */
    K_RESERVED ("glyph4") 			/*52  */
    K_RESERVED ("glyph4") 			/*53  */
    K_RESERVED ("glyph4") 			/*54  */
    K_RESERVED ("glyph4") 			/*55  */
    K_RESERVED ("glyph4") 			/*56  */
    K_RESERVED ("glyph4") 			/*57  */
    K_RESERVED ("glyph4") 			/*58  */
    K_RESERVED ("glyph4") 			/*59  */
    K_RESERVED ("glyph4") 			/*60  */
    K_RESERVED ("glyph4") 			/*61  */
    K_RESERVED ("glyph4") 			/*62  */
    K_RESERVED ("glyph4")			/*63  */
#define KX_GLYPH4__LIMIT	 (KX_GLYPH4__BASE+63)
#define KEY_TABLE_ENTRIES    	 (KX_GLYPH4__LIMIT+1)

#ifdef GENERATE_KEY_TABLE

};

#endif

#endif/*__dev_key_table_h*/

/* EOF key_table.h */
