Ejemplo n.º 1
0
static void
keycode_run()
{
    for (;;) {
        halt();

        key_t key;
        bool  avail;
        while ((avail = kb_getkey(&key)) != false) {
            if (key.ch) {
                tty_printf(
                    TTY_CONSOLE,
                    "Keycode: \033[%c]%02x\033[-] meta=%02x '%c'\n",
                    key.brk == KEYBRK_UP ? 'e' : '2',
                    key.code,
                    key.meta,
                    key.ch);
            }
            else {
                tty_printf(
                    TTY_CONSOLE,
                    "Keycode: \033[%c]%02x\033[-] meta=%02x\n",
                    key.brk == KEYBRK_UP ? 'e' : '2',
                    key.code,
                    key.meta);
            }
            if ((key.brk == KEYBRK_UP) && (key.meta & META_ALT) &&
                (key.code == KEY_TAB)) {
                switch_mode(&mode_command);
                return;
            }
        }
    }
}
Ejemplo n.º 2
0
static void
command_run()
{
    char cmd[256];
    int  cmdlen = 0;

    for (;;) {
        halt();

        key_t key;
        bool  avail;
        while ((avail = kb_getkey(&key)) != false) {

            // If a printable character was typed, append it to the command.
            if (key.ch >= 32 && key.ch < 127) {
                if (cmdlen < arrsize(cmd) - 1) {
                    cmd[cmdlen] = key.ch;
                    tty_printc(TTY_CONSOLE, cmd[cmdlen]);
                    cmdlen++;
                }
            }

            // Handle special keys (like enter, backspace).
            else if (key.brk == KEYBRK_DOWN) {

                if (key.code == KEY_ENTER) {
                    tty_printc(TTY_CONSOLE, '\n');

                    // Strip trailing whitespace.
                    while (cmdlen > 0 && cmd[cmdlen - 1] == ' ')
                        cmdlen--;
                    cmd[cmdlen] = 0;

                    // Execute the command.
                    bool cont = command_exec(cmd);
                    cmdlen = 0;
                    if (cont)
                        command_prompt();
                    else
                        return;
                }

                else if (key.code == KEY_BACKSPACE && cmdlen > 0) {
                    tty_printc(TTY_CONSOLE, '\b');
                    cmdlen--;
                }

            }
        }
    }
}
Ejemplo n.º 3
0
void kb_wait(void)
{
	int key;
	while((key = kb_getkey()) == -1) {
		/* put the processor to sleep while waiting for keypresses, but first
		 * make sure interrupts are enabled, or we'll sleep forever
		 */
		__asm {
			sti
			hlt
		}
	}
	kb_putback(key);
}