2015-10-28 15:44 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* include/hbgtinfo.ch
    * removed unused HB_GTI_KBD_* macros
    * redefined few other HB_GTI_KBD_* macros to be more HB_KF_* friendly.
      [INCOMPATIBLE]
    ; Warning this modification is not binary compatible so if someone uses
         HB_GTI_KBD_SCROLOCK, HB_GTI_KBD_NUMLOCK, HB_GTI_KBD_CAPSLOCK,
         HB_GTI_KBD_LSHIFT, HB_GTI_KBD_RSHIFT,
         HB_GTI_KBD_LCTRL, HB_GTI_KBD_RCTRL,
         HB_GTI_KBD_LALT, HB_GTI_KBD_RALT,
         HB_GTI_KBD_LWIN, HB_GTI_KBD_RWIN or
         HB_GTI_KBD_MENU
      then he should recompile his code with new hbgtinfo.ch header files.

  * include/hbgtcore.h
  * src/rtl/gtkeycod.c
  * src/rtl/gtdos/gtdos.c
  * src/rtl/gtos2/gtos2.c
  * src/rtl/gtpca/gtpca.c
  * src/rtl/gtstd/gtstd.c
    + added support for Harbour extended keycodes

  * src/rtl/gtos2/gtos2.c
    + added support for HB_GTI_KBDSHIFTS

  * src/rtl/gtdos/gtdos.c
    ! fixed CTRL+C and CTRL+BREAK handling in OpenWatcom builds

  * src/rtl/inkeyapi.c
    ! fixed translation for CTRL + @

  * tests/gtkeys.prg
    + added raw keyboard test - it disables any additional interactions
    * modified Harbour output to show more information about extended
      keycodes
This commit is contained in:
Przemysław Czerpak
2015-10-28 15:44:35 +01:00
parent 274bb1e971
commit 60b029f057
10 changed files with 877 additions and 237 deletions

View File

