See ChangeLog entry 2001-04-27 22:30 UTC-0400 David G. Holm <dholm@jsd-llc.com>

This commit is contained in:
David G. Holm
2001-04-28 02:30:53 +00:00
parent cc0d80a066
commit 31db690182
17 changed files with 1328 additions and 312 deletions

View File

@@ -1,3 +1,66 @@
2001-04-27 22:30 UTC-0400 David G. Holm <dholm@jsd-llc.com>
* doc/en/input.txt
* include/hbapigt.h
+ include/hbinkey.ch
* include/inkey.ch
* source/rtl/gtapi.c
* source/rtl/inkey.c
* source/rtl/gt_tpl/gt_tpl.c
* source/rtl/gtcgi/gtcgi.c
* source/rtl/gtcrs/kbdcrs.c
* source/rtl/gtdos/gtdos.c
* source/rtl/gtos2/gtos2.c
* source/rtl/gtpca/gtpca.c
* source/rtl/gtsln/kbsln.c
* source/rtl/gtstd/gtstd.c
* source/rtl/gtwin/gtwin.c
* tests/inkeytst.prg
+ Added a new HB_INKEY_EXTENDED mode that extends the number of
unique keys that Harbour can distinguish between. The first
implementation is for gtwin only, so the gtapi has a new API
function that the inkey.c module uses to determine if the GT
module supports the new HB_INKEY_EXTENDED mode. This way, it
is not necessary to convert all GT drivers to support the new
input mode at the same time. The new GT API function is named
hb_gtExtendedKeySupport() and returns zero if the new mode is
not supported or non-zero if the new extended mode is supported.
* The INKEY() family of functions defaults to the normal Clipper-
compatible key code mode. In order to use the extended code mode,
you either need to set the global input mask to include the new
HB_INKEY_EXTENDED value or include it in the second parameter for
INKEY() and the new optional NEXTKEY() and LASTKEY() parameter.
+ A GT driver that supports extended key code mode must *always* use
extended key codes. A new translation function in inkey.c is used
to translate between extended and normal key codes when the new
HB_INKEY_EXTENDED mode is not in use.
+ The new hbinkey.ch module defines and documents the new extended
mode key codes, which are not compatible with the normal codes
(with the obvious exception of character codes 0 through 255).
These manifest constants use the HB_ prefix and are also defined
for many duplicate codes (such as HB_K_CTRL_A, HB_ENTER, etc.)
+ Extended key codes consist of the PC keyboard scan code and one
or more offset values. If no keyboard modifier was used, then
HB_INKEY_NONE is added. The Alt key adds HB_INKEY_ALT, the Ctrl
key adds HB_INKEY_CTRL, the Shift key adds HB_INKEY_SHIFT, and
enhanced keys (KeyPad+/ and CursorPad keys) add HB_INKEY_ENHANCED.
For example, F1 is scan code 59, so if you just press F1, you get
key code 315, but Alt+F1 gives 443, Ctrl+F1 gives 571, and Shift+
F1 gives 699. And NumPad+/ gives 1077, 1205, 1333, and 1461. At
this time, the only value that can combine with other values is
HB_INKEY_ENHANCED (i.e., there are no Alt+Ctl combinations, etc.)
+ Note: The extended key code set is larger than the normal key code
set. As a result, if you switch between the normal and extended
modes, you need to be aware that some codes get translated into a
zero in normal mode (because there is no corresponding code in
normal mode) and that these codes get removed from the keyboard
input buffer in normal mode and you won't be able to go back and
fetch them later in extended mode.
+ In order to allow testing the new extended mode, the inkeytst.prg
module has been extended to interpret the second parameter. If it
is not present, then normal mode is used. If it starts with an "R"
(or "r"), then raw mode is used. Otherwise, extended mode is used.
2001-04-27 15:00 UTC-0400 David G. Holm <dholm@jsd-llc.com>
* include/achoice.ch

View File

@@ -40,27 +40,49 @@
* type of input event, simply add the various mask names together.
*
* <table>
* inkey.ch Meaning
* inkey.ch Meaning
*
* INKEY_MOVE Mouse motion events are allowed
* INKEY_LDOWN The mouse left click down event is allowed
* INKEY_LUP The mouse left click up event is allowed
* INKEY_RDOWN The mouse right click down event is allowed
* INKEY_RUP The mouse right click up event is allowed
* INKEY_KEYBOARD All keyboard events are allowed
* INKEY_ALL All mouse and keyboard events are allowed
* INKEY_MOVE Mouse motion events are allowed
* INKEY_LDOWN The mouse left click down event is allowed
* INKEY_LUP The mouse left click up event is allowed
* INKEY_RDOWN The mouse right click down event is allowed
* INKEY_RUP The mouse right click up event is allowed
* INKEY_KEYBOARD All keyboard events are allowed
* INKEY_ALL All mouse and keyboard events are allowed
* HB_INKEY_EXTENDED Extended keyboard codes are used.
* </table>
* If the parameter is not numeric, it will be treated as if it were set
* to hb_set.HB_SET_EVENTMASK.
* $RETURNS$
* 0 in case of timeout with no input event, otherwise returns a value
* in the range -39 to 386 for keyboard events or the range 1001 to 1007
* in the range -47 to 386 for keyboard events or the range 1001 to 1007
* for mouse events. Mouse events and non-printable keyboard events are
* represented by the K_<event> values listed in inkey.ch. Keyboard
* event return codes in the range 32 through 127 are equivalent to the
* printable ASCII character set. Keyboard event return codes in the
* range 128 through 255 are assumed to be printable, but results may
* vary based on hardware and nationality.
* vary based on hardware and nationality. If HB_INKEY_EXTENDED mode is
* used, then the return value for keyboard events ranges from 1 through
* 767 and 1077 through 1491, although not all codes are used.
*
* Extended key codes consist of the PC keyboard scan code and one
* or more offset values. If no keyboard modifier was used, then
* HB_INKEY_NONE is added. The Alt key adds HB_INKEY_ALT, the Ctrl
* key adds HB_INKEY_CTRL, the Shift key adds HB_INKEY_SHIFT, and
* enhanced keys (KeyPad+/ and CursorPad keys) add HB_INKEY_ENHANCED.
* For example, F1 is scan code 59, so if you just press F1, you get
* key code 315, but Alt+F1 gives 443, Ctrl+F1 gives 571, and Shift+
* F1 gives 699. And NumPad+/ gives 1077, 1205, 1333, and 1461. At
* this time, the only value that can combine with other values is
* HB_INKEY_ENHANCED (i.e., there are no Alt+Ctl combinations, etc.)
*
* Note: The extended key code set is larger than the normal key code
* set. As a result, if you switch between the normal and extended
* modes, you need to be aware that some codes get translated into a
* zero in normal mode (because there is no corresponding code in
* normal mode) and that these codes get removed from the keyboard
* input buffer in normal mode and you won't be able to go back and
* fetch them later in extended mode.
* $DESCRIPTION$
* INKEY() can be used to detect input events, such as keypress, mouse
* movement, or mouse key clicks (up and/or down).
@@ -178,9 +200,12 @@
* $ONELINER$
* Get the next key code in the buffer without extracting it.
* $SYNTAX$
* NEXTKEY() --> nKey
* NEXTKEY( [<nInputMask>] ) --> nKey
* $ARGUMENTS$
* None
* nInputMask is an optional integer value composed of one or more
* INKEY_ or HB_INKEY_ constants. The sole purpose of this argument
* is to allow switching between using HB_INKEY_EXTENDED key codes
* and using the normal Clipper-compatible key codes
* $RETURNS$
* <nKey> The value of the next key in the Harbour keyboard buffer.
* $DESCRIPTION$
@@ -208,7 +233,8 @@
* $STATUS$
* R
* $COMPLIANCE$
* NEXTKEY() is compliant with CA-Clipper 5.3
* NEXTKEY() is compliant with CA-Clipper 5.3, but has been extended
* for Harbour.
* $FILES$
* Library is rtl
* $SEEALSO$
@@ -224,9 +250,12 @@
* $ONELINER$
* Get the last key extracted from the keyboard buffer.
* $SYNTAX$
* LASTKEY() --> nKey
* LASTKEY( [<nInputMask>] ) --> nKey
* $ARGUMENTS$
* None
* nInputMask is an optional integer value composed of one or more
* INKEY_ or HB_INKEY_ constants. The sole purpose of this argument
* is to allow switching between using HB_INKEY_EXTENDED key codes
* and using the normal Clipper-compatible key codes
* $RETURNS$
* <nKey> The last key extracted from the keyboard buffer.
* $DESCRIPTION$
@@ -247,7 +276,8 @@
* $STATUS$
* R
* $COMPLIANCE$
* LASTKEY() is compliant with CA-Clipper 5.3
* LASTKEY() is compliant with CA-Clipper 5.3, but has been extended
* for Harbour.
* $FILES$
* Library is rtl
* $SEEALSO$

