Introduction
Introduction Statistics Contact Development Disclaimer Help
Adding more flexible ARGBEGIN parameter handling. - thinglaunch - A simple comm…
git clone git://bitreich.org/thinglaunch
Log
Files
Refs
Tags
LICENSE
---
commit 1d85b767bee1ecfbb90bf78ad3a990de84b0fb25
parent 7445d3804d48a3cd0e1f2348dea8c354a9df3b49
Author: Christoph Lohmann <[email protected]>
Date: Sat, 4 Aug 2012 22:16:33 +0200
Adding more flexible ARGBEGIN parameter handling.
Diffstat:
M Makefile | 2 +-
A arg.h | 41 +++++++++++++++++++++++++++++…
M thinglaunch.c | 44 +++++++++++++----------------…
3 files changed, 61 insertions(+), 26 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -39,7 +39,7 @@ clean:
dist: clean
@echo creating dist tarball
@mkdir -p ${NAME}-${VERSION}
- @cp -R LICENSE LICENSE.orig ${NAME}.1 Makefile config.mk \
+ @cp -R LICENSE LICENSE.orig arg.h ${NAME}.1 Makefile config.mk \
${SRC} *.h ${NAME}-${VERSION}
@tar -cf ${NAME}-${VERSION}.tar ${NAME}-${VERSION}
@gzip ${NAME}-${VERSION}.tar
diff --git a/arg.h b/arg.h
@@ -0,0 +1,41 @@
+/*
+ * Copy me if you can.
+ * by 20h
+ */
+
+#ifndef __ARG_H__
+#define __ARG_H__
+
+extern char *argv0;
+
+#define USED(x) ((void)(x))
+
+#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
+ argv[0] && argv[0][1]\
+ && argv[0][0] == '-';\
+ argc--, argv++) {\
+ char _argc;\
+ char **_argv;\
+ if (argv[0][1] == '-' && argv[0][2] == '\0') {\
+ argv++;\
+ argc--;\
+ break;\
+ }\
+ for (argv[0]++, _argv = argv; argv[0][0];\
+ argv[0]++) {\
+ if (_argv != argv)\
+ break;\
+ _argc = argv[0][0];\
+ switch (_argc)
+
+#define ARGEND }\
+ USED(_argc);\
+ }\
+ USED(argv);\
+ USED(argc);
+
+#define EARGF(x) ((argv[1] == NULL)? ((x), abort(), (char *)0) :\
+ (argc--, argv++, argv[0]))
+
+#endif
+
diff --git a/thinglaunch.c b/thinglaunch.c
@@ -20,6 +20,7 @@
#include <libgen.h>
#include <wchar.h>
+#include "arg.h"
#include "config.h"
unsigned long getcolor(const char *colstr);
@@ -46,6 +47,8 @@ int screen, issecret = 0, tostdout = 0;
unsigned long fgcol, bgcol;
static char *name = "thinglaunch";
+char *argv0;
+
#define MAXCMD 255
#define WINWIDTH 640
#define WINHEIGHT 25
@@ -56,7 +59,7 @@ wchar_t secret[MAXCMD+1];
char cbuf[MAXCMD*4+1];
void
-usage(char *argv0)
+usage(void)
{
fprintf(stderr, "usage: %s [-hos] [-p prompt]\n", argv0);
exit(1);
@@ -65,8 +68,6 @@ usage(char *argv0)
int
main(int argc, char *argv[])
{
- int i;
-
if (strstr(argv[0], "thingaskpass")) {
issecret = 1;
tostdout = 1;
@@ -83,28 +84,21 @@ main(int argc, char *argv[])
}
if (argc > 1) {
- for (i = 1; argv[i]; i++) {
- if (argv[i][0] == '-') {
- switch (argv[i][1]) {
- case 'o':
- tostdout = 1;
- break;
- case 's':
- issecret = 1;
- break;
- case 'p':
- if (!argv[i+1])
- usage(argv[0]);
- prompt = argv[i+1];
- i++;
- break;
- default:
- case 'h':
- usage(argv[0]);
- break;
- }
- }
- }
+ ARGBEGIN {
+ case 'o':
+ tostdout = 1;
+ break;
+ case 's':
+ issecret = 1;
+ break;
+ case 'p':
+ prompt = EARGF(usage());
+ break;
+ default:
+ case 'h':
+ usage();
+ break;
+ } ARGEND;
}
bzero(command, sizeof(command));
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.