void kbd_interrupt(void) { if(cur_key=get_scan()) if(cur_key=decode(cur_key)){ vt_inproc(1,(mode&KEY_MODE_CTRL)?(cur_key&0x1f):cur_key); } if (UART_LSR&1) vt_inproc(2,UART_DAT); //if(ch) vt_inproc(1,ch); }
static void keydecode(void) { uint8_t c; uint8_t m = 0; if ((keymap[8] & 0x20) || (keymap[0] & 0x10)) { /* shift */ m = KEYPRESS_SHIFT; c = shiftkeyboard[keybyte][keybit]; } else c = keyboard[keybyte][keybit]; if (keymap[8] & 0x10) { /* control */ m |= KEYPRESS_CTRL; if (m & KEYPRESS_SHIFT) { /* shift */ if (c == '(') c = '{'; if (c == ')') c = '}'; if (c == '^') c = '|'; } else if (c > 31 && c < 127) c &= 31; } if (c) { switch (keyboard_grab) { case 0: vt_inproc(1, c); break; case 1: if (!input_match_meta(c)) { vt_inproc(1, c); break; } /* Fall through */ case 2: queue_input(KEYPRESS_DOWN); queue_input(c); break; case 3: /* Queue an event giving the base key (unshifted) and the state of shift/ctrl/alt */ queue_input(KEYPRESS_DOWN | m); queue_input(keyboard[keybyte][keybit]); break; } } }
static void keydecode(void) { uint8_t c; if (keybyte == 7 && keybit == 3) { capslock = 1 - capslock; return; } if (keymap[7] & 3) { /* shift */ c = shiftkeyboard[keybyte][keybit]; /* VT switcher */ if (c == KEY_F1 || c == KEY_F2) { if (inputtty != c - KEY_F1) { inputtty = c - KEY_F1; vtexchange(); /* Exchange the video and backing buffer */ } return; } } else c = keyboard[keybyte][keybit]; /* The keyboard lacks some rather important symbols so remap them with control */ if (keymap[7] & 4) { /* control */ if (keymap[7] & 3) { /* shift */ if (c == '(') c = '{'; if (c == ')') c = '}'; if (c == '-') c = '_'; if (c == '/') c = '``'; if (c == '<') c = '^'; } else { if (c == '(') c = '['; else if (c == ')') c = ']'; else if (c == '-') c = '|'; else if (c > 31 && c < 127) c &= 31; } } else if (capslock && c >= 'a' && c <= 'z') c -= 'a' - 'A'; if (c) vt_inproc(inputtty+1, c); }
void kbd_poll(void) { /* Report any press of the NMI button */ if (nmikey) { nmikey = 0; vt_inproc(1, KEY_STOP); } newkey = 0; keyproc(); if (keysdown && keysdown < 3) { if (newkey) { keydecode(); kbd_timer = keyrepeat.first; } else if (!--kbd_timer) { keydecode(); kbd_timer = keyrepeat.continual; } } }
static void keydecode(void) { uint8_t c; if (keybyte == 8 && keybit == 6) { capslock = 1 - capslock; return; } if (keymap[2] & (1 << 5)) /* shift */ c = shiftkeyboard[keybyte][7-keybit]; else c = keyboard[keybyte][7-keybit]; if (keymap[10] & 0x80) { /* alt */ if (c > 31 && c < 127) c &= 31; } if (capslock && c >= 'a' && c <= 'z') c -= 'a' - 'A'; /* kprintf("ttyinproc %d\n", (int) c); */ vt_inproc(1, c); }
static void keydecode(void) { uint8_t c; uint8_t m = 0; /* Convention for capslock or the mod */ /* Only the model 3 has right shift (2) */ if (keymap[7] & 3) { /* shift (left/right) */ m = KEYPRESS_SHIFT; c = shiftkeyboard[keybyte][keybit]; } else c = keyboard[keybyte][keybit]; if (c == KEY_CAPSLOCK) { capslock = 1 - capslock; return; } /* The keyboard lacks some rather important symbols so remap them with control (down arrow) */ if ((keymap[6] | keymap[7]) & 16) { /* control */ m |= KEYPRESS_CTRL; if (keymap[7] & 3) { /* shift */ if (c == '(') c = '{'; if (c == ')') c = '}'; if (c == '-') c = '_'; if (c == '/') c = '``'; if (c == '<') c = '^'; } else { if (c == '8' /*'(' */ ) c = '['; else if (c == '9' /*')' */ ) c = ']'; else if (c == '-') c = '|'; else if (c > 31 && c < 127) c &= 31; } } else if (capslock && c >= 'a' && c <= 'z') c -= 'a' - 'A'; if (c) { switch (keyboard_grab) { case 0: vt_inproc(1, c); break; case 1: if (!input_match_meta(c)) { vt_inproc(1, c); break; } /* Fall through */ case 2: queue_input(KEYPRESS_DOWN); queue_input(c); break; case 3: /* Queue an event giving the base key (unshifted) and the state of shift/ctrl/alt */ queue_input(KEYPRESS_DOWN | m); queue_input(keyboard[keybyte][keybit]); break; } } }