View File

@@ -171,6 +171,7 @@ extern USHORT hb_gtPostExt( void );
extern USHORT hb_gtPreExt( void );
extern USHORT hb_gtSuspend( void ); /* prepare the reminal for shell output */
extern USHORT hb_gtResume( void ); /* resume the terminal after the shell output */
extern int hb_gtExtendedKeySupport( void );
extern int hb_gtReadKey( HB_inkey_enum eventmask );
extern USHORT hb_gtRectSize( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, USHORT * puiBuffSize );
extern USHORT hb_gtRepChar( USHORT uiRow, USHORT uiCol, BYTE byChar, USHORT uiCount );
@@ -240,6 +241,7 @@ extern BOOL hb_gt_Suspend( void ); /* suspend the terminal before the shell ca
extern BOOL hb_gt_Resume( void ); /* resume the terminal after the shell call */
extern void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen );
extern void hb_gt_PutText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbySrc );
extern int hb_gt_ExtendedKeySupport();
extern int hb_gt_ReadKey( HB_inkey_enum eventmask );
extern int hb_gt_RectSize( USHORT rows, USHORT cols );
extern void hb_gt_Replicate( USHORT uiTop, USHORT uiLeft, BYTE byAttr, BYTE byChar, ULONG ulLen );
@@ -262,12 +264,13 @@ extern USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE
/* Harbour keyboard support functions */
extern int hb_inkey( BOOL bWait, double dSeconds, HB_inkey_enum event_mask ); /* Wait for keyboard input */
extern int hb_inkeyGet( void ); /* Extract the next key from the Harbour keyboard buffer */
extern int hb_inkeyGet( HB_inkey_enum event_mask ); /* Extract the next key from the Harbour keyboard buffer */
extern void hb_inkeyPut( int ch ); /* Inserts an inkey code into the keyboard buffer */
extern int hb_inkeyLast( void ); /* Return the value of the last key that was extracted */
extern int hb_inkeyNext( void ); /* Return the next key without extracting it */
extern int hb_inkeyLast( HB_inkey_enum event_mask ); /* Return the value of the last key that was extracted */
extern int hb_inkeyNext( HB_inkey_enum event_mask ); /* Return the next key without extracting it */
extern void hb_inkeyPoll( void ); /* Poll the console keyboard to stuff the Harbour buffer */
extern void hb_inkeyReset( BOOL allocate ); /* Reset the Harbour keyboard buffer */
extern int hb_inkeyTranslate( int key, HB_inkey_enum event_make ); /* Translation extended codes to normal codes, if needed */
/* Mouse related declarations */

348
harbour/include/hbinkey.ch Normal file
View File

