/* $Id: plevent.h,v 1.2 2007/05/08 09:09:37 rice Exp $

    Input event (especially keyboard) definitions for use from plplot
    event handlers.

    Key definitions are taken from the X11/keysymdef.h include file, with
    some changes:
        - only the control keys are retained
	- the XK prefix has been changed to PLK
	- control keys with ASCII equivalents use the ASCII code

    By using the ASCII equivalent (if it exists) for all control keys, it
    is easier to handle keyboard input from any device which is ASCII based.
    Devices which use some other kind of key encoding must translate the raw
    keycodes to those used here.
*/

#ifndef __PLEVENT_H__
#define __PLEVENT_H__

/* Key definitions */

/***********************************************************
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
and the Massachusetts Institute of Technology, Cambridge, Massachusetts.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Digital or MIT not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.

DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.

******************************************************************/

/* Miscellaneous control keys, those with ASCII equivalents */

#define PLK_BackSpace		0x08	/* back space, back char */
#define PLK_Tab			0x09
#define PLK_Linefeed		0x0A	/* Linefeed, LF */
#define PLK_Return		0x0D	/* Return, enter */
#define PLK_Escape		0x1B
#define PLK_Delete		0xFF	/* Delete, rubout */

/* Those without ASCII equivalents */

#define PLK_Clear		0xFF0B
#define PLK_Pause		0xFF13	/* Pause, hold */
#define PLK_Scroll_Lock		0xFF14

/* Cursor control & motion */

#define PLK_Home		0xFF50
#define PLK_Left		0xFF51	/* Move left, left arrow */
#define PLK_Up			0xFF52	/* Move up, up arrow */
#define PLK_Right		0xFF53	/* Move right, right arrow */
#define PLK_Down		0xFF54	/* Move down, down arrow */
#define PLK_Prior		0xFF55	/* Prior, previous (Page Up) */
#define PLK_Next		0xFF56	/* Next (Page Down) */
#define PLK_End			0xFF57	/* EOL */
#define PLK_Begin		0xFF58	/* BOL */

/* Misc Functions */

#define PLK_Select		0xFF60	/* Select, mark */
#define PLK_Print		0xFF61
#define PLK_Execute		0xFF62	/* Execute, run, do */
#define PLK_Insert		0xFF63	/* Insert, insert here */
#define PLK_Undo		0xFF65	/* Undo, oops */
#define PLK_Redo		0xFF66	/* redo, again */
#define PLK_Menu		0xFF67
#define PLK_Find		0xFF68	/* Find, search */
#define PLK_Cancel		0xFF69	/* Cancel, stop, abort, exit */
#define PLK_Help		0xFF6A	/* Help, ? */
#define PLK_Break		0xFF6B
#define PLK_Mode_switch		0xFF7E	/* Character set switch */
#define PLK_script_switch	0xFF7E  /* Alias for mode_switch */
#define PLK_Num_Lock		0xFF7F

/* Keypad Functions, keypad numbers cleverly chosen to map to ascii */

#define PLK_KP_Space		0xFF80	/* space */
#define PLK_KP_Tab		0xFF89
#define PLK_KP_Enter		0xFF8D	/* enter */
#define PLK_KP_F1		0xFF91	/* PF1, KP_A, ... */
#define PLK_KP_F2		0xFF92
#define PLK_KP_F3		0xFF93
#define PLK_KP_F4		0xFF94
#define PLK_KP_Equal		0xFFBD	/* equals */
#define PLK_KP_Multiply		0xFFAA
#define PLK_KP_Add		0xFFAB
#define PLK_KP_Separator	0xFFAC	/* separator, often comma */
#define PLK_KP_Subtract		0xFFAD
#define PLK_KP_Decimal		0xFFAE
#define PLK_KP_Divide		0xFFAF

