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 <libgen.h> Err bitreich.org 70
i #include <wchar.h> 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
.
Response:
text/plain