@@ -0,0 +1,348 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* Header file for INKEY() function
*
* Copyright 2001 David G. Holm
* 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, or (at your option)
* any later version.
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries 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 Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/* NOTE: This file is also used by C code. */
#ifndef HB_HBINKEY_CH_
#define HB_HBINKEY_CH_
#define HB_INKEY_NONE 256
#define HB_INKEY_ALT 384
#define HB_INKEY_CTRL 512
#define HB_INKEY_SHIFT 640
#define HB_INKEY_ENHANCED 768
#define HB_K_ALT_A 414
#define HB_K_ALT_B 432
#define HB_K_ALT_C 430
#define HB_K_ALT_D 416
#define HB_K_ALT_E 402
#define HB_K_ALT_F 417
#define HB_K_ALT_G 418
#define HB_K_ALT_H 419
#define HB_K_ALT_I 407
#define HB_K_ALT_J 420
#define HB_K_ALT_K 421
#define HB_K_ALT_L 422
#define HB_K_ALT_M 434
#define HB_K_ALT_N 433
#define HB_K_ALT_O 408
#define HB_K_ALT_P 409
#define HB_K_ALT_Q 400
#define HB_K_ALT_R 403
#define HB_K_ALT_S 415
#define HB_K_ALT_T 404
#define HB_K_ALT_U 406
#define HB_K_ALT_V 431
#define HB_K_ALT_W 401
#define HB_K_ALT_X 429
#define HB_K_ALT_Y 405
#define HB_K_ALT_Z 428
#define HB_K_CTRL_A 1
#define HB_K_CTRL_B 2
#define HB_K_CTRL_C 3
#define HB_K_CTRL_D 4
#define HB_K_CTRL_E 5
#define HB_K_CTRL_F 6
#define HB_K_CTRL_G 7
#define HB_K_CTRL_H 8
#define HB_K_CTRL_I 9
#define HB_K_CTRL_J 10
#define HB_K_CTRL_K 11
#define HB_K_CTRL_L 12
#define HB_K_CTRL_M 13
#define HB_K_CTRL_N 14
#define HB_K_CTRL_O 15
#define HB_K_CTRL_P 16
#define HB_K_CTRL_Q 17
#define HB_K_CTRL_R 18
#define HB_K_CTRL_S 19
#define HB_K_CTRL_T 20
#define HB_K_CTRL_U 21
#define HB_K_CTRL_V 22
#define HB_K_CTRL_W 23
#define HB_K_CTRL_X 24
#define HB_K_CTRL_Y 25
#define HB_K_CTRL_Z 26
#define HB_K_CTRL_LEFT_SQUARE 27
#define HB_K_CTRL_BACK_SLASH 28
#define HB_K_CTRL_RIGHT_SQUARE 29
#define HB_K_CTRL_HAT 30
#define HB_K_CTRL_UNDERSCORE 31
#define HB_K_SPACE 32
#define HB_K_ALT_1 386
#define HB_K_ALT_2 387
#define HB_K_ALT_3 388
#define HB_K_ALT_4 389
#define HB_K_ALT_5 390
#define HB_K_ALT_6 391
#define HB_K_ALT_7 392
#define HB_K_ALT_8 393
#define HB_K_ALT_9 394
#define HB_K_ALT_0 395
#define HB_K_ALT_EQUAL 397
#define HB_K_CTRL_1 514
#define HB_K_CTRL_2 515
#define HB_K_CTRL_3 516
#define HB_K_CTRL_4 517
#define HB_K_CTRL_5 518
#define HB_K_CTRL_6 519
#define HB_K_CTRL_7 520
#define HB_K_CTRL_8 521
#define HB_K_CTRL_9 522
#define HB_K_CTRL_0 523
#define HB_K_CTRL_COLON 551
#define HB_K_CTRL_SEMI_COLON 551
#define HB_K_CTRL_COMMA 563
#define HB_K_CTRL_PERIOD 564
#define HB_K_CTRL_SLASH 565
#define HB_K_CTRL_MINUS 524
#define HB_K_CTRL_EQUALS 525
#define HB_K_CTRL_PLUS 525
#define HB_K_CTRL_LEFT_CURLY 538
#define HB_K_CTRL_RIGHT_CURLY 539
#define HB_K_BACKSPACE 8
#define HB_K_ALT_BACKSPACE 398
#define HB_K_CTRL_BACKSPACE 127
#define HB_K_SHIFT_BACKSPACE
#define HB_K_ENTER 13
#define HB_K_ALT_ENTER 412
#define HB_K_CTRL_ENTER 10
#define HB_K_SHIFT_ENTER 668
#define HB_K_ESC 27
#define HB_K_ALT_ESC 385
#define HB_K_CTRL_ESC 513
#define HB_K_SHIFT_ESC 641
#define HB_K_TAB 9
#define HB_K_ALT_TAB 399
#define HB_K_CTRL_TAB 527
#define HB_K_SHIFT_TAB 655
#define HB_K_F1 315
#define HB_K_F2 316
#define HB_K_F3 317
#define HB_K_F4 318
#define HB_K_F5 319
#define HB_K_F6 320
#define HB_K_F7 321
#define HB_K_F8 322
#define HB_K_F9 323
#define HB_K_F10 324
#define HB_K_F11 343
#define HB_K_F12 344
#define HB_K_ALT_F1 443
#define HB_K_ALT_F2 444
#define HB_K_ALT_F3 445
#define HB_K_ALT_F4 446
#define HB_K_ALT_F5 447
#define HB_K_ALT_F6 448
#define HB_K_ALT_F7 449
#define HB_K_ALT_F8 450
#define HB_K_ALT_F9 451
#define HB_K_ALT_F10 452
#define HB_K_ALT_F11 471
#define HB_K_ALT_F12 472
#define HB_K_CTRL_F1 571
#define HB_K_CTRL_F2 572
#define HB_K_CTRL_F3 573
#define HB_K_CTRL_F4 574
#define HB_K_CTRL_F5 575
#define HB_K_CTRL_F6 576
#define HB_K_CTRL_F7 577
#define HB_K_CTRL_F8 578
#define HB_K_CTRL_F9 579
#define HB_K_CTRL_F10 580
#define HB_K_CTRL_F11 599
#define HB_K_CTRL_F12 600
#define HB_K_SHIFT_F1 699
#define HB_K_SHIFT_F2 700
#define HB_K_SHIFT_F3 701
#define HB_K_SHIFT_F4 702
#define HB_K_SHIFT_F5 703
#define HB_K_SHIFT_F6 704
#define HB_K_SHIFT_F7 705
#define HB_K_SHIFT_F8 706
#define HB_K_SHIFT_F9 707
#define HB_K_SHIFT_F10 708
#define HB_K_SHIFT_F11 727
#define HB_K_SHIFT_F12 728
#define HB_KP_MINUS 330
#define HB_KP_ALT_MINUS 458
#define HB_KP_CTRL_MINUS 586
#define HB_KP_SHIFT_MINUS 714
#define HB_KP_PLUS 334
#define HB_KP_ALT_PLUS 462
#define HB_KP_CTRL_PLUS 590
#define HB_KP_SHIFT_PLUS 718
#define HB_KP_SLASH 1077
#define HB_KP_ALT_SLASH 1205
#define HB_KP_CTRL_SLASH 1333
#define HB_KP_SHIFT_SLASH 1461
#define HB_KP_STAR 311
#define HB_KP_ALT_STAR 439
#define HB_KP_CTRL_STAR 567
#define HB_KP_SHIFT_STAR 695
#define HB_KP_ENTER 284
#define HB_KP_ALT_ENTER 412
#define HB_KP_CTRL_ENTER 540
#define HB_KP_SHIFT_ENTER 668
#define HB_KP_HOME 327
#define HB_KP_UP 328
#define HB_KP_PG_UP 329
#define HB_KP_LEFT 331
#define HB_KP_5 332
#define HB_KP_RIGHT 333
#define HB_KP_END 335
#define HB_KP_DOWN 336
#define HB_KP_PG_DN 337
#define HB_KP_INS 338
#define HB_KP_DEL 339
#define HB_KP_ALT_HOME 455
#define HB_KP_ALT_UP 456
#define HB_KP_ALT_PG_UP 457
#define HB_KP_ALT_LEFT 459
#define HB_KP_ALT_5 460
#define HB_KP_ALT_RIGHT 461
#define HB_KP_ALT_END 463
#define HB_KP_ALT_DOWN 463
#define HB_KP_ALT_PG_DN 465
#define HB_KP_ALT_INS 466
#define HB_KP_ALT_DEL 467
#define HB_KP_CTRL_HOME 583
#define HB_KP_CTRL_UP 584
#define HB_KP_CTRL_PG_UP 585
#define HB_KP_CTRL_LEFT 587
#define HB_KP_CTRL_5 588
#define HB_KP_CTRL_RIGHT 589
#define HB_KP_CTRL_END 591
#define HB_KP_CTRL_DOWN 592
#define HB_KP_CTRL_PG_DN 593
#define HB_KP_CTRL_INS 594
#define HB_KP_CTRL_DEL 595
#define HB_KP_SHIFT_HOME 711
#define HB_KP_SHIFT_UP 712
#define HB_KP_SHIFT_PG_UP 713
#define HB_KP_SHIFT_LEFT 715
#define HB_KP_SHIFT_5 716
#define HB_KP_SHIFT_RIGHT 717
#define HB_KP_SHIFT_END 719
#define HB_KP_SHIFT_DOWN 720
#define HB_KP_SHIFT_PG_DN 721
#define HB_KP_SHIFT_INS 722
#define HB_KP_SHIFT_DEL 723
#define HB_K_HOME 1095
#define HB_K_UP 1096
#define HB_K_PG_UP 1097
#define HB_K_LEFT 1099
#define HB_K_RIGHT 1101
#define HB_K_END 1103
#define HB_K_DOWN 1104
#define HB_K_PG_DN 1105
#define HB_K_INS 1106
#define HB_K_DEL 1107
#define HB_K_ALT_HOME 1223
#define HB_K_ALT_UP 1224
#define HB_K_ALT_PG_UP 1225
#define HB_K_ALT_LEFT 1227
#define HB_K_ALT_RIGHT 1229
#define HB_K_ALT_END 1231
#define HB_K_ALT_DOWN 1231
#define HB_K_ALT_PG_DN 1233
#define HB_K_ALT_INS 1234
#define HB_K_ALT_DEL 1235
#define HB_K_CTRL_HOME 1351
#define HB_K_CTRL_UP 1352
#define HB_K_CTRL_PG_UP 1353
#define HB_K_CTRL_LEFT 1355
#define HB_K_CTRL_RIGHT 1357
#define HB_K_CTRL_END 1359
#define HB_K_CTRL_DOWN 1360
#define HB_K_CTRL_PG_DN 1361
#define HB_K_CTRL_INS 1362
#define HB_K_CTRL_DEL 1363
#define HB_K_SHIFT_HOME 1479
#define HB_K_SHIFT_UP 1480
#define HB_K_SHIFT_PG_UP 1481
#define HB_K_SHIFT_LEFT 1483
#define HB_K_SHIFT_RIGHT 1485
#define HB_K_SHIFT_END 1487
#define HB_K_SHIFT_DOWN 1488
#define HB_K_SHIFT_PG_DN 1489
#define HB_K_SHIFT_INS 1490
#define HB_K_SHIFT_DEL 1491
#endif /* HB_HBINKEY_CH_ */

