summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/kconfig/mconf.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index b9cf25f..0967471 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -1,475 +1,475 @@
1/* 1/*
2 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> 2 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
3 * Released under the terms of the GNU GPL v2.0. 3 * Released under the terms of the GNU GPL v2.0.
4 * 4 *
5 * Introduced single menu mode (show all sub-menus in one large tree). 5 * Introduced single menu mode (show all sub-menus in one large tree).
6 * 2002-11-06 Petr Baudis <pasky@ucw.cz> 6 * 2002-11-06 Petr Baudis <pasky@ucw.cz>
7 */ 7 */
8 8
9#include <sys/ioctl.h> 9#include <sys/ioctl.h>
10#include <sys/wait.h> 10#include <sys/wait.h>
11#include <ctype.h> 11#include <ctype.h>
12#include <errno.h> 12#include <errno.h>
13#include <fcntl.h> 13#include <fcntl.h>
14#include <limits.h> 14#include <limits.h>
15#include <signal.h> 15#include <signal.h>
16#include <stdarg.h> 16#include <stdarg.h>
17#include <stdlib.h> 17#include <stdlib.h>
18#include <string.h> 18#include <string.h>
19#include <termios.h> 19#include <termios.h>
20#include <unistd.h> 20#include <unistd.h>
21 21
22#define LKC_DIRECT_LINK 22#define LKC_DIRECT_LINK
23#include "lkc.h" 23#include "lkc.h"
24 24
25static char menu_backtitle[128]; 25static char menu_backtitle[128];
26static const char menu_instructions[] = 26static const char menu_instructions[] =
27 "Arrow keys navigate the menu. " 27 "Arrow keys navigate the menu. "
28 "<Enter> selects submenus --->. " 28 "<Enter> selects submenus --->. "
29 "Highlighted letters are hotkeys. " 29 "Highlighted letters are hotkeys. "
30 "Pressing <Y> includes, <N> excludes, <M> modularizes features. " 30 "Pressing <Y> includes, <N> excludes, <M> modularizes features. "
31 "Press <Esc><Esc> to exit, <?> for Help. " 31 "Press <Esc><Esc> to exit, <?> for Help. "
32 "Legend: [*] built-in [ ] excluded <M> module < > module capable", 32 "Legend: [*] built-in [ ] excluded <M> module < > module capable",
33radiolist_instructions[] = 33radiolist_instructions[] =
34 "Use the arrow keys to navigate this window or " 34 "Use the arrow keys to navigate this window or "
35 "press the hotkey of the item you wish to select " 35 "press the hotkey of the item you wish to select "
36 "followed by the <SPACE BAR>. " 36 "followed by the <SPACE BAR>. "
37 "Press <?> for additional information about this option.", 37 "Press <?> for additional information about this option.",
38inputbox_instructions_int[] = 38inputbox_instructions_int[] =
39 "Please enter a decimal value. " 39 "Please enter a decimal value. "
40 "Fractions will not be accepted. " 40 "Fractions will not be accepted. "
41 "Use the <TAB> key to move from the input field to the buttons below it.", 41 "Use the <TAB> key to move from the input field to the buttons below it.",
42inputbox_instructions_hex[] = 42inputbox_instructions_hex[] =
43 "Please enter a hexadecimal value. " 43 "Please enter a hexadecimal value. "
44 "Use the <TAB> key to move from the input field to the buttons below it.", 44 "Use the <TAB> key to move from the input field to the buttons below it.",
45inputbox_instructions_string[] = 45inputbox_instructions_string[] =
46 "Please enter a string value. " 46 "Please enter a string value. "
47 "Use the <TAB> key to move from the input field to the buttons below it.", 47 "Use the <TAB> key to move from the input field to the buttons below it.",
48setmod_text[] = 48setmod_text[] =
49 "This feature depends on another which has been configured as a module.\n" 49 "This feature depends on another which has been configured as a module.\n"
50 "As a result, this feature will be built as a module.", 50 "As a result, this feature will be built as a module.",
51nohelp_text[] = 51nohelp_text[] =
52 "There is no help available for this option.\n", 52 "There is no help available for this option.\n",
53load_config_text[] = 53load_config_text[] =
54 "Enter the name of the configuration file you wish to load. " 54 "Enter the name of the configuration file you wish to load. "
55 "Accept the name shown to restore the configuration you " 55 "Accept the name shown to restore the configuration you "
56 "last retrieved. Leave blank to abort.", 56 "last retrieved. Leave blank to abort.",
57load_config_help[] = 57load_config_help[] =
58 "\n" 58 "\n"
59 "For various reasons, one may wish to keep several different \n" 59 "For various reasons, one may wish to keep several different \n"
60 "configurations available on a single machine.\n" 60 "configurations available on a single machine.\n"
61 "\n" 61 "\n"
62 "If you have saved a previous configuration in a file other than the\n" 62 "If you have saved a previous configuration in a file other than the\n"
63 "default, entering the name of the file here will allow you\n" 63 "default, entering the name of the file here will allow you\n"
64 "to modify that configuration.\n" 64 "to modify that configuration.\n"
65 "\n" 65 "\n"
66 "If you are uncertain, then you have probably never used alternate\n" 66 "If you are uncertain, then you have probably never used alternate\n"
67 "configuration files. You should therefor leave this blank to abort.\n", 67 "configuration files. You should therefor leave this blank to abort.\n",
68save_config_text[] = 68save_config_text[] =
69 "Enter a filename to which this configuration should be saved " 69 "Enter a filename to which this configuration should be saved "
70 "as an alternate. Leave blank to abort.", 70 "as an alternate. Leave blank to abort.",
71save_config_help[] = 71save_config_help[] =
72 "\n" 72 "\n"
73 "For various reasons, one may wish to keep different\n" 73 "For various reasons, one may wish to keep different\n"
74 "configurations available on a single machine.\n" 74 "configurations available on a single machine.\n"
75 "\n" 75 "\n"
76 "Entering a file name here will allow you to later retrieve, modify\n" 76 "Entering a file name here will allow you to later retrieve, modify\n"
77 "and use the current configuration as an alternate to whatever\n" 77 "and use the current configuration as an alternate to whatever\n"
78 "configuration options you have selected at that time.\n" 78 "configuration options you have selected at that time.\n"
79 "\n" 79 "\n"
80 "If you are uncertain what all this means then you should probably\n" 80 "If you are uncertain what all this means then you should probably\n"
81 "leave this blank.\n" 81 "leave this blank.\n"
82; 82;
83 83
84static char buf[4096], *bufptr = buf; 84static char buf[4096], *bufptr = buf;
85static char input_buf[4096]; 85static char input_buf[4096];
86static char filename[PATH_MAX+1] = ".config"; 86static char filename[PATH_MAX+1] = ".config";
87static char *args[1024], **argptr = args; 87static char *args[1024], **argptr = args;
88static int indent = 0; 88static int indent = 0;
89static struct termios ios_org; 89static struct termios ios_org;
90static int rows, cols; 90static int rows, cols;
91static struct menu *current_menu; 91struct menu *current_menu;
92static int child_count; 92static int child_count;
93static int do_resize; 93static int do_resize;
94static int single_menu_mode; 94static int single_menu_mode;
95 95
96static void conf(struct menu *menu); 96static void conf(struct menu *menu);
97static void conf_choice(struct menu *menu); 97static void conf_choice(struct menu *menu);
98static void conf_string(struct menu *menu); 98static void conf_string(struct menu *menu);
99static void conf_load(void); 99static void conf_load(void);
100static void conf_save(void); 100static void conf_save(void);
101static void show_textbox(const char *title, const char *text, int r, int c); 101static void show_textbox(const char *title, const char *text, int r, int c);
102static void show_helptext(const char *title, const char *text); 102static void show_helptext(const char *title, const char *text);
103static void show_help(struct menu *menu); 103static void show_help(struct menu *menu);
104static void show_readme(void); 104static void show_readme(void);
105 105
106static void cprint_init(void); 106static void cprint_init(void);
107static int cprint1(const char *fmt, ...); 107static int cprint1(const char *fmt, ...);
108static void cprint_done(void); 108static void cprint_done(void);
109static int cprint(const char *fmt, ...); 109static int cprint(const char *fmt, ...);
110 110
111static void init_wsize(void) 111static void init_wsize(void)
112{ 112{
113 struct winsize ws; 113 struct winsize ws;
114 char *env; 114 char *env;
115 115
116 if (ioctl(1, TIOCGWINSZ, &ws) == -1) { 116 if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
117 rows = 24; 117 rows = 24;
118 cols = 80; 118 cols = 80;
119 } else { 119 } else {
120 rows = ws.ws_row; 120 rows = ws.ws_row;
121 cols = ws.ws_col; 121 cols = ws.ws_col;
122 if (!rows) { 122 if (!rows) {
123 env = getenv("LINES"); 123 env = getenv("LINES");
124 if (env) 124 if (env)
125 rows = atoi(env); 125 rows = atoi(env);
126 if (!rows) 126 if (!rows)
127 rows = 24; 127 rows = 24;
128 } 128 }
129 if (!cols) { 129 if (!cols) {
130 env = getenv("COLUMNS"); 130 env = getenv("COLUMNS");
131 if (env) 131 if (env)
132 cols = atoi(env); 132 cols = atoi(env);
133 if (!cols) 133 if (!cols)
134 cols = 80; 134 cols = 80;
135 } 135 }
136 } 136 }
137 137
138 if (rows < 19 || cols < 80) { 138 if (rows < 19 || cols < 80) {
139 fprintf(stderr, "Your display is too small to run Menuconfig!\n"); 139 fprintf(stderr, "Your display is too small to run Menuconfig!\n");
140 fprintf(stderr, "It must be at least 19 lines by 80 columns.\n"); 140 fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
141 exit(1); 141 exit(1);
142 } 142 }
143 143
144 rows -= 4; 144 rows -= 4;
145 cols -= 5; 145 cols -= 5;
146} 146}
147 147
148static void cprint_init(void) 148static void cprint_init(void)
149{ 149{
150 char *env = getenv("LXDIALOG"); 150 char *env = getenv("LXDIALOG");
151 bufptr = buf; 151 bufptr = buf;
152 argptr = args; 152 argptr = args;
153 memset(args, 0, sizeof(args)); 153 memset(args, 0, sizeof(args));
154 indent = 0; 154 indent = 0;
155 child_count = 0; 155 child_count = 0;
156 if(env != NULL) { 156 if(env != NULL) {
157 cprint(env); 157 cprint(env);
158 } else { 158 } else {
159 cprint("./scripts/lxdialog/lxdialog"); 159 cprint("./scripts/lxdialog/lxdialog");
160 } 160 }
161 cprint("--backtitle"); 161 cprint("--backtitle");
162 cprint(menu_backtitle); 162 cprint(menu_backtitle);
163} 163}
164 164
165static int cprint1(const char *fmt, ...) 165static int cprint1(const char *fmt, ...)
166{ 166{
167 va_list ap; 167 va_list ap;
168 int res; 168 int res;
169 169
170 if (!*argptr) 170 if (!*argptr)
171 *argptr = bufptr; 171 *argptr = bufptr;
172 va_start(ap, fmt); 172 va_start(ap, fmt);
173 res = vsprintf(bufptr, fmt, ap); 173 res = vsprintf(bufptr, fmt, ap);
174 va_end(ap); 174 va_end(ap);
175 bufptr += res; 175 bufptr += res;
176 176
177 return res; 177 return res;
178} 178}
179 179
180static void cprint_done(void) 180static void cprint_done(void)
181{ 181{
182 *bufptr++ = 0; 182 *bufptr++ = 0;
183 argptr++; 183 argptr++;
184} 184}
185 185
186static int cprint(const char *fmt, ...) 186static int cprint(const char *fmt, ...)
187{ 187{
188 va_list ap; 188 va_list ap;
189 int res; 189 int res;
190 190
191 *argptr++ = bufptr; 191 *argptr++ = bufptr;
192 va_start(ap, fmt); 192 va_start(ap, fmt);
193 res = vsprintf(bufptr, fmt, ap); 193 res = vsprintf(bufptr, fmt, ap);
194 va_end(ap); 194 va_end(ap);
195 bufptr += res; 195 bufptr += res;
196 *bufptr++ = 0; 196 *bufptr++ = 0;
197 197
198 return res; 198 return res;
199} 199}
200 200
201pid_t pid; 201pid_t pid;
202 202
203static void winch_handler(int sig) 203static void winch_handler(int sig)
204{ 204{
205 if (!do_resize) { 205 if (!do_resize) {
206 kill(pid, SIGINT); 206 kill(pid, SIGINT);
207 do_resize = 1; 207 do_resize = 1;
208 } 208 }
209} 209}
210 210
211static int exec_conf(void) 211static int exec_conf(void)
212{ 212{
213 int pipefd[2], stat, size; 213 int pipefd[2], stat, size;
214 struct sigaction sa; 214 struct sigaction sa;
215 sigset_t sset, osset; 215 sigset_t sset, osset;
216 216
217 sigemptyset(&sset); 217 sigemptyset(&sset);
218 sigaddset(&sset, SIGINT); 218 sigaddset(&sset, SIGINT);
219 sigprocmask(SIG_BLOCK, &sset, &osset); 219 sigprocmask(SIG_BLOCK, &sset, &osset);
220 220
221 signal(SIGINT, SIG_DFL); 221 signal(SIGINT, SIG_DFL);
222 222
223 sa.sa_handler = winch_handler; 223 sa.sa_handler = winch_handler;
224 sigemptyset(&sa.sa_mask); 224 sigemptyset(&sa.sa_mask);
225 sa.sa_flags = SA_RESTART; 225 sa.sa_flags = SA_RESTART;
226 sigaction(SIGWINCH, &sa, NULL); 226 sigaction(SIGWINCH, &sa, NULL);
227 227
228 *argptr++ = NULL; 228 *argptr++ = NULL;
229 229
230 pipe(pipefd); 230 pipe(pipefd);
231 pid = fork(); 231 pid = fork();
232 if (pid == 0) { 232 if (pid == 0) {
233 sigprocmask(SIG_SETMASK, &osset, NULL); 233 sigprocmask(SIG_SETMASK, &osset, NULL);
234 dup2(pipefd[1], 2); 234 dup2(pipefd[1], 2);
235 close(pipefd[0]); 235 close(pipefd[0]);
236 close(pipefd[1]); 236 close(pipefd[1]);
237 execv(args[0], args); 237 execv(args[0], args);
238 _exit(EXIT_FAILURE); 238 _exit(EXIT_FAILURE);
239 } 239 }
240 240
241 close(pipefd[1]); 241 close(pipefd[1]);
242 bufptr = input_buf; 242 bufptr = input_buf;
243 while (1) { 243 while (1) {
244 size = input_buf + sizeof(input_buf) - bufptr; 244 size = input_buf + sizeof(input_buf) - bufptr;
245 size = read(pipefd[0], bufptr, size); 245 size = read(pipefd[0], bufptr, size);
246 if (size <= 0) { 246 if (size <= 0) {
247 if (size < 0) { 247 if (size < 0) {
248 if (errno == EINTR || errno == EAGAIN) 248 if (errno == EINTR || errno == EAGAIN)
249 continue; 249 continue;
250 perror("read"); 250 perror("read");
251 } 251 }
252 break; 252 break;
253 } 253 }
254 bufptr += size; 254 bufptr += size;
255 } 255 }
256 *bufptr++ = 0; 256 *bufptr++ = 0;
257 close(pipefd[0]); 257 close(pipefd[0]);
258 waitpid(pid, &stat, 0); 258 waitpid(pid, &stat, 0);
259 259
260 if (do_resize) { 260 if (do_resize) {
261 init_wsize(); 261 init_wsize();
262 do_resize = 0; 262 do_resize = 0;
263 sigprocmask(SIG_SETMASK, &osset, NULL); 263 sigprocmask(SIG_SETMASK, &osset, NULL);
264 return -1; 264 return -1;
265 } 265 }
266 if (WIFSIGNALED(stat)) { 266 if (WIFSIGNALED(stat)) {
267 printf("\finterrupted(%d)\n", WTERMSIG(stat)); 267 printf("\finterrupted(%d)\n", WTERMSIG(stat));
268 exit(1); 268 exit(1);
269 } 269 }
270#if 0 270#if 0
271 printf("\fexit state: %d\nexit data: '%s'\n", WEXITSTATUS(stat), input_buf); 271 printf("\fexit state: %d\nexit data: '%s'\n", WEXITSTATUS(stat), input_buf);
272 sleep(1); 272 sleep(1);
273#endif 273#endif
274 sigpending(&sset); 274 sigpending(&sset);
275 if (sigismember(&sset, SIGINT)) { 275 if (sigismember(&sset, SIGINT)) {
276 printf("\finterrupted\n"); 276 printf("\finterrupted\n");
277 exit(1); 277 exit(1);
278 } 278 }
279 sigprocmask(SIG_SETMASK, &osset, NULL); 279 sigprocmask(SIG_SETMASK, &osset, NULL);
280 280
281 return WEXITSTATUS(stat); 281 return WEXITSTATUS(stat);
282} 282}
283 283
284static void build_conf(struct menu *menu) 284static void build_conf(struct menu *menu)
285{ 285{
286 struct symbol *sym; 286 struct symbol *sym;
287 struct property *prop; 287 struct property *prop;
288 struct menu *child; 288 struct menu *child;
289 int type, tmp, doint = 2; 289 int type, tmp, doint = 2;
290 tristate val; 290 tristate val;
291 char ch; 291 char ch;
292 292
293 if (!menu_is_visible(menu)) 293 if (!menu_is_visible(menu))
294 return; 294 return;
295 295
296 sym = menu->sym; 296 sym = menu->sym;
297 prop = menu->prompt; 297 prop = menu->prompt;
298 if (!sym) { 298 if (!sym) {
299 if (prop && menu != current_menu) { 299 if (prop && menu != current_menu) {
300 const char *prompt = menu_get_prompt(menu); 300 const char *prompt = menu_get_prompt(menu);
301 switch (prop->type) { 301 switch (prop->type) {
302 case P_MENU: 302 case P_MENU:
303 child_count++; 303 child_count++;
304 cprint("m%p", menu); 304 cprint("m%p", menu);
305 305
306 if (single_menu_mode) { 306 if (single_menu_mode) {
307 cprint1("%s%*c%s", 307 cprint1("%s%*c%s",
308 menu->data ? "-->" : "++>", 308 menu->data ? "-->" : "++>",
309 indent + 1, ' ', prompt); 309 indent + 1, ' ', prompt);
310 } else 310 } else
311 cprint1(" %*c%s --->", indent + 1, ' ', prompt); 311 cprint1(" %*c%s --->", indent + 1, ' ', prompt);
312 312
313 cprint_done(); 313 cprint_done();
314 if (single_menu_mode && menu->data) 314 if (single_menu_mode && menu->data)
315 goto conf_childs; 315 goto conf_childs;
316 return; 316 return;
317 default: 317 default:
318 if (prompt) { 318 if (prompt) {
319 child_count++; 319 child_count++;
320 cprint(":%p", menu); 320 cprint(":%p", menu);
321 cprint("---%*c%s", indent + 1, ' ', prompt); 321 cprint("---%*c%s", indent + 1, ' ', prompt);
322 } 322 }
323 } 323 }
324 } else 324 } else
325 doint = 0; 325 doint = 0;
326 goto conf_childs; 326 goto conf_childs;
327 } 327 }
328 328
329 type = sym_get_type(sym); 329 type = sym_get_type(sym);
330 if (sym_is_choice(sym)) { 330 if (sym_is_choice(sym)) {
331 struct symbol *def_sym = sym_get_choice_value(sym); 331 struct symbol *def_sym = sym_get_choice_value(sym);
332 struct menu *def_menu = NULL; 332 struct menu *def_menu = NULL;
333 333
334 child_count++; 334 child_count++;
335 for (child = menu->list; child; child = child->next) { 335 for (child = menu->list; child; child = child->next) {
336 if (menu_is_visible(child) && child->sym == def_sym) 336 if (menu_is_visible(child) && child->sym == def_sym)
337 def_menu = child; 337 def_menu = child;
338 } 338 }
339 339
340 val = sym_get_tristate_value(sym); 340 val = sym_get_tristate_value(sym);
341 if (sym_is_changable(sym)) { 341 if (sym_is_changable(sym)) {
342 cprint("t%p", menu); 342 cprint("t%p", menu);
343 switch (type) { 343 switch (type) {
344 case S_BOOLEAN: 344 case S_BOOLEAN:
345 cprint1("[%c]", val == no ? ' ' : '*'); 345 cprint1("[%c]", val == no ? ' ' : '*');
346 break; 346 break;
347 case S_TRISTATE: 347 case S_TRISTATE:
348 switch (val) { 348 switch (val) {
349 case yes: ch = '*'; break; 349 case yes: ch = '*'; break;
350 case mod: ch = 'M'; break; 350 case mod: ch = 'M'; break;
351 default: ch = ' '; break; 351 default: ch = ' '; break;
352 } 352 }
353 cprint1("<%c>", ch); 353 cprint1("<%c>", ch);
354 break; 354 break;
355 } 355 }
356 } else { 356 } else {
357 cprint("%c%p", def_menu ? 't' : ':', menu); 357 cprint("%c%p", def_menu ? 't' : ':', menu);
358 cprint1(" "); 358 cprint1(" ");
359 } 359 }
360 360
361 cprint1("%*c%s", indent + 1, ' ', menu_get_prompt(menu)); 361 cprint1("%*c%s", indent + 1, ' ', menu_get_prompt(menu));
362 if (val == yes) { 362 if (val == yes) {
363 if (def_menu) { 363 if (def_menu) {
364 cprint1(" (%s)", menu_get_prompt(def_menu)); 364 cprint1(" (%s)", menu_get_prompt(def_menu));
365 cprint1(" --->"); 365 cprint1(" --->");
366 cprint_done(); 366 cprint_done();
367 if (def_menu->list) { 367 if (def_menu->list) {
368 indent += 2; 368 indent += 2;
369 build_conf(def_menu); 369 build_conf(def_menu);
370 indent -= 2; 370 indent -= 2;
371 } 371 }
372 } else 372 } else
373 cprint_done(); 373 cprint_done();
374 return; 374 return;
375 } 375 }
376 cprint_done(); 376 cprint_done();
377 } else { 377 } else {
378 if (menu == current_menu) { 378 if (menu == current_menu) {
379 cprint(":%p", menu); 379 cprint(":%p", menu);
380 cprint("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); 380 cprint("---%*c%s", indent + 1, ' ', menu_get_prompt(menu));
381 goto conf_childs; 381 goto conf_childs;
382 } 382 }
383 child_count++; 383 child_count++;
384 val = sym_get_tristate_value(sym); 384 val = sym_get_tristate_value(sym);
385 if (sym_is_choice_value(sym) && val == yes) { 385 if (sym_is_choice_value(sym) && val == yes) {
386 cprint(":%p", menu); 386 cprint(":%p", menu);
387 cprint1(" "); 387 cprint1(" ");
388 } else { 388 } else {
389 switch (type) { 389 switch (type) {
390 case S_BOOLEAN: 390 case S_BOOLEAN:
391 cprint("t%p", menu); 391 cprint("t%p", menu);
392 if (sym_is_changable(sym)) 392 if (sym_is_changable(sym))
393 cprint1("[%c]", val == no ? ' ' : '*'); 393 cprint1("[%c]", val == no ? ' ' : '*');
394 else 394 else
395 cprint1("---"); 395 cprint1("---");
396 break; 396 break;
397 case S_TRISTATE: 397 case S_TRISTATE:
398 cprint("t%p", menu); 398 cprint("t%p", menu);
399 switch (val) { 399 switch (val) {
400 case yes: ch = '*'; break; 400 case yes: ch = '*'; break;
401 case mod: ch = 'M'; break; 401 case mod: ch = 'M'; break;
402 default: ch = ' '; break; 402 default: ch = ' '; break;
403 } 403 }
404 if (sym_is_changable(sym)) 404 if (sym_is_changable(sym))
405 cprint1("<%c>", ch); 405 cprint1("<%c>", ch);
406 else 406 else
407 cprint1("---"); 407 cprint1("---");
408 break; 408 break;
409 default: 409 default:
410 cprint("s%p", menu); 410 cprint("s%p", menu);
411 tmp = cprint1("(%s)", sym_get_string_value(sym)); 411 tmp = cprint1("(%s)", sym_get_string_value(sym));
412 tmp = indent - tmp + 4; 412 tmp = indent - tmp + 4;
413 if (tmp < 0) 413 if (tmp < 0)
414 tmp = 0; 414 tmp = 0;
415 cprint1("%*c%s%s", tmp, ' ', menu_get_prompt(menu), 415 cprint1("%*c%s%s", tmp, ' ', menu_get_prompt(menu),
416 (sym_has_value(sym) || !sym_is_changable(sym)) ? 416 (sym_has_value(sym) || !sym_is_changable(sym)) ?
417 "" : " (NEW)"); 417 "" : " (NEW)");
418 cprint_done(); 418 cprint_done();
419 goto conf_childs; 419 goto conf_childs;
420 } 420 }
421 } 421 }
422 cprint1("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), 422 cprint1("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu),
423 (sym_has_value(sym) || !sym_is_changable(sym)) ? 423 (sym_has_value(sym) || !sym_is_changable(sym)) ?
424 "" : " (NEW)"); 424 "" : " (NEW)");
425 if (menu->prompt->type == P_MENU) { 425 if (menu->prompt->type == P_MENU) {
426 cprint1(" --->"); 426 cprint1(" --->");
427 cprint_done(); 427 cprint_done();
428 return; 428 return;
429 } 429 }
430 cprint_done(); 430 cprint_done();
431 } 431 }
432 432
433conf_childs: 433conf_childs:
434 indent += doint; 434 indent += doint;
435 for (child = menu->list; child; child = child->next) 435 for (child = menu->list; child; child = child->next)
436 build_conf(child); 436 build_conf(child);
437 indent -= doint; 437 indent -= doint;
438} 438}
439 439
440static void conf(struct menu *menu) 440static void conf(struct menu *menu)
441{ 441{
442 struct menu *submenu; 442 struct menu *submenu;
443 const char *prompt = menu_get_prompt(menu); 443 const char *prompt = menu_get_prompt(menu);
444 struct symbol *sym; 444 struct symbol *sym;
445 char active_entry[40]; 445 char active_entry[40];
446 int stat, type, i; 446 int stat, type, i;
447 447
448 unlink("lxdialog.scrltmp"); 448 unlink("lxdialog.scrltmp");
449 active_entry[0] = 0; 449 active_entry[0] = 0;
450 while (1) { 450 while (1) {
451 cprint_init(); 451 cprint_init();
452 cprint("--title"); 452 cprint("--title");
453 cprint("%s", prompt ? prompt : "Main Menu"); 453 cprint("%s", prompt ? prompt : "Main Menu");
454 cprint("--menu"); 454 cprint("--menu");
455 cprint(menu_instructions); 455 cprint(menu_instructions);
456 cprint("%d", rows); 456 cprint("%d", rows);
457 cprint("%d", cols); 457 cprint("%d", cols);
458 cprint("%d", rows - 10); 458 cprint("%d", rows - 10);
459 cprint("%s", active_entry); 459 cprint("%s", active_entry);
460 current_menu = menu; 460 current_menu = menu;
461 build_conf(menu); 461 build_conf(menu);
462 if (!child_count) 462 if (!child_count)
463 break; 463 break;
464 if (menu == &rootmenu) { 464 if (menu == &rootmenu) {
465 cprint(":"); 465 cprint(":");
466 cprint("--- "); 466 cprint("--- ");
467 cprint("L"); 467 cprint("L");
468 cprint(" Load an Alternate Configuration File"); 468 cprint(" Load an Alternate Configuration File");
469 cprint("S"); 469 cprint("S");
470 cprint(" Save Configuration to an Alternate File"); 470 cprint(" Save Configuration to an Alternate File");
471 } 471 }
472 stat = exec_conf(); 472 stat = exec_conf();
473 if (stat < 0) 473 if (stat < 0)
474 continue; 474 continue;
475 475