Re: [hackers] [xssstate] Refactor xssstate.c

2016-09-11 Thread Russ
> does it really simplify the code? I think it makes it less readable
> without arg.h.
 
I agree it does some, but using strcmp allows matching the flags exactly, and 
prevents things like "xssstate -v" being equivilant to "xssstate -vxyz".  And 
since you would only ever use one flag at a time, arg.h seemed like it was 
excessive, but perhaps I was thinking about simplify the wrong way.  I also like
being able to use only one switch statement,  but that's mostly a personal 
preference.  Thanks for the input!

Russ



[hackers] [xssstate] Refactor xssstate.c

2016-09-11 Thread Russ
Hello all,

I'd like to propose a refactoring of xssstate.c.  It simplifies the
code, removing the need for arg.h, and has strict error checking and
usage rules.  Thoughts?

___
diff --git a/arg.h b/arg.h
deleted file mode 100644
index ba3fb3f..000
--- a/arg.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copy me if you can.
- * by 20h
- */
-
-#ifndef ARG_H__
-#define ARG_H__
-
-extern char *argv0;
-
-/* use main(int argc, char *argv[]) */
-#define ARGBEGIN   for (argv0 = *argv, argv++, argc--;\
-   argv[0] && argv[0][0] == '-'\
-   && argv[0][1];\
-   argc--, argv++) {\
-   char argc_;\
-   char **argv_;\
-   int brk_;\
-   if (argv[0][1] == '-' && argv[0][2] == '\0') {\
-   argv++;\
-   argc--;\
-   break;\
-   }\
-   for (brk_ = 0, argv[0]++, argv_ = argv;\
-   argv[0][0] && !brk_;\
-   argv[0]++) {\
-   if (argv_ != argv)\
-   break;\
-   argc_ = argv[0][0];\
-   switch (argc_)
-#define ARGEND }\
-   }
-
-#define ARGC() argc_
-
-#define EARGF(x)   ((argv[0][1] == '\0' && argv[1] == NULL)?\
-   ((x), abort(), (char *)0) :\
-   (brk_ = 1, (argv[0][1] != '\0')?\
-   ([0][1]) :\
-   (argc--, argv++, argv[0])))
-
-#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
-   (char *)0 :\
-   (brk_ = 1, (argv[0][1] != '\0')?\
-   ([0][1]) :\
-   (argc--, argv++, argv[0])))
-
-#endif
diff --git a/xssstate.c b/xssstate.c
index f6e63a8..ad603e1 100644
--- a/xssstate.c
+++ b/xssstate.c
@@ -1,106 +1,68 @@
-/*
- * See LICENSE file for copyright and license details.
- */
-
-#include 
-#include 
-#include 
+/* See LICENSE file for copyright and license details. */
 #include 
-#include 
-#include 
+#include 
+#include 
+#include 
 #include 
 
-#include "arg.h"
-
-char *argv0;
-
-void
-die(const char *errstr, ...) {
+static void
+die(const char *fmt, ...) 
+{
va_list ap;
 
-   va_start(ap, errstr);
-   vfprintf(stderr, errstr, ap);
+   va_start(ap, fmt);
+   vfprintf(stderr, fmt, ap);
va_end(ap);
-   exit(EXIT_FAILURE);
-}
+   fputc('\n', stderr);
 
-void
-usage(void)
-{
-   die("usage: %s [-istv]\n", basename(argv0));
+   exit(1);
 }
 
 int
-main(int argc, char *argv[]) {
-   XScreenSaverInfo *info;
+main(int argc, char *argv[])
+{
+   int base, errbase, idle, state;
Display *dpy;
-   int base, errbase;
-   Bool showstate, showtill, showidle;
-
-   showstate = false;
-   showtill = false;
-   showidle = false;
-
-   ARGBEGIN {
-   case 'i':
-   showidle = true;
-   break;
-   case 's':
-   showstate = true;
-   break;
-   case 't':
-   showtill = true;
-   break;
-   case 'v':
-   die("xssstate-"VERSION", © 2008-2016 xssstate engineers"
-   ", see LICENSE for details.\n");
-   default:
-   usage();
-   } ARGEND;
-
-   if (!showstate && !showtill && !showidle)
-   usage();
-
-   if (!(dpy = XOpenDisplay(0)))
-   die("Cannot open display.\n");
+   XScreenSaverInfo *info;
 
+   if (argc != 2)
+   die("usage: xssstate [-i] [-s] [-t] [-v]");
+   if (!strcmp("-v", argv[1]))
+   die("xssstate-"VERSION);
+   idle = 0;
+   state = 0;
+   if (!strcmp("-i", argv[1])) {
+   idle = 1;
+   } else if (!strcmp("-s", argv[1])) {
+   state = 1;
+   } else if (strcmp("-t", argv[1])) {
+   die("usage: xssstate [-i] [-s] [-t] [-v]");
+   }
+   if (!(dpy = XOpenDisplay(NULL)))
+   die("xssstate: cannot open display");
if (!XScreenSaverQueryExtension(dpy, , ))
-   die("Screensaver extension not activated.\n");
-
-   info = XScreenSaverAllocInfo();
-   XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info);
-
-   if (showstate) {
-   switch(info->state) {
-   case ScreenSaverOn:
-   printf("on\n");
-   break;
-   case ScreenSaverOff:
-