Xinqi Bao's Git

Removed #define for update interval
[slstatus.git] / slstatus.c
index b31f21d..228c19b 100644 (file)
@@ -28,6 +28,8 @@
 
 #include "arg.h"
 
+#define LEN(x) (sizeof (x) / sizeof *(x))
+
 struct arg {
        const char *(*func)();
        const char *fmt;
@@ -75,7 +77,6 @@ static void usage(void);
 char *argv0;
 static unsigned short int delay = 0;
 static unsigned short int done;
-static unsigned short int oflag, nflag;
 static Display *dpy;
 
 #include "config.h"
@@ -143,10 +144,19 @@ battery_power(const char *bat)
 static const char *
 battery_state(const char *bat)
 {
-       char path[PATH_MAX];
-       char state[12];
        FILE *fp;
+       struct {
+               char *state;
+               char *symbol;
+       } map[] = {
+               { "Charging",    "+" },
+               { "Discharging", "-" },
+               { "Full",        "=" },
+               { "Unknown",     "/" },
+       };
+       size_t i;
        int n;
+       char path[PATH_MAX], state[12];
 
        snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status");
        fp = fopen(path, "r");
@@ -159,17 +169,13 @@ battery_state(const char *bat)
        if (n != 1)
                return UNKNOWN_STR;
 
-       if (strcmp(state, "Charging") == 0) {
-               return "+";
-       } else if (strcmp(state, "Discharging") == 0) {
-               return "-";
-       } else if (strcmp(state, "Full") == 0) {
-               return "=";
-       } else if (strcmp(state, "Unknown") == 0) {
-               return "/";
-       } else {
-               return "?";
+       for (i = 0; i < LEN(map); i++) {
+               if (!strcmp(map[i].state, state)) {
+                       break;
+               }
        }
+
+       return (i == LEN(map)) ? "?" : map[i].symbol;
 }
 
 static const char *
@@ -376,6 +382,11 @@ keyboard_indicators(void)
 {
        Display *dpy = XOpenDisplay(NULL);
        XKeyboardState state;
+
+       if (dpy == NULL) {
+               warnx("XOpenDisplay failed");
+               return UNKNOWN_STR;
+       }
        XGetKeyboardControl(dpy, &state);
        XCloseDisplay(dpy);
 
@@ -741,7 +752,7 @@ vol_perc(const char *card)
                close(afd);
                return UNKNOWN_STR;
        }
-       for (i = 0; i < (sizeof(vnames) / sizeof((vnames[0]))); i++) {
+       for (i = 0; i < LEN(vnames); i++) {
                if (devmask & (1 << i) && !strcmp("vol", vnames[i])) {
                        if (ioctl(afd, MIXER_READ(i), &v) == -1) {
                                warn("vol_perc: ioctl");
@@ -840,32 +851,29 @@ sighandler(const int signo)
 static void
 usage(void)
 {
-       fprintf(stderr, "usage: %s [-o | -n]\n", argv0);
+       fprintf(stderr, "usage: %s [-s]\n", argv0);
        exit(1);
 }
 
 int
 main(int argc, char *argv[])
 {
-       unsigned short int i;
-       char status_string[MAXLEN];
-       char *element;
        struct arg argument;
        struct sigaction act;
-       size_t len;
+       size_t i, len;
+       int sflag = 0;
+       char status_string[MAXLEN];
+       char *element;
 
        ARGBEGIN {
-               case 'o':
-                       oflag = 1;
-                       break;
-               case 'n':
-                       nflag = 1;
+               case 's':
+                       sflag = 1;
                        break;
                default:
                        usage();
        } ARGEND
 
-       if (oflag && nflag) {
+       if (argc) {
                usage();
        }
 
@@ -874,8 +882,12 @@ main(int argc, char *argv[])
        sigaction(SIGINT,  &act, 0);
        sigaction(SIGTERM, &act, 0);
 
-       if (!oflag) {
+       if (!sflag) {
                dpy = XOpenDisplay(NULL);
+               if (!dpy) {
+                       fprintf(stderr, "slstatus: cannot open display");
+                       exit(1);
+               }
        }
 
        setlocale(LC_ALL, "");
@@ -883,8 +895,7 @@ main(int argc, char *argv[])
        while (!done) {
                status_string[0] = '\0';
 
-               for (element = status_string, i = len = 0;
-                    i < sizeof(args) / sizeof(args[0]);
+               for (element = status_string, i = len = 0; i < LEN(args);
                     ++i, element += len) {
                        argument = args[i];
                        len = snprintf(element, sizeof(status_string)-1 - len,
@@ -896,26 +907,23 @@ main(int argc, char *argv[])
                        }
                }
 
-               if (oflag) {
-                       printf("%s\n", status_string);
-               } else if (nflag) {
+               if (sflag) {
                        printf("%s\n", status_string);
-                       done = 1;
                } else {
                        XStoreName(dpy, DefaultRootWindow(dpy), status_string);
                        XSync(dpy, False);
                }
 
-               if ((UPDATE_INTERVAL - delay) <= 0) {
+               if ((update_interval - delay) <= 0) {
                        delay = 0;
                        continue;
                } else {
-                       sleep(UPDATE_INTERVAL - delay);
+                       sleep(update_interval - delay);
                        delay = 0;
                }
        }
 
-       if (!oflag) {
+       if (!sflag) {
                XStoreName(dpy, DefaultRootWindow(dpy), NULL);
                XCloseDisplay(dpy);
        }