X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=ui%2Fncurses%2Fnc-config.c;h=834962968ca04328f13112b03d81d5488703649c;hp=fbba943e3f178f0e194215f647a984f88d668cb4;hb=98b04aa42a4f1dc8e585f00d75c3b28d9e9aa2a9;hpb=e4a641a6e3133158b003d19ee285cfc37164cb1f diff --git a/ui/ncurses/nc-config.c b/ui/ncurses/nc-config.c index fbba943..8349629 100644 --- a/ui/ncurses/nc-config.c +++ b/ui/ncurses/nc-config.c @@ -33,7 +33,7 @@ #include "nc-config.h" #include "nc-widgets.h" -#define N_FIELDS 43 +#define N_FIELDS 48 extern struct help_text config_help_text; @@ -106,12 +106,17 @@ struct config_screen { struct nc_widget_textbox *dns_f; struct nc_widget_label *dns_dhcp_help_l; struct nc_widget_label *dns_help_l; + struct nc_widget_label *http_proxy_l; + struct nc_widget_textbox *http_proxy_f; + struct nc_widget_label *https_proxy_l; + struct nc_widget_textbox *https_proxy_f; struct nc_widget_label *allow_write_l; struct nc_widget_select *allow_write_f; - struct nc_widget_label *boot_tty_l; - struct nc_widget_select *boot_tty_f; - struct nc_widget_label *current_tty_l; + struct nc_widget_label *boot_console_l; + struct nc_widget_select *boot_console_f; + struct nc_widget_label *manual_console_l; + struct nc_widget_label *current_console_l; struct nc_widget_label *net_override_l; struct nc_widget_label *safe_mode; @@ -201,8 +206,8 @@ static int screen_process_form(struct config_screen *screen) bool allow_write, autoboot; char *str, *end; struct config *config; - int i, n_boot_opts, rc, idx; - unsigned int *order, tty; + int i, n_boot_opts, rc; + unsigned int *order, idx; char mac[20]; config = config_copy(screen, screen->cui->config); @@ -334,20 +339,27 @@ static int screen_process_form(struct config_screen *screen) } } + talloc_free(config->http_proxy); + talloc_free(config->https_proxy); + str = widget_textbox_get_value(screen->widgets.http_proxy_f); + config->http_proxy = talloc_strdup(config, str); + str = widget_textbox_get_value(screen->widgets.https_proxy_f); + config->https_proxy = talloc_strdup(config, str); + allow_write = widget_select_get_value(screen->widgets.allow_write_f); if (allow_write != config->allow_writes) config->allow_writes = allow_write; - if (config->n_tty) { - tty = widget_select_get_value(screen->widgets.boot_tty_f); - if (!config->boot_tty) { - config->boot_tty = talloc_strdup(config, - config->tty_list[tty]); - } else if (strncmp(config->boot_tty, config->tty_list[tty], - strlen(config->boot_tty)) != 0) { - talloc_free(config->boot_tty); - config->boot_tty = talloc_strdup(config, - config->tty_list[tty]); + if (config->n_consoles && !config->manual_console) { + idx = widget_select_get_value(screen->widgets.boot_console_f); + if (!config->boot_console) { + config->boot_console = talloc_strdup(config, + config->consoles[idx]); + } else if (strncmp(config->boot_console, config->consoles[idx], + strlen(config->boot_console)) != 0) { + talloc_free(config->boot_console); + config->boot_console = talloc_strdup(config, + config->consoles[idx]); } } @@ -584,6 +596,13 @@ static void config_screen_layout_widgets(struct config_screen *screen) y += 1; } + wf = widget_textbox_base(screen->widgets.http_proxy_f); + layout_pair(screen, y, screen->widgets.http_proxy_l, wf); + y++; + wf = widget_textbox_base(screen->widgets.https_proxy_f); + layout_pair(screen, y, screen->widgets.https_proxy_l, wf); + y++; + y += 1; layout_pair(screen, y, screen->widgets.allow_write_l, @@ -592,20 +611,28 @@ static void config_screen_layout_widgets(struct config_screen *screen) y += 1; - if (widget_height(widget_select_base(screen->widgets.boot_tty_f))) { - layout_pair(screen, y, screen->widgets.boot_tty_l, - widget_select_base(screen->widgets.boot_tty_f)); - y += widget_height(widget_select_base(screen->widgets.boot_tty_f)); - widget_move(widget_label_base(screen->widgets.current_tty_l), + if (screen->widgets.manual_console_l) { + layout_pair(screen, y++, screen->widgets.boot_console_l, + widget_label_base(screen->widgets.manual_console_l)); + widget_move(widget_label_base(screen->widgets.current_console_l), + y, screen->field_x); + widget_set_visible(widget_select_base( + screen->widgets.boot_console_f), false); + y += 2; + } else if (widget_height(widget_select_base(screen->widgets.boot_console_f))) { + layout_pair(screen, y, screen->widgets.boot_console_l, + widget_select_base(screen->widgets.boot_console_f)); + y += widget_height(widget_select_base(screen->widgets.boot_console_f)); + widget_move(widget_label_base(screen->widgets.current_console_l), y, screen->field_x); y += 2; } else { widget_set_visible(widget_label_base( - screen->widgets.boot_tty_l), false); + screen->widgets.boot_console_l), false); widget_set_visible(widget_select_base( - screen->widgets.boot_tty_f), false); + screen->widgets.boot_console_f), false); widget_set_visible(widget_label_base( - screen->widgets.current_tty_l), false); + screen->widgets.current_console_l), false); } if (screen->net_override) { @@ -785,7 +812,7 @@ static void config_screen_setup_widgets(struct config_screen *screen, { struct nc_widgetset *set = screen->widgetset; struct interface_config *ifcfg; - char *str, *ip, *mask, *gw, *url, *tty; + char *str, *ip, *mask, *gw, *url, *tty, *label; enum net_conf_type type; unsigned int i; int add_len, clear_len, any_len, min_len = 20; @@ -841,7 +868,6 @@ static void config_screen_setup_widgets(struct config_screen *screen, for (i = 0; i < sysinfo->n_blockdevs; i++) { struct blockdev_info *bd = sysinfo->blockdevs[i]; - char *label; label = talloc_asprintf(screen, _("disk: %s [uuid: %s]"), bd->name, bd->uuid); @@ -851,7 +877,7 @@ static void config_screen_setup_widgets(struct config_screen *screen, for (i = 0; i < sysinfo->n_interfaces; i++) { struct interface_info *info = sysinfo->interfaces[i]; - char *label, mac[20]; + char mac[20]; mac_str(info->hwaddr, info->hwaddr_size, mac, sizeof(mac)); @@ -862,7 +888,6 @@ static void config_screen_setup_widgets(struct config_screen *screen, } for (i = DEVICE_TYPE_NETWORK; i < DEVICE_TYPE_UNKNOWN; i++) { - char *label; if (i == DEVICE_TYPE_ANY) label = talloc_asprintf(screen, _("Any Device")); @@ -903,7 +928,7 @@ static void config_screen_setup_widgets(struct config_screen *screen, widget_textbox_set_validator_integer(screen->widgets.timeout_f, 0, 999); if (config->ipmi_bootdev) { - char *label = talloc_asprintf(screen, + label = talloc_asprintf(screen, _("%s IPMI boot option: %s"), config->ipmi_bootdev_persistent ? "Persistent" : "Temporary", @@ -1021,6 +1046,15 @@ static void config_screen_setup_widgets(struct config_screen *screen, screen->widgets.dns_dhcp_help_l = widget_new_label(set, 0, 0, _("(if not provided by DHCP server)")); + screen->widgets.http_proxy_l = widget_new_label(set, 0, 0, + _("HTTP Proxy:")); + screen->widgets.http_proxy_f = widget_new_textbox(set, 0, 0, 32, + config->http_proxy); + screen->widgets.https_proxy_l = widget_new_label(set, 0, 0, + _("HTTPS Proxy:")); + screen->widgets.https_proxy_f = widget_new_textbox(set, 0, 0, 32, + config->https_proxy); + if (config->safe_mode) screen->widgets.safe_mode = widget_new_label(set, 0, 0, _("Selecting 'OK' will exit safe mode")); @@ -1038,22 +1072,28 @@ static void config_screen_setup_widgets(struct config_screen *screen, _("Allow bootloader scripts to modify disks"), config->allow_writes); - screen->widgets.boot_tty_l = widget_new_label(set, 0, 0, - _("Default tty:")); - screen->widgets.boot_tty_f = widget_new_select(set, 0, 0, + screen->widgets.boot_console_l = widget_new_label(set, 0, 0, + _("Boot console:")); + screen->widgets.boot_console_f = widget_new_select(set, 0, 0, COLS - screen->field_x - 1); - for (i = 0; i < config->n_tty; i++){ - found = config->boot_tty && - strncmp(config->boot_tty, config->tty_list[i], - strlen(config->boot_tty)) == 0; - widget_select_add_option(screen->widgets.boot_tty_f, i, - config->tty_list[i], found); + for (i = 0; i < config->n_consoles; i++){ + found = config->boot_console && + strncmp(config->boot_console, config->consoles[i], + strlen(config->boot_console)) == 0; + widget_select_add_option(screen->widgets.boot_console_f, i, + config->consoles[i], found); + } + + if (config->manual_console) { + label = talloc_asprintf(screen, _("Manually set: '%s'"), + config->boot_console); + screen->widgets.manual_console_l = widget_new_label(set, 0, 0, label); } tty = talloc_asprintf(screen, _("Current interface: %s"), ttyname(STDIN_FILENO)); - screen->widgets.current_tty_l = widget_new_label(set, 0 , 0, tty); + screen->widgets.current_console_l = widget_new_label(set, 0 , 0, tty); screen->widgets.ok_b = widget_new_button(set, 0, 0, 10, _("OK"), ok_click, screen);