summaryrefslogtreecommitdiffstats
path: root/src/hci
diff options
context:
space:
mode:
Diffstat (limited to 'src/hci')
-rw-r--r--src/hci/commands/console_cmd.c2
-rw-r--r--src/hci/commands/login_cmd.c13
-rw-r--r--src/hci/commands/menu_cmd.c13
-rw-r--r--src/hci/tui/login_ui.c22
-rw-r--r--src/hci/tui/menu_ui.c13
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;
}