@@ -17,16 +17,16 @@ REQUEST HB_CODEPAGE_PL852
REQUEST HB_CODEPAGE_PLWIN
REQUEST HB_CODEPAGE_UTF8EX
#else
#xtranslate hb_keyStd( n ) ( n )
#xtranslate hb_keyCode( n ) Asc( n )
#xtranslate hb_keyChar( c ) iif( c >= 32 .AND. c <= 255, Chr( c ), "" )
#xtranslate hb_ntos( n ) LTrim( Str( n ) )
#xtranslate hb_keyStd( <n> ) => ( <n> )
#xtranslate hb_keyCode( <n> ) => Asc( <n> )
#xtranslate hb_keyChar( <c> ) => iif( <c> >= 32 .AND. <c> <= 255 .AND. <c> != 127, Chr( <c> ), "" )
#xtranslate hb_ntos( <n> ) => LTrim( Str( <n> ) )
#endif
#ifndef HB_K_RESIZE
#define HB_K_RESIZE 1101
#endif
PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
PROCEDURE Main( cTermCP, cHostCP, lBoxChar, lRawKey )
LOCAL k, kX, i, s
LOCAL aKeys := { ;
@@ -58,10 +58,10 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
{ "K_RETURN", 13, "Return, Ctrl-M" }, ;
{ "K_SPACE", 32, "Space bar" }, ;
{ "K_ESC", 27, "Esc, Ctrl-[" }, ;
{ "K_CTRL_ENTER", 10, "Ctrl-Enter" }, ;
{ "K_CTRL_RETURN", 10, "Ctrl-Return" }, ;
{ "K_CTRL_ENTER", 10, "Ctrl-Enter, Ctrl-J" }, ;
{ "K_CTRL_RETURN", 10, "Ctrl-Return, Ctrl-J" }, ;
{ "K_CTRL_RET", 10, "Ctrl-Return (Compat.)" }, ;
{ "K_CTRL_PRTSCR", 379, "Ctrl-Print Screen" }, ;
{ "K_CTRL_PRTSCR", 379, "Ctrl-Print Screen, Alt-4" }, ;
{ "K_ALT_COMMA", 307, "Alt-," }, ;
{ "K_ALT_PERIOD", 308, "Alt-." }, ;
{ "K_CTRL_QUESTION", 309, "Ctrl-?, Alt-Slash" }, ;
@@ -262,6 +262,14 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
// hb_gtInfo( HB_GTI_ALTENTER, .T. )
hb_gtInfo( HB_GTI_CLOSABLE, .F. )
hb_gtInfo( HB_GTI_SELECTCOPY, .T. )
IF PCount() >= 4
lRawKey := !Empty( lRawKey )
ELSEIF ! Empty( cTermCP ) .AND. Upper( cTermCP ) = "X"
lRawKey := .T.
cTermCP := NIL
ELSE
lRawKey := .F.
ENDIF
IF Empty( cTermCP )
cTermCP := "UTF8"
ELSE
@@ -279,6 +287,7 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
#ifdef _SET_EVENTMASK
Set( _SET_EVENTMASK, INKEY_ALL )
#endif
lRawKey := .f.
#endif
MDblClk( 250 )
@@ -298,18 +307,31 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
k := hb_keyStd( kX )
IF ( i := AScan( aKeys, {| x | x[ 2 ] == k } ) ) != 0
? " key:" + Str( aKeys[ i, 2 ], 7 ) + " " + PadR( aKeys[ i, 1 ], 18 ) + aKeys[ i, 3 ]
#ifdef __HARBOUR__
IF kX != k
?? " ext: 0x" + hb_numToHex( kX, 8 ) + " -> " + ;
hb_numToHex( hb_keyMod( kX ), 2 ) + ":" + hb_numToHex( hb_keyVal( kX ), 8 ) + ;
" [" + hb_keyChar( k ) + "]"
ENDIF
#endif
ELSEIF ( k >= 32 .AND. k <= 126 ) .OR. ( k >= 160 .AND. k <= 255 ) .OR. ;
Len( hb_keyChar( k ) ) > 0
#ifdef __HARBOUR__
? "char:" + iif( k > 256, " U+" + hb_numToHex( hb_keyVal( k ), 4 ), Str( k, 7 ) ) + ;
" " + hb_keyChar( k )
IF kX != k .or. k > 256
?? " ext: 0x" + hb_numToHex( kX, 8 ) + " -> " + ;
hb_numToHex( hb_keyMod( kX ), 2 ) + ":" + hb_numToHex( hb_keyVal( kX ), 8 ) + ;
" [" + hb_keyChar( k ) + "]"
ENDIF
#else
? "char:" + Str( k, 7 ) + " " + hb_keyChar( k )
#endif
ELSE
#ifdef __HARBOUR__
? " key:" + Str( k, 7 ) + " ext: 0x" + hb_numToHex( kX, 8 ) + " -> " + ;
hb_numToHex( hb_keyMod( kX ), 2 ) + ":" + hb_numToHex( hb_keyVal( kX ), 8 )
hb_numToHex( hb_keyMod( kX ), 2 ) + ":" + hb_numToHex( hb_keyVal( kX ), 8 ) + ;
" [" + hb_keyChar( k ) + "]"
#else
? " key:" + Str( k, 7 )
#endif
@@ -318,7 +340,7 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
IF k == hb_keyCode( "@" ) .AND. NextKey() == 0
EXIT
ELSEIF k == K_INS
ELSEIF k == K_INS .AND. ! lRawKey
Set( _SET_CURSOR, ( Set( _SET_CURSOR ) + 1 ) % 5 )
?? " cursor:" + hb_ntos( Set( _SET_CURSOR ) )
ELSEIF k == HB_K_RESIZE
@@ -326,12 +348,12 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
ELSEIF k >= 1000 .AND. k < 1100
?? " mpos(" + hb_ntos( MRow() ) + "," + hb_ntos( MCol() ) + ")"
#ifdef __HARBOUR__
ELSEIF k == K_CTRL_INS
ELSEIF k == K_CTRL_INS .AND. ! lRawKey
IF Alert( "Would you like to show clipboard text?", { "YES", "NO" } ) == 1
s := hb_gtInfo( HB_GTI_CLIPBOARDDATA )
? "Clipboard text: [" + s + "]"
ENDIF
ELSEIF k == K_CTRL_END
ELSEIF k == K_CTRL_END .AND. ! lRawKey
IF Alert( "Would you like to set clipboard text?", { "YES", "NO" } ) == 1
s := hb_TSToStr( hb_DateTime() ) + hb_eol() + ;
"Harbour GT" + hb_gtVersion() + " clipboard test" + hb_eol()