uae-wii/src/gfx-beos/be-Input.cpp
2009-05-05 15:36:48 +00:00

152 lines
2.9 KiB
C++

/***********************************************************/
// BeUAE - The Be Un*x Amiga Emulator
//
// BeOS port keyboard routines
//
// (c) 2004-2005 Richard Drummond
// (c) 2000-2001 Axel Doerfler
// (c) 1999 Be/R4 Sound - Raphael Moll
// (c) 1998-1999 David Sowsy
// (c) 1996-1998 Christian Bauer
// (c) 1996 Patrick Hanevold
//
/***********************************************************/
#include "be-UAE.h"
#include "be-Window.h"
extern "C" {
#include "sysconfig.h"
#include "sysdeps.h"
#include "options.h"
#include "keybuf.h"
#include "inputdevice.h"
#include "hotkeys.h"
#include "keymap/keymap.h"
#include "keymap/beos_rawkeys.h"
};
/* Default translation table */
struct uae_input_device_kbr_default *default_keyboard;
/* Previous key states */
static key_info lastKeyInfo;
/*
* Keyboard inputdevice functions
*/
static unsigned int get_kb_num (void)
{
return 1;
}
static const char *get_kb_name (unsigned int kb)
{
return "Default keyboard";
}
static unsigned int get_kb_widget_num (unsigned int kb)
{
return 127;
}
static int get_kb_widget_first (unsigned int kb, int type)
{
return 1;
}
static int get_kb_widget_type (unsigned int kb, unsigned int num, char *name, uae_u32 *code)
{
// fix me
*code = num;
return IDEV_WIDGET_KEY;
}
static int init_kb (void)
{
get_key_info (&lastKeyInfo);
default_keyboard = uaekey_make_default_kbr (beos_keymap);
inputdevice_setkeytranslation (default_keyboard);
set_default_hotkeys (beos_hotkeys);
return 1;
}
static void close_kb (void)
{
if (default_keyboard) {
free (default_keyboard);
default_keyboard = 0;
}
}
static int keyhack (int scancode, int pressed, int num)
{
return scancode;
}
static void read_kb (void)
{
int keycode;
int keyinfo_byte;
int keyinfo_bit;
key_info keyInfo;
get_key_info (&keyInfo);
if (memcmp (keyInfo.key_states, lastKeyInfo.key_states, sizeof (keyInfo.key_states))) {
for (keycode = 0; keycode < 0x80; keycode++) {
keyinfo_byte = keycode >> 3;
keyinfo_bit = 1 << (~keycode & 7);
// Key state changed?
if ((keyInfo.key_states[keyinfo_byte] & keyinfo_bit) != (lastKeyInfo.key_states[keyinfo_byte] & keyinfo_bit)) {
int new_state = (keyInfo.key_states[keyinfo_byte] & keyinfo_bit) != 0;
int ievent;
if ((ievent = match_hotkey_sequence (keycode, new_state)))
handle_hotkey_event (ievent, new_state);
else
inputdevice_translatekeycode (0, keycode, new_state);
}
}
lastKeyInfo = keyInfo;
}
}
static int acquire_kb (unsigned int num, int flags)
{
return 1;
}
static void unacquire_kb (unsigned int num)
{
}
struct inputdevice_functions inputdevicefunc_keyboard =
{
init_kb,
close_kb,
acquire_kb,
unacquire_kb,
read_kb,
get_kb_num,
get_kb_name,
get_kb_widget_num,
get_kb_widget_type,
get_kb_widget_first
};
int getcapslockstate (void)
{
return 0;
}
void setcapslockstate (int state)
{
}