449 lines
18 KiB
C
449 lines
18 KiB
C
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Harbour Project source code:
|
|
* Keyboard subsystem based on Slang screen library.
|
|
*
|
|
* Copyright 2000 Marek Paliwoda <paliwoda@inetia.pl>
|
|
* www - http://www.harbour-project.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version, with one exception:
|
|
*
|
|
* The exception is that if you link the Harbour Runtime Library (HRL)
|
|
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
|
* an executable, this does not by itself cause the resulting executable
|
|
* to be covered by the GNU General Public License. Your use of that
|
|
* executable is in no way restricted on account of linking the HRL
|
|
* and/or HVM code into it.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
|
* their web site at http://www.gnu.org/).
|
|
*
|
|
*/
|
|
|
|
/* *********************************************************************** */
|
|
|
|
/* a shortcut only */
|
|
#define CTRL_PRESSED CONTROL_PRESSED
|
|
|
|
/* *********************************************************************** */
|
|
|
|
/* a table of keys translation */
|
|
static int KeyTranslationTable[][ 2 ] =
|
|
{
|
|
{ SL_KEY_UP, K_UP },
|
|
{ SL_KEY_DOWN, K_DOWN },
|
|
{ SL_KEY_LEFT, K_LEFT },
|
|
{ SL_KEY_RIGHT, K_RIGHT },
|
|
{ SL_KEY_HOME, K_HOME },
|
|
{ SL_KEY_END, K_END },
|
|
{ SL_KEY_PPAGE, K_PGUP },
|
|
{ SL_KEY_NPAGE, K_PGDN },
|
|
|
|
#if HB_GT_KBD_MODIF_MASK
|
|
{ SL_KEY_UP | ( CTRL_PRESSED << 16 ), K_CTRL_UP },
|
|
{ SL_KEY_DOWN | ( CTRL_PRESSED << 16 ), K_CTRL_DOWN },
|
|
{ SL_KEY_LEFT | ( CTRL_PRESSED << 16 ), K_CTRL_LEFT },
|
|
{ SL_KEY_RIGHT | ( CTRL_PRESSED << 16 ), K_CTRL_RIGHT },
|
|
{ SL_KEY_HOME | ( CTRL_PRESSED << 16 ), K_CTRL_HOME },
|
|
{ SL_KEY_END | ( CTRL_PRESSED << 16 ), K_CTRL_END },
|
|
{ SL_KEY_PPAGE | ( CTRL_PRESSED << 16 ), K_CTRL_PGUP },
|
|
{ SL_KEY_NPAGE | ( CTRL_PRESSED << 16 ), K_CTRL_PGDN },
|
|
|
|
{ SL_KEY_UP | ( ALTL_PRESSED << 16 ), K_ALT_UP },
|
|
{ SL_KEY_DOWN | ( ALTL_PRESSED << 16 ), K_ALT_DOWN },
|
|
{ SL_KEY_LEFT | ( ALTL_PRESSED << 16 ), K_ALT_LEFT },
|
|
{ SL_KEY_RIGHT | ( ALTL_PRESSED << 16 ), K_ALT_RIGHT },
|
|
{ SL_KEY_HOME | ( ALTL_PRESSED << 16 ), K_ALT_HOME },
|
|
{ SL_KEY_END | ( ALTL_PRESSED << 16 ), K_ALT_END },
|
|
{ SL_KEY_PPAGE | ( ALTL_PRESSED << 16 ), K_ALT_PGUP },
|
|
{ SL_KEY_NPAGE | ( ALTL_PRESSED << 16 ), K_ALT_PGDN },
|
|
#endif
|
|
|
|
{ SL_KEY_IC, K_INS },
|
|
{ SL_KEY_ESC, K_ESC },
|
|
{ SL_KEY_DELETE, K_DEL },
|
|
{ SL_KEY_BACKSPACE, K_BS },
|
|
|
|
#if HB_GT_KBD_MODIF_MASK
|
|
{ SL_KEY_IC | ( CTRL_PRESSED << 16 ), K_CTRL_INS },
|
|
/* { SL_KEY_ESC | ( CTRL_PRESSED << 16 ), K_CTRL_ESC }, */
|
|
{ SL_KEY_DELETE | ( CTRL_PRESSED << 16 ), K_CTRL_DEL },
|
|
{ SL_KEY_BACKSPACE | ( CTRL_PRESSED << 16 ), K_CTRL_BS },
|
|
/*
|
|
{ K_TAB | ( CTRL_PRESSED << 16 ), K_CTRL_TAB },
|
|
??????????????? K_CTRL_PRTSCR,
|
|
??????????????? K_CTRL_QUESTION,
|
|
*/
|
|
|
|
{ SL_KEY_IC | ( ALTL_PRESSED << 16 ), K_ALT_INS },
|
|
{ SL_KEY_ESC | ( ALTL_PRESSED << 16 ), K_ALT_ESC },
|
|
{ SL_KEY_DELETE | ( ALTL_PRESSED << 16 ), K_ALT_DEL },
|
|
{ SL_KEY_BACKSPACE | ( ALTL_PRESSED << 16 ), K_ALT_BS },
|
|
{ K_TAB | ( ALTL_PRESSED << 16 ), K_ALT_TAB },
|
|
/* ??????????????? K_ALT_EQUALS, */
|
|
|
|
{ '/' | ( CTRL_PRESSED << 16 ), KP_CTRL_SLASH},
|
|
{ '*' | ( CTRL_PRESSED << 16 ), KP_CTRL_ASTERISK},
|
|
{ '-' | ( CTRL_PRESSED << 16 ), KP_CTRL_MINUS},
|
|
{ '+' | ( CTRL_PRESSED << 16 ), KP_CTRL_PLUS },
|
|
{ K_ENTER | ( CTRL_PRESSED << 16 ), K_CTRL_ENTER },
|
|
{ SL_KEY_NUM_5 | ( CTRL_PRESSED << 16 ), KP_CTRL_5 },
|
|
|
|
{ '/' | ( ALTL_PRESSED << 16 ), KP_ALT_SLASH },
|
|
{ '*' | ( ALTL_PRESSED << 16 ), KP_ALT_ASTERISK},
|
|
{ '-' | ( ALTL_PRESSED << 16 ), KP_ALT_MINUS },
|
|
{ '+' | ( ALTL_PRESSED << 16 ), KP_ALT_PLUS },
|
|
{ K_ENTER | ( ALTL_PRESSED << 16 ), K_ALT_ENTER },
|
|
{ K_ENTER | ( ALTR_PRESSED << 16 ), K_ALT_ENTER },
|
|
{ SL_KEY_NUM_5 | ( ALTL_PRESSED << 16 ), KP_ALT_5 },
|
|
{ SL_KEY_NUM_5 | ( ALTR_PRESSED << 16 ), KP_ALT_5 },
|
|
{ SL_KEY_B2 | ( ALTR_PRESSED << 16 ), KP_ALT_5 },
|
|
|
|
{ K_TAB | ( SHIFT_PRESSED << 16 ), K_SH_TAB },
|
|
#endif
|
|
|
|
#if HB_GT_KBD_MODIF_MASK
|
|
#ifdef __linux__
|
|
{ SL_KEY_ALT( 'A' ) | ( ALTL_PRESSED << 16 ), K_ALT_A },
|
|
{ SL_KEY_ALT( 'B' ) | ( ALTL_PRESSED << 16 ), K_ALT_B },
|
|
{ SL_KEY_ALT( 'C' ) | ( ALTL_PRESSED << 16 ), K_ALT_C },
|
|
{ SL_KEY_ALT( 'D' ) | ( ALTL_PRESSED << 16 ), K_ALT_D },
|
|
{ SL_KEY_ALT( 'E' ) | ( ALTL_PRESSED << 16 ), K_ALT_E },
|
|
{ SL_KEY_ALT( 'F' ) | ( ALTL_PRESSED << 16 ), K_ALT_F },
|
|
{ SL_KEY_ALT( 'G' ) | ( ALTL_PRESSED << 16 ), K_ALT_G },
|
|
{ SL_KEY_ALT( 'H' ) | ( ALTL_PRESSED << 16 ), K_ALT_H },
|
|
{ SL_KEY_ALT( 'I' ) | ( ALTL_PRESSED << 16 ), K_ALT_I },
|
|
{ SL_KEY_ALT( 'J' ) | ( ALTL_PRESSED << 16 ), K_ALT_J },
|
|
{ SL_KEY_ALT( 'K' ) | ( ALTL_PRESSED << 16 ), K_ALT_K },
|
|
{ SL_KEY_ALT( 'L' ) | ( ALTL_PRESSED << 16 ), K_ALT_L },
|
|
{ SL_KEY_ALT( 'M' ) | ( ALTL_PRESSED << 16 ), K_ALT_M },
|
|
{ SL_KEY_ALT( 'N' ) | ( ALTL_PRESSED << 16 ), K_ALT_N },
|
|
{ SL_KEY_ALT( 'O' ) | ( ALTL_PRESSED << 16 ), K_ALT_O },
|
|
{ SL_KEY_ALT( 'P' ) | ( ALTL_PRESSED << 16 ), K_ALT_P },
|
|
{ SL_KEY_ALT( 'Q' ) | ( ALTL_PRESSED << 16 ), K_ALT_Q },
|
|
{ SL_KEY_ALT( 'R' ) | ( ALTL_PRESSED << 16 ), K_ALT_R },
|
|
{ SL_KEY_ALT( 'S' ) | ( ALTL_PRESSED << 16 ), K_ALT_S },
|
|
{ SL_KEY_ALT( 'T' ) | ( ALTL_PRESSED << 16 ), K_ALT_T },
|
|
{ SL_KEY_ALT( 'U' ) | ( ALTL_PRESSED << 16 ), K_ALT_U },
|
|
{ SL_KEY_ALT( 'V' ) | ( ALTL_PRESSED << 16 ), K_ALT_V },
|
|
{ SL_KEY_ALT( 'W' ) | ( ALTL_PRESSED << 16 ), K_ALT_W },
|
|
{ SL_KEY_ALT( 'X' ) | ( ALTL_PRESSED << 16 ), K_ALT_X },
|
|
{ SL_KEY_ALT( 'Y' ) | ( ALTL_PRESSED << 16 ), K_ALT_Y },
|
|
{ SL_KEY_ALT( 'Z' ) | ( ALTL_PRESSED << 16 ), K_ALT_Z },
|
|
{ SL_KEY_ALT( 'a' ) | ( ALTL_PRESSED << 16 ), K_ALT_A },
|
|
{ SL_KEY_ALT( 'b' ) | ( ALTL_PRESSED << 16 ), K_ALT_B },
|
|
{ SL_KEY_ALT( 'c' ) | ( ALTL_PRESSED << 16 ), K_ALT_C },
|
|
{ SL_KEY_ALT( 'd' ) | ( ALTL_PRESSED << 16 ), K_ALT_D },
|
|
{ SL_KEY_ALT( 'e' ) | ( ALTL_PRESSED << 16 ), K_ALT_E },
|
|
{ SL_KEY_ALT( 'f' ) | ( ALTL_PRESSED << 16 ), K_ALT_F },
|
|
{ SL_KEY_ALT( 'g' ) | ( ALTL_PRESSED << 16 ), K_ALT_G },
|
|
{ SL_KEY_ALT( 'h' ) | ( ALTL_PRESSED << 16 ), K_ALT_H },
|
|
{ SL_KEY_ALT( 'i' ) | ( ALTL_PRESSED << 16 ), K_ALT_I },
|
|
{ SL_KEY_ALT( 'j' ) | ( ALTL_PRESSED << 16 ), K_ALT_J },
|
|
{ SL_KEY_ALT( 'k' ) | ( ALTL_PRESSED << 16 ), K_ALT_K },
|
|
{ SL_KEY_ALT( 'l' ) | ( ALTL_PRESSED << 16 ), K_ALT_L },
|
|
{ SL_KEY_ALT( 'm' ) | ( ALTL_PRESSED << 16 ), K_ALT_M },
|
|
{ SL_KEY_ALT( 'n' ) | ( ALTL_PRESSED << 16 ), K_ALT_N },
|
|
{ SL_KEY_ALT( 'o' ) | ( ALTL_PRESSED << 16 ), K_ALT_O },
|
|
{ SL_KEY_ALT( 'p' ) | ( ALTL_PRESSED << 16 ), K_ALT_P },
|
|
{ SL_KEY_ALT( 'q' ) | ( ALTL_PRESSED << 16 ), K_ALT_Q },
|
|
{ SL_KEY_ALT( 'r' ) | ( ALTL_PRESSED << 16 ), K_ALT_R },
|
|
{ SL_KEY_ALT( 's' ) | ( ALTL_PRESSED << 16 ), K_ALT_S },
|
|
{ SL_KEY_ALT( 't' ) | ( ALTL_PRESSED << 16 ), K_ALT_T },
|
|
{ SL_KEY_ALT( 'u' ) | ( ALTL_PRESSED << 16 ), K_ALT_U },
|
|
{ SL_KEY_ALT( 'v' ) | ( ALTL_PRESSED << 16 ), K_ALT_V },
|
|
{ SL_KEY_ALT( 'w' ) | ( ALTL_PRESSED << 16 ), K_ALT_W },
|
|
{ SL_KEY_ALT( 'x' ) | ( ALTL_PRESSED << 16 ), K_ALT_X },
|
|
{ SL_KEY_ALT( 'y' ) | ( ALTL_PRESSED << 16 ), K_ALT_Y },
|
|
{ SL_KEY_ALT( 'z' ) | ( ALTL_PRESSED << 16 ), K_ALT_Z },
|
|
{ SL_KEY_ALT( '0' ) | ( ALTL_PRESSED << 16 ), K_ALT_0 },
|
|
{ SL_KEY_ALT( '1' ) | ( ALTL_PRESSED << 16 ), K_ALT_1 },
|
|
{ SL_KEY_ALT( '2' ) | ( ALTL_PRESSED << 16 ), K_ALT_2 },
|
|
{ SL_KEY_ALT( '3' ) | ( ALTL_PRESSED << 16 ), K_ALT_3 },
|
|
{ SL_KEY_ALT( '4' ) | ( ALTL_PRESSED << 16 ), K_ALT_4 },
|
|
{ SL_KEY_ALT( '5' ) | ( ALTL_PRESSED << 16 ), K_ALT_5 },
|
|
{ SL_KEY_ALT( '6' ) | ( ALTL_PRESSED << 16 ), K_ALT_6 },
|
|
{ SL_KEY_ALT( '7' ) | ( ALTL_PRESSED << 16 ), K_ALT_7 },
|
|
{ SL_KEY_ALT( '8' ) | ( ALTL_PRESSED << 16 ), K_ALT_8 },
|
|
{ SL_KEY_ALT( '9' ) | ( ALTL_PRESSED << 16 ), K_ALT_9 },
|
|
#else
|
|
{ 'A' | ( ALTL_PRESSED << 16 ), K_ALT_A },
|
|
{ 'B' | ( ALTL_PRESSED << 16 ), K_ALT_B },
|
|
{ 'C' | ( ALTL_PRESSED << 16 ), K_ALT_C },
|
|
{ 'D' | ( ALTL_PRESSED << 16 ), K_ALT_D },
|
|
{ 'E' | ( ALTL_PRESSED << 16 ), K_ALT_E },
|
|
{ 'F' | ( ALTL_PRESSED << 16 ), K_ALT_F },
|
|
{ 'G' | ( ALTL_PRESSED << 16 ), K_ALT_G },
|
|
{ 'H' | ( ALTL_PRESSED << 16 ), K_ALT_H },
|
|
{ 'I' | ( ALTL_PRESSED << 16 ), K_ALT_I },
|
|
{ 'J' | ( ALTL_PRESSED << 16 ), K_ALT_J },
|
|
{ 'K' | ( ALTL_PRESSED << 16 ), K_ALT_K },
|
|
{ 'L' | ( ALTL_PRESSED << 16 ), K_ALT_L },
|
|
{ 'M' | ( ALTL_PRESSED << 16 ), K_ALT_M },
|
|
{ 'N' | ( ALTL_PRESSED << 16 ), K_ALT_N },
|
|
{ 'O' | ( ALTL_PRESSED << 16 ), K_ALT_O },
|
|
{ 'P' | ( ALTL_PRESSED << 16 ), K_ALT_P },
|
|
{ 'Q' | ( ALTL_PRESSED << 16 ), K_ALT_Q },
|
|
{ 'R' | ( ALTL_PRESSED << 16 ), K_ALT_R },
|
|
{ 'S' | ( ALTL_PRESSED << 16 ), K_ALT_S },
|
|
{ 'T' | ( ALTL_PRESSED << 16 ), K_ALT_T },
|
|
{ 'U' | ( ALTL_PRESSED << 16 ), K_ALT_U },
|
|
{ 'V' | ( ALTL_PRESSED << 16 ), K_ALT_V },
|
|
{ 'W' | ( ALTL_PRESSED << 16 ), K_ALT_W },
|
|
{ 'X' | ( ALTL_PRESSED << 16 ), K_ALT_X },
|
|
{ 'Y' | ( ALTL_PRESSED << 16 ), K_ALT_Y },
|
|
{ 'Z' | ( ALTL_PRESSED << 16 ), K_ALT_Z },
|
|
{ 'a' | ( ALTL_PRESSED << 16 ), K_ALT_A },
|
|
{ 'b' | ( ALTL_PRESSED << 16 ), K_ALT_B },
|
|
{ 'c' | ( ALTL_PRESSED << 16 ), K_ALT_C },
|
|
{ 'd' | ( ALTL_PRESSED << 16 ), K_ALT_D },
|
|
{ 'e' | ( ALTL_PRESSED << 16 ), K_ALT_E },
|
|
{ 'f' | ( ALTL_PRESSED << 16 ), K_ALT_F },
|
|
{ 'g' | ( ALTL_PRESSED << 16 ), K_ALT_G },
|
|
{ 'h' | ( ALTL_PRESSED << 16 ), K_ALT_H },
|
|
{ 'i' | ( ALTL_PRESSED << 16 ), K_ALT_I },
|
|
{ 'j' | ( ALTL_PRESSED << 16 ), K_ALT_J },
|
|
{ 'k' | ( ALTL_PRESSED << 16 ), K_ALT_K },
|
|
{ 'l' | ( ALTL_PRESSED << 16 ), K_ALT_L },
|
|
{ 'm' | ( ALTL_PRESSED << 16 ), K_ALT_M },
|
|
{ 'n' | ( ALTL_PRESSED << 16 ), K_ALT_N },
|
|
{ 'o' | ( ALTL_PRESSED << 16 ), K_ALT_O },
|
|
{ 'p' | ( ALTL_PRESSED << 16 ), K_ALT_P },
|
|
{ 'q' | ( ALTL_PRESSED << 16 ), K_ALT_Q },
|
|
{ 'r' | ( ALTL_PRESSED << 16 ), K_ALT_R },
|
|
{ 's' | ( ALTL_PRESSED << 16 ), K_ALT_S },
|
|
{ 't' | ( ALTL_PRESSED << 16 ), K_ALT_T },
|
|
{ 'u' | ( ALTL_PRESSED << 16 ), K_ALT_U },
|
|
{ 'v' | ( ALTL_PRESSED << 16 ), K_ALT_V },
|
|
{ 'w' | ( ALTL_PRESSED << 16 ), K_ALT_W },
|
|
{ 'x' | ( ALTL_PRESSED << 16 ), K_ALT_X },
|
|
{ 'y' | ( ALTL_PRESSED << 16 ), K_ALT_Y },
|
|
{ 'z' | ( ALTL_PRESSED << 16 ), K_ALT_Z },
|
|
{ '0' | ( ALTL_PRESSED << 16 ), K_ALT_0 },
|
|
{ '1' | ( ALTL_PRESSED << 16 ), K_ALT_1 },
|
|
{ '2' | ( ALTL_PRESSED << 16 ), K_ALT_2 },
|
|
{ '3' | ( ALTL_PRESSED << 16 ), K_ALT_3 },
|
|
{ '4' | ( ALTL_PRESSED << 16 ), K_ALT_4 },
|
|
{ '5' | ( ALTL_PRESSED << 16 ), K_ALT_5 },
|
|
{ '6' | ( ALTL_PRESSED << 16 ), K_ALT_6 },
|
|
{ '7' | ( ALTL_PRESSED << 16 ), K_ALT_7 },
|
|
{ '8' | ( ALTL_PRESSED << 16 ), K_ALT_8 },
|
|
{ '9' | ( ALTL_PRESSED << 16 ), K_ALT_9 },
|
|
#endif
|
|
#endif
|
|
|
|
{ SL_KEY_ALT( 'A' ), K_ALT_A },
|
|
{ SL_KEY_ALT( 'B' ), K_ALT_B },
|
|
{ SL_KEY_ALT( 'C' ), K_ALT_C },
|
|
{ SL_KEY_ALT( 'D' ), K_ALT_D },
|
|
{ SL_KEY_ALT( 'E' ), K_ALT_E },
|
|
{ SL_KEY_ALT( 'F' ), K_ALT_F },
|
|
{ SL_KEY_ALT( 'G' ), K_ALT_G },
|
|
{ SL_KEY_ALT( 'H' ), K_ALT_H },
|
|
{ SL_KEY_ALT( 'I' ), K_ALT_I },
|
|
{ SL_KEY_ALT( 'J' ), K_ALT_J },
|
|
{ SL_KEY_ALT( 'K' ), K_ALT_K },
|
|
{ SL_KEY_ALT( 'L' ), K_ALT_L },
|
|
{ SL_KEY_ALT( 'M' ), K_ALT_M },
|
|
{ SL_KEY_ALT( 'N' ), K_ALT_N },
|
|
{ SL_KEY_ALT( 'O' ), K_ALT_O },
|
|
{ SL_KEY_ALT( 'P' ), K_ALT_P },
|
|
{ SL_KEY_ALT( 'Q' ), K_ALT_Q },
|
|
{ SL_KEY_ALT( 'R' ), K_ALT_R },
|
|
{ SL_KEY_ALT( 'S' ), K_ALT_S },
|
|
{ SL_KEY_ALT( 'T' ), K_ALT_T },
|
|
{ SL_KEY_ALT( 'U' ), K_ALT_U },
|
|
{ SL_KEY_ALT( 'V' ), K_ALT_V },
|
|
{ SL_KEY_ALT( 'W' ), K_ALT_W },
|
|
{ SL_KEY_ALT( 'X' ), K_ALT_X },
|
|
{ SL_KEY_ALT( 'Y' ), K_ALT_Y },
|
|
{ SL_KEY_ALT( 'Z' ), K_ALT_Z },
|
|
{ SL_KEY_ALT( 'a' ), K_ALT_A },
|
|
{ SL_KEY_ALT( 'b' ), K_ALT_B },
|
|
{ SL_KEY_ALT( 'c' ), K_ALT_C },
|
|
{ SL_KEY_ALT( 'd' ), K_ALT_D },
|
|
{ SL_KEY_ALT( 'e' ), K_ALT_E },
|
|
{ SL_KEY_ALT( 'f' ), K_ALT_F },
|
|
{ SL_KEY_ALT( 'g' ), K_ALT_G },
|
|
{ SL_KEY_ALT( 'h' ), K_ALT_H },
|
|
{ SL_KEY_ALT( 'i' ), K_ALT_I },
|
|
{ SL_KEY_ALT( 'j' ), K_ALT_J },
|
|
{ SL_KEY_ALT( 'k' ), K_ALT_K },
|
|
{ SL_KEY_ALT( 'l' ), K_ALT_L },
|
|
{ SL_KEY_ALT( 'm' ), K_ALT_M },
|
|
{ SL_KEY_ALT( 'n' ), K_ALT_N },
|
|
{ SL_KEY_ALT( 'o' ), K_ALT_O },
|
|
{ SL_KEY_ALT( 'p' ), K_ALT_P },
|
|
{ SL_KEY_ALT( 'q' ), K_ALT_Q },
|
|
{ SL_KEY_ALT( 'r' ), K_ALT_R },
|
|
{ SL_KEY_ALT( 's' ), K_ALT_S },
|
|
{ SL_KEY_ALT( 't' ), K_ALT_T },
|
|
{ SL_KEY_ALT( 'u' ), K_ALT_U },
|
|
{ SL_KEY_ALT( 'v' ), K_ALT_V },
|
|
{ SL_KEY_ALT( 'w' ), K_ALT_W },
|
|
{ SL_KEY_ALT( 'x' ), K_ALT_X },
|
|
{ SL_KEY_ALT( 'y' ), K_ALT_Y },
|
|
{ SL_KEY_ALT( 'z' ), K_ALT_Z },
|
|
{ SL_KEY_ALT( '0' ), K_ALT_0 },
|
|
{ SL_KEY_ALT( '1' ), K_ALT_1 },
|
|
{ SL_KEY_ALT( '2' ), K_ALT_2 },
|
|
{ SL_KEY_ALT( '3' ), K_ALT_3 },
|
|
{ SL_KEY_ALT( '4' ), K_ALT_4 },
|
|
{ SL_KEY_ALT( '5' ), K_ALT_5 },
|
|
{ SL_KEY_ALT( '6' ), K_ALT_6 },
|
|
{ SL_KEY_ALT( '7' ), K_ALT_7 },
|
|
{ SL_KEY_ALT( '8' ), K_ALT_8 },
|
|
{ SL_KEY_ALT( '9' ), K_ALT_9 },
|
|
|
|
{ SL_KEY_F(1), K_F1 },
|
|
{ SL_KEY_F(2), K_F2 },
|
|
{ SL_KEY_F(3), K_F3 },
|
|
{ SL_KEY_F(4), K_F4 },
|
|
{ SL_KEY_F(5), K_F5 },
|
|
{ SL_KEY_F(6), K_F6 },
|
|
{ SL_KEY_F(7), K_F7 },
|
|
{ SL_KEY_F(8), K_F8 },
|
|
{ SL_KEY_F(9), K_F9 },
|
|
{ SL_KEY_F(10), K_F10 },
|
|
|
|
{ SL_KEY_F(11), K_SH_F1 },
|
|
{ SL_KEY_F(12), K_SH_F2 },
|
|
{ SL_KEY_F(13), K_SH_F3 },
|
|
{ SL_KEY_F(14), K_SH_F4 },
|
|
{ SL_KEY_F(15), K_SH_F5 },
|
|
{ SL_KEY_F(16), K_SH_F6 },
|
|
{ SL_KEY_F(17), K_SH_F7 },
|
|
{ SL_KEY_F(18), K_SH_F8 },
|
|
{ SL_KEY_F(19), K_SH_F9 },
|
|
{ SL_KEY_F(20), K_SH_F10 },
|
|
|
|
{ SL_KEY_F(21), K_CTRL_F1 },
|
|
{ SL_KEY_F(22), K_CTRL_F2 },
|
|
{ SL_KEY_F(23), K_CTRL_F3 },
|
|
{ SL_KEY_F(24), K_CTRL_F4 },
|
|
{ SL_KEY_F(25), K_CTRL_F5 },
|
|
{ SL_KEY_F(26), K_CTRL_F6 },
|
|
{ SL_KEY_F(27), K_CTRL_F7 },
|
|
{ SL_KEY_F(28), K_CTRL_F8 },
|
|
{ SL_KEY_F(29), K_CTRL_F9 },
|
|
{ SL_KEY_F(30), K_CTRL_F10 },
|
|
|
|
{ SL_KEY_F(31), K_ALT_F1 },
|
|
{ SL_KEY_F(32), K_ALT_F2 },
|
|
{ SL_KEY_F(33), K_ALT_F3 },
|
|
{ SL_KEY_F(34), K_ALT_F4 },
|
|
{ SL_KEY_F(35), K_ALT_F5 },
|
|
{ SL_KEY_F(36), K_ALT_F6 },
|
|
{ SL_KEY_F(37), K_ALT_F7 },
|
|
{ SL_KEY_F(38), K_ALT_F8 },
|
|
{ SL_KEY_F(39), K_ALT_F9 },
|
|
{ SL_KEY_F(40), K_ALT_F10 }
|
|
};
|
|
|
|
/* *********************************************************************** */
|
|
|
|
#define KeyTranslationTableSize \
|
|
( sizeof( KeyTranslationTable ) / ( 2 * sizeof ( int ) ) )
|
|
|
|
static void hb_gt_SortKeyTranslationTable( void )
|
|
{
|
|
int i, j, min, KeyTmp[ 2 ];
|
|
|
|
for ( i = 0; i < ( KeyTranslationTableSize - 1 ); i++ )
|
|
{
|
|
min = i;
|
|
|
|
for ( j = i + 1; j < KeyTranslationTableSize; j++ )
|
|
{
|
|
if ( KeyTranslationTable[ j ][ 0 ] < KeyTranslationTable[ min ][ 0 ] )
|
|
min = j;
|
|
}
|
|
|
|
if ( min > i )
|
|
{
|
|
KeyTmp[ 0 ] = KeyTranslationTable[ i ][ 0 ];
|
|
KeyTmp[ 1 ] = KeyTranslationTable[ i ][ 1 ];
|
|
|
|
KeyTranslationTable[ i ][ 0 ] = KeyTranslationTable[ min ][ 0 ];
|
|
KeyTranslationTable[ i ][ 1 ] = KeyTranslationTable[ min ][ 1 ];
|
|
|
|
KeyTranslationTable[ min ][ 0 ] = KeyTmp[ 0 ];
|
|
KeyTranslationTable[ min ][ 1 ] = KeyTmp[ 1 ];
|
|
}
|
|
}
|
|
|
|
/*
|
|
for ( i = 0; i < KeyTranslationTableSize; i++ )
|
|
fprintf( stderr, "%02x %8x %8x\n", i, KeyTranslationTable[ i ][ 0 ], KeyTranslationTable[ i ][ 1 ] );
|
|
*/
|
|
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
|
|
/* standard binary search */
|
|
static int hb_gt_FindKeyTranslation( int SlangKey )
|
|
{
|
|
int Start,Stop,CurPos;
|
|
|
|
if ( ( SlangKey >= KeyTranslationTable[ 0 ][ 0 ] ) &&
|
|
( SlangKey <= KeyTranslationTable[ KeyTranslationTableSize - 1 ][ 0 ] ) )
|
|
{
|
|
Start = 0; Stop = KeyTranslationTableSize - 1;
|
|
|
|
while( Start <= Stop )
|
|
{
|
|
CurPos = ( Start + Stop ) / 2;
|
|
|
|
/* fprintf( stderr, "%d %d %d\n", i, KeyTranslationTable[ i ][ 0 ], KeyTranslationTable[ i ][ 1 ] ); */
|
|
|
|
if( SlangKey == KeyTranslationTable[ CurPos ][ 0 ] )
|
|
return( KeyTranslationTable[ CurPos ][ 1 ] );
|
|
|
|
else if( SlangKey < KeyTranslationTable[ CurPos ][ 0 ] )
|
|
Stop = CurPos - 1;
|
|
|
|
else if( SlangKey > KeyTranslationTable[ CurPos ][ 0 ] )
|
|
Start = CurPos + 1;
|
|
}
|
|
}
|
|
|
|
/* return( SlangKey ); */
|
|
return( 0 );
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
|
|
int hb_gt_SetKeyInKeyTranslationTable( int SlangKey, int ClipKey )
|
|
{
|
|
int i;
|
|
|
|
if ( ( SlangKey >= KeyTranslationTable[ 0 ][ 0 ] ) &&
|
|
( SlangKey <= KeyTranslationTable[ KeyTranslationTableSize - 1 ][ 0 ] ) )
|
|
{
|
|
for ( i = 0; i < KeyTranslationTableSize; i++ )
|
|
{
|
|
if ( SlangKey == KeyTranslationTable[ i ][ 0 ] )
|
|
KeyTranslationTable[ i ][ 1 ] = ClipKey;
|
|
/* we don't break here because SlangKey can be defined more than once */
|
|
}
|
|
}
|
|
|
|
return( i < KeyTranslationTableSize );
|
|
}
|
|
|
|
/* ************************************************************************* */
|