static int handle_escape(void) { char buffer[5]; int len = getkeyseq(buffer, 0, sizeof(buffer)); int i, t; if (len == 0) return 27; for(i = 0; escape_codes[i].seq != NULL; i++) { const char *p = escape_codes[i].seq; for(t = 0; t < len; t++) { if (!*p || *p != buffer[t]) break; p++; } if (t == len) return escape_codes[i].key; } return 0; }
int console_getchar(void) { unsigned int c = getkeyseq(); if (c) return c; c = keyboard_get_key(); if (!(c & KEYB_KEYUP) && (c & 0xffff)) { switch (c & 0xffff) { case UP_ARROW: keyseq = "\033[A"; return getkeyseq(); case DOWN_ARROW: keyseq = "\033[B"; return getkeyseq(); case RIGHT_ARROW: keyseq = "\033[C"; return getkeyseq(); case LEFT_ARROW: keyseq = "\033[D"; return getkeyseq(); case INSERT: keyseq = "\033[2~"; return getkeyseq(); case DEL: keyseq = "\033[3~"; return getkeyseq(); case HOME: keyseq = "\033[OH"; return getkeyseq(); case END: keyseq = "\033[OF"; return getkeyseq(); case PAGE_UP: keyseq = "\033[5~"; return getkeyseq(); case PAGE_DOWN: keyseq = "\033[6~"; return getkeyseq(); } return c & 0xff; } return -1; }