diff options
Diffstat (limited to 'fb')
-rw-r--r-- | fb/fbmenu.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/fb/fbmenu.c b/fb/fbmenu.c index 2deda5f..850cd11 100644 --- a/fb/fbmenu.c +++ b/fb/fbmenu.c @@ -131,10 +131,27 @@ void return_default(int x) { exit(0); } +int filter_argv (int argc, char **argv, char **nargv) { + int i, j=0, k, done; + for (i = 0; i < argc; i++) { + done = 0; + for (k = 0; k < j; k++) { + if (!strcmp(argv[i], nargv[k])) { + done = 1; + } + } + if (done) continue; + nargv[j++] = argv[i]; + } + return j; +} + int main(int argc, char **argv) { int i; int shift = 2; int title = 2; + int nargc; + char *nargv[argc]; if (argc < 4) { usage(); @@ -144,6 +161,12 @@ int main(int argc, char **argv) { exit(0); } deflt = argv[3]; + nargv[0] = argv[2]; + nargc = filter_argv(argc - shift - 1, argv + shift + 1, nargv + 1); + if (nargc == 1) { + printf("\nRESULT=\"%s\"\n", nargv[0]); + exit(0); + } fb = open("/dev/fb0",O_RDWR); if (-1 == fb && getenv("DISPLAY") == NULL) { @@ -151,16 +174,16 @@ int main(int argc, char **argv) { alarm(atoi(argv[1])); do { fprintf(stderr,"\n"); - for (i = 1; i < argc - shift; i++) { - fprintf(stderr,"%d - %s\n", i, argv[i + shift]); + for (i = 0; i < nargc; i++) { + fprintf(stderr,"%d - %s\n", i + 1, nargv[i]); } fprintf(stderr,"\n%s: ", argv[title]); if (!scanf("%d", &i)) scanf("%*s"); - } while (i < 1 || i >= (argc - shift)); - printf("\nRESULT=\"%s\"\n", argv[i + shift]); + } while (i < 1 || i > nargc); + printf("\nRESULT=\"%s\"\n", nargv[i - 1]); } else { gtk_init (&argc, &argv); - do_button_box(window, argc - shift, argv + shift); + do_button_box(window, nargc + 1, nargv); g_timeout_add(atoi(argv[1]) * 1000, (GSourceFunc) return_default, NULL); gtk_main (); } |