2005-08-22 20:17:34 +00:00
|
|
|
/*
|
|
|
|
*
|
|
|
|
* (c) 2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "misc.h"
|
|
|
|
#include "glue.h"
|
|
|
|
#include "keyboard.h"
|
|
|
|
|
|
|
|
#define test_bit(n,m) (((char*)(m))[(n) / 8] & (1L << (n % 8)))
|
|
|
|
|
|
|
|
enum keycode {
|
|
|
|
keycode_command = 0x37,
|
|
|
|
keycode_shift = 0x38,
|
|
|
|
keycode_capslock = 0x39,
|
|
|
|
keycode_option = 0x3A,
|
|
|
|
keycode_control = 0x3B,
|
|
|
|
|
|
|
|
keycode_last = 0x80
|
|
|
|
};
|
|
|
|
|
|
|
|
void keyboard_get_key(int *modifiers, int *code)
|
|
|
|
{
|
|
|
|
KeyMap keyboard;
|
|
|
|
int keycode;
|
|
|
|
|
|
|
|
GetKeys(keyboard);
|
|
|
|
|
|
|
|
/* modifier keys */
|
|
|
|
|
|
|
|
if (test_bit(keycode_command, keyboard))
|
|
|
|
*modifiers |= modifiers_command;
|
|
|
|
if (test_bit(keycode_shift, keyboard))
|
2005-08-22 20:26:01 +00:00
|
|
|
*modifiers |= modifiers_shift;
|
2005-08-22 20:17:34 +00:00
|
|
|
if (test_bit(keycode_capslock, keyboard))
|
2005-08-22 20:26:01 +00:00
|
|
|
*modifiers |= modifiers_capslock;
|
2005-08-22 20:17:34 +00:00
|
|
|
if (test_bit(keycode_option, keyboard))
|
2005-08-22 20:26:01 +00:00
|
|
|
*modifiers |= modifiers_option;
|
2005-08-22 20:17:34 +00:00
|
|
|
if (test_bit(keycode_control, keyboard))
|
2005-08-22 20:26:01 +00:00
|
|
|
*modifiers |= modifiers_control;
|
2005-08-22 20:17:34 +00:00
|
|
|
|
|
|
|
/* other keys */
|
|
|
|
|
|
|
|
for (keycode = 0; keycode < keycode_last; keycode++)
|
|
|
|
{
|
|
|
|
/* modifiers */
|
|
|
|
|
|
|
|
if ( (keycode == keycode_command) ||
|
|
|
|
(keycode == keycode_shift) ||
|
|
|
|
(keycode == keycode_capslock) ||
|
|
|
|
(keycode == keycode_option) ||
|
|
|
|
(keycode == keycode_control) )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
/* other keys */
|
|
|
|
|
|
|
|
if (test_bit(keycode, keyboard))
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
*code = keycode;
|
|
|
|
}
|