Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
		}
	}
}
Esempio n. 3
0
File: devtty.c Progetto: 8l/FUZIX
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);
}
Esempio n. 4
0
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;
		}
	}
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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;
		}
	}
}