Update the kconfig copy in libpayload to a much more recent one. Among
[coreboot.git] / payloads / libpayload / util / kconfig / lxdialog / inputbox.c
index 779503726b0a77b9eb08ab3f3b9d7abc921415a7..4946bd02b46d4324939b8ba7e03db1174359d645 100644 (file)
@@ -31,8 +31,8 @@ static void print_buttons(WINDOW * dialog, int height, int width, int selected)
        int x = width / 2 - 11;
        int y = height - 2;
 
-       print_button(dialog, "  Ok  ", y, x, selected == 0);
-       print_button(dialog, " Help ", y, x + 14, selected == 1);
+       print_button(dialog, gettext("  Ok  "), y, x, selected == 0);
+       print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
 
        wmove(dialog, y, x + 1 + 14 * selected);
        wrefresh(dialog);
@@ -49,6 +49,17 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
        char *instr = dialog_input_result;
        WINDOW *dialog;
 
+       if (!init)
+               instr[0] = '\0';
+       else
+               strcpy(instr, init);
+
+do_resize:
+       if (getmaxy(stdscr) <= (height - 2))
+               return -ERRDISPLAYTOOSMALL;
+       if (getmaxx(stdscr) <= (width - 2))
+               return -ERRDISPLAYTOOSMALL;
+
        /* center dialog box on screen */
        x = (COLS - width) / 2;
        y = (LINES - height) / 2;
@@ -58,17 +69,18 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
        dialog = newwin(height, width, y, x);
        keypad(dialog, TRUE);
 
-       draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
-       wattrset(dialog, border_attr);
+       draw_box(dialog, 0, 0, height, width,
+                dlg.dialog.atr, dlg.border.atr);
+       wattrset(dialog, dlg.border.atr);
        mvwaddch(dialog, height - 3, 0, ACS_LTEE);
        for (i = 0; i < width - 2; i++)
                waddch(dialog, ACS_HLINE);
-       wattrset(dialog, dialog_attr);
+       wattrset(dialog, dlg.dialog.atr);
        waddch(dialog, ACS_RTEE);
 
        print_title(dialog, title, width);
 
-       wattrset(dialog, dialog_attr);
+       wattrset(dialog, dlg.dialog.atr);
        print_autowrap(dialog, prompt, width - 2, 1, 3);
 
        /* Draw the input field box */
@@ -76,18 +88,14 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
        getyx(dialog, y, x);
        box_y = y + 2;
        box_x = (width - box_width) / 2;
-       draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, border_attr, dialog_attr);
+       draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
+                dlg.border.atr, dlg.dialog.atr);
 
        print_buttons(dialog, height, width, 0);
 
        /* Set up the initial value */
        wmove(dialog, box_y, box_x);
-       wattrset(dialog, inputbox_attr);
-
-       if (!init)
-               instr[0] = '\0';
-       else
-               strcpy(instr, init);
+       wattrset(dialog, dlg.inputbox.atr);
 
        input_x = strlen(instr);
 
@@ -104,7 +112,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
 
        wrefresh(dialog);
 
-       while (key != ESC) {
+       while (key != KEY_ESC) {
                key = wgetch(dialog);
 
                if (button == -1) {     /* Input box selected */
@@ -120,7 +128,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
                        case KEY_BACKSPACE:
                        case 127:
                                if (input_x || scroll) {
-                                       wattrset(dialog, inputbox_attr);
+                                       wattrset(dialog, dlg.inputbox.atr);
                                        if (!input_x) {
                                                scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1);
                                                wmove(dialog, box_y, box_x);
@@ -140,7 +148,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
                        default:
                                if (key < 0x100 && isprint(key)) {
                                        if (scroll + input_x < MAX_LEN) {
-                                               wattrset(dialog, inputbox_attr);
+                                               wattrset(dialog, dlg.inputbox.atr);
                                                instr[scroll + input_x] = key;
                                                instr[scroll + input_x + 1] = '\0';
                                                if (input_x == box_width - 1) {
@@ -213,12 +221,18 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
                        return (button == -1 ? 0 : button);
                case 'X':
                case 'x':
-                       key = ESC;
-               case ESC:
+                       key = KEY_ESC;
+                       break;
+               case KEY_ESC:
+                       key = on_key_esc(dialog);
                        break;
+               case KEY_RESIZE:
+                       delwin(dialog);
+                       on_key_resize();
+                       goto do_resize;
                }
        }
 
        delwin(dialog);
-       return -1;              /* ESC pressed */
+       return KEY_ESC;         /* ESC pressed */
 }