special keys.
Patrick Georgi explained:
The |0x80 codes are "break codes", that means, codes that are emitted
when the key transitions from pressed to non-pressed, so the modifier
was always in the wrong state, as soon as you pressed shift for the
first time.
Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3558
2b7e53f0-3cfb-0310-b3e9-
8179ed1497e1
int keyboard_getchar(void)
{
- static int modifier;
+ static int modifier = 0;
unsigned char ch;
int shift;
int ret = 0;
switch (ch) {
case 0x36:
case 0x2a:
- modifier &= ~MOD_SHIFT;
+ modifier |= MOD_SHIFT;
break;
case 0x80 | 0x36:
case 0x80 | 0x2a:
- modifier |= MOD_SHIFT;
+ modifier &= ~MOD_SHIFT;
break;
case 0x1d:
- modifier &= ~MOD_CTRL;
+ modifier |= MOD_CTRL;
break;
case 0x80 | 0x1d:
- modifier |= MOD_CTRL;
+ modifier &= ~MOD_CTRL;
break;
case 0x3a:
if (modifier & MOD_CAPSLOCK)