Diff for /qemu/keymaps.c between versions 1.1.1.4 and 1.1.1.5

version 1.1.1.4, 2018/04/24 16:50:34 version 1.1.1.5, 2018/04/24 17:20:40
Line 22 Line 22
  * THE SOFTWARE.   * THE SOFTWARE.
  */   */
   
 static int get_keysym(const char *name)  #include "keymaps.h"
   #include "sysemu.h"
   
   static int get_keysym(const name2keysym_t *table,
                         const char *name)
 {  {
     const name2keysym_t *p;      const name2keysym_t *p;
     for(p = name2keysym; p->name != NULL; p++) {      for(p = table; p->name != NULL; p++) {
         if (!strcmp(p->name, name))          if (!strcmp(p->name, name))
             return p->keysym;              return p->keysym;
     }      }
     return 0;      return 0;
 }  }
   
 struct key_range {  
     int start;  
     int end;  
     struct key_range *next;  
 };  
   
 #define MAX_NORMAL_KEYCODE 512  
 #define MAX_EXTRA_COUNT 256  
 typedef struct {  
     uint16_t keysym2keycode[MAX_NORMAL_KEYCODE];  
     struct {  
         int keysym;  
         uint16_t keycode;  
     } keysym2keycode_extra[MAX_EXTRA_COUNT];  
     int extra_count;  
     struct key_range *keypad_range;  
     struct key_range *numlock_range;  
 } kbd_layout_t;  
   
 static void add_to_key_range(struct key_range **krp, int code) {  static void add_to_key_range(struct key_range **krp, int code) {
     struct key_range *kr;      struct key_range *kr;
Line 73  static void add_to_key_range(struct key_ Line 59  static void add_to_key_range(struct key_
     }      }
 }  }
   
 static kbd_layout_t *parse_keyboard_layout(const char *language,  static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
                                              const char *language,
                                            kbd_layout_t * k)                                             kbd_layout_t * k)
 {  {
     FILE *f;      FILE *f;
     char file_name[1024];      char * filename;
     char line[1024];      char line[1024];
     int len;      int len;
   
     snprintf(file_name, sizeof(file_name),      filename = qemu_find_file(QEMU_FILE_TYPE_KEYMAP, language);
              "%s/keymaps/%s", bios_dir, language);  
   
     if (!k)      if (!k)
         k = qemu_mallocz(sizeof(kbd_layout_t));          k = qemu_mallocz(sizeof(kbd_layout_t));
     if (!(f = fopen(file_name, "r"))) {      if (!(filename && (f = fopen(filename, "r")))) {
         fprintf(stderr,          fprintf(stderr,
                 "Could not read keymap file: '%s'\n", file_name);                  "Could not read keymap file: '%s'\n", language);
         return 0;          return NULL;
     }      }
       qemu_free(filename);
     for(;;) {      for(;;) {
         if (fgets(line, 1024, f) == NULL)          if (fgets(line, 1024, f) == NULL)
             break;              break;
Line 102  static kbd_layout_t *parse_keyboard_layo Line 89  static kbd_layout_t *parse_keyboard_layo
         if (!strncmp(line, "map ", 4))          if (!strncmp(line, "map ", 4))
             continue;              continue;
         if (!strncmp(line, "include ", 8)) {          if (!strncmp(line, "include ", 8)) {
             parse_keyboard_layout(line + 8, k);              parse_keyboard_layout(table, line + 8, k);
         } else {          } else {
             char *end_of_keysym = line;              char *end_of_keysym = line;
             while (*end_of_keysym != 0 && *end_of_keysym != ' ')              while (*end_of_keysym != 0 && *end_of_keysym != ' ')
Line 110  static kbd_layout_t *parse_keyboard_layo Line 97  static kbd_layout_t *parse_keyboard_layo
             if (*end_of_keysym) {              if (*end_of_keysym) {
                 int keysym;                  int keysym;
                 *end_of_keysym = 0;                  *end_of_keysym = 0;
                 keysym = get_keysym(line);                  keysym = get_keysym(table, line);
                 if (keysym == 0) {                  if (keysym == 0) {
                     //              fprintf(stderr, "Warning: unknown keysym %s\n", line);                      //              fprintf(stderr, "Warning: unknown keysym %s\n", line);
                 } else {                  } else {
Line 154  static kbd_layout_t *parse_keyboard_layo Line 141  static kbd_layout_t *parse_keyboard_layo
     return k;      return k;
 }  }
   
 static void *init_keyboard_layout(const char *language)  
   void *init_keyboard_layout(const name2keysym_t *table, const char *language)
 {  {
     return parse_keyboard_layout(language, 0);      return parse_keyboard_layout(table, language, NULL);
 }  }
   
 static int keysym2scancode(void *kbd_layout, int keysym)  
   int keysym2scancode(void *kbd_layout, int keysym)
 {  {
     kbd_layout_t *k = kbd_layout;      kbd_layout_t *k = kbd_layout;
     if (keysym < MAX_NORMAL_KEYCODE) {      if (keysym < MAX_NORMAL_KEYCODE) {
Line 180  static int keysym2scancode(void *kbd_lay Line 169  static int keysym2scancode(void *kbd_lay
     return 0;      return 0;
 }  }
   
 static inline int keycode_is_keypad(void *kbd_layout, int keycode)  int keycode_is_keypad(void *kbd_layout, int keycode)
 {  {
     kbd_layout_t *k = kbd_layout;      kbd_layout_t *k = kbd_layout;
     struct key_range *kr;      struct key_range *kr;
Line 191  static inline int keycode_is_keypad(void Line 180  static inline int keycode_is_keypad(void
     return 0;      return 0;
 }  }
   
 static inline int keysym_is_numlock(void *kbd_layout, int keysym)  int keysym_is_numlock(void *kbd_layout, int keysym)
 {  {
     kbd_layout_t *k = kbd_layout;      kbd_layout_t *k = kbd_layout;
     struct key_range *kr;      struct key_range *kr;

Removed from v.1.1.1.4  
changed lines
  Added in v.1.1.1.5


unix.superglobalmegacorp.com