int console_wait_for_key(void) { // wait for a key char buffer[3]; ssize_t bytesRead; do { bytesRead = sInput.ReadAt(NULL, 0, buffer, 3); if (bytesRead < 0) return 0; } while (bytesRead == 0); // translate the ESC sequences for cursor keys if (bytesRead == 3 && buffer[0] == 27 && buffer[1] == 91) { int key = translate_key(buffer[2]); if (key != 0) return key; } // put back unread chars if (bytesRead > 1) sInput.PutChars(buffer + 1, bytesRead - 1); return buffer[0]; }
int console_wait_for_key(void) { #if 0 // XXX: do this way and remove keyboard.cpp ? // wait for a key char buffer[3]; ssize_t bytesRead; do { bytesRead = sInput.ReadAt(NULL, 0, buffer, 3); if (bytesRead < 0) return 0; } while (bytesRead == 0); #endif union key key = wait_for_key(); if (key.code.ascii == 0) { switch (key.code.bios) { case BIOS_KEY_UP: return TEXT_CONSOLE_KEY_UP; case BIOS_KEY_DOWN: return TEXT_CONSOLE_KEY_DOWN; case BIOS_KEY_PAGE_UP: return TEXT_CONSOLE_KEY_PAGE_UP; case BIOS_KEY_PAGE_DOWN: return TEXT_CONSOLE_KEY_PAGE_DOWN; case BIOS_KEY_HOME: return TEXT_CONSOLE_KEY_HOME; case BIOS_KEY_END: return TEXT_CONSOLE_KEY_END; default: return 0; } } else return key.code.ascii; }