aboutsummaryrefslogtreecommitdiff
path: root/scripts/permute/permute.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/permute/permute.c')
-rw-r--r--scripts/permute/permute.c88
1 files changed, 66 insertions, 22 deletions
diff --git a/scripts/permute/permute.c b/scripts/permute/permute.c
index fc1221c..e3c6810 100644
--- a/scripts/permute/permute.c
+++ b/scripts/permute/permute.c
@@ -1,19 +1,22 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stdbool.h>
#include <string.h>
#include <locale.h>
#include <libintl.h>
-
#include <kconfig/lkc.h>
#include <macros.h>
#include <build_files.h>
-
+#include "menudata.h"
+#include "dotconf.h"
#define INPUT_SIZE 1024
-
int verbose_level;
-char *file, *folder;
+char *file;
-void printf_help();
+bool reqsave;
+
+void printf_help(void);
+void exit_save(void);
int main(int argc, char **argv) {
verbose_level = 1;
@@ -23,8 +26,6 @@ int main(int argc, char **argv) {
verbose_level++;
else if (file == NULL)
file = argv[i];
- else if (folder == NULL)
- folder = argv[i];
else {
Eprintf("Unknown parameter: %s\n", argv[i]);
exit(1);
@@ -35,10 +36,6 @@ int main(int argc, char **argv) {
Eprintf("No Kconfig input file specified\n");
exit(2);
}
- if (folder == NULL) {
- Eprintf("No output folder specified\n");
- exit(3);
- }
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -47,27 +44,44 @@ int main(int argc, char **argv) {
conf_parse(file);
conf_read(".config");
+ if (!dotconfig_read())
+ reqsave = true;
+ else
+ reqsave = false;
+
struct menu *wroot, *wmenu, *wwmenu;
wroot = &rootmenu;
- unsigned menucount;
+ int menucount;
char *input;
int inputi;
input = malloc(INPUT_SIZE * sizeof(char));
printf_help();
+ rootmenu.data = menudata_new();
while (1) {
printf("\n%s\n", wroot->prompt->text);
wmenu = wroot->list;
menucount = 0;
while (wmenu != NULL) {
- if (wmenu->prompt != NULL) {
- if (wmenu->list == NULL)
- printf("%3d<X>: %s\n", ++menucount,
- wmenu->prompt->text);
+ if (wmenu->prompt != NULL
+ && (wmenu->sym == NULL || wmenu->sym->type == S_BOOLEAN
+ || wmenu->sym->type == S_TRISTATE
+ || wmenu->sym->type == S_OTHER)) {
+ if (wmenu->data == NULL)
+ wmenu->data = menudata_new();
+ printf("%3d", ++menucount);
+ if (((struct menudata *) wmenu->data)->permute) {
+ printf("<O>");
+ } else if (((struct menudata *) wmenu->data)->subpermute) {
+ printf("<->");
+ } else {
+ printf("<X>");
+ }
+ if (wmenu->sym == NULL || sym_is_choice(wmenu->sym))
+ printf(" %s -->\n", wmenu->prompt->text);
else
- printf("%3d<X>: %s -->\n", ++menucount,
- wmenu->prompt->text);
+ printf(" %s\n", wmenu->prompt->text);
}
wmenu = wmenu->next;
}
@@ -85,7 +99,11 @@ int main(int argc, char **argv) {
int y = 0;
wwmenu = wroot->list;
while (1) {
- if (wwmenu->prompt != NULL)
+ if (wwmenu->prompt != NULL
+ && (wwmenu->sym == NULL
+ || wwmenu->sym->type == S_BOOLEAN
+ || wwmenu->sym->type == S_TRISTATE
+ || wwmenu->sym->type == S_OTHER))
y++;
if (y >= inputi)
break;
@@ -93,8 +111,14 @@ int main(int argc, char **argv) {
}
break;
case 'u':
- wmenu = wmenu->parent;
+ if (wroot->parent == NULL)
+ goto input;
+ wroot = wroot->parent;
break;
+ case 's':
+ reqsave = false;
+ dotconfig_write();
+ printf("Configuration saved...\n");
case 'r':
break;
case 'q':
@@ -106,27 +130,47 @@ int main(int argc, char **argv) {
}
switch (input[0]) {
case 'e':
- wroot = wwmenu;
+ if (wwmenu->list != NULL)
+ wroot = wwmenu;
+ else
+ goto input;
break;
case 'v':
+ menudata_set_permute(wwmenu, true);
+ reqsave = true;
break;
case 'f':
+ menudata_set_permute(wwmenu, false);
+ reqsave = true;
break;
}
}
quit:
+ exit_save();
return 0;
}
-void printf_help() {
+void printf_help(void) {
printf("As input are accepted these commands:\n");
printf(" e <NUM> Enter menu according to number.\n");
printf(" u Go to previous upper menu.\n");
printf(" v <NUM> Set menu and all its submenus as variable.\n");
printf(" f <NUM> Set menu and all its submenus as fixed.\n");
+ printf(" s Save settings.\n");
printf(" r Reprint menu.\n");
printf(" h Prints this text.\n");
printf(" q Quit this program\n");
}
+
+void exit_save(void) {
+ if (!reqsave)
+ return;
+ printf("Unsaved chages. Save (y/N): ");
+ int ch = fgetc(stdin);
+ if (ch == 'y' || ch == 'Y') {
+ dotconfig_write();
+ printf("Configuration saved.\n");
+ }
+}