keymaps.h revision 5d8f37ad78fc66901af50c762029a501561f3b23
15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/*
25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * QEMU keysym to keycode conversion using rdesktop keymaps
35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *
45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (c) 2004 Johannes Schindelin
55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *
65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Permission is hereby granted, free of charge, to any person obtaining a copy
75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * of this software and associated documentation files (the "Software"), to deal
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * in the Software without restriction, including without limitation the rights
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * copies of the Software, and to permit persons to whom the Software is
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * furnished to do so, subject to the following conditions:
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * The above copyright notice and this permission notice shall be included in
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * all copies or substantial portions of the Software.
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *
165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * THE SOFTWARE.
235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef __QEMU_KEYMAPS_H__
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define __QEMU_KEYMAPS_H__
275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "qemu-common.h"
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct {
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner	const char* name;
325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner	int keysym;
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} name2keysym_t;
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct key_range {
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int start;
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int end;
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct key_range *next;
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MAX_NORMAL_KEYCODE 512
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MAX_EXTRA_COUNT 256
435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct {
445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint16_t keysym2keycode[MAX_NORMAL_KEYCODE];
455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct {
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner	int keysym;
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner	uint16_t keycode;
485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } keysym2keycode_extra[MAX_EXTRA_COUNT];
495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int extra_count;
505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct key_range *keypad_range;
515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct key_range *numlock_range;
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} kbd_layout_t;
535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid *init_keyboard_layout(const name2keysym_t *table, const char *language);
565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint keysym2scancode(void *kbd_layout, int keysym);
575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint keycode_is_keypad(void *kbd_layout, int keycode);
585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint keysym_is_numlock(void *kbd_layout, int keysym);
595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif /* __QEMU_KEYMAPS_H__ */
61