- stderr = stderr;
- dpy = XOpenDisplay(NULL);
-
- memset(status_string, 0, sizeof(status_string));
- for (i = 0; i < sizeof(args) / sizeof(args[0]); ++i) {
- argument = args[i];
- if (argument.args == NULL)
- res = argument.func();
- else
- res = argument.func(argument.args);
- element = smprintf(argument.format, res);
- if (element == NULL) {
- element = smprintf(UNKNOWN_STR);
- fprintf(stderr, "Failed to format output.\n");
+ ARGBEGIN {
+ case 'd':
+ dflag = 1;
+ break;
+ case 'o':
+ oflag = 1;
+ break;
+ case 'v':
+ printf("slstatus %s (C) 2016 slstatus engineers\n", VERSION);
+ return 0;
+ default:
+ usage();
+ } ARGEND
+
+ if (dflag && oflag) {
+ usage();
+ }
+ if (dflag) {
+ (void)daemon(1, 1);
+ }
+
+ memset(&act, 0, sizeof(act));
+ act.sa_handler = sighandler;
+ sigaction(SIGINT, &act, 0);
+ sigaction(SIGTERM, &act, 0);
+
+ if (!oflag) {
+ dpy = XOpenDisplay(NULL);
+ }
+
+ while (!done) {
+ status_string[0] = '\0';
+
+ for (i = 0; i < sizeof(args) / sizeof(args[0]); ++i) {
+ argument = args[i];
+ if (argument.args == NULL) {
+ res = argument.func();
+ } else {
+ res = argument.func(argument.args);
+ }
+ element = smprintf(argument.fmt, res);
+ if (element == NULL) {
+ element = smprintf(UNKNOWN_STR);
+ warnx("Failed to format output");
+ }
+ strlcat(status_string, element, sizeof(status_string));
+ free(res);
+ free(element);
+ }
+
+ if (!oflag) {
+ set_status(status_string);
+ } else {
+ printf("%s\n", status_string);