@ -25,6 +25,7 @@
# include "qemu/osdep.h"
# include "keymaps.h"
# include "sysemu/sysemu.h"
# include "trace.h"
static int get_keysym ( const name2keysym_t * table ,
const char * name )
@ -71,18 +72,14 @@ static void add_to_key_range(struct key_range **krp, int code) {
static void add_keysym ( char * line , int keysym , int keycode , kbd_layout_t * k ) {
if ( keysym < MAX_NORMAL_KEYCODE ) {
/* fprintf(stderr,"Setting keysym %s (%d) to %d\n",
line , keysym , keycode ) ; */
trace_keymap_add ( " normal " , keysym , keycode , line ) ;
k - > keysym2keycode [ keysym ] = keycode ;
} else {
if ( k - > extra_count > = MAX_EXTRA_COUNT ) {
fprintf ( stderr , " Warning: Could not assign keysym %s (0x%x) "
" because of memory constraints. \n " , line , keysym ) ;
} else {
#if 0
fprintf ( stderr , " Setting %d: %d,%d \n " ,
k - > extra_count , keysym , keycode ) ;
# endif
trace_keymap_add ( " extra " , keysym , keycode , line ) ;
k - > keysym2keycode_extra [ k - > extra_count ] .
keysym = keysym ;
k - > keysym2keycode_extra [ k - > extra_count ] .
@ -99,9 +96,11 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
FILE * f ;
char * filename ;
char line [ 1024 ] ;
char keyname [ 64 ] ;
int len ;
filename = qemu_find_file ( QEMU_FILE_TYPE_KEYMAP , language ) ;
trace_keymap_parse ( filename ) ;
f = filename ? fopen ( filename , " r " ) : NULL ;
g_free ( filename ) ;
if ( ! f ) {
@ -130,18 +129,21 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
if ( ! strncmp ( line , " include " , 8 ) ) {
parse_keyboard_layout ( table , line + 8 , k ) ;
} else {
char * end_of_keysym = line ;
while ( * end_of_keysym ! = 0 & & * end_of_keysym ! = ' ' ) {
end_of_keysym + + ;
int offset = 0 ;
while ( line [ offset ] ! = 0 & &
line [ offset ] ! = ' ' & &
offset < sizeof ( keyname ) - 1 ) {
keyname [ offset ] = line [ offset ] ;
offset + + ;
}
if ( * end_of_keysym ) {
keyname [ offset ] = 0 ;
if ( strlen ( keyname ) ) {
int keysym ;
* end_of_keysym = 0 ;
keysym = get_keysym ( table , line ) ;
keysym = get_keysym ( table , keyname ) ;
if ( keysym = = 0 ) {
/* fprintf(stderr, "Warning: unknown keysym %s\n", line);*/
} else {
const char * rest = end_of_keysym + 1 ;
const char * rest = line + offset + 1 ;
int keycode = strtol ( rest , NULL , 0 ) ;
if ( strstr ( rest , " numlock " ) ) {
@ -165,10 +167,10 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
if ( strstr ( rest , " addupper " ) ) {
char * c ;
for ( c = lin e; * c ; c + + ) {
for ( c = keynam e; * c ; c + + ) {
* c = qemu_toupper ( * c ) ;
}
keysym = get_keysym ( table , lin e) ;
keysym = get_keysym ( table , keynam e) ;
if ( keysym ) {
add_keysym ( line , keysym ,
keycode | SCANCODE_SHIFT , k ) ;
@ -194,6 +196,7 @@ int keysym2scancode(void *kbd_layout, int keysym)
kbd_layout_t * k = kbd_layout ;
if ( keysym < MAX_NORMAL_KEYCODE ) {
if ( k - > keysym2keycode [ keysym ] = = 0 ) {
trace_keymap_unmapped ( keysym ) ;
fprintf ( stderr , " Warning: no scancode found for keysym %d \n " ,
keysym ) ;
}