aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2015-05-06 11:55:16 +0200
committerKarel Kočí <cynerd@email.cz>2015-05-07 13:25:59 +0200
commit96b508f54e069e1b3ae5a4a9f8ebf122a6dd76bf (patch)
tree4ec908d06872f228b081c0932874c071b67962c8
parent4e2a6b5219f469c4b05628a0133340ba2fa2d807 (diff)
downloadlinux-conf-perf-96b508f54e069e1b3ae5a4a9f8ebf122a6dd76bf.tar.gz
linux-conf-perf-96b508f54e069e1b3ae5a4a9f8ebf122a6dd76bf.tar.bz2
linux-conf-perf-96b508f54e069e1b3ae5a4a9f8ebf122a6dd76bf.zip
Add initial implementation of setpermute
-rw-r--r--scripts/setpermute/Makefile23
-rw-r--r--scripts/setpermute/constlist.h7
-rw-r--r--scripts/setpermute/menudata.h16
-rw-r--r--scripts/setpermute/permutelist.h17
-rwxr-xr-xscripts/setpermute/setpermutebin0 -> 130181 bytes
-rw-r--r--scripts/setpermute/setpermute.c132
6 files changed, 195 insertions, 0 deletions
diff --git a/scripts/setpermute/Makefile b/scripts/setpermute/Makefile
new file mode 100644
index 0000000..734a12e
--- /dev/null
+++ b/scripts/setpermute/Makefile
@@ -0,0 +1,23 @@
+MAKEFLAGS += --no-builtin-rules
+.PHONY: all clean
+.SUFFIXES:
+
+all: setpermute
+
+KCONFIG_PREFIX = ../shared/kconfig
+include $(KCONFIG_PREFIX)/files.mk
+
+SRC = setpermute.c
+OBJ = $(patsubst %.c,%.o,$(SRC))
+CFLAGS = -O0 -Wall -ggdb -DDEBUG
+INCLUDES = -I../shared
+
+%.o: %.c
+ gcc -c $(CFLAGS) -o $@ $^ $(INCLUDES)
+
+setpermute: $(OBJ) $(KCONFIG_OBJ)
+ gcc -o $@ $^
+
+clean::
+ $(RM) $(OBJ)
+ $(RM) setpermute
diff --git a/scripts/setpermute/constlist.h b/scripts/setpermute/constlist.h
new file mode 100644
index 0000000..01f172a
--- /dev/null
+++ b/scripts/setpermute/constlist.h
@@ -0,0 +1,7 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifndef _CONSTLIST_H_
+#define _CONSTLIST_H_
+
+#endif /* _CONSTLIST_H_ */
diff --git a/scripts/setpermute/menudata.h b/scripts/setpermute/menudata.h
new file mode 100644
index 0000000..1369106
--- /dev/null
+++ b/scripts/setpermute/menudata.h
@@ -0,0 +1,16 @@
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <kconfig/lkc.h>
+
+#ifndef _MENUDATA_H_
+#define _MENUDATA_H_
+
+struct menudata {
+ bool permute;
+ bool subpermute;
+};
+
+bool menudata_cal_subpermute(struct menu *m);
+
+#endif /* _MENUDATA_H_ */
diff --git a/scripts/setpermute/permutelist.h b/scripts/setpermute/permutelist.h
new file mode 100644
index 0000000..725f6d6
--- /dev/null
+++ b/scripts/setpermute/permutelist.h
@@ -0,0 +1,17 @@
+#include <stdlib.h>
+#include <stdbool.h>
+#include <kconfig/lkc.h>
+
+#ifndef _PERMUTELIST_H_
+#define _PERMUTELIST_H_
+
+struct permutelist {
+ struct menu *permute;
+ size_t size, pos;
+};
+
+void permutelist_add(struct menu *m);
+void permutelist_remove(struct menu *m);
+bool permutelist_is_permute(struct menu *m);
+
+#endif /* _PERMUTELIST_H_ */
diff --git a/scripts/setpermute/setpermute b/scripts/setpermute/setpermute
new file mode 100755
index 0000000..f568a9d
--- /dev/null
+++ b/scripts/setpermute/setpermute
Binary files differ
diff --git a/scripts/setpermute/setpermute.c b/scripts/setpermute/setpermute.c
new file mode 100644
index 0000000..fc1221c
--- /dev/null
+++ b/scripts/setpermute/setpermute.c
@@ -0,0 +1,132 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+#include <libintl.h>
+
+#include <kconfig/lkc.h>
+#include <macros.h>
+#include <build_files.h>
+
+#define INPUT_SIZE 1024
+
+int verbose_level;
+char *file, *folder;
+
+void printf_help();
+
+int main(int argc, char **argv) {
+ verbose_level = 1;
+ int i;
+ for (i = 1; i < argc; i++) {
+ if (!strcmp(argv[i], "-v"))
+ 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);
+ }
+ }
+
+ if (file == NULL) {
+ 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);
+ textdomain(PACKAGE);
+
+ conf_parse(file);
+ conf_read(".config");
+
+ struct menu *wroot, *wmenu, *wwmenu;
+ wroot = &rootmenu;
+ unsigned menucount;
+ char *input;
+ int inputi;
+ input = malloc(INPUT_SIZE * sizeof(char));
+
+ printf_help();
+
+ 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);
+ else
+ printf("%3d<X>: %s -->\n", ++menucount,
+ wmenu->prompt->text);
+ }
+ wmenu = wmenu->next;
+ }
+
+ input:
+ printf("Input: ");
+ fgets(input, INPUT_SIZE, stdin);
+ switch (input[0]) {
+ case 'e':
+ case 'v':
+ case 'f':
+ inputi = atoi(input + 1);
+ if (inputi <= 0 && inputi > menucount)
+ goto input;
+ int y = 0;
+ wwmenu = wroot->list;
+ while (1) {
+ if (wwmenu->prompt != NULL)
+ y++;
+ if (y >= inputi)
+ break;
+ wwmenu = wwmenu->next;
+ }
+ break;
+ case 'u':
+ wmenu = wmenu->parent;
+ break;
+ case 'r':
+ break;
+ case 'q':
+ goto quit;
+ case 'h':
+ printf_help();
+ default:
+ goto input;
+ }
+ switch (input[0]) {
+ case 'e':
+ wroot = wwmenu;
+ break;
+ case 'v':
+ break;
+ case 'f':
+ break;
+ }
+ }
+
+ quit:
+
+ return 0;
+}
+
+void printf_help() {
+ 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(" r Reprint menu.\n");
+ printf(" h Prints this text.\n");
+ printf(" q Quit this program\n");
+}