aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kconfig/mconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kconfig/mconf.c')
-rw-r--r--scripts/kconfig/mconf.c112
1 files changed, 35 insertions, 77 deletions
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 47e226fdedd7..50e61c411bc0 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -8,17 +8,13 @@
8 * i18n, 2005, Arnaldo Carvalho de Melo <acme@conectiva.com.br> 8 * i18n, 2005, Arnaldo Carvalho de Melo <acme@conectiva.com.br>
9 */ 9 */
10 10
11#include <sys/ioctl.h>
12#include <sys/wait.h>
13#include <ctype.h> 11#include <ctype.h>
14#include <errno.h> 12#include <errno.h>
15#include <fcntl.h> 13#include <fcntl.h>
16#include <limits.h> 14#include <limits.h>
17#include <signal.h>
18#include <stdarg.h> 15#include <stdarg.h>
19#include <stdlib.h> 16#include <stdlib.h>
20#include <string.h> 17#include <string.h>
21#include <termios.h>
22#include <unistd.h> 18#include <unistd.h>
23#include <locale.h> 19#include <locale.h>
24 20
@@ -275,8 +271,6 @@ search_help[] = N_(
275 "\n"); 271 "\n");
276 272
277static int indent; 273static int indent;
278static struct termios ios_org;
279static int rows = 0, cols = 0;
280static struct menu *current_menu; 274static struct menu *current_menu;
281static int child_count; 275static int child_count;
282static int single_menu_mode; 276static int single_menu_mode;
@@ -290,51 +284,16 @@ static void show_textbox(const char *title, const char *text, int r, int c);
290static void show_helptext(const char *title, const char *text); 284static void show_helptext(const char *title, const char *text);
291static void show_help(struct menu *menu); 285static void show_help(struct menu *menu);
292 286
293static void init_wsize(void)
294{
295 struct winsize ws;
296 char *env;
297
298 if (!ioctl(STDIN_FILENO, TIOCGWINSZ, &ws)) {
299 rows = ws.ws_row;
300 cols = ws.ws_col;
301 }
302
303 if (!rows) {
304 env = getenv("LINES");
305 if (env)
306 rows = atoi(env);
307 if (!rows)
308 rows = 24;
309 }
310 if (!cols) {
311 env = getenv("COLUMNS");
312 if (env)
313 cols = atoi(env);
314 if (!cols)
315 cols = 80;
316 }
317
318 if (rows < 19 || cols < 80) {
319 fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
320 fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
321 exit(1);
322 }
323
324 rows -= 4;
325 cols -= 5;
326}
327
328static void get_prompt_str(struct gstr *r, struct property *prop) 287static void get_prompt_str(struct gstr *r, struct property *prop)
329{ 288{
330 int i, j; 289 int i, j;
331 struct menu *submenu[8], *menu; 290 struct menu *submenu[8], *menu;
332 291
333 str_printf(r, "Prompt: %s\n", prop->text); 292 str_printf(r, _("Prompt: %s\n"), _(prop->text));
334 str_printf(r, " Defined at %s:%d\n", prop->menu->file->name, 293 str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
335 prop->menu->lineno); 294 prop->menu->lineno);
336 if (!expr_is_yes(prop->visible.expr)) { 295 if (!expr_is_yes(prop->visible.expr)) {
337 str_append(r, " Depends on: "); 296 str_append(r, _(" Depends on: "));
338 expr_gstr_print(prop->visible.expr, r); 297 expr_gstr_print(prop->visible.expr, r);
339 str_append(r, "\n"); 298 str_append(r, "\n");
340 } 299 }
@@ -342,13 +301,13 @@ static void get_prompt_str(struct gstr *r, struct property *prop)
342 for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) 301 for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent)
343 submenu[i++] = menu; 302 submenu[i++] = menu;
344 if (i > 0) { 303 if (i > 0) {
345 str_printf(r, " Location:\n"); 304 str_printf(r, _(" Location:\n"));
346 for (j = 4; --i >= 0; j += 2) { 305 for (j = 4; --i >= 0; j += 2) {
347 menu = submenu[i]; 306 menu = submenu[i];
348 str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu)); 307 str_printf(r, "%*c-> %s", j, ' ', _(menu_get_prompt(menu)));
349 if (menu->sym) { 308 if (menu->sym) {
350 str_printf(r, " (%s [=%s])", menu->sym->name ? 309 str_printf(r, " (%s [=%s])", menu->sym->name ?
351 menu->sym->name : "<choice>", 310 menu->sym->name : _("<choice>"),
352 sym_get_string_value(menu->sym)); 311 sym_get_string_value(menu->sym));
353 } 312 }
354 str_append(r, "\n"); 313 str_append(r, "\n");
@@ -378,7 +337,7 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym)
378 if (hit) 337 if (hit)
379 str_append(r, "\n"); 338 str_append(r, "\n");
380 if (sym->rev_dep.expr) { 339 if (sym->rev_dep.expr) {
381 str_append(r, " Selected by: "); 340 str_append(r, _(" Selected by: "));
382 expr_gstr_print(sym->rev_dep.expr, r); 341 expr_gstr_print(sym->rev_dep.expr, r);
383 str_append(r, "\n"); 342 str_append(r, "\n");
384 } 343 }
@@ -394,7 +353,7 @@ static struct gstr get_relations_str(struct symbol **sym_arr)
394 for (i = 0; sym_arr && (sym = sym_arr[i]); i++) 353 for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
395 get_symbol_str(&res, sym); 354 get_symbol_str(&res, sym);
396 if (!i) 355 if (!i)
397 str_append(&res, "No matches found.\n"); 356 str_append(&res, _("No matches found.\n"));
398 return res; 357 return res;
399} 358}
400 359
@@ -474,6 +433,7 @@ static void build_conf(struct menu *menu)
474 switch (prop->type) { 433 switch (prop->type) {
475 case P_MENU: 434 case P_MENU:
476 child_count++; 435 child_count++;
436 prompt = _(prompt);
477 if (single_menu_mode) { 437 if (single_menu_mode) {
478 item_make("%s%*c%s", 438 item_make("%s%*c%s",
479 menu->data ? "-->" : "++>", 439 menu->data ? "-->" : "++>",
@@ -489,7 +449,7 @@ static void build_conf(struct menu *menu)
489 case P_COMMENT: 449 case P_COMMENT:
490 if (prompt) { 450 if (prompt) {
491 child_count++; 451 child_count++;
492 item_make(" %*c*** %s ***", indent + 1, ' ', prompt); 452 item_make(" %*c*** %s ***", indent + 1, ' ', _(prompt));
493 item_set_tag(':'); 453 item_set_tag(':');
494 item_set_data(menu); 454 item_set_data(menu);
495 } 455 }
@@ -497,7 +457,7 @@ static void build_conf(struct menu *menu)
497 default: 457 default:
498 if (prompt) { 458 if (prompt) {
499 child_count++; 459 child_count++;
500 item_make("---%*c%s", indent + 1, ' ', prompt); 460 item_make("---%*c%s", indent + 1, ' ', _(prompt));
501 item_set_tag(':'); 461 item_set_tag(':');
502 item_set_data(menu); 462 item_set_data(menu);
503 } 463 }
@@ -541,10 +501,10 @@ static void build_conf(struct menu *menu)
541 item_set_data(menu); 501 item_set_data(menu);
542 } 502 }
543 503
544 item_add_str("%*c%s", indent + 1, ' ', menu_get_prompt(menu)); 504 item_add_str("%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
545 if (val == yes) { 505 if (val == yes) {
546 if (def_menu) { 506 if (def_menu) {
547 item_add_str(" (%s)", menu_get_prompt(def_menu)); 507 item_add_str(" (%s)", _(menu_get_prompt(def_menu)));
548 item_add_str(" --->"); 508 item_add_str(" --->");
549 if (def_menu->list) { 509 if (def_menu->list) {
550 indent += 2; 510 indent += 2;
@@ -556,7 +516,7 @@ static void build_conf(struct menu *menu)
556 } 516 }
557 } else { 517 } else {
558 if (menu == current_menu) { 518 if (menu == current_menu) {
559 item_make("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); 519 item_make("---%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
560 item_set_tag(':'); 520 item_set_tag(':');
561 item_set_data(menu); 521 item_set_data(menu);
562 goto conf_childs; 522 goto conf_childs;
@@ -599,17 +559,17 @@ static void build_conf(struct menu *menu)
599 tmp = indent - tmp + 4; 559 tmp = indent - tmp + 4;
600 if (tmp < 0) 560 if (tmp < 0)
601 tmp = 0; 561 tmp = 0;
602 item_add_str("%*c%s%s", tmp, ' ', menu_get_prompt(menu), 562 item_add_str("%*c%s%s", tmp, ' ', _(menu_get_prompt(menu)),
603 (sym_has_value(sym) || !sym_is_changable(sym)) ? 563 (sym_has_value(sym) || !sym_is_changable(sym)) ?
604 "" : " (NEW)"); 564 "" : _(" (NEW)"));
605 item_set_tag('s'); 565 item_set_tag('s');
606 item_set_data(menu); 566 item_set_data(menu);
607 goto conf_childs; 567 goto conf_childs;
608 } 568 }
609 } 569 }
610 item_add_str("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), 570 item_add_str("%*c%s%s", indent + 1, ' ', _(menu_get_prompt(menu)),
611 (sym_has_value(sym) || !sym_is_changable(sym)) ? 571 (sym_has_value(sym) || !sym_is_changable(sym)) ?
612 "" : " (NEW)"); 572 "" : _(" (NEW)"));
613 if (menu->prompt->type == P_MENU) { 573 if (menu->prompt->type == P_MENU) {
614 item_add_str(" --->"); 574 item_add_str(" --->");
615 return; 575 return;
@@ -647,7 +607,7 @@ static void conf(struct menu *menu)
647 item_set_tag('S'); 607 item_set_tag('S');
648 } 608 }
649 dialog_clear(); 609 dialog_clear();
650 res = dialog_menu(prompt ? prompt : _("Main Menu"), 610 res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
651 _(menu_instructions), 611 _(menu_instructions),
652 active_menu, &s_scroll); 612 active_menu, &s_scroll);
653 if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) 613 if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)
@@ -694,7 +654,7 @@ static void conf(struct menu *menu)
694 if (sym) 654 if (sym)
695 show_help(submenu); 655 show_help(submenu);
696 else 656 else
697 show_helptext("README", _(mconf_readme)); 657 show_helptext(_("README"), _(mconf_readme));
698 break; 658 break;
699 case 3: 659 case 3:
700 if (item_is_tag('t')) { 660 if (item_is_tag('t')) {
@@ -752,13 +712,13 @@ static void show_help(struct menu *menu)
752 str_append(&help, nohelp_text); 712 str_append(&help, nohelp_text);
753 } 713 }
754 get_symbol_str(&help, sym); 714 get_symbol_str(&help, sym);
755 show_helptext(menu_get_prompt(menu), str_get(&help)); 715 show_helptext(_(menu_get_prompt(menu)), str_get(&help));
756 str_free(&help); 716 str_free(&help);
757} 717}
758 718
759static void conf_choice(struct menu *menu) 719static void conf_choice(struct menu *menu)
760{ 720{
761 const char *prompt = menu_get_prompt(menu); 721 const char *prompt = _(menu_get_prompt(menu));
762 struct menu *child; 722 struct menu *child;
763 struct symbol *active; 723 struct symbol *active;
764 724
@@ -772,7 +732,7 @@ static void conf_choice(struct menu *menu)
772 for (child = menu->list; child; child = child->next) { 732 for (child = menu->list; child; child = child->next) {
773 if (!menu_is_visible(child)) 733 if (!menu_is_visible(child))
774 continue; 734 continue;
775 item_make("%s", menu_get_prompt(child)); 735 item_make("%s", _(menu_get_prompt(child)));
776 item_set_data(child); 736 item_set_data(child);
777 if (child->sym == active) 737 if (child->sym == active)
778 item_set_selected(1); 738 item_set_selected(1);
@@ -780,7 +740,7 @@ static void conf_choice(struct menu *menu)
780 item_set_tag('X'); 740 item_set_tag('X');
781 } 741 }
782 dialog_clear(); 742 dialog_clear();
783 res = dialog_checklist(prompt ? prompt : _("Main Menu"), 743 res = dialog_checklist(prompt ? _(prompt) : _("Main Menu"),
784 _(radiolist_instructions), 744 _(radiolist_instructions),
785 15, 70, 6); 745 15, 70, 6);
786 selected = item_activate_selected(); 746 selected = item_activate_selected();
@@ -826,10 +786,10 @@ static void conf_string(struct menu *menu)
826 heading = _(inputbox_instructions_string); 786 heading = _(inputbox_instructions_string);
827 break; 787 break;
828 default: 788 default:
829 heading = "Internal mconf error!"; 789 heading = _("Internal mconf error!");
830 } 790 }
831 dialog_clear(); 791 dialog_clear();
832 res = dialog_inputbox(prompt ? prompt : _("Main Menu"), 792 res = dialog_inputbox(prompt ? _(prompt) : _("Main Menu"),
833 heading, 10, 75, 793 heading, 10, 75,
834 sym_get_string_value(menu->sym)); 794 sym_get_string_value(menu->sym));
835 switch (res) { 795 switch (res) {
@@ -900,13 +860,9 @@ static void conf_save(void)
900 } 860 }
901} 861}
902 862
903static void conf_cleanup(void)
904{
905 tcsetattr(1, TCSAFLUSH, &ios_org);
906}
907
908int main(int ac, char **av) 863int main(int ac, char **av)
909{ 864{
865 int saved_x, saved_y;
910 char *mode; 866 char *mode;
911 int res; 867 int res;
912 868
@@ -923,11 +879,13 @@ int main(int ac, char **av)
923 single_menu_mode = 1; 879 single_menu_mode = 1;
924 } 880 }
925 881
926 tcgetattr(1, &ios_org); 882 getyx(stdscr, saved_y, saved_x);
927 atexit(conf_cleanup); 883 if (init_dialog(NULL)) {
928 init_wsize(); 884 fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
929 reset_dialog(); 885 fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
930 init_dialog(NULL); 886 return 1;
887 }
888
931 set_config_filename(conf_get_configname()); 889 set_config_filename(conf_get_configname());
932 do { 890 do {
933 conf(&rootmenu); 891 conf(&rootmenu);
@@ -941,7 +899,7 @@ int main(int ac, char **av)
941 else 899 else
942 res = -1; 900 res = -1;
943 } while (res == KEY_ESC); 901 } while (res == KEY_ESC);
944 end_dialog(); 902 end_dialog(saved_x, saved_y);
945 903
946 switch (res) { 904 switch (res) {
947 case 0: 905 case 0: