Improved keyboard with semi-inline arrows

This commit is contained in:
Aaron Culliney 2015-05-12 21:37:13 -07:00
parent 8e73b70f95
commit df218fed05
4 changed files with 191 additions and 182 deletions

View File

@ -307,30 +307,30 @@ const unsigned char interface_glyphs[256] =
0x1c, 0x24, 0x04, 0x3e, 0x22, 0x22, 0x2a, 0x3e,
/* : 0x10 ----------------------- reverse return arrow */
0x01, 0x01, 0x01, 0x11, 0x31, 0x7f, 0x30, 0x10,
/* : 0x11 ----------------------- glyph_sprouting_menu */
0x7f, 0x41, 0x49, 0x5d, 0x49, 0x41, 0x7f, 0x00,
/* : 0x12 ----------------------- glyph_joystick */
0x10, 0x08, 0x1e, 0x22, 0x22, 0x2a, 0x22, 0x3e,
/* : 0x13 */
/* : 0x11 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* : 0x12 ----------------------- glyph_joystick */
0x04, 0x08, 0x36, 0x1c, 0x1c, 0x1c, 0x1c, 0x3e,
/* : 0x13 ----------------------- glyph_ctrl */
0x08, 0x1c, 0x3e, 0x63, 0x7b, 0x63, 0x7f, 0x00,
/* : 0x14 ----------------------- glyph_lowercase */
0x00, 0x1c, 0x20, 0x3c, 0x22, 0x3c, 0x00, 0x3e,
0x7f, 0x63, 0x5f, 0x43, 0x5d, 0x43, 0x7f, 0x00,
/* : 0x15 ----------------------- glyph_uppercase */
0x08, 0x14, 0x22, 0x3e, 0x22, 0x22, 0x00, 0x3e,
/* : 0x16 ----------------------- glyph_backspace */
0x77, 0x6b, 0x5d, 0x41, 0x5d, 0x5d, 0x7f, 0x00,
/* : 0x16 ----------------------- glyph_showalt */
0x7f, 0x77, 0x77, 0x41, 0x77, 0x77, 0x7f, 0x00,
/* : 0x17 ----------------------- glyph_backspace */
0x00, 0x08, 0x04, 0x7e, 0x04, 0x08, 0x00, 0x00,
/* : 0x17 ----------------------- glyph_showalt1 */
0x00, 0x7f, 0x01, 0x09, 0x1d, 0x09, 0x01, 0x7f,
/* : 0x18 ----------------------- glyph_showalt2 */
0x00, 0x7f, 0x40, 0x40, 0x5c, 0x40, 0x40, 0x7f,
/* : 0x18 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* : 0x19 ----------------------- glyph_leftspace */
0x00, 0x7e, 0x02, 0x42, 0x42, 0x42, 0x02, 0x7e,
/* : 0x1A ----------------------- glyph_midspace */
0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x7f,
/* : 0x1B ----------------------- glyph_rightspace */
0x00, 0x3f, 0x20, 0x21, 0x21, 0x21, 0x20, 0x3f,
/* : 0x1C ----------------------- glyph_tab */
0x08, 0x18, 0x28, 0x4c, 0x28, 0x18, 0x08, 0x00,
/* : 0x1C ----------------------- glyph_esc */
0x7f, 0x63, 0x5d, 0x41, 0x7d, 0x43, 0x7f, 0x00,
/* : 0x1D ----------------------- glyph_return left */
0x00, 0x00, 0x00, 0x10, 0x18, 0x7c, 0x18, 0x10,
/* : 0x1E ----------------------- glyph_return right */

View File

@ -1327,52 +1327,61 @@
#######
....##.
....#..
: 0x11 ----------------------- glyph_sprouting_menu
#######
#.....#
#..#..#
#.###.#
#..#..#
#.....#
#######
: 0x11
.......
.......
.......
.......
.......
.......
.......
.......
: 0x12 ----------------------- glyph_joystick
....#..
..#....
...#...
.####..
.#...#.
.#...#.
.#.#.#.
.#...#.
.##.##.
..###..
..###..
..###..
..###..
.#####.
: 0x13
.......
.......
.......
.......
.......
.......
.......
: 0x13 ----------------------- glyph_ctrl
...#...
..###..
.#####.
##...##
##.####
##...##
#######
.......
: 0x14 ----------------------- glyph_lowercase
#######
##...##
#####.#
##....#
#.###.#
##....#
#######
.......
..###..
.....#.
..####.
.#...#.
..####.
.......
.#####.
: 0x15 ----------------------- glyph_uppercase
...#...
..#.#..
.#...#.
.#####.
.#...#.
.#...#.
###.###
##.#.##
#.###.#
#.....#
#.###.#
#.###.#
#######
.......
.#####.
: 0x16 ----------------------- glyph_backspace
: 0x16 ----------------------- glyph_showalt
#######
###.###
###.###
#.....#
###.###
###.###
#######
.......
: 0x17 ----------------------- glyph_backspace
.......
...#...
..#....
@ -1381,24 +1390,15 @@
...#...
.......
.......
: 0x17 ----------------------- glyph_showalt1
: 0x18
.......
.......
.......
.......
.......
.......
.......
#######
#......
#..#...
#.###..
#..#...
#......
#######
: 0x18 ----------------------- glyph_showalt2
.......
#######
......#
......#
..###.#
......#
......#
#######
: 0x19 ----------------------- glyph_leftspace
.......
.######
@ -1426,14 +1426,14 @@
#....#.
.....#.
######.
: 0x1C ----------------------- glyph_tab
...#...
...##..
...#.#.
..##..#
...#.#.
...##..
...#...
: 0x1C ----------------------- glyph_esc
#######
##...##
#.###.#
#.....#
#.#####
##....#
#######
.......
: 0x1D ----------------------- glyph_return left
.......

View File

