summaryrefslogtreecommitdiff
path: root/scripts/kconfig/conf.c
authorkergoth <kergoth>2003-06-17 17:03:49 (UTC)
committer kergoth <kergoth>2003-06-17 17:03:49 (UTC)
commit16e53b2a2e94742f3b55ee73700bb264e36638d4 (patch) (unidiff)
tree4f2b65a635d25c1ce0cfeea7953623c2bf7d9534 /scripts/kconfig/conf.c
parent384b7f1a42f9f2f101dc8fe11c3625055d96f672 (diff)
downloadopie-16e53b2a2e94742f3b55ee73700bb264e36638d4.zip
opie-16e53b2a2e94742f3b55ee73700bb264e36638d4.tar.gz
opie-16e53b2a2e94742f3b55ee73700bb264e36638d4.tar.bz2
Update LinuxKernelConf version to 1.4.
Diffstat (limited to 'scripts/kconfig/conf.c') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/kconfig/conf.c222
1 files changed, 110 insertions, 112 deletions
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 1602d5f..3c27a78 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -32,50 +32,12 @@ static int valid_stdin = 1;
32static int conf_cnt; 32static int conf_cnt;
33static char line[128]; 33static char line[128];
34static struct menu *rootEntry; 34static struct menu *rootEntry;
35 35
36static char nohelp_text[] = "Sorry, no help available for this option yet.\n"; 36static char nohelp_text[] = "Sorry, no help available for this option yet.\n";
37 37
38#if 0
39static void printc(int ch)
40{
41 static int sep = 0;
42
43 if (!sep) {
44 putchar('[');
45 sep = 1;
46 } else if (ch)
47 putchar('/');
48 if (!ch) {
49 putchar(']');
50 putchar(' ');
51 sep = 0;
52 } else
53 putchar(ch);
54}
55#endif
56
57static void printo(const char *o)
58{
59 static int sep = 0;
60
61 if (!sep) {
62 putchar('(');
63 sep = 1;
64 } else if (o) {
65 putchar(',');
66 putchar(' ');
67 }
68 if (!o) {
69 putchar(')');
70 putchar(' ');
71 sep = 0;
72 } else
73 printf("%s", o);
74}
75
76static void strip(char *str) 38static void strip(char *str)
77{ 39{
78 char *p = str; 40 char *p = str;
79 int l; 41 int l;
80 42
81 while ((isspace(*p))) 43 while ((isspace(*p)))
@@ -87,36 +49,48 @@ static void strip(char *str)
87 return; 49 return;
88 p = str + l - 1; 50 p = str + l - 1;
89 while ((isspace(*p))) 51 while ((isspace(*p)))
90 *p-- = 0; 52 *p-- = 0;
91} 53}
92 54
55static void check_stdin(void)
56{
57 if (!valid_stdin && input_mode == ask_silent) {
58 printf("aborted!\n\n");
59 printf("Console input/output is redirected. ");
60 printf("Run 'make oldconfig' to update configuration.\n\n");
61 exit(1);
62 }
63}
64
93static void conf_askvalue(struct symbol *sym, const char *def) 65static void conf_askvalue(struct symbol *sym, const char *def)
94{ 66{
95 enum symbol_type type = sym_get_type(sym); 67 enum symbol_type type = sym_get_type(sym);
96 tristate val; 68 tristate val;
97 69
98 if (!sym_has_value(sym)) 70 if (!sym_has_value(sym))
99 printf("(NEW) "); 71 printf("(NEW) ");
100 72
101 line[0] = '\n'; 73 line[0] = '\n';
102 line[1] = 0; 74 line[1] = 0;
103 75
76 if (!sym_is_changable(sym)) {
77 printf("%s\n", def);
78 line[0] = '\n';
79 line[1] = 0;
80 return;
81 }
82
104 switch (input_mode) { 83 switch (input_mode) {
105 case ask_new: 84 case ask_new:
106 case ask_silent: 85 case ask_silent:
107 if (sym_has_value(sym)) { 86 if (sym_has_value(sym)) {
108 printf("%s\n", def); 87 printf("%s\n", def);
109 return; 88 return;
110 } 89 }
111 if (!valid_stdin && input_mode == ask_silent) { 90 check_stdin();
112 printf("aborted!\n\n");
113 printf("Console input/output is redirected. ");
114 printf("Run 'make oldconfig' to update configuration.\n\n");
115 exit(1);
116 }
117 case ask_all: 91 case ask_all:
118 fflush(stdout); 92 fflush(stdout);
119 fgets(line, 128, stdin); 93 fgets(line, 128, stdin);
120 return; 94 return;
121 case set_default: 95 case set_default:
122 printf("%s\n", def); 96 printf("%s\n", def);
@@ -291,15 +265,14 @@ help:
291 } 265 }
292} 266}
293 267
294static int conf_choice(struct menu *menu) 268static int conf_choice(struct menu *menu)
295{ 269{
296 struct symbol *sym, *def_sym; 270 struct symbol *sym, *def_sym;
297 struct menu *cmenu, *def_menu; 271 struct menu *child;
298 const char *help; 272 int type;
299 int type, len;
300 bool is_new; 273 bool is_new;
301 274
302 sym = menu->sym; 275 sym = menu->sym;
303 type = sym_get_type(sym); 276 type = sym_get_type(sym);
304 is_new = !sym_has_value(sym); 277 is_new = !sym_has_value(sym);
305 if (sym_is_changable(sym)) { 278 if (sym_is_changable(sym)) {
@@ -311,80 +284,117 @@ static int conf_choice(struct menu *menu)
311 case mod: 284 case mod:
312 return 0; 285 return 0;
313 case yes: 286 case yes:
314 break; 287 break;
315 } 288 }
316 } else { 289 } else {
317 sym->def = sym->curr; 290 switch (sym_get_tristate_value(sym)) {
318 if (S_TRI(sym->curr) == mod) { 291 case no:
292 return 1;
293 case mod:
319 printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); 294 printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
320 return 0; 295 return 0;
296 case yes:
297 break;
321 } 298 }
322 } 299 }
323 300
324 while (1) { 301 while (1) {
325 printf("%*s%s ", indent - 1, "", menu_get_prompt(menu)); 302 int cnt, def;
303
304 printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
326 def_sym = sym_get_choice_value(sym); 305 def_sym = sym_get_choice_value(sym);
327 def_menu = NULL; 306 cnt = def = 0;
328 for (cmenu = menu->list; cmenu; cmenu = cmenu->next) { 307 line[0] = '0';
329 if (!menu_is_visible(cmenu)) 308 line[1] = 0;
309 for (child = menu->list; child; child = child->next) {
310 if (!menu_is_visible(child))
330 continue; 311 continue;
331 printo(menu_get_prompt(cmenu)); 312 if (!child->sym) {
332 if (cmenu->sym == def_sym) 313 printf("%*c %s\n", indent, '*', menu_get_prompt(child));
333 def_menu = cmenu; 314 continue;
334 } 315 }
335 printo(NULL); 316 cnt++;
336 if (def_menu) 317 if (child->sym == def_sym) {
337 printf("[%s] ", menu_get_prompt(def_menu)); 318 def = cnt;
338 else { 319 printf("%*c", indent, '>');
320 } else
321 printf("%*c", indent, ' ');
322 printf(" %d. %s", cnt, menu_get_prompt(child));
323 if (child->sym->name)
324 printf(" (%s)", child->sym->name);
325 if (!sym_has_value(child->sym))
326 printf(" (NEW)");
339 printf("\n"); 327 printf("\n");
340 return 1;
341 } 328 }
329 printf("%*schoice", indent - 1, "");
330 if (cnt == 1) {
331 printf("[1]: 1\n");
332 goto conf_childs;
333 }
334 printf("[1-%d", cnt);
335 if (sym->help)
336 printf("?");
337 printf("]: ");
342 switch (input_mode) { 338 switch (input_mode) {
343 case ask_new: 339 case ask_new:
344 case ask_silent: 340 case ask_silent:
341 if (!is_new) {
342 cnt = def;
343 printf("%d\n", cnt);
344 break;
345 }
346 check_stdin();
345 case ask_all: 347 case ask_all:
346 if (is_new) 348 fflush(stdout);
347 sym->flags |= SYMBOL_NEW; 349 fgets(line, 128, stdin);
348 conf_askvalue(sym, menu_get_prompt(def_menu));
349 strip(line); 350 strip(line);
351 if (line[0] == '?') {
352 printf("\n%s\n", menu->sym->help ?
353 menu->sym->help : nohelp_text);
354 continue;
355 }
356 if (!line[0])
357 cnt = def;
358 else if (isdigit(line[0]))
359 cnt = atoi(line);
360 else
361 continue;
362 break;
363 case set_random:
364 def = (random() % cnt) + 1;
365 case set_default:
366 case set_yes:
367 case set_mod:
368 case set_no:
369 cnt = def;
370 printf("%d\n", cnt);
350 break; 371 break;
351 default:
352 line[0] = 0;
353 printf("\n");
354 } 372 }
355 if (line[0] == '?' && !line[1]) { 373
356 help = nohelp_text; 374 conf_childs:
357 if (menu->sym->help) 375 for (child = menu->list; child; child = child->next) {
358 help = menu->sym->help; 376 if (!child->sym || !menu_is_visible(child))
359 printf("\n%s\n", help); 377 continue;
360 continue; 378 if (!--cnt)
379 break;
361 } 380 }
362 if (line[0]) { 381 if (!child)
363 len = strlen(line); 382 continue;
364 line[len] = 0; 383 if (line[strlen(line) - 1] == '?') {
365 384 printf("\n%s\n", child->sym->help ?
366 def_menu = NULL; 385 child->sym->help : nohelp_text);
367 for (cmenu = menu->list; cmenu; cmenu = cmenu->next) { 386 continue;
368 if (!cmenu->sym || !menu_is_visible(cmenu))
369 continue;
370 if (!strncasecmp(line, menu_get_prompt(cmenu), len)) {
371 def_menu = cmenu;
372 break;
373 }
374 }
375 } 387 }
376 if (def_menu) { 388 sym_set_choice_value(sym, child->sym);
377 sym_set_choice_value(sym, def_menu->sym); 389 if (child->list) {
378 if (def_menu->list) { 390 indent += 2;
379 indent += 2; 391 conf(child->list);
380 conf(def_menu->list); 392 indent -= 2;
381 indent -= 2;
382 }
383 return 1;
384 } 393 }
394 return 1;
385 } 395 }
386} 396}
387 397
388static void conf(struct menu *menu) 398static void conf(struct menu *menu)
389{ 399{
390 struct symbol *sym; 400 struct symbol *sym;
@@ -419,13 +429,13 @@ static void conf(struct menu *menu)
419 429
420 if (!sym) 430 if (!sym)
421 goto conf_childs; 431 goto conf_childs;
422 432
423 if (sym_is_choice(sym)) { 433 if (sym_is_choice(sym)) {
424 conf_choice(menu); 434 conf_choice(menu);
425 if (S_TRI(sym->curr) != mod) 435 if (sym->curr.tri != mod)
426 return; 436 return;
427 goto conf_childs; 437 goto conf_childs;
428 } 438 }
429 439
430 switch (sym->type) { 440 switch (sym->type) {
431 case S_INT: 441 case S_INT:
@@ -453,35 +463,23 @@ static void check_conf(struct menu *menu)
453 struct menu *child; 463 struct menu *child;
454 464
455 if (!menu_is_visible(menu)) 465 if (!menu_is_visible(menu))
456 return; 466 return;
457 467
458 sym = menu->sym; 468 sym = menu->sym;
459 if (!sym) 469 if (sym) {
460 goto conf_childs; 470 if (sym_is_changable(sym) && !sym_has_value(sym)) {
461
462 if (sym_is_choice(sym)) {
463 if (!sym_has_value(sym)) {
464 if (!conf_cnt++) 471 if (!conf_cnt++)
465 printf("*\n* Restart config...\n*\n"); 472 printf("*\n* Restart config...\n*\n");
466 rootEntry = menu_get_parent_menu(menu); 473 rootEntry = menu_get_parent_menu(menu);
467 conf(rootEntry); 474 conf(rootEntry);
468 } 475 }
469 if (sym_get_tristate_value(sym) != mod) 476 if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
470 return; 477 return;
471 goto conf_childs;
472 } 478 }
473 479
474 if (!sym_has_value(sym)) {
475 if (!conf_cnt++)
476 printf("*\n* Restart config...\n*\n");
477 rootEntry = menu_get_parent_menu(menu);
478 conf(rootEntry);
479 }
480
481conf_childs:
482 for (child = menu->list; child; child = child->next) 480 for (child = menu->list; child; child = child->next)
483 check_conf(child); 481 check_conf(child);
484} 482}
485 483
486int main(int ac, char **av) 484int main(int ac, char **av)
487{ 485{
@@ -533,13 +531,13 @@ int main(int ac, char **av)
533 exit(1); 531 exit(1);
534 } 532 }
535 break; 533 break;
536 case ask_silent: 534 case ask_silent:
537 if (stat(".config", &tmpstat)) { 535 if (stat(".config", &tmpstat)) {
538 printf("***\n" 536 printf("***\n"
539 "*** You have not yet configured your kernel!\n" 537 "*** You have not yet configured!\n"
540 "***\n" 538 "***\n"
541 "*** Please run some configurator (e.g. \"make oldconfig\" or\n" 539 "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
542 "*** \"make menuconfig\" or \"make xconfig\").\n" 540 "*** \"make menuconfig\" or \"make xconfig\").\n"
543 "***\n"); 541 "***\n");
544 exit(1); 542 exit(1);
545 } 543 }