From 96b508f54e069e1b3ae5a4a9f8ebf122a6dd76bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 6 May 2015 11:55:16 +0200 Subject: Add initial implementation of setpermute --- scripts/setpermute/Makefile | 23 +++++++ scripts/setpermute/constlist.h | 7 +++ scripts/setpermute/menudata.h | 16 +++++ scripts/setpermute/permutelist.h | 17 +++++ scripts/setpermute/setpermute | Bin 0 -> 130181 bytes scripts/setpermute/setpermute.c | 132 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 195 insertions(+) create mode 100644 scripts/setpermute/Makefile create mode 100644 scripts/setpermute/constlist.h create mode 100644 scripts/setpermute/menudata.h create mode 100644 scripts/setpermute/permutelist.h create mode 100755 scripts/setpermute/setpermute create mode 100644 scripts/setpermute/setpermute.c 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 +#include + +#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 +#include +#include +#include + +#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 +#include +#include + +#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 Binary files /dev/null and b/scripts/setpermute/setpermute 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 +#include +#include +#include +#include + +#include +#include +#include + +#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: %s\n", ++menucount, + wmenu->prompt->text); + else + printf("%3d: %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 Enter menu according to number.\n"); + printf(" u Go to previous upper menu.\n"); + printf(" v Set menu and all its submenus as variable.\n"); + printf(" f 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"); +} -- cgit v1.2.3