iAdding more flexible ARGBEGIN parameter handling. - thinglaunch - A simple command and password promtper for X11. Err bitreich.org 70 hgit clone git://bitreich.org/thinglaunch URL:git://bitreich.org/thinglaunch bitreich.org 70 1Log /scm/thinglaunch/log.gph bitreich.org 70 1Files /scm/thinglaunch/files.gph bitreich.org 70 1Refs /scm/thinglaunch/refs.gph bitreich.org 70 1Tags /scm/thinglaunch/tag bitreich.org 70 1LICENSE /scm/thinglaunch/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 1d85b767bee1ecfbb90bf78ad3a990de84b0fb25 /scm/thinglaunch/commit/1d85b767bee1ecfbb90bf78ad3a990de84b0fb25.gph bitreich.org 70 1parent 7445d3804d48a3cd0e1f2348dea8c354a9df3b49 /scm/thinglaunch/commit/7445d3804d48a3cd0e1f2348dea8c354a9df3b49.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Sat, 4 Aug 2012 22:16:33 +0200 Err bitreich.org 70 i Err bitreich.org 70 iAdding more flexible ARGBEGIN parameter handling. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 2 +- Err bitreich.org 70 i A arg.h | 41 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i M thinglaunch.c | 44 +++++++++++++------------------ Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 61 insertions(+), 26 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/thinglaunch/file/Makefile.gph bitreich.org 70 i@@ -39,7 +39,7 @@ clean: Err bitreich.org 70 i dist: clean Err bitreich.org 70 i @echo creating dist tarball Err bitreich.org 70 i @mkdir -p ${NAME}-${VERSION} Err bitreich.org 70 i- @cp -R LICENSE LICENSE.orig ${NAME}.1 Makefile config.mk \ Err bitreich.org 70 i+ @cp -R LICENSE LICENSE.orig arg.h ${NAME}.1 Makefile config.mk \ Err bitreich.org 70 i ${SRC} *.h ${NAME}-${VERSION} Err bitreich.org 70 i @tar -cf ${NAME}-${VERSION}.tar ${NAME}-${VERSION} Err bitreich.org 70 i @gzip ${NAME}-${VERSION}.tar Err bitreich.org 70 1diff --git a/arg.h b/arg.h /scm/thinglaunch/file/arg.h.gph bitreich.org 70 i@@ -0,0 +1,41 @@ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Copy me if you can. Err bitreich.org 70 i+ * by 20h Err bitreich.org 70 i+ */ Err bitreich.org 70 i+ Err bitreich.org 70 i+#ifndef __ARG_H__ Err bitreich.org 70 i+#define __ARG_H__ Err bitreich.org 70 i+ Err bitreich.org 70 i+extern char *argv0; Err bitreich.org 70 i+ Err bitreich.org 70 i+#define USED(x) ((void)(x)) Err bitreich.org 70 i+ Err bitreich.org 70 i+#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ Err bitreich.org 70 i+ argv[0] && argv[0][1]\ Err bitreich.org 70 i+ && argv[0][0] == '-';\ Err bitreich.org 70 i+ argc--, argv++) {\ Err bitreich.org 70 i+ char _argc;\ Err bitreich.org 70 i+ char **_argv;\ Err bitreich.org 70 i+ if (argv[0][1] == '-' && argv[0][2] == '\0') {\ Err bitreich.org 70 i+ argv++;\ Err bitreich.org 70 i+ argc--;\ Err bitreich.org 70 i+ break;\ Err bitreich.org 70 i+ }\ Err bitreich.org 70 i+ for (argv[0]++, _argv = argv; argv[0][0];\ Err bitreich.org 70 i+ argv[0]++) {\ Err bitreich.org 70 i+ if (_argv != argv)\ Err bitreich.org 70 i+ break;\ Err bitreich.org 70 i+ _argc = argv[0][0];\ Err bitreich.org 70 i+ switch (_argc) Err bitreich.org 70 i+ Err bitreich.org 70 i+#define ARGEND }\ Err bitreich.org 70 i+ USED(_argc);\ Err bitreich.org 70 i+ }\ Err bitreich.org 70 i+ USED(argv);\ Err bitreich.org 70 i+ USED(argc); Err bitreich.org 70 i+ Err bitreich.org 70 i+#define EARGF(x) ((argv[1] == NULL)? ((x), abort(), (char *)0) :\ Err bitreich.org 70 i+ (argc--, argv++, argv[0])) Err bitreich.org 70 i+ Err bitreich.org 70 i+#endif Err bitreich.org 70 i+ Err bitreich.org 70 1diff --git a/thinglaunch.c b/thinglaunch.c /scm/thinglaunch/file/thinglaunch.c.gph bitreich.org 70 i@@ -20,6 +20,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i+#include "arg.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i Err bitreich.org 70 i unsigned long getcolor(const char *colstr); Err bitreich.org 70 i@@ -46,6 +47,8 @@ int screen, issecret = 0, tostdout = 0; Err bitreich.org 70 i unsigned long fgcol, bgcol; Err bitreich.org 70 i static char *name = "thinglaunch"; Err bitreich.org 70 i Err bitreich.org 70 i+char *argv0; Err bitreich.org 70 i+ Err bitreich.org 70 i #define MAXCMD 255 Err bitreich.org 70 i #define WINWIDTH 640 Err bitreich.org 70 i #define WINHEIGHT 25 Err bitreich.org 70 i@@ -56,7 +59,7 @@ wchar_t secret[MAXCMD+1]; Err bitreich.org 70 i char cbuf[MAXCMD*4+1]; Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-usage(char *argv0) Err bitreich.org 70 i+usage(void) Err bitreich.org 70 i { Err bitreich.org 70 i fprintf(stderr, "usage: %s [-hos] [-p prompt]\n", argv0); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i@@ -65,8 +68,6 @@ usage(char *argv0) Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i- int i; Err bitreich.org 70 i- Err bitreich.org 70 i if (strstr(argv[0], "thingaskpass")) { Err bitreich.org 70 i issecret = 1; Err bitreich.org 70 i tostdout = 1; Err bitreich.org 70 i@@ -83,28 +84,21 @@ main(int argc, char *argv[]) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i if (argc > 1) { Err bitreich.org 70 i- for (i = 1; argv[i]; i++) { Err bitreich.org 70 i- if (argv[i][0] == '-') { Err bitreich.org 70 i- switch (argv[i][1]) { Err bitreich.org 70 i- case 'o': Err bitreich.org 70 i- tostdout = 1; Err bitreich.org 70 i- break; Err bitreich.org 70 i- case 's': Err bitreich.org 70 i- issecret = 1; Err bitreich.org 70 i- break; Err bitreich.org 70 i- case 'p': Err bitreich.org 70 i- if (!argv[i+1]) Err bitreich.org 70 i- usage(argv[0]); Err bitreich.org 70 i- prompt = argv[i+1]; Err bitreich.org 70 i- i++; Err bitreich.org 70 i- break; Err bitreich.org 70 i- default: Err bitreich.org 70 i- case 'h': Err bitreich.org 70 i- usage(argv[0]); Err bitreich.org 70 i- break; Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i+ ARGBEGIN { Err bitreich.org 70 i+ case 'o': Err bitreich.org 70 i+ tostdout = 1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 's': Err bitreich.org 70 i+ issecret = 1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'p': Err bitreich.org 70 i+ prompt = EARGF(usage()); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ case 'h': Err bitreich.org 70 i+ usage(); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } ARGEND; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i bzero(command, sizeof(command)); Err bitreich.org 70 .