summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2009-02-17 12:55:55 +0100
committerMichael Brown2009-02-17 12:55:55 +0100
commit67ee41ad6d3cbd137e390e61a17eac8eaddc30fa (patch)
treee9f5ecabec095baafacb5b777731b49a98cabe70
parent[pxe] Allow Escape to abort PXE menu selections (diff)
downloadipxe-67ee41ad6d3cbd137e390e61a17eac8eaddc30fa.tar.gz
ipxe-67ee41ad6d3cbd137e390e61a17eac8eaddc30fa.tar.xz
ipxe-67ee41ad6d3cbd137e390e61a17eac8eaddc30fa.zip
[editbox] Allow for password widgets that do not display their contents
-rw-r--r--src/hci/mucurses/widgets/editbox.c11
-rw-r--r--src/hci/tui/settings_ui.c2
-rw-r--r--src/include/gpxe/editbox.h12
3 files changed, 19 insertions, 6 deletions
diff --git a/src/hci/mucurses/widgets/editbox.c b/src/hci/mucurses/widgets/editbox.c
index 5c066fda..a52089ce 100644
--- a/src/hci/mucurses/widgets/editbox.c
+++ b/src/hci/mucurses/widgets/editbox.c
@@ -38,11 +38,11 @@
* @v row Row
* @v col Starting column
* @v width Width
- *
+ * @v flags Flags
*/
void init_editbox ( struct edit_box *box, char *buf, size_t len,
WINDOW *win, unsigned int row, unsigned int col,
- unsigned int width ) {
+ unsigned int width, unsigned int flags ) {
memset ( box, 0, sizeof ( *box ) );
box->string.buf = buf;
box->string.len = len;
@@ -51,6 +51,7 @@ void init_editbox ( struct edit_box *box, char *buf, size_t len,
box->row = row;
box->col = col;
box->width = width;
+ box->flags = flags;
}
/**
@@ -86,7 +87,11 @@ void draw_editbox ( struct edit_box *box ) {
len = ( strlen ( box->string.buf ) - first );
if ( len > width )
len = width;
- memcpy ( buf, ( box->string.buf + first ), len );
+ if ( box->flags & EDITBOX_STARS ) {
+ memset ( buf, '*', len );
+ } else {
+ memcpy ( buf, ( box->string.buf + first ), len );
+ }
/* Print box content and move cursor */
if ( ! box->win )
diff --git a/src/hci/tui/settings_ui.c b/src/hci/tui/settings_ui.c
index 0907bfd3..4ab38270 100644
--- a/src/hci/tui/settings_ui.c
+++ b/src/hci/tui/settings_ui.c
@@ -123,7 +123,7 @@ static void load_setting ( struct setting_widget *widget ) {
init_editbox ( &widget->editbox, widget->value,
sizeof ( widget->value ), NULL, widget->row,
( widget->col + offsetof ( struct setting_row, value )),
- sizeof ( ( ( struct setting_row * ) NULL )->value ) );
+ sizeof ( ( ( struct setting_row * ) NULL )->value ), 0);
}
/**
diff --git a/src/include/gpxe/editbox.h b/src/include/gpxe/editbox.h
index 47b07c25..007b042f 100644
--- a/src/include/gpxe/editbox.h
+++ b/src/include/gpxe/editbox.h
@@ -24,14 +24,22 @@ struct edit_box {
unsigned int width;
/** First displayed character */
unsigned int first;
+ /** Flags */
+ unsigned int flags;
+};
+
+/** Editable text box widget flags */
+enum edit_box_flags {
+ /** Show stars instead of contents (for password widgets) */
+ EDITBOX_STARS = 0x0001,
};
extern void init_editbox ( struct edit_box *box, char *buf, size_t len,
WINDOW *win, unsigned int row, unsigned int col,
- unsigned int width )
+ unsigned int width, unsigned int flags )
__attribute__ (( nonnull (1, 2) ));
extern void draw_editbox ( struct edit_box *box ) __nonnull;
-static inline int __pure edit_editbox ( struct edit_box *box, int key ) __nonnull;
+static inline int edit_editbox ( struct edit_box *box, int key ) __nonnull;
/**
* Edit text box widget