diff --git a/src/core/getkey.c b/src/core/getkey.c index 5710f1900..b8e6af786 100644 --- a/src/core/getkey.c +++ b/src/core/getkey.c @@ -35,13 +35,13 @@ FILE_LICENCE ( GPL2_OR_LATER ); /** * Read character from console if available within timeout period * - * @v timeout Timeout period, in ticks + * @v timeout Timeout period, in ticks (0=indefinite) * @ret character Character read from console */ -int getchar_timeout ( unsigned long timeout ) { +static int getchar_timeout ( unsigned long timeout ) { unsigned long start = currticks(); - while ( ( currticks() - start ) < timeout ) { + while ( ( timeout == 0 ) || ( ( currticks() - start ) < timeout ) ) { step(); if ( iskey() ) return getchar(); @@ -53,6 +53,7 @@ int getchar_timeout ( unsigned long timeout ) { /** * Get single keypress * + * @v timeout Timeout period, in ticks (0=indefinite) * @ret key Key pressed * * The returned key will be an ASCII value or a KEY_XXX special @@ -60,11 +61,11 @@ int getchar_timeout ( unsigned long timeout ) { * will return "special" keys (e.g. cursor keys) as a series of * characters forming an ANSI escape sequence. */ -int getkey ( void ) { +int getkey ( unsigned long timeout ) { int character; unsigned int n = 0; - character = getchar(); + character = getchar_timeout ( timeout ); if ( character != ESC ) return character; diff --git a/src/hci/readline.c b/src/hci/readline.c index ee252a199..6a7af9db6 100644 --- a/src/hci/readline.c +++ b/src/hci/readline.c @@ -98,7 +98,7 @@ char * readline ( const char *prompt ) { buf[0] = '\0'; while ( 1 ) { - key = edit_string ( &string, getkey() ); + key = edit_string ( &string, getkey ( 0 ) ); sync_console ( &string ); switch ( key ) { case CR: diff --git a/src/hci/shell_banner.c b/src/hci/shell_banner.c index dbfa8edfe..6f225d789 100644 --- a/src/hci/shell_banner.c +++ b/src/hci/shell_banner.c @@ -47,7 +47,7 @@ int shell_banner ( void ) { printf ( "\nPress Ctrl-B for the iPXE command line..." ); /* Wait for key */ - key = getchar_timeout ( ( BANNER_TIMEOUT * TICKS_PER_SEC ) / 10 ); + key = getkey ( ( BANNER_TIMEOUT * TICKS_PER_SEC ) / 10 ); /* Clear the "Press Ctrl-B" line */ printf ( "\r \r" ); diff --git a/src/hci/tui/login_ui.c b/src/hci/tui/login_ui.c index bcfd09cb6..954bde509 100644 --- a/src/hci/tui/login_ui.c +++ b/src/hci/tui/login_ui.c @@ -88,7 +88,7 @@ int login_ui ( void ) { draw_editbox ( current_box ); - key = getkey(); + key = getkey ( 0 ); switch ( key ) { case KEY_DOWN: current_box = &password_box; diff --git a/src/hci/tui/settings_ui.c b/src/hci/tui/settings_ui.c index b8fe207fb..176fbd3ed 100644 --- a/src/hci/tui/settings_ui.c +++ b/src/hci/tui/settings_ui.c @@ -401,7 +401,7 @@ static int main_loop ( struct settings *settings ) { draw_setting ( &widget ); color_set ( CPAIR_NORMAL, NULL ); - key = getkey(); + key = getkey ( 0 ); if ( widget.editing ) { key = edit_setting ( &widget, key ); switch ( key ) { diff --git a/src/include/console.h b/src/include/console.h index 271b4f365..df9e8092f 100644 --- a/src/include/console.h +++ b/src/include/console.h @@ -102,8 +102,7 @@ struct console_driver { extern void putchar ( int character ); extern int getchar ( void ); -extern int getchar_timeout ( unsigned long timeout ); extern int iskey ( void ); -extern int getkey ( void ); +extern int getkey ( unsigned long timeout ); #endif /* CONSOLE_H */ diff --git a/src/usr/pxemenu.c b/src/usr/pxemenu.c index a9ea1f044..b31051629 100644 --- a/src/usr/pxemenu.c +++ b/src/usr/pxemenu.c @@ -30,7 +30,6 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include #include #include #include @@ -239,9 +238,7 @@ static int pxe_menu_select ( struct pxe_menu *menu ) { pxe_menu_draw_item ( menu, menu->selection, 1 ); /* Wait for keyboard input */ - while ( ! iskey() ) - step(); - key = getkey(); + key = getkey ( 0 ); /* Unhighlight currently selected item */ pxe_menu_draw_item ( menu, menu->selection, 0 ); @@ -304,7 +301,7 @@ static int pxe_menu_prompt_and_select ( struct pxe_menu *menu ) { if ( ! len ) len = printf ( " (%d)", menu->timeout ); if ( iskey() ) { - key = getkey(); + key = getkey ( 0 ); if ( key == KEY_F8 ) { /* Display menu */ printf ( "\n" );