#define PLK_KP_0		0xFFB0
#define PLK_KP_1		0xFFB1
#define PLK_KP_2		0xFFB2
#define PLK_KP_3		0xFFB3
#define PLK_KP_4		0xFFB4
#define PLK_KP_5		0xFFB5
#define PLK_KP_6		0xFFB6
#define PLK_KP_7		0xFFB7
#define PLK_KP_8		0xFFB8
#define PLK_KP_9		0xFFB9

/*
 * Auxilliary Functions; note the duplicate definitions for left and right
 * function keys;  Sun keyboards and a few other manufactures have such
 * function key groups on the left and/or right sides of the keyboard.
 * We've not found a keyboard with more than 35 function keys total.
 */

#define PLK_F1			0xFFBE
#define PLK_F2			0xFFBF
#define PLK_F3			0xFFC0
#define PLK_F4			0xFFC1
#define PLK_F5			0xFFC2
#define PLK_F6			0xFFC3
#define PLK_F7			0xFFC4
#define PLK_F8			0xFFC5
#define PLK_F9			0xFFC6
#define PLK_F10			0xFFC7
#define PLK_F11			0xFFC8
#define PLK_L1			0xFFC8
#define PLK_F12			0xFFC9
#define PLK_L2			0xFFC9
#define PLK_F13			0xFFCA
#define PLK_L3			0xFFCA
#define PLK_F14			0xFFCB
#define PLK_L4			0xFFCB
#define PLK_F15			0xFFCC
#define PLK_L5			0xFFCC
#define PLK_F16			0xFFCD
#define PLK_L6			0xFFCD
#define PLK_F17			0xFFCE
#define PLK_L7			0xFFCE
#define PLK_F18			0xFFCF
#define PLK_L8			0xFFCF
#define PLK_F19			0xFFD0
#define PLK_L9			0xFFD0
#define PLK_F20			0xFFD1
#define PLK_L10			0xFFD1
#define PLK_F21			0xFFD2
#define PLK_R1			0xFFD2
#define PLK_F22			0xFFD3
#define PLK_R2			0xFFD3
#define PLK_F23			0xFFD4
#define PLK_R3			0xFFD4
#define PLK_F24			0xFFD5
#define PLK_R4			0xFFD5
#define PLK_F25			0xFFD6
#define PLK_R5			0xFFD6
#define PLK_F26			0xFFD7
#define PLK_R6			0xFFD7
#define PLK_F27			0xFFD8
#define PLK_R7			0xFFD8
#define PLK_F28			0xFFD9
#define PLK_R8			0xFFD9
#define PLK_F29			0xFFDA
#define PLK_R9			0xFFDA
#define PLK_F30			0xFFDB
#define PLK_R10			0xFFDB
#define PLK_F31			0xFFDC
#define PLK_R11			0xFFDC
#define PLK_F32			0xFFDD
#define PLK_R12			0xFFDD
#define PLK_R13			0xFFDE
#define PLK_F33			0xFFDE
#define PLK_F34			0xFFDF
#define PLK_R14			0xFFDF
#define PLK_F35			0xFFE0
#define PLK_R15			0xFFE0

/* Modifiers */

#define PLK_Shift_L		0xFFE1	/* Left shift */
#define PLK_Shift_R		0xFFE2	/* Right shift */
#define PLK_Control_L		0xFFE3	/* Left control */
#define PLK_Control_R		0xFFE4	/* Right control */
#define PLK_Caps_Lock		0xFFE5	/* Caps lock */
#define PLK_Shift_Lock		0xFFE6	/* Shift lock */

#define PLK_Meta_L		0xFFE7	/* Left meta */
#define PLK_Meta_R		0xFFE8	/* Right meta */
#define PLK_Alt_L		0xFFE9	/* Left alt */
#define PLK_Alt_R		0xFFEA	/* Right alt */
#define PLK_Super_L		0xFFEB	/* Left super */
#define PLK_Super_R		0xFFEC	/* Right super */
#define PLK_Hyper_L		0xFFED	/* Left hyper */
#define PLK_Hyper_R		0xFFEE	/* Right hyper */

#endif	/* __PLEVENT_H__ */