View File

@@ -67,7 +67,9 @@
#define INKEY_RUP 16
#define INKEY_KEYBOARD 128
#define INKEY_ALL 159
#define INKEY_RAW 256 /* Harbour extension */
#define HB_INKEY_RAW 256 /* Harbour extension */
#define HB_INKEY_EXTENDED 512 /* Harbour extension */
/* Mouse events */

View File

@@ -57,6 +57,13 @@ void hb_gt_Exit( void )
/* TODO: */
}
int hb_gt_ExtendedKeySupport()
{
/* TODO: If this GTAPI supports the Harbour extended key
codes, then change the return value from 0 to 1. */
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
HB_TRACE(HB_TR_DEBUG, ("hb_gt_ReadKey(%d)", (int) eventmask));

View File

@@ -125,6 +125,11 @@ void hb_gtExit( void )
hb_xfree( s_pColor );
}
int hb_gtExtendedKeySupport()
{
return hb_gt_ExtendedKeySupport();
}
int hb_gtReadKey( HB_inkey_enum eventmask )
{
HB_TRACE(HB_TR_DEBUG, ("hb_gtReadKey(%d)", (int) eventmask));

View File

@@ -94,6 +94,10 @@ static void out_newline( void )
out_stdout( s_szCrLf, s_ulCrLf );
}
int hb_gt_ExtendedKeySupport()
{
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
HB_TRACE(HB_TR_DEBUG, ("hb_gt_ReadKey(%d)", (int) eventmask));

View File

@@ -237,6 +237,10 @@ void hb_gt_keyboard_Exit( void )
}
}
int hb_gt_ExtendedKeySupport()
{
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
static char key_codes[ HB_MAX_KEYMAP_CHARS + 1 ]; /* buffer for multi-characters keycodes */

View File

@@ -236,6 +236,10 @@ void hb_gt_Exit( void )
#endif
}
int hb_gt_ExtendedKeySupport()
{
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
int ch = 0;

View File

@@ -207,6 +207,10 @@ BOOL hb_gt_AdjustPos( BYTE * pStr, ULONG ulLen )
return TRUE;
}
int hb_gt_ExtendedKeySupport()
{
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{

View File

@@ -202,6 +202,11 @@ BOOL hb_gt_AdjustPos( BYTE * pStr, ULONG ulLen )
return TRUE;
}
int hb_gt_ExtendedKeySupport()
{
return 0;
}
#ifdef HARBOUR_GCC_OS2
#include "..\..\kbdos2.gcc"
#else

View File

@@ -254,6 +254,10 @@ int hb_gt_Init_Terminal( int phase )
#undef DO_LOCAL_DEBUG
/* #define DO_LOCAL_DEBUG */
int hb_gt_ExtendedKeySupport()
{
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
static int InDeadState = FALSE;

View File

@@ -109,6 +109,11 @@ void hb_gt_Exit( void )
#endif
}
int hb_gt_ExtendedKeySupport()
{
return 0;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
int ch;

View File

@@ -62,10 +62,11 @@
#define HB_OS_WIN_32_USED
#include "hbapigt.h"
#include "hbset.h" /* For Ctrl+Break handling */
#include "hbvm.h" /* For Ctrl+Break handling */
#include "inkey.ch"
#include <hbapigt.h>
#include <hbset.h> /* For Ctrl+Break handling */
#include <hbvm.h> /* For Ctrl+Break handling */
#include <hbinkey.ch>
#include <inkey.ch>
#if defined(__IBMCPP__)
#undef WORD /* 2 bytes unsigned */
@@ -277,69 +278,7 @@ static int StdFnKeys( WORD wKey, BOOL bEnhanced )
{
int ch;
/* Normal function key */
if( wKey == 53 && bEnhanced ) ch = '/'; /* Num Pad / */
else switch( wKey )
{
case 1: /* Esc */
ch = K_ESC;
break;
case 28: /* Num Pad Enter */
ch = K_ENTER;
break;
case 59: /* F1 */
ch = K_F1;
break;
case 60: /* F2 */
case 61: /* F3 */
case 62: /* F4 */
case 63: /* F5 */
case 64: /* F6 */
case 65: /* F7 */
case 66: /* F8 */
case 67: /* F9 */
case 68: /* F10 */
ch = 59 - wKey;
break;
case 71: /* Home */
ch = K_HOME;
break;
case 79: /* End */
ch = K_END;
break;
case 73: /* Page Up */
ch = K_PGUP;
break;
case 81: /* Page Down */
ch = K_PGDN;
break;
case 72: /* Up */
ch = K_UP;
break;
case 75: /* Left */
ch = K_LEFT;
break;
case 77: /* Right */
ch = K_RIGHT;
break;
case 76: /* Num Pad 5 */
ch = 332;
break;
case 80: /* Down */
ch = K_DOWN;
break;
case 82: /* Ins */
ch = K_INS;
break;
case 83: /* Del */
ch = K_DEL;
break;
case 87: /* F11 */
case 88: /* F12 */
ch = 47 - wKey;
break;
default:
ch = wKey;
}
ch = wKey + HB_INKEY_NONE;
return ch;
}
@@ -364,6 +303,11 @@ static int IgnoreKeyCodes( int wKey )
return ignore;
}
int hb_gt_ExtendedKeySupport()
{
return 1;
}
int hb_gt_ReadKey( HB_inkey_enum eventmask )
{
int ch = 0, extended = 0;
@@ -449,8 +393,7 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
fprintf( stdout, "0" );
#endif
if( ( ( ch == 0 || ch == -32 || ch == -16 ) && ( dwState & ( SHIFT_PRESSED | LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED ) ) )
|| ( ( dwState & ( ENHANCED_KEY | LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED ) )
&& ! ( ( dwState & ( RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED ) ) == ( RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED ) ) ) )
|| ( ( dwState & ( ENHANCED_KEY | LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED ) ) ) )
{
extended = 1;
#ifdef HB_DEBUG_KEYBOARD
@@ -524,6 +467,7 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
BOOL bAlt = dwState & ( LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED );
BOOL bCtrl = dwState & ( LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED );
BOOL bShift = dwState & SHIFT_PRESSED;
BOOL bAltGr = ( dwState & ( LEFT_CTRL_PRESSED | RIGHT_ALT_PRESSED ) ) == ( LEFT_CTRL_PRESSED | RIGHT_ALT_PRESSED );
BOOL bEnhanced = dwState & ENHANCED_KEY;
#ifdef HB_DEBUG_KEYBOARD
fprintf( stdout, "8" );
@@ -537,27 +481,14 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
fprintf( stdout, "9" );
#endif
/* Alt key held */
if( ch == 0 || ch == wChar || tolower( ch ) == tolower( wChar ) )
if( bAltGr && ch ) { /* It's actually Alt+Gr */ }
else
{
#ifdef HB_DEBUG_KEYBOARD
fprintf( stdout, "a" );
#endif
/* Only translate if not AltGr */
if( wKey == 1 ) ch = K_ALT_ESC; /* Esc */
else if( wKey == 15 ) ch = K_ALT_TAB; /* Tab */
else if( wKey <= 12 ) ch = wKey + 374; /* Numeric row */
else if( wKey == 28 ) ch = KP_ALT_ENTER; /* Num Pad Enter */
else if( wKey <= 52 ) ch = wKey + 256; /* Alpha rows */
else if( wKey == 53 && bEnhanced ) ch = KP_ALT_SLASH; /* Num Pad / */
else if( wKey == 55 ) ch = KP_ALT_ASTERISK; /* Num Pad * */
else if( wKey <= 58 ) ch = wKey + 367; /* ? */
else if( wKey <= 68 ) ch = 29 - wKey; /* F1 - F10 */
else if( wKey == 74 ) ch = KP_ALT_MINUS; /* Num Pad - */
else if( wKey == 76 ) ch = KP_ALT_5; /* Num Pad 5 */
else if( wKey == 78 ) ch = KP_ALT_PLUS; /* Num Pad + */
else if( wKey <= 86 ) ch = wKey + 336; /* Cursor */
else if( wKey <= 88 ) ch = 41 - wKey; /* F11, F12 */
else ch = wKey + 384;
ch = wKey + HB_INKEY_ALT;
if( bEnhanced ) ch += HB_INKEY_ENHANCED;
}
}
else if( bCtrl )
@@ -566,103 +497,8 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
fprintf( stdout, "b" );
#endif
/* Ctrl key held */
if( wKey == 53 && bEnhanced ) ch = KP_CTRL_SLASH; /* Num Pad / */
else switch( wKey )
{
case 1: /* Esc */
ch = K_ESC;
break;
case 3: /* 2 */
ch = 259;
break;
case 7: /* 6 */
ch = K_CTRL_PGDN;
break;
case 12: /* - */
ch = K_CTRL_PGUP;
break;
case 14: /* Backspace */
ch = K_CTRL_BS;
break;
case 15: /* Tab */
ch = K_CTRL_TAB;
break;
case 26: /* [ */
ch = K_ESC;
break;
case 27: /* ] */
ch = K_CTRL_HOME;
break;
case 28: /* Num Pad Enter */
ch = K_CTRL_ENTER;
break;
case 43: /* \ */
ch = K_F1;
break;
case 55: /* Num Pad * */
ch = KP_CTRL_ASTERISK;
break;
case 59: /* F1 */
case 60: /* F2 */
case 61: /* F3 */
case 62: /* F4 */
case 63: /* F5 */
case 64: /* F6 */
case 65: /* F7 */
case 66: /* F8 */
case 67: /* F9 */
case 68: /* F10 */
ch = 39 - wKey;
break;
case 71: /* Home */
ch = K_CTRL_HOME;
break;
case 72: /* Up */
ch = K_CTRL_UP;
break;
case 73: /* PgUp */
ch = K_CTRL_PGUP;
break;
case 74: /* Num Pad - */
ch = KP_CTRL_MINUS;
break;
case 75: /* Left */
ch = K_CTRL_LEFT;
break;
case 76: /* Num Pad 5 */
ch = KP_CTRL_5;
break;
case 77: /* Right */
ch = K_CTRL_RIGHT;
break;
case 78: /* Num Pad + */
ch = KP_CTRL_PLUS;
break;
case 79: /* End */
ch = K_CTRL_END;
break;
case 80: /* Down */
ch = K_CTRL_DOWN;
break;
case 81: /* PgDn */
ch = K_CTRL_PGDN;
break;
case 82: /* Ins */
ch = K_CTRL_INS;
break;
case 83: /* Del */
ch = K_CTRL_DEL;
break;
case 87: /* F11 */
case 88: /* F12 */
ch = 43 - wKey;
break;
default:
/* Keep Ctrl+Alpha, but scrap everything
else that hasn't been translated yet. */
if( ch < 1 || ch > 26 )
ch = 0;
}
if( ch == 0 || bEnhanced ) ch = wKey + HB_INKEY_CTRL;
if( bEnhanced ) ch += HB_INKEY_ENHANCED;
}
else if( bShift )
{
@@ -670,73 +506,8 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
fprintf( stdout, "c" );
#endif
/* Shift key held */
if( wKey == 53 && bEnhanced ) ch = '/'; /* Num Pad / */
else switch( wKey )
{
case 1: /* Esc */
ch = K_ESC;
break;
case 15: /* Tab */
ch = K_SH_TAB;
break;
case 28: /* Num Pad Enter */
ch = K_ENTER;
break;
case 59: /* F1 */
case 60: /* F2 */
case 61: /* F3 */
case 62: /* F4 */
case 63: /* F5 */
case 64: /* F6 */
case 65: /* F7 */
case 66: /* F8 */
case 67: /* F9 */
case 68: /* F10 */
ch = 49 - wKey;
break;
case 71: /* Home */
ch = K_HOME;
break;
case 72: /* Up */
ch = K_UP;
break;
case 73: /* Page Up */
ch = K_PGUP;
break;
case 75: /* Left */
ch = K_LEFT;
break;
case 76: /* Num Pad 5 */
ch = '5';
break;
case 77: /* Right */
ch = K_RIGHT;
break;
case 79: /* End */
ch = K_END;
break;
case 80: /* Down */
ch = K_DOWN;
break;
case 81: /* Page Down */
ch = K_PGDN;
break;
case 82: /* Ins */
ch = K_INS;
break;
case 83: /* Del */
ch = K_DEL;
break;
case 87: /* F11 */
case 88: /* F12 */
ch = 45 - wKey;
break;
default:
/* Only provide a translation for those key
codes that don't have a character code. */
if( ch == 0 )
ch = wKey + 128;
}
if( ch == 0 || bEnhanced ) ch = wKey + HB_INKEY_SHIFT;
if( bEnhanced ) ch += HB_INKEY_ENHANCED;
}
else
{
@@ -744,6 +515,7 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
fprintf( stdout, "d" );
#endif
ch = StdFnKeys( wKey, bEnhanced );
if( bEnhanced ) ch += HB_INKEY_ENHANCED;
}
}
}