@ -21,17 +21,17 @@
#define MODEL_DEPTH -1/32.f
#define KBD_TEMPLATE_COLS 10
#define KBD_TEMPLATE_ROWS 7
#define KBD_TEMPLATE_ROWS 6
#define ROW_WITH_ADJACENTS (KBD_TEMPLATE_ROWS-1)
#define _ROWOFF 3 // actual keyboard row offset
#define _ROWOFF 2 // main keyboard row offset
// HACK NOTE FIXME TODO : interpolated pixel adjustment still necessary ...
#define KBD_FB_WIDTH ((KBD_TEMPLATE_COLS * FONT80_WIDTH_PIXELS) + INTERPOLATED_PIXEL_ADJUSTMENT)
#define KBD_FB_HEIGHT (KBD_TEMPLATE_ROWS * FONT_HEIGHT_PIXELS)
#define KBD_OBJ_W 2.0
#define KBD_OBJ_H 1.75
#define KBD_OBJ_H 1.5
HUD_CLASS(GLModelHUDKeyboard,
char *pixelsAlt; // alternate color pixels
@ -40,48 +40,44 @@ HUD_CLASS(GLModelHUDKeyboard,
static bool isAvailable = false; // Were there any OpenGL/memory errors on gltouchkbd initialization?
static bool isEnabled = true; // Does player want touchkbd enabled?
static bool ownsScreen = true; // Does the touchkbd currently own the screen to the exclusion?
static bool allowLowercase = true; // show lowercase keyboard
static bool allowLowercase = false; // show lowercase keyboard
static float minAlphaWhenOwnsScreen = 1/4.f;
static float minAlpha = 1/4.f;
static char kbdTemplateUCase[KBD_TEMPLATE_ROWS][KBD_TEMPLATE_COLS+1] = {
" . ",
"@ . . @ ",
" . ",
"@ @ @ @ @ ",
"1234567890",
"QWERTYUIOP",
" ASDFGHJKL",
"@ ZXCVBNM@",
"@@ spa. @@",
"ASDFG@HJKL",
" ZXCVBNM @",
" spa. @@",
};
static char kbdTemplateLCase[KBD_TEMPLATE_ROWS][KBD_TEMPLATE_COLS+1] = {
" . ",
"@ . . @ ",
" . ",
"@ @ @ @ @ ",
"1234567890",
"qwertyuiop",
" asdfghjkl",
"@ zxcvbnm@",
"@@ SPA. @@",
"asdfg@hjkl",
" zxcvbnm @",
" SPA. @@",
};
static char kbdTemplateAlt1[KBD_TEMPLATE_ROWS][KBD_TEMPLATE_COLS+1] = {
" . ",
"@ . . @ ",
" . ",
static char kbdTemplateAlt[KBD_TEMPLATE_ROWS][KBD_TEMPLATE_COLS+1] = {
"@ @ @ @ @ ",
"1234567890",
"@#%&*/-+()",
"$?!\"'`:;,X",
"XX\\XXX.^XX",
"~=_<>X{}[]",
"?!\"'`:;, X",
"$|\\XXX.^XX",
};
static char kbdTemplateAlt2[KBD_TEMPLATE_ROWS][KBD_TEMPLATE_COLS+1] = {
" . ",
"@ . . @ ",
" . ",
"~=_<>{}[]|",
"@#%&*/-+()",
"$?!\"'`:;,X",
"XX\\XXX.^XX",
static char kbdTemplateArrow[KBD_TEMPLATE_ROWS][KBD_TEMPLATE_COLS+1] = {
"@ @ @ @ @ ",
" ",
" t@ ",
"a @@@ ",
" c@ ",
" ",
};
// touch viewport
@ -135,9 +131,7 @@ static inline void _switch_to_next_keyboard(void) {
if (c == 'q') {
_switch_keyboard(kbd.model, kbdTemplateUCase[0]);
} else if (c == 'Q') {
_switch_keyboard(kbd.model, kbdTemplateAlt1[0]);
} else if (c == '1') {
_switch_keyboard(kbd.model, kbdTemplateAlt2[0]);
_switch_keyboard(kbd.model, kbdTemplateAlt [0]);
} else if (allowLowercase) {
_switch_keyboard(kbd.model, kbdTemplateLCase[0]);
} else {
@ -145,6 +139,16 @@ static inline void _switch_to_next_keyboard(void) {
}
}
static inline void _toggle_arrows(void) {
GLModelHUDKeyboard *hudKeyboard = (GLModelHUDKeyboard *)kbd.model->custom;
char c = hudKeyboard->tpl[_ROWOFF*(KBD_TEMPLATE_COLS+1)];
if (c == ICONTEXT_NONACTIONABLE) {
_switch_keyboard(kbd.model, kbdTemplateUCase[0]);
} else {
_switch_keyboard(kbd.model, kbdTemplateArrow[0]);
}
}
#warning FIXME TODO ... this can become a common helper function ...
static inline float _get_keyboard_visibility(void) {
struct timespec now = { 0 };
@ -285,7 +289,6 @@ static inline void _tap_key_at_point(float x, float y) {
case ICONTEXT_LOWERCASE:
case ICONTEXT_UPPERCASE:
case ICONTEXT_SHOWALT1:
case ICONTEXT_SHOWALT2:
key = -1;
_switch_to_next_keyboard();
break;
@ -294,13 +297,17 @@ static inline void _tap_key_at_point(float x, float y) {
key = -1;
break;
case ICONTEXT_CTRL:
key = SCODE_L_CTRL;
break;
case ICONTEXT_RETURN_L:
case ICONTEXT_RETURN_R:
key = SCODE_RET;
break;
case ICONTEXT_TAB:
key = SCODE_TAB;
case ICONTEXT_ESC:
key = SCODE_ESC;
break;
case MOUSETEXT_LEFT:
@ -330,6 +337,11 @@ static inline void _tap_key_at_point(float x, float y) {
key = -1;
break;
case ICONTEXT_MENU_SPROUT:
key = -1;
_toggle_arrows();
break;
case ICONTEXT_LEFTSPACE:
case ICONTEXT_MIDSPACE:
case ICONTEXT_RIGHTSPACE:
@ -355,101 +367,98 @@ static inline void _tap_key_at_point(float x, float y) {
static void _setup_touchkbd_hud(GLModel *parent) {
GLModelHUDKeyboard *hudKeyboard = (GLModelHUDKeyboard *)parent->custom;
for (unsigned int i=0; i<_ROWOFF; i++) {
for (unsigned int i=0; i<(_ROWOFF-1); i++) {
for (unsigned int j=0; j<KBD_TEMPLATE_COLS; j++) {
kbdTemplateUCase[i][j] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[i][j] = ICONTEXT_NONACTIONABLE;
kbdTemplateAlt1 [i][j] = ICONTEXT_NONACTIONABLE;
kbdTemplateAlt2 [i][j] = ICONTEXT_NONACTIONABLE;
kbdTemplateAlt [i][j] = ICONTEXT_NONACTIONABLE;
}
}
for (unsigned int i=0; i<KBD_TEMPLATE_ROWS; i++) {
for (unsigned int j=0; j<KBD_TEMPLATE_COLS; j++) {
if (kbdTemplateArrow[i][j] == ' ') {
kbdTemplateArrow[i][j] = ICONTEXT_NONACTIONABLE;
}
}
}
kbdTemplateUCase[0][4] = MOUSETEXT_UP;
kbdTemplateLCase[0][4] = MOUSETEXT_UP;
kbdTemplateAlt1 [0][4] = MOUSETEXT_UP;
kbdTemplateAlt2 [0][4] = MOUSETEXT_UP;
kbdTemplateLCase[0][0] = ICONTEXT_UPPERCASE;
kbdTemplateUCase[0][0] = ICONTEXT_SHOWALT1;
kbdTemplateAlt [0][0] = ICONTEXT_UPPERCASE;
kbdTemplateArrow[0][0] = ICONTEXT_UPPERCASE;
kbdTemplateUCase[1][3] = MOUSETEXT_LEFT;
kbdTemplateLCase[1][3] = MOUSETEXT_LEFT;
kbdTemplateAlt1 [1][3] = MOUSETEXT_LEFT;
kbdTemplateAlt2 [1][3] = MOUSETEXT_LEFT;
kbdTemplateUCase[1][5] = MOUSETEXT_RIGHT;
kbdTemplateLCase[1][5] = MOUSETEXT_RIGHT;
kbdTemplateAlt1 [1][5] = MOUSETEXT_RIGHT;
kbdTemplateAlt2 [1][5] = MOUSETEXT_RIGHT;
kbdTemplateUCase[0][2] = ICONTEXT_CTRL;
kbdTemplateLCase[0][2] = ICONTEXT_CTRL;
kbdTemplateAlt [0][2] = ICONTEXT_CTRL;
kbdTemplateArrow[0][2] = ICONTEXT_CTRL;
kbdTemplateUCase[1][0] = MOUSETEXT_OPENAPPLE;
kbdTemplateLCase[1][0] = MOUSETEXT_OPENAPPLE;
kbdTemplateAlt1 [1][0] = MOUSETEXT_OPENAPPLE;
kbdTemplateAlt2 [1][0] = MOUSETEXT_OPENAPPLE;
kbdTemplateUCase[1][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateLCase[1][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateAlt1 [1][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateAlt2 [1][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateUCase[0][4] = ICONTEXT_ESC;
kbdTemplateLCase[0][4] = ICONTEXT_ESC;
kbdTemplateAlt [0][4] = ICONTEXT_ESC;
kbdTemplateArrow[0][4] = ICONTEXT_ESC;
kbdTemplateUCase[2][4] = MOUSETEXT_DOWN;
kbdTemplateLCase[2][4] = MOUSETEXT_DOWN;
kbdTemplateAlt1 [2][4] = MOUSETEXT_DOWN;
kbdTemplateAlt2 [2][4] = MOUSETEXT_DOWN;
kbdTemplateUCase[0][6] = MOUSETEXT_OPENAPPLE;
kbdTemplateLCase[0][6] = MOUSETEXT_OPENAPPLE;
kbdTemplateAlt [0][6] = MOUSETEXT_OPENAPPLE;
kbdTemplateArrow[0][6] = MOUSETEXT_OPENAPPLE;
// 2nd row specials
kbdTemplateUCase[0][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateLCase[0][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateAlt [0][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateArrow[0][8] = MOUSETEXT_CLOSEDAPPLE;
kbdTemplateUCase[_ROWOFF+1][0] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+1][0] = ICONTEXT_NONACTIONABLE;
kbdTemplateArrow[2][5] = MOUSETEXT_UP;
kbdTemplateArrow[3][4] = MOUSETEXT_LEFT;
kbdTemplateArrow[3][6] = MOUSETEXT_RIGHT;
kbdTemplateArrow[4][5] = MOUSETEXT_DOWN;
// 3rd row specials
kbdTemplateUCase[3][5] = ICONTEXT_MENU_SPROUT;
kbdTemplateLCase[3][5] = ICONTEXT_MENU_SPROUT;
kbdTemplateAlt [3][5] = ICONTEXT_MENU_SPROUT;
kbdTemplateArrow[3][5] = ICONTEXT_MENU_SPROUT;
kbdTemplateUCase[_ROWOFF+2][0] = ICONTEXT_LOWERCASE;
kbdTemplateLCase[_ROWOFF+2][0] = ICONTEXT_UPPERCASE;
kbdTemplateUCase[_ROWOFF+2][0] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+2][0] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+2][1] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+2][1] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+2][8] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+2][8] = ICONTEXT_NONACTIONABLE;
kbdTemplateAlt [_ROWOFF+2][8] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+2][9] = ICONTEXT_BACKSPACE;
kbdTemplateLCase[_ROWOFF+2][9] = ICONTEXT_BACKSPACE;
kbdTemplateAlt1 [_ROWOFF+2][9] = ICONTEXT_BACKSPACE;
kbdTemplateAlt2 [_ROWOFF+2][9] = ICONTEXT_BACKSPACE;
kbdTemplateAlt [_ROWOFF+2][9] = ICONTEXT_BACKSPACE;
// 4th row specials
// last row specials
kbdTemplateUCase[_ROWOFF+3][0] = ICONTEXT_SHOWALT1;
kbdTemplateLCase[_ROWOFF+3][0] = ICONTEXT_SHOWALT1;
kbdTemplateAlt1 [_ROWOFF+3][0] = ICONTEXT_SHOWALT1;
kbdTemplateAlt2 [_ROWOFF+3][0] = ICONTEXT_UPPERCASE;
kbdTemplateLCase[_ROWOFF+3][0] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+3][0] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+3][1] = ICONTEXT_SHOWALT2;
kbdTemplateLCase[_ROWOFF+3][1] = ICONTEXT_SHOWALT2;
kbdTemplateAlt1 [_ROWOFF+3][1] = ICONTEXT_SHOWALT2;
kbdTemplateAlt2 [_ROWOFF+3][1] = ICONTEXT_LOWERCASE;
kbdTemplateUCase[_ROWOFF+3][1] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+3][1] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+3][2] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+3][2] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+3][3] = ICONTEXT_LEFTSPACE;
kbdTemplateLCase[_ROWOFF+3][3] = ICONTEXT_LEFTSPACE;
kbdTemplateAlt1 [_ROWOFF+3][3] = ICONTEXT_LEFTSPACE;
kbdTemplateAlt2 [_ROWOFF+3][3] = ICONTEXT_LEFTSPACE;
kbdTemplateAlt [_ROWOFF+3][3] = ICONTEXT_LEFTSPACE;
kbdTemplateUCase[_ROWOFF+3][4] = ICONTEXT_MIDSPACE;
kbdTemplateLCase[_ROWOFF+3][4] = ICONTEXT_MIDSPACE;
kbdTemplateAlt1 [_ROWOFF+3][4] = ICONTEXT_MIDSPACE;
kbdTemplateAlt2 [_ROWOFF+3][4] = ICONTEXT_MIDSPACE;
kbdTemplateAlt [_ROWOFF+3][4] = ICONTEXT_MIDSPACE;
kbdTemplateUCase[_ROWOFF+3][5] = ICONTEXT_RIGHTSPACE;
kbdTemplateLCase[_ROWOFF+3][5] = ICONTEXT_RIGHTSPACE;
kbdTemplateAlt1 [_ROWOFF+3][5] = ICONTEXT_RIGHTSPACE;
kbdTemplateAlt2 [_ROWOFF+3][5] = ICONTEXT_RIGHTSPACE;
kbdTemplateAlt [_ROWOFF+3][5] = ICONTEXT_RIGHTSPACE;
kbdTemplateUCase[_ROWOFF+3][7] = ICONTEXT_NONACTIONABLE;
kbdTemplateLCase[_ROWOFF+3][7] = ICONTEXT_NONACTIONABLE;
kbdTemplateUCase[_ROWOFF+3][8] = ICONTEXT_RETURN_L;
kbdTemplateLCase[_ROWOFF+3][8] = ICONTEXT_RETURN_L;
kbdTemplateAlt1 [_ROWOFF+3][8] = ICONTEXT_RETURN_L;
kbdTemplateAlt2 [_ROWOFF+3][8] = ICONTEXT_RETURN_L;
kbdTemplateAlt [_ROWOFF+3][8] = ICONTEXT_RETURN_L;
kbdTemplateUCase[_ROWOFF+3][9] = ICONTEXT_RETURN_R;
kbdTemplateLCase[_ROWOFF+3][9] = ICONTEXT_RETURN_R;
kbdTemplateAlt1 [_ROWOFF+3][9] = ICONTEXT_RETURN_R;
kbdTemplateAlt2 [_ROWOFF+3][9] = ICONTEXT_RETURN_R;
kbdTemplateAlt [_ROWOFF+3][9] = ICONTEXT_RETURN_R;
hudKeyboard->tplWidth = KBD_TEMPLATE_COLS;
hudKeyboard->tplHeight = KBD_TEMPLATE_ROWS;

View File

@ -185,7 +185,7 @@ uint8_t floating_bus_hibit(const bool hibit);
#define MOUSETEXT_HOURGLASS (MOUSETEXT_BEGIN+0x03)
#define MOUSETEXT_CHECKMARK (MOUSETEXT_BEGIN+0x04)
#define ICONTEXT_BEGIN 0xA0 // offset + 0x20 length
#define ICONTEXT_BEGIN 0xA0 // offset + 0x22 length
#define ICONTEXT_MENU_BEGIN ICONTEXT_BEGIN
#define ICONTEXT_MENU_END (ICONTEXT_MENU_BEGIN+0x0A)
@ -196,23 +196,23 @@ uint8_t floating_bus_hibit(const bool hibit);
#define ICONTEXT_UNLOCK (ICONTEXT_BEGIN+0x0F)
#define ICONTEXT_GOTO (ICONTEXT_BEGIN+0x10)
#define ICONTEXT_MENU_SPROUT (ICONTEXT_BEGIN+0x11)
#define ICONTEXT_MENU_SPROUT (MOUSETEXT_BEGIN+0x1B)
#define ICONTEXT_MENU_TOUCHJOY (ICONTEXT_BEGIN+0x12)
#define ICONTEXT_KBD_BEGIN (ICONTEXT_BEGIN+0x14)
#define ICONTEXT_LOWERCASE (ICONTEXT_KBD_BEGIN+0x00)
#define ICONTEXT_UPPERCASE (ICONTEXT_KBD_BEGIN+0x01)
#define ICONTEXT_BACKSPACE (ICONTEXT_KBD_BEGIN+0x02)
#define ICONTEXT_KBD_BEGIN (ICONTEXT_BEGIN+0x13)
#define ICONTEXT_CTRL (ICONTEXT_KBD_BEGIN+0x00)
#define ICONTEXT_LOWERCASE (ICONTEXT_KBD_BEGIN+0x01)
#define ICONTEXT_UPPERCASE (ICONTEXT_KBD_BEGIN+0x02)
#define ICONTEXT_SHOWALT1 (ICONTEXT_KBD_BEGIN+0x03)
#define ICONTEXT_SHOWALT2 (ICONTEXT_KBD_BEGIN+0x04)
#define ICONTEXT_LEFTSPACE (ICONTEXT_KBD_BEGIN+0x05)
#define ICONTEXT_MIDSPACE (ICONTEXT_KBD_BEGIN+0x06)
#define ICONTEXT_RIGHTSPACE (ICONTEXT_KBD_BEGIN+0x07)
#define ICONTEXT_TAB (ICONTEXT_KBD_BEGIN+0x08)
#define ICONTEXT_RETURN_L (ICONTEXT_KBD_BEGIN+0x09)
#define ICONTEXT_RETURN_R (ICONTEXT_KBD_BEGIN+0x0A)
#define ICONTEXT_NONACTIONABLE (ICONTEXT_KBD_BEGIN+0x0B)
#define ICONTEXT_KBD_END (ICONTEXT_BEGIN+0x1F)
#define ICONTEXT_BACKSPACE (ICONTEXT_KBD_BEGIN+0x04)
#define ICONTEXT_LEFTSPACE (ICONTEXT_KBD_BEGIN+0x06)
#define ICONTEXT_MIDSPACE (ICONTEXT_KBD_BEGIN+0x07)
#define ICONTEXT_RIGHTSPACE (ICONTEXT_KBD_BEGIN+0x08)
#define ICONTEXT_ESC (ICONTEXT_KBD_BEGIN+0x09)
#define ICONTEXT_RETURN_L (ICONTEXT_KBD_BEGIN+0x0A)
#define ICONTEXT_RETURN_R (ICONTEXT_KBD_BEGIN+0x0B)
#define ICONTEXT_NONACTIONABLE (ICONTEXT_KBD_BEGIN+0x0C)
#define COLOR_BLACK 0