/**
 * Copyright 2011 JogAmp Community. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 * 
 *    1. Redistributions of source code must retain the above copyright notice, this list of
 *       conditions and the following disclaimer.
 * 
 *    2. Redistributions in binary form must reproduce the above copyright notice, this list
 *       of conditions and the following disclaimer in the documentation and/or other materials
 *       provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * The views and conclusions contained in the software and documentation are those of the
 * authors and should not be interpreted as representing official policies, either expressed
 * or implied, of JogAmp Community.
 */

#ifndef _KEY_EVENT_H_
#define _KEY_EVENT_H_

#define EVENT_KEY_PRESSED  300
#define EVENT_KEY_RELEASED 301

#define J_VK_UNDEFINED      ( 0x0U )
#define J_VK_HOME           ( 0x02U )
#define J_VK_END            ( 0x03U )
#define J_VK_FINAL          ( 0x04U )
#define J_VK_PRINTSCREEN    ( 0x05U )
#define J_VK_BACK_SPACE     ( 0x08U )
#define J_VK_TAB            ( 0x09U )
#define J_VK_PAGE_DOWN      ( 0x0BU )
#define J_VK_CLEAR          ( 0x0CU )
#define J_VK_ENTER          ( 0x0DU )
#define J_VK_SHIFT          ( 0x0FU )
#define J_VK_PAGE_UP        ( 0x10U )
#define J_VK_CONTROL        ( 0x11U )
#define J_VK_ALT            ( 0x12U )
#define J_VK_ALT_GRAPH      ( 0x13U )
#define J_VK_CAPS_LOCK      ( 0x14U )
#define J_VK_PAUSE          ( 0x16U )
#define J_VK_SCROLL_LOCK    ( 0x17U )
#define J_VK_CANCEL         ( 0x18U )
#define J_VK_INSERT         ( 0x1AU )
#define J_VK_ESCAPE         ( 0x1BU )
#define J_VK_CONVERT        ( 0x1CU )
#define J_VK_NONCONVERT     ( 0x1DU )
#define J_VK_ACCEPT         ( 0x1EU )
#define J_VK_MODECHANGE     ( 0x1FU )

//
// Unicode: Printable [0x20 - 0x7E]
//

#define J_VK_SPACE          ( 0x20U )
#define J_VK_EXCLAMATION_MARK ( 0x21U )
#define J_VK_QUOTEDBL       ( 0x22U )
#define J_VK_NUMBER_SIGN    ( 0x23U )
#define J_VK_DOLLAR         ( 0x24U )
#define J_VK_PERCENT        ( 0x25U )
#define J_VK_AMPERSAND      ( 0x26U )
#define J_VK_QUOTE          ( 0x27U )
#define J_VK_LEFT_PARENTHESIS  ( 0x28U )
#define J_VK_RIGHT_PARENTHESIS ( 0x29U )
#define J_VK_ASTERISK       ( 0x2AU )
#define J_VK_PLUS           ( 0x2BU )
#define J_VK_COMMA          ( 0x2CU )
#define J_VK_MINUS          ( 0x2DU )
#define J_VK_PERIOD         ( 0x2EU )
#define J_VK_SLASH          ( 0x2FU )
#define J_VK_0              ( 0x30U )
#define J_VK_1              ( 0x31U )
#define J_VK_2              ( 0x32U )
#define J_VK_3              ( 0x33U )
#define J_VK_4              ( 0x34U )
#define J_VK_5              ( 0x35U )
#define J_VK_6              ( 0x36U )
#define J_VK_7              ( 0x37U )
#define J_VK_8              ( 0x38U )
#define J_VK_9              ( 0x39U )
#define J_VK_COLON          ( 0x3AU )
#define J_VK_SEMICOLON      ( 0x3BU )
#define J_VK_LESS           ( 0x3CU )
#define J_VK_EQUALS         ( 0x3DU )
#define J_VK_GREATER        ( 0x3EU )
#define J_VK_QUESTIONMARK   ( 0x3FU )
#define J_VK_AT             ( 0x40U )
#define J_VK_A              ( 0x41U )
#define J_VK_B              ( 0x42U )
#define J_VK_C              ( 0x43U )
#define J_VK_D              ( 0x44U )
#define J_VK_E              ( 0x45U )
#define J_VK_F              ( 0x46U )
#define J_VK_G              ( 0x47U )
#define J_VK_H              ( 0x48U )
#define J_VK_I              ( 0x49U )
#define J_VK_J              ( 0x4AU )
#define J_VK_K              ( 0x4BU )
#define J_VK_L              ( 0x4CU )
#define J_VK_M              ( 0x4DU )
#define J_VK_N              ( 0x4EU )
#define J_VK_O              ( 0x4FU )
#define J_VK_P              ( 0x50U )
#define J_VK_Q              ( 0x51U )
#define J_VK_R              ( 0x52U )
#define J_VK_S              ( 0x53U )
#define J_VK_T              ( 0x54U )
#define J_VK_U              ( 0x55U )
#define J_VK_V              ( 0x56U )
#define J_VK_W              ( 0x57U )
#define J_VK_X              ( 0x58U )
#define J_VK_Y              ( 0x59U )
#define J_VK_Z              ( 0x5AU )
#define J_VK_OPEN_BRACKET   ( 0x5BU )
#define J_VK_BACK_SLASH     ( 0x5CU )
#define J_VK_CLOSE_BRACKET  ( 0x5DU )
#define J_VK_CIRCUMFLEX     ( 0x5EU )
#define J_VK_UNDERSCORE     ( 0x5FU )
#define J_VK_BACK_QUOTE     ( 0x60U )
#define J_VK_F1             ( 0x60U+ 1U )
#define J_VK_F2             ( 0x60U+ 2U )
#define J_VK_F3             ( 0x60U+ 3U )
#define J_VK_F4             ( 0x60U+ 4U )
#define J_VK_F5             ( 0x60U+ 5U )
#define J_VK_F6             ( 0x60U+ 6U )
#define J_VK_F7             ( 0x60U+ 7U )
#define J_VK_F8             ( 0x60U+ 8U )
#define J_VK_F9             ( 0x60U+ 9U )
#define J_VK_F10            ( 0x60U+10U )
#define J_VK_F11            ( 0x60U+11U )
#define J_VK_F12            ( 0x60U+12U )
#define J_VK_F13            ( 0x60U+13U )
#define J_VK_F14            ( 0x60U+14U )
#define J_VK_F15            ( 0x60U+15U )
#define J_VK_F16            ( 0x60U+16U )
#define J_VK_F17            ( 0x60U+17U )
#define J_VK_F18            ( 0x60U+18U )
#define J_VK_F19            ( 0x60U+19U )
#define J_VK_F20            ( 0x60U+20U )
#define J_VK_F21            ( 0x60U+21U )
#define J_VK_F22            ( 0x60U+22U )
#define J_VK_F23            ( 0x60U+23U )
#define J_VK_F24            ( 0x60U+24U )
#define J_VK_LEFT_BRACE     ( 0x7BU )
#define J_VK_PIPE           ( 0x7CU )
#define J_VK_RIGHT_BRACE    ( 0x7DU )
#define J_VK_TILDE          ( 0x7EU )

