diff options
Diffstat (limited to 'src/hci')
| -rw-r--r-- | src/hci/commands/console_cmd.c | 2 | ||||
| -rw-r--r-- | src/hci/commands/login_cmd.c | 13 | ||||
| -rw-r--r-- | src/hci/commands/menu_cmd.c | 13 | ||||
| -rw-r--r-- | src/hci/tui/login_ui.c | 22 | ||||
| -rw-r--r-- | src/hci/tui/menu_ui.c | 13 |
5 files changed, 52 insertions, 11 deletions
diff --git a/src/hci/commands/console_cmd.c b/src/hci/commands/console_cmd.c index ba472b9f6..bd5647261 100644 --- a/src/hci/commands/console_cmd.c +++ b/src/hci/commands/console_cmd.c @@ -70,6 +70,8 @@ static struct option_descriptor console_opts[] = { struct console_options, picture, parse_string ), OPTION_DESC ( "keep", 'k', no_argument, struct console_options, keep, parse_flag ), + OPTION_DESC ( "update", 'u', no_argument, + struct console_options, config.lazy_update, parse_flag ), }; /** "console" command descriptor */ diff --git a/src/hci/commands/login_cmd.c b/src/hci/commands/login_cmd.c index c9e196437..6ed76c6f2 100644 --- a/src/hci/commands/login_cmd.c +++ b/src/hci/commands/login_cmd.c @@ -23,6 +23,7 @@ #include <string.h> #include <stdio.h> +#include <getopt.h> #include <ipxe/command.h> #include <ipxe/parseopt.h> #include <ipxe/login_ui.h> @@ -36,10 +37,16 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); */ /** "login" options */ -struct login_options {}; +struct login_options { + /** No Username */ + int nouser; +}; /** "login" option list */ -static struct option_descriptor login_opts[] = {}; +static struct option_descriptor login_opts[] = { + OPTION_DESC ( "nouser", 'n', no_argument, + struct login_options, nouser, parse_flag ), +}; /** "login" command descriptor */ static struct command_descriptor login_cmd = @@ -61,7 +68,7 @@ static int login_exec ( int argc, char **argv ) { return rc; /* Show login UI */ - if ( ( rc = login_ui() ) != 0 ) { + if ( ( rc = login_ui( opts.nouser ) ) != 0 ) { printf ( "Could not set credentials: %s\n", strerror ( rc ) ); return rc; diff --git a/src/hci/commands/menu_cmd.c b/src/hci/commands/menu_cmd.c index 76bce8695..c8692f1a7 100644 --- a/src/hci/commands/menu_cmd.c +++ b/src/hci/commands/menu_cmd.c @@ -118,6 +118,8 @@ struct item_options { int is_default; /** Use as a separator */ int is_gap; + /** Don't show; hotkey only */ + int is_hidden; }; /** "item" option list */ @@ -130,6 +132,8 @@ static struct option_descriptor item_opts[] = { struct item_options, is_default, parse_flag ), OPTION_DESC ( "gap", 'g', no_argument, struct item_options, is_gap, parse_flag ), + OPTION_DESC ( "hidden", 'i', no_argument, + struct item_options, is_hidden, parse_flag ), }; /** "item" command descriptor */ @@ -160,6 +164,12 @@ static int item_exec ( int argc, char **argv ) { if ( ! opts.is_gap ) label = argv[optind++]; /* May be NULL */ + /* Hidden entry without label and shortcut is pointless */ + if ( opts.is_hidden && ( ! opts.key || ! label || ! *label ) ) { + rc = -EINVAL; + goto err_invalid_argument; + } + /* Parse text, if present */ if ( optind < argc ) { text = concat_args ( &argv[optind] ); @@ -175,7 +185,7 @@ static int item_exec ( int argc, char **argv ) { /* Add menu item */ item = add_menu_item ( menu, label, ( text ? text : "" ), - opts.key, opts.is_default ); + opts.key, opts.is_default, opts.is_hidden ); if ( ! item ) { rc = -ENOMEM; goto err_add_menu_item; @@ -188,6 +198,7 @@ static int item_exec ( int argc, char **argv ) { err_parse_menu: free ( text ); err_parse_text: + err_invalid_argument: err_parse_options: return rc; } diff --git a/src/hci/tui/login_ui.c b/src/hci/tui/login_ui.c index 3c55325d5..56fc2fa97 100644 --- a/src/hci/tui/login_ui.c +++ b/src/hci/tui/login_ui.c @@ -48,12 +48,12 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define EDITBOX_COL ( ( COLS / 2U ) - 10U ) #define EDITBOX_WIDTH 20U -int login_ui ( void ) { +int login_ui ( int nouser ) { char username[64]; char password[64]; struct edit_box username_box; struct edit_box password_box; - struct edit_box *current_box = &username_box; + struct edit_box *current_box = nouser ? &password_box : &username_box; int key; int rc = -EINPROGRESS; @@ -76,11 +76,15 @@ int login_ui ( void ) { color_set ( CPAIR_NORMAL, NULL ); erase(); attron ( A_BOLD ); - mvprintw ( USERNAME_LABEL_ROW, LABEL_COL, "Username:" ); + if ( ! nouser ) { + mvprintw ( USERNAME_LABEL_ROW, LABEL_COL, "Username:" ); + } mvprintw ( PASSWORD_LABEL_ROW, LABEL_COL, "Password:" ); attroff ( A_BOLD ); color_set ( CPAIR_EDIT, NULL ); - draw_editbox ( &username_box ); + if ( ! nouser ) { + draw_editbox ( &username_box ); + } draw_editbox ( &password_box ); /* Main loop */ @@ -94,11 +98,15 @@ int login_ui ( void ) { current_box = &password_box; break; case KEY_UP: - current_box = &username_box; + if ( ! nouser ) { + current_box = &username_box; + } break; case TAB: - current_box = ( ( current_box == &username_box ) ? - &password_box : &username_box ); + if ( ! nouser ) { + current_box = ( ( current_box == &username_box ) ? + &password_box : &username_box ); + } break; case KEY_ENTER: if ( current_box == &username_box ) { diff --git a/src/hci/tui/menu_ui.c b/src/hci/tui/menu_ui.c index f9dd9d100..cb4edbbc8 100644 --- a/src/hci/tui/menu_ui.c +++ b/src/hci/tui/menu_ui.c @@ -217,6 +217,8 @@ static int menu_loop ( struct menu_ui *ui, struct menu_item **selected ) { break; default: i = 0; + + /* Check for shortcut. Visible items */ list_for_each_entry ( item, &ui->menu->items, list ) { if ( ! ( item->shortcut && @@ -231,6 +233,16 @@ static int menu_loop ( struct menu_ui *ui, struct menu_item **selected ) { move = +1; } } + + /* Hidden items */ + list_for_each_entry ( item, &ui->menu->hidden_items, + list ) { + if ( item->shortcut && + ( item->shortcut == key ) ) { + *selected = item; + goto hidden_entry_selected; + } + } break; } } @@ -259,6 +271,7 @@ static int menu_loop ( struct menu_ui *ui, struct menu_item **selected ) { } while ( ( rc == 0 ) && ! chosen ); + hidden_entry_selected: return rc; } |
