commit c6b1f05d151e74197ca80c9b6363ebc28ced4951
parent c79e3392413da488eecb2769473989d0c2c861c9
Author: Christoph Lohmann <20h@r-36.net>
Date:   Thu,  9 Feb 2012 18:03:50 +0100
Add '--' and concatenated parameter support.
Diffstat:
| M | tabbed.c | | | 54 | ++++++++++++++++++++++++++++++++++++++---------------- | 
1 file changed, 38 insertions(+), 16 deletions(-)
diff --git a/tabbed.c b/tabbed.c
@@ -863,30 +863,52 @@ xerror(Display *dpy, XErrorEvent *ee) {
 	return xerrorxlib(dpy, ee); /* may call exit */
 }
 
+char *argv0;
+
 void
-usage(char *argv0)
+usage(void)
 {
 	die("usage: %s [-dhsv] command...\n", argv0);
 }
 
 int
 main(int argc, char *argv[]) {
-	int i, detach = 0;
-
-	for(i = 1; i < argc && !cmd; i++) {
-		if(!strcmp("-v", argv[i]))
-			die("tabbed-"VERSION", © 2009-2011 tabbed engineers, see LICENSE for details\n");
-		else if(!strcmp("-d", argv[i]))
-			detach = 1;
-		else if(!strcmp("-s", argv[i]))
-			doinitspawn = False;
-		else if(!strcmp("-h", argv[i]))
-			usage(argv[0]);
-		else
-			setcmd(argc-i, argv+i);
+	int detach = 0;
+	char _argc;
+	char **_argv;
+
+	for(argv0 = *argv, argv++, argc--;
+			argv[0] && argv[0][1] && argv[0][0] == '-';
+			argc--, 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) {
+			case 'v':
+				die("tabbed-"VERSION", © 2009-2011"
+					" tabbed engineers, see LICENSE"
+					" for details.\n");
+			case 's':
+				doinitspawn = False;
+				break;
+			case 'h':
+				usage();
+			case 'd':
+				detach = 1;
+				break;
+			}
+		}
 	}
-	if(!cmd)
-		usage(argv[0]);
+	if(argc < 1)
+		usage();
+	setcmd(argc, argv);
+
 	if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
 		fprintf(stderr, "tabbed: no locale support\n");
 	if(!(dpy = XOpenDisplay(NULL)))