summaryrefslogtreecommitdiff
path: root/sys/arch/atari/dev/ite.c
diff options
context:
space:
mode:
authorleo <leo@NetBSD.org>1997-01-10 21:24:25 +0000
committerleo <leo@NetBSD.org>1997-01-10 21:24:25 +0000
commit7a0c8fa119caf36bb32221bccfe8f6d844eaffa2 (patch)
tree515d522f0488ee4e7fc1b3af7e287cf2cc1e7fdd /sys/arch/atari/dev/ite.c
parent2fa61d9691461fdea4ccf286fe500768360d6a88 (diff)
Handle keyboard modifiers *before* handing the keycodes to either the
console driver or the DDB keyboard functions. This prevents annoyances with out of sync modifier stati.
Diffstat (limited to 'sys/arch/atari/dev/ite.c')
-rw-r--r--sys/arch/atari/dev/ite.c106
1 files changed, 21 insertions, 85 deletions
diff --git a/sys/arch/atari/dev/ite.c b/sys/arch/atari/dev/ite.c
index 120bf5afb0e..a1f4b3551ab 100644
--- a/sys/arch/atari/dev/ite.c
+++ b/sys/arch/atari/dev/ite.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ite.c,v 1.21 1997/01/08 11:28:03 leo Exp $ */
+/* $NetBSD: ite.c,v 1.22 1997/01/10 21:24:25 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -754,12 +754,13 @@ ite_reset(ip)
}
/*
- * has to be global becuase of the shared filters.
+ * has to be global because of the shared filters.
*/
-static u_char key_mod;
static u_char last_dead;
-/* Used in console at startup only */
+/*
+ * Used in console at startup only and for DDB.
+ */
int
ite_cnfilter(c, caller)
u_int c;
@@ -779,39 +780,6 @@ enum caller caller;
s = spltty();
/*
- * Handle special keys
- */
- switch(c) {
- case KBD_LEFT_SHIFT:
- mask = KBD_MOD_LSHIFT;
- break;
- case KBD_RIGHT_SHIFT:
- mask = KBD_MOD_RSHIFT;
- break;
- case KBD_CTRL:
- mask = KBD_MOD_CTRL;
- break;
- case KBD_ALT:
- mask = KBD_MOD_ALT;
- break;
- case KBD_CAPS_LOCK:
- /* CAPSLOCK is a toggle */
- if(!up)
- key_mod ^= KBD_MOD_CAPS;
- splx(s);
- return -1;
- break;
- }
- if(mask) {
- if(up)
- key_mod &= ~mask;
- else
- key_mod |= mask;
- splx(s);
- return -1;
- }
-
- /*
* No special action if key released
*/
if(up) {
@@ -820,19 +788,19 @@ enum caller caller;
}
/* translate modifiers */
- if(key_mod & KBD_MOD_SHIFT) {
- if(key_mod & KBD_MOD_ALT)
+ if(kbd_modifier & KBD_MOD_SHIFT) {
+ if(kbd_modifier & KBD_MOD_ALT)
key = kbdmap->alt_shift_keys[c];
else key = kbdmap->shift_keys[c];
}
- else if(key_mod & KBD_MOD_ALT)
+ else if(kbd_modifier & KBD_MOD_ALT)
key = kbdmap->alt_keys[c];
else {
key = kbdmap->keys[c];
/*
* If CAPS and key is CAPable (no pun intended)
*/
- if((key_mod & KBD_MOD_CAPS) && (key.mode & KBD_MODE_CAPS))
+ if((kbd_modifier & KBD_MOD_CAPS) && (key.mode & KBD_MODE_CAPS))
key = kbdmap->shift_keys[c];
}
code = key.code;
@@ -864,7 +832,7 @@ enum caller caller;
last_dead = 0;
}
#endif
- if(key_mod & KBD_MOD_CTRL)
+ if(kbd_modifier & KBD_MOD_CTRL)
code &= 0x1f;
/*
@@ -926,40 +894,6 @@ enum caller caller;
*/
rem_sicallback((si_farg)ite_filter);
-
- /*
- * Handle special keys
- */
- switch(c) {
- case KBD_LEFT_SHIFT:
- mask = KBD_MOD_LSHIFT;
- break;
- case KBD_RIGHT_SHIFT:
- mask = KBD_MOD_RSHIFT;
- break;
- case KBD_CTRL:
- mask = KBD_MOD_CTRL;
- break;
- case KBD_ALT:
- mask = KBD_MOD_ALT;
- break;
- case KBD_CAPS_LOCK:
- /* CAPSLOCK is a toggle */
- if(!up)
- key_mod ^= KBD_MOD_CAPS;
- splx(s);
- return;
- break;
- }
- if(mask) {
- if(up)
- key_mod &= ~mask;
- else
- key_mod |= mask;
- splx(s);
- return;
- }
-
/*
* Stop repeating on up event
*/
@@ -984,7 +918,7 @@ enum caller caller;
/*
* Handle ite-switching ALT + Fx
*/
- if((key_mod == KBD_MOD_ALT) && (c >= 0x3b) && (c <= 0x44)) {
+ if((kbd_modifier == KBD_MOD_ALT) && (c >= 0x3b) && (c <= 0x44)) {
ite_switch(c - 0x3b);
splx(s);
return;
@@ -992,15 +926,17 @@ enum caller caller;
/*
* Safety button, switch back to ascii keymap.
*/
- if(key_mod == (KBD_MOD_ALT | KBD_MOD_LSHIFT) && c == 0x3b) {
+ if(kbd_modifier == (KBD_MOD_ALT | KBD_MOD_LSHIFT) && c == 0x3b) {
/* ALT + LSHIFT + F1 */
bcopy(&ascii_kbdmap, kbdmap, sizeof(struct kbdmap));
splx(s);
return;
#ifdef DDB
}
- else if(key_mod == (KBD_MOD_ALT | KBD_MOD_LSHIFT) && c == 0x43) {
- /* ALT + LSHIFT + F9 */
+ else if(kbd_modifier == (KBD_MOD_ALT | KBD_MOD_LSHIFT) && c == 0x43) {
+ /*
+ * ALT + LSHIFT + F9 -> Debugger!
+ */
Debugger();
splx(s);
return;
@@ -1018,19 +954,19 @@ enum caller caller;
/*
* Translate modifiers
*/
- if(key_mod & KBD_MOD_SHIFT) {
- if(key_mod & KBD_MOD_ALT)
+ if(kbd_modifier & KBD_MOD_SHIFT) {
+ if(kbd_modifier & KBD_MOD_ALT)
key = kbdmap->alt_shift_keys[c];
else key = kbdmap->shift_keys[c];
}
- else if(key_mod & KBD_MOD_ALT)
+ else if(kbd_modifier & KBD_MOD_ALT)
key = kbdmap->alt_keys[c];
else {
key = kbdmap->keys[c];
/*
* If CAPS and key is CAPable (no pun intended)
*/
- if((key_mod & KBD_MOD_CAPS) && (key.mode & KBD_MODE_CAPS))
+ if((kbd_modifier & KBD_MOD_CAPS) && (key.mode & KBD_MODE_CAPS))
key = kbdmap->shift_keys[c];
}
code = key.code;
@@ -1078,7 +1014,7 @@ enum caller caller;
if(!(key.mode & KBD_MODE_STRING)
&& (!(key.mode & KBD_MODE_KPAD)
|| (kbd_ite && !kbd_ite->keypad_appmode))) {
- if(key_mod & KBD_MOD_CTRL)
+ if(kbd_modifier & KBD_MOD_CTRL)
code &= 0x1f;
}
else if((key.mode & KBD_MODE_KPAD)