//
// Unicode: Non printable controls: [0x7F - 0x9F]
//

#define J_VK_SEPARATOR      ( 0x7FU )
#define J_VK_NUMPAD0        ( 0x80U )
#define J_VK_NUMPAD1        ( 0x81U )
#define J_VK_NUMPAD2        ( 0x82U )
#define J_VK_NUMPAD3        ( 0x83U )
#define J_VK_NUMPAD4        ( 0x84U )
#define J_VK_NUMPAD5        ( 0x85U )
#define J_VK_NUMPAD6        ( 0x86U )
#define J_VK_NUMPAD7        ( 0x87U )
#define J_VK_NUMPAD8        ( 0x88U )
#define J_VK_NUMPAD9        ( 0x89U )
#define J_VK_DECIMAL        ( 0x8AU )
#define J_VK_ADD            ( 0x8BU )
#define J_VK_SUBTRACT       ( 0x8CU )
#define J_VK_MULTIPLY       ( 0x8DU )
#define J_VK_DIVIDE         ( 0x8EU )

#define J_VK_DELETE         ( 0x93U )
#define J_VK_NUM_LOCK       ( 0x94U )
#define J_VK_LEFT           ( 0x95U )
#define J_VK_UP             ( 0x96U )
#define J_VK_RIGHT          ( 0x97U )
#define J_VK_DOWN           ( 0x98U )
#define J_VK_CONTEXT_MENU   ( 0x99U )
#define J_VK_WINDOWS        ( 0x9AU )
#define J_VK_META           ( 0x9BU )
#define J_VK_HELP           ( 0x9CU )
#define J_VK_COMPOSE        ( 0x9DU )
#define J_VK_BEGIN          ( 0x9EU )
#define J_VK_STOP           ( 0x9FU )

//
// Unicode: Printable [0x00A0 - 0xDFFF]
//

#define J_VK_INVERTED_EXCLAMATION_MARK ( 0xA1U )
#define J_VK_EURO_SIGN                ( 0x20ACU )

//
// Unicode: Private 0xE000 - 0xF8FF (Marked Non-Printable)
//

/* for Sun keyboards */
#define J_VK_CUT            ( 0xF879U )
#define J_VK_COPY           ( 0xF87AU )
#define J_VK_PASTE          ( 0xF87BU )
#define J_VK_UNDO           ( 0xF87CU )
#define J_VK_AGAIN          ( 0xF87DU )
#define J_VK_FIND           ( 0xF87EU )
#define J_VK_PROPS          ( 0xF87FU )

/* for input method support on Asian Keyboards */
#define J_VK_INPUT_METHOD_ON_OFF ( 0xF890U )
#define J_VK_CODE_INPUT ( 0xF891U )
#define J_VK_ROMAN_CHARACTERS ( 0xF892U )
#define J_VK_ALL_CANDIDATES ( 0xF893U )
#define J_VK_PREVIOUS_CANDIDATE ( 0xF894U )
#define J_VK_ALPHANUMERIC   ( 0xF895U )
#define J_VK_KATAKANA       ( 0xF896U )
#define J_VK_HIRAGANA       ( 0xF897U )
#define J_VK_FULL_WIDTH     ( 0xF898U )
#define J_VK_HALF_WIDTH     ( 0xF89AU )
#define J_VK_JAPANESE_KATAKANA ( 0xF89BU )
#define J_VK_JAPANESE_HIRAGANA ( 0xF89CU )
#define J_VK_JAPANESE_ROMAN ( 0xF89DU )
#define J_VK_KANA_LOCK ( 0xF89FU )

#define J_VK_KEYBOARD_INVISIBLE ( 0xF8FFU )

#endif