Handle console input.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23355 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol
2008-01-10 21:16:22 +00:00
parent 9bc2823955
commit 9d2f3035cd
+19 -24
View File
@@ -251,6 +251,8 @@ console_set_color(int32 foreground, int32 background)
int int
console_wait_for_key(void) console_wait_for_key(void)
{ {
#if 0
// XXX: do this way and remove keyboard.cpp ?
// wait for a key // wait for a key
char buffer[3]; char buffer[3];
ssize_t bytesRead; ssize_t bytesRead;
@@ -259,34 +261,27 @@ console_wait_for_key(void)
if (bytesRead < 0) if (bytesRead < 0)
return 0; return 0;
} while (bytesRead == 0); } while (bytesRead == 0);
#endif
union key key = wait_for_key();
// translate the ESC sequences for cursor keys if (key.code.ascii == 0) {
if (bytesRead == 3 && buffer[0] == 27 && buffer [1] == 91) { switch (key.code.bios) {
switch (buffer[2]) { case BIOS_KEY_UP:
case 65:
return TEXT_CONSOLE_KEY_UP; return TEXT_CONSOLE_KEY_UP;
case 66: case BIOS_KEY_DOWN:
return TEXT_CONSOLE_KEY_DOWN; return TEXT_CONSOLE_KEY_DOWN;
case 67: case BIOS_KEY_PAGE_UP:
return TEXT_CONSOLE_KEY_RIGHT; return TEXT_CONSOLE_KEY_PAGE_UP;
case 68: case BIOS_KEY_PAGE_DOWN:
return TEXT_CONSOLE_KEY_LEFT; return TEXT_CONSOLE_KEY_PAGE_DOWN;
// TODO: Translate the codes for the following keys. Unfortunately my OF just case BIOS_KEY_HOME:
// returns a '\0' character. :-/ return TEXT_CONSOLE_KEY_HOME;
// TEXT_CONSOLE_KEY_PAGE_UP, case BIOS_KEY_END:
// TEXT_CONSOLE_KEY_PAGE_DOWN, return TEXT_CONSOLE_KEY_END;
// TEXT_CONSOLE_KEY_HOME,
// TEXT_CONSOLE_KEY_END,
default: default:
break; return 0;
} }
} } else
return key.code.ascii;
// put back unread chars
if (bytesRead > 1)
sInput.PutChars(buffer + 1, bytesRead - 1);
return buffer[0];
} }