update old getkey() function to new get_key()

This commit is contained in:
marschap
2006-04-06 14:19:23 +00:00
parent 961147129d
commit 5486360e08
2 changed files with 36 additions and 33 deletions
+35 -32
View File
@@ -168,7 +168,7 @@ glk_init(Driver *drvthis)
// Enable auto-transmit of up/down key events // Enable auto-transmit of up/down key events
// This allows us to generate REPEAT keys distinct from // This allows us to generate REPEAT keys distinct from
// normal keys using timeouts. (see glk_getkey) // normal keys using timeouts. (see glk_get_key)
glkputl( PortFD, GLKCommand, 0x7e, 1, GLKCommand, 0x41, EOF ); glkputl( PortFD, GLKCommand, 0x7e, 1, GLKCommand, 0x41, EOF );
// Set contrast // Set contrast
@@ -576,18 +576,16 @@ glk_old_icon(Driver *drvthis, int which, int dest)
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// Tries to read a character from an input device... // Tries to read a character from an input device...
// //
// Return 0 for "nothing available". // Return NULL for "nothing available".
// //
MODULE_EXPORT char MODULE_EXPORT const char *
glk_old_getkey(Driver *drvthis) glk_get_key(Driver *drvthis)
{ {
/* NOTE THAT THIS CODE IS NOT USED IN THE NEW API */ int c;
/* It uses get_key instead, returning a string */ static int keycode = -1 ;
int c ;
static int key = -1 ;
static struct timeval lastkey ; static struct timeval lastkey ;
struct timeval now ; struct timeval now ;
const char *key = NULL;
debug(RPT_DEBUG, "glk_getkey()" ); debug(RPT_DEBUG, "glk_getkey()" );
@@ -595,27 +593,27 @@ glk_old_getkey(Driver *drvthis)
if( c >= 'A' && c <= 'Z' ) { if( c >= 'A' && c <= 'Z' ) {
/* Key down event */ /* Key down event */
key = c ; keycode = c ;
gettimeofday( &lastkey, NULL ); gettimeofday( &lastkey, NULL );
debug(RPT_DEBUG, "KEY %c at %ld.%06ld\n", c, lastkey.tv_sec, lastkey.tv_usec ); debug(RPT_DEBUG, "KEY %c at %ld.%06ld\n", c, lastkey.tv_sec, lastkey.tv_usec );
} else if( c >= 'a' && c <= 'z' ) { } else if( c >= 'a' && c <= 'z' ) {
/* Key up event */ /* Key up event */
debug(RPT_DEBUG, "KEY %c UP\n", c ); debug(RPT_DEBUG, "KEY %c UP\n", c );
key = -1 ; keycode = -1 ;
c = 0 ; c = 0 ;
} else { } else {
/* Assume timeout */ /* Assume timeout */
c = 0 ; c = 0 ;
if( key > 0 ) { if( keycode > 0 ) {
int msec_diff ; int msec_diff ;
/* A key is down */ /* A key is down */
gettimeofday( &now, NULL ); gettimeofday( &now, NULL );
msec_diff = (now.tv_sec - lastkey.tv_sec) * 1000 ; msec_diff = (now.tv_sec - lastkey.tv_sec) * 1000 ;
msec_diff += (now.tv_usec - lastkey.tv_usec) / 1000 ; msec_diff += (now.tv_usec - lastkey.tv_usec) / 1000 ;
debug(RPT_DEBUG, "KEY %c down for %d msec\n", key, msec_diff ); debug(RPT_DEBUG, "KEY %c down for %d msec\n", keycode, msec_diff );
if( msec_diff > 1000 ) { if( msec_diff > 1000 ) {
/* Generate repeat event */ /* Generate repeat event */
c = key | 0x20 ; /* Upper case to lower case */ c = keycode | 0x20 ; /* Upper case to lower case */
++lastkey.tv_sec ; /* HACK HACK. repeat at 1 sec intervals */ ++lastkey.tv_sec ; /* HACK HACK. repeat at 1 sec intervals */
debug(RPT_DEBUG, "KEY %c REPEAT\n", c ); debug(RPT_DEBUG, "KEY %c REPEAT\n", c );
}; };
@@ -623,26 +621,31 @@ glk_old_getkey(Driver *drvthis)
}; };
/* Remap keys according to what LCDproc expects */ /* Remap keys according to what LCDproc expects */
switch( c ) { switch ( c ) {
default : break ; case 'V' : key = "Enter";
case 'V' : c = 'A' ; break ; /* Hold/Select */ break;
case 'P' : c = 'B' ; break ; /* Left -- Minus */ case 'P' : key = "Left";
case 'Q' : c = 'C' ; break ; /* Right -- Plus */ break;
case 'L' : c = 'D' ; break ; /* Menu/Exit */ case 'Q' : key = "Right";
case 'U' : c = 'E' ; break ; /* Up */ break;
case 'K' : c = 'F' ; break ; /* Down */ case 'L' : key = "Escape";
break;
case 'U' : key = "Up";
break;
case 'K' : key = "Down";
break;
default : break;
case 'v' : c = 'N' ; break ; // What to do with repeated keys? We currently ignore them.
case 'p' : c = 'O' ; break ; //case 'v' : c = 'N' ; break ;
case 'q' : c = 'P' ; break ; //case 'p' : c = 'O' ; break ;
case 'l' : c = 'Q' ; break ; //case 'q' : c = 'P' ; break ;
case 'u' : c = 'R' ; break ; //case 'l' : c = 'Q' ; break ;
case 'k' : c = 'S' ; break ; //case 'u' : c = 'R' ; break ;
//case 'k' : c = 'S' ; break ;
}; };
// if( c ) { debug(RPT_DEBUG, "%s_ get_key() returns %s", drvthis->name, (key != NULL) ? key : "<null>");
// printf( "KEY %c\n", c );
// };
return( c ); return key;
} }
+1 -1
View File
@@ -24,7 +24,7 @@ MODULE_EXPORT void glk_set_contrast(Driver *drvthis, int promille);
MODULE_EXPORT void glk_backlight(Driver *drvthis, int on); MODULE_EXPORT void glk_backlight(Driver *drvthis, int on);
MODULE_EXPORT void glk_output(Driver *drvthis, int on); MODULE_EXPORT void glk_output(Driver *drvthis, int on);
MODULE_EXPORT char glk_getkey(Driver *drvthis); MODULE_EXPORT const char *glk_get_key(Driver *drvthis);
MODULE_EXPORT void glk_init_vbar(Driver *drvthis); MODULE_EXPORT void glk_init_vbar(Driver *drvthis);
MODULE_EXPORT void glk_init_hbar(Driver *drvthis); MODULE_EXPORT void glk_init_hbar(Driver *drvthis);