View File

@@ -71,6 +71,7 @@
#include "hbapigt.h"
#include "hbvm.h"
#include "hbset.h"
#include "hbinkey.ch"
#include "inkey.ch"
#include <time.h>
@@ -86,6 +87,32 @@ static BOOL s_inkeyPoll; /* Flag to override no polling when TYPEAHEAD i
static int s_inkeyForce; /* Variable to hold keyboard input when TYPEAHEAD is 0 */
static HB_inkey_enum s_eventmask;
static int hb_inkeyFetch( void ) /* Extract the next key from the keyboard buffer */
{
int key;
HB_TRACE(HB_TR_DEBUG, ("hb_inkeyFetch()"));
hb_inkeyPoll();
if( hb_set.HB_SET_TYPEAHEAD )
{
/* Proper typeahead support is set */
if( s_inkeyHead == s_inkeyTail ) key = 0; /* Keyboard buffer is empty */
else
{ /* Keyboard buffer is not empty */
s_inkeyLast = s_inkeyBuffer[ s_inkeyTail++ ];
if( s_inkeyTail >= hb_set.HB_SET_TYPEAHEAD )
s_inkeyTail = 0;
key = s_inkeyLast;
}
}
else
key = s_inkeyLast = s_inkeyForce; /* Typeahead support is disabled */
s_inkeyForce = 0;
return key;
}
int hb_inkey( BOOL bWait, double dSeconds, HB_inkey_enum event_mask )
{
int key;
@@ -103,7 +130,7 @@ int hb_inkey( BOOL bWait, double dSeconds, HB_inkey_enum event_mask )
/* There is no point in waiting forever for no input events! */
if( ( event_mask & ( INKEY_ALL + INKEY_RAW ) ) != 0 )
{
while( hb_inkeyNext() == 0 )
while( hb_inkeyNext( event_mask ) == 0 )
{
hb_idleState();
}
@@ -120,12 +147,12 @@ int hb_inkey( BOOL bWait, double dSeconds, HB_inkey_enum event_mask )
struct tms tm;
end_clock = times( &tm ) + ( clock_t ) ( dSeconds * 100 );
while( hb_inkeyNext() == 0 && (times( &tm ) < end_clock) )
while( hb_inkeyNext( event_mask ) == 0 && (times( &tm ) < end_clock) )
#else
clock_t end_clock = clock() + ( clock_t ) ( dSeconds * CLOCKS_PER_SEC );
while( hb_inkeyNext() == 0 && clock() < end_clock )
#endif
while( hb_inkeyNext( event_mask ) == 0 && clock() < end_clock )
#endif
{
hb_idleState();
}
@@ -133,52 +160,27 @@ int hb_inkey( BOOL bWait, double dSeconds, HB_inkey_enum event_mask )
}
}
key = hb_inkeyGet(); /* Get the current input event or 0 */
key = hb_inkeyFetch(); /* Get the current input event or 0 */
s_inkeyPoll = FALSE; /* Stop forced polling */
s_eventmask = hb_set.HB_SET_EVENTMASK; /* Restore original input event mask */
return key;
return hb_inkeyTranslate( key, event_mask );
}
int hb_inkeyGet( void ) /* Extract the next key from the keyboard buffer */
{
int key;
HB_TRACE(HB_TR_DEBUG, ("hb_inkeyGet()"));
hb_inkeyPoll();
if( hb_set.HB_SET_TYPEAHEAD )
{
/* Proper typeahead support is set */
if( s_inkeyHead == s_inkeyTail ) key = 0; /* Keyboard buffer is empty */
else
{ /* Keyboard buffer is not empty */
s_inkeyLast = s_inkeyBuffer[ s_inkeyTail++ ];
if( s_inkeyTail >= hb_set.HB_SET_TYPEAHEAD )
s_inkeyTail = 0;
key = s_inkeyLast;
}
}
else
key = s_inkeyLast = s_inkeyForce; /* Typeahead support is disabled */
s_inkeyForce = 0;
return key;
}
int hb_inkeyLast( void ) /* Return the value of the last key that was extracted */
int hb_inkeyLast( HB_inkey_enum event_mask ) /* Return the value of the last key that was extracted */
{
HB_TRACE(HB_TR_DEBUG, ("hb_inkeyLast()"));
hb_inkeyPoll();
return s_inkeyLast;
return hb_inkeyTranslate( s_inkeyLast, event_mask );
}
int hb_inkeyNext( void ) /* Return the next key without extracting it */
int hb_inkeyNext( HB_inkey_enum event_mask ) /* Return the next key without extracting it */
{
int key = s_inkeyForce; /* Assume that typeahead support is disabled */
HB_TRACE(HB_TR_DEBUG, ("hb_inkeyNext()"));
hb_inkeyPoll();
@@ -187,12 +189,12 @@ int hb_inkeyNext( void ) /* Return the next key without extracting it */
{
/* Proper typeahead support is enabled */
if( s_inkeyHead == s_inkeyTail )
return 0; /* No key */
key = 0;
else
return s_inkeyBuffer[ s_inkeyTail ]; /* Next key */
key = s_inkeyBuffer[ s_inkeyTail ]; /* Next key */
}
return s_inkeyForce; /* Typeahead support is disabled */
return hb_inkeyTranslate( key, event_mask );
}
void hb_inkeyPoll( void ) /* Poll the console keyboard to stuff the Harbour buffer */
@@ -327,11 +329,761 @@ HB_FUNC( HB_KEYPUT )
HB_FUNC( NEXTKEY )
{
hb_retni( hb_inkeyNext() );
hb_retni( hb_inkeyNext( ISNUM( 1 ) ? ( HB_inkey_enum ) hb_parni( 1 ) : hb_set.HB_SET_EVENTMASK ) );
}
HB_FUNC( LASTKEY )
{
hb_retni( s_inkeyLast );
hb_retni( hb_inkeyTranslate( s_inkeyLast, hb_inkeyNext( ISNUM( 1 ) ? ( HB_inkey_enum ) hb_parni( 1 ) : hb_set.HB_SET_EVENTMASK ) ) );
}
int hb_inkeyTranslate( int key, HB_inkey_enum event_mask )
{
if( key && hb_gtExtendedKeySupport() && ! ( event_mask & HB_INKEY_EXTENDED ) )
{
/* Translate the Harbour extended key codes to
Clipper-compatible key codes */
switch( key ) {
case HB_K_ALT_A:
key = K_ALT_A;
break;
case HB_K_ALT_B:
key = K_ALT_B;
break;
case HB_K_ALT_C:
key = K_ALT_C;
break;
case HB_K_ALT_D:
key = K_ALT_D;
break;
case HB_K_ALT_E:
key = K_ALT_E;
break;
case HB_K_ALT_F:
key = K_ALT_F;
break;
case HB_K_ALT_G:
key = K_ALT_G;
break;
case HB_K_ALT_H:
key = K_ALT_H;
break;
case HB_K_ALT_I:
key = K_ALT_I;
break;
case HB_K_ALT_J:
key = K_ALT_J;
break;
case HB_K_ALT_K:
key = K_ALT_K;
break;
case HB_K_ALT_L:
key = K_ALT_L;
break;
case HB_K_ALT_M:
key = K_ALT_M;
break;
case HB_K_ALT_N:
key = K_ALT_N;
break;
case HB_K_ALT_O:
key = K_ALT_O;
break;
case HB_K_ALT_P:
key = K_ALT_P;
break;
case HB_K_ALT_Q:
key = K_ALT_Q;
break;
case HB_K_ALT_R:
key = K_ALT_R;
break;
case HB_K_ALT_S:
key = K_ALT_S;
break;
case HB_K_ALT_T:
key = K_ALT_T;
break;
case HB_K_ALT_U:
key = K_ALT_U;
break;
case HB_K_ALT_V:
key = K_ALT_V;
break;
case HB_K_ALT_W:
key = K_ALT_W;
break;
case HB_K_ALT_X:
key = K_ALT_X;
break;
case HB_K_ALT_Y:
key = K_ALT_Y;
break;
case HB_K_ALT_Z:
key = K_ALT_Z;
break;
case HB_K_CTRL_A:
key = K_CTRL_A;
break;
case HB_K_CTRL_B:
key = K_CTRL_B;
break;
case HB_K_CTRL_C:
key = K_CTRL_C;
break;
case HB_K_CTRL_D:
key = K_CTRL_D;
break;
case HB_K_CTRL_E:
key = K_CTRL_E;
break;
case HB_K_CTRL_F:
key = K_CTRL_F;
break;
case HB_K_CTRL_G:
key = K_CTRL_G;
break;
case HB_K_CTRL_H:
key = K_CTRL_H;
break;
case HB_K_CTRL_I:
key = K_CTRL_I;
break;
case HB_K_CTRL_J:
key = K_CTRL_J;
break;
case HB_K_CTRL_K:
key = K_CTRL_K;
break;
case HB_K_CTRL_L:
key = K_CTRL_L;
break;
case HB_K_CTRL_M:
key = K_CTRL_M;
break;
case HB_K_CTRL_N:
key = K_CTRL_N;
break;
case HB_K_CTRL_O:
key = K_CTRL_O;
break;
case HB_K_CTRL_P:
key = K_CTRL_P;
break;
case HB_K_CTRL_Q:
key = K_CTRL_Q;
break;
case HB_K_CTRL_R:
key = K_CTRL_R;
break;
case HB_K_CTRL_S:
key = K_CTRL_S;
break;
case HB_K_CTRL_T:
key = K_CTRL_T;
break;
case HB_K_CTRL_U:
key = K_CTRL_U;
break;
case HB_K_CTRL_V:
key = K_CTRL_V;
break;
case HB_K_CTRL_W:
key = K_CTRL_W;
break;
case HB_K_CTRL_X:
key = K_CTRL_X;
break;
case HB_K_CTRL_Y:
key = K_CTRL_Y;
break;
case HB_K_CTRL_Z:
key = K_CTRL_Z;
break;
case HB_K_CTRL_LEFT_SQUARE:
key = K_ESC;
break;
case HB_K_CTRL_BACK_SLASH:
key = K_F1;
break;
case HB_K_CTRL_RIGHT_SQUARE:
key = K_CTRL_HOME;
break;
case HB_K_CTRL_HAT:
key = K_CTRL_PGDN;
break;
case HB_K_CTRL_UNDERSCORE:
key = K_CTRL_PGUP;
break;
case HB_K_SPACE:
key = K_SPACE;
break;
case HB_K_ALT_1:
key = K_ALT_1;
break;
case HB_K_ALT_2:
key = K_ALT_2;
break;
case HB_K_ALT_3:
key = K_ALT_3;
break;
case HB_K_ALT_4:
key = K_ALT_4;
break;
case HB_K_ALT_5:
key = K_ALT_5;
break;
case HB_K_ALT_6:
key = K_ALT_6;
break;
case HB_K_ALT_7:
key = K_ALT_7;
break;
case HB_K_ALT_8:
key = K_ALT_8;
break;
case HB_K_ALT_9:
key = K_ALT_9;
break;
case HB_K_ALT_0:
key = K_ALT_0;
break;
case HB_K_ALT_EQUAL:
key = 269;
break;
case HB_K_CTRL_1:
key = -99;
break;
case HB_K_CTRL_2:
key = 259;
break;
case HB_K_CTRL_3:
key = -99;
break;
case HB_K_CTRL_4:
key = -99;
break;
case HB_K_CTRL_5:
key = -99;
break;
case HB_K_CTRL_6:
key = K_CTRL_PGDN;
break;
case HB_K_CTRL_7:
key = -99;
break;
case HB_K_CTRL_8:
key = -99;
break;
case HB_K_CTRL_9:
key = -99;
break;
case HB_K_CTRL_0:
key = -99;
break;
case HB_K_CTRL_SEMI_COLON:
key = -99;
break;
case HB_K_CTRL_COMMA:
key = -99;
break;
case HB_K_CTRL_PERIOD:
key = -99;
break;
case HB_K_CTRL_SLASH:
key = -99;
break;
case HB_K_CTRL_MINUS:
key = K_CTRL_PGUP;
break;
case HB_K_CTRL_PLUS:
key = -99;
break;
case HB_K_CTRL_LEFT_CURLY:
key = K_ESC;
break;
case HB_K_CTRL_RIGHT_CURLY:
key = K_CTRL_HOME;
break;
case HB_K_ALT_BACKSPACE:
key = 270;
break;
case HB_K_CTRL_BACKSPACE:
key = 127;
break;
case HB_K_ALT_ENTER:
key = K_ALT_ENTER;
break;
case HB_K_SHIFT_ENTER:
key = K_ENTER;
break;
case HB_K_ALT_ESC:
key = K_ALT_ESC;
break;
case HB_K_CTRL_ESC:
key = K_ESC;
break;
case HB_K_SHIFT_TAB:
key = K_SH_TAB;
break;
case HB_K_ALT_TAB:
key = K_ALT_TAB;
break;
case HB_K_CTRL_TAB:
key = K_CTRL_TAB;
break;
case HB_K_F1:
key = K_F1;
break;
case HB_K_F2:
key = K_F2;
break;
case HB_K_F3:
key = K_F3;
break;
case HB_K_F4:
key = K_F4;
break;
case HB_K_F5:
key = K_F5;
break;
case HB_K_F6:
key = K_F6;
break;
case HB_K_F7:
key = K_F7;
break;
case HB_K_F8:
key = K_F8;
break;
case HB_K_F9:
key = K_F9;
break;
case HB_K_F10:
key = K_F10;
break;
case HB_K_F11:
key = K_F11;
break;
case HB_K_F12:
key = K_F12;
break;
case HB_K_ALT_F1:
key = K_ALT_F1;
break;
case HB_K_ALT_F2:
key = K_ALT_F2;
break;
case HB_K_ALT_F3:
key = K_ALT_F3;
break;
case HB_K_ALT_F4:
key = K_ALT_F4;
break;
case HB_K_ALT_F5:
key = K_ALT_F5;
break;
case HB_K_ALT_F6:
key = K_ALT_F6;
break;
case HB_K_ALT_F7:
key = K_ALT_F7;
break;
case HB_K_ALT_F8:
key = K_ALT_F8;
break;
case HB_K_ALT_F9:
key = K_ALT_F9;
break;
case HB_K_ALT_F10:
key = K_ALT_F10;
break;
case HB_K_ALT_F11:
key = K_ALT_F11;
break;
case HB_K_ALT_F12:
key = K_ALT_F12;
break;
case HB_K_CTRL_F1:
key = K_CTRL_F1;
break;
case HB_K_CTRL_F2:
key = K_CTRL_F2;
break;
case HB_K_CTRL_F3:
key = K_CTRL_F3;
break;
case HB_K_CTRL_F4:
key = K_CTRL_F4;
break;
case HB_K_CTRL_F5:
key = K_CTRL_F5;
break;
case HB_K_CTRL_F6:
key = K_CTRL_F6;
break;
case HB_K_CTRL_F7:
key = K_CTRL_F7;
break;
case HB_K_CTRL_F8:
key = K_CTRL_F8;
break;
case HB_K_CTRL_F9:
key = K_CTRL_F9;
break;
case HB_K_CTRL_F10:
key = K_CTRL_F10;
break;
case HB_K_CTRL_F11:
key = K_CTRL_F11;
break;
case HB_K_CTRL_F12:
key = K_CTRL_F12;
break;
case HB_K_SHIFT_F1:
key = K_SH_F1;
break;
case HB_K_SHIFT_F2:
key = K_SH_F2;
break;
case HB_K_SHIFT_F3:
key = K_SH_F3;
break;
case HB_K_SHIFT_F4:
key = K_SH_F4;
break;
case HB_K_SHIFT_F5:
key = K_SH_F5;
break;
case HB_K_SHIFT_F6:
key = K_SH_F6;
break;
case HB_K_SHIFT_F7:
key = K_SH_F7;
break;
case HB_K_SHIFT_F8:
key = K_SH_F8;
break;
case HB_K_SHIFT_F9:
key = K_SH_F9;
break;
case HB_K_SHIFT_F10:
key = K_SH_F10;
break;
case HB_K_SHIFT_F11:
key = K_SH_F11;
break;
case HB_K_SHIFT_F12:
key = K_SH_F12;
break;
case HB_KP_MINUS:
key = '-';
break;
case HB_KP_ALT_MINUS:
key = KP_ALT_MINUS;
break;
case HB_KP_CTRL_MINUS:
key = KP_CTRL_MINUS;
break;
case HB_KP_SHIFT_MINUS:
key = '-';
break;
case HB_KP_PLUS:
key = '+';
break;
case HB_KP_ALT_PLUS:
key = KP_ALT_PLUS;
break;
case HB_KP_CTRL_PLUS:
key = KP_CTRL_PLUS;
break;
case HB_KP_SHIFT_PLUS:
key = '+';
break;
case HB_KP_SLASH:
key = '/';
break;
case HB_KP_ALT_SLASH:
key = KP_ALT_SLASH;
break;
case HB_KP_CTRL_SLASH:
key = KP_CTRL_SLASH;
break;
case HB_KP_SHIFT_SLASH:
key = '/';
break;
case HB_KP_STAR:
key = '*';
break;
case HB_KP_ALT_STAR:
key = KP_ALT_ASTERISK;
break;
case HB_KP_CTRL_STAR:
key = KP_CTRL_ASTERISK;
break;
case HB_KP_SHIFT_STAR:
key = '*';
break;
case HB_KP_ENTER:
key = K_ENTER;
break;
case HB_KP_CTRL_ENTER:
key = K_CTRL_ENTER;
break;
case HB_K_HOME:
key = K_HOME;
break;
case HB_K_UP:
key = K_UP;
break;
case HB_K_PG_UP:
key = K_PGUP;
break;
case HB_K_LEFT:
key = K_LEFT;
break;
case HB_K_RIGHT:
key = K_RIGHT;
break;
case HB_K_END:
key = K_END;
break;
case HB_K_DOWN:
key = K_DOWN;
break;
case HB_K_PG_DN:
key = K_PGDN;
break;
case HB_K_INS:
key = K_INS;
break;
case HB_K_DEL:
key = K_DEL;
break;
case HB_K_ALT_HOME:
key = K_ALT_HOME;
break;
case HB_K_ALT_UP:
key = K_ALT_UP;
break;
case HB_K_ALT_PG_UP:
key = K_ALT_PGUP;
break;
case HB_K_ALT_LEFT:
key = K_ALT_LEFT;
break;
case HB_K_ALT_RIGHT:
key = K_ALT_RIGHT;
break;
case HB_K_ALT_END:
key = K_ALT_END;
break;
case HB_K_ALT_PG_DN:
key = K_ALT_PGDN;
break;
case HB_K_ALT_INS:
key = K_ALT_INS;
break;
case HB_K_ALT_DEL:
key = K_ALT_DEL;
break;
case HB_K_CTRL_HOME:
key = K_CTRL_HOME;
break;
case HB_K_CTRL_UP:
key = K_CTRL_UP;
break;
case HB_K_CTRL_PG_UP:
key = K_CTRL_PGUP;
break;
case HB_K_CTRL_LEFT:
key = K_CTRL_LEFT;
break;
case HB_K_CTRL_RIGHT:
key = K_CTRL_RIGHT;
break;
case HB_K_CTRL_END:
key = K_CTRL_END;
break;
case HB_K_CTRL_DOWN:
key = K_CTRL_DOWN;
break;
case HB_K_CTRL_PG_DN:
key = K_CTRL_PGDN;
break;
case HB_K_CTRL_INS:
key = K_CTRL_INS;
break;
case HB_K_CTRL_DEL:
key = K_CTRL_DEL;
break;
case HB_K_SHIFT_HOME:
key = K_HOME;
break;
case HB_K_SHIFT_UP:
key = K_UP;
break;
case HB_K_SHIFT_PG_UP:
key = K_PGUP;
break;
case HB_K_SHIFT_LEFT:
key = K_LEFT;
break;
case HB_K_SHIFT_RIGHT:
key = K_RIGHT;
break;
case HB_K_SHIFT_END:
key = K_END;
break;
case HB_K_SHIFT_DOWN:
key = K_DOWN;
break;
case HB_K_SHIFT_PG_DN:
key = K_PGDN;
break;
case HB_K_SHIFT_INS:
key = K_INS;
break;
case HB_K_SHIFT_DEL:
key = K_DEL;
break;
case HB_KP_HOME:
key = K_HOME;
break;
case HB_KP_UP:
key = K_UP;
break;
case HB_KP_PG_UP:
key = K_PGUP;
break;
case HB_KP_LEFT:
key = K_LEFT;
break;
case HB_KP_5:
key = K_UP;
break;
case HB_KP_RIGHT:
key = K_RIGHT;
break;
case HB_KP_END:
key = K_END;
break;
case HB_KP_DOWN:
key = K_DOWN;
break;
case HB_KP_PG_DN:
key = K_PGDN;
break;
case HB_KP_INS:
key = K_INS;
break;
case HB_KP_DEL:
key = K_DEL;
break;
case HB_KP_ALT_HOME:
key = K_ALT_HOME;
break;
case HB_KP_ALT_UP:
key = K_ALT_UP;
break;
case HB_KP_ALT_PG_UP:
key = K_ALT_PGUP;
break;
case HB_KP_ALT_LEFT:
key = K_ALT_LEFT;
break;
case HB_KP_ALT_5:
key = K_ALT_5;
break;
case HB_KP_ALT_RIGHT:
key = K_ALT_RIGHT;
break;
case HB_KP_ALT_END:
key = K_ALT_END;
break;
case HB_KP_ALT_PG_DN:
key = K_ALT_PGDN;
break;
case HB_KP_ALT_INS:
key = K_ALT_INS;
break;
case HB_KP_ALT_DEL:
key = K_ALT_DEL;
break;
case HB_KP_CTRL_HOME:
key = K_CTRL_HOME;
break;
case HB_KP_CTRL_UP:
key = K_CTRL_UP;
break;
case HB_KP_CTRL_PG_UP:
key = K_CTRL_PGUP;
break;
case HB_KP_CTRL_LEFT:
key = K_CTRL_LEFT;
break;
case HB_KP_CTRL_5:
key = KP_CTRL_5;
break;
case HB_KP_CTRL_RIGHT:
key = K_CTRL_RIGHT;
break;
case HB_KP_CTRL_END:
key = K_CTRL_END;
break;
case HB_KP_CTRL_DOWN:
key = K_CTRL_DOWN;
break;
case HB_KP_CTRL_PG_DN:
key = K_CTRL_PGDN;
break;
case HB_KP_CTRL_INS:
key = K_CTRL_INS;
break;
case HB_KP_CTRL_DEL:
key = K_CTRL_DEL;
break;
case HB_KP_SHIFT_HOME:
key = K_HOME;
break;
case HB_KP_SHIFT_UP:
key = K_UP;
break;
case HB_KP_SHIFT_PG_UP:
key = K_PGUP;
break;
case HB_KP_SHIFT_LEFT:
key = K_LEFT;
break;
case HB_KP_SHIFT_5:
key = '5';
break;
case HB_KP_SHIFT_RIGHT:
key = K_RIGHT;
break;
case HB_KP_SHIFT_END:
key = K_END;
break;
case HB_KP_SHIFT_DOWN:
key = K_DOWN;
break;
case HB_KP_SHIFT_PG_DN:
key = K_PGDN;
break;
case HB_KP_SHIFT_INS:
key = K_INS;
break;
case HB_KP_SHIFT_DEL:
key = K_DEL;
break;
}
}
if( key == -99 )
{
/* Ignore this key code by extracting it from the input buffer
and discarding it. */
hb_inkeyFetch();
key = 0;
}
return key;
}

View File

@@ -202,7 +202,11 @@ LOCAL nKey, nMask, cText
nMask := INKEY_ALL
IF ! EMPTY( cRaw )
nMask += INKEY_RAW
IF UPPER( LEFT( cRaw, 1 ) ) == "R"
nMask += HB_INKEY_RAW
ELSE
nMask += HB_INKEY_EXTENDED
END IF
END IF
SET(_SET_EVENTMASK, nMask)