spoon.c - spoon - set dwm status
HTML git clone git://git.codemadness.org/spoon
DIR Log
DIR Files
DIR Refs
DIR LICENSE
---
spoon.c (2131B)
---
1 #include <err.h>
2 #include <limits.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <unistd.h>
6
7 #include <X11/keysym.h>
8 #include <X11/Xlib.h>
9
10 #include "arg.h"
11 #include "util.h"
12
13 int battread(void *, char *, size_t);
14 int cpuread(void *, char *, size_t);
15 int dateread(void *, char *, size_t);
16 int dummyread(void *, char *, size_t);
17 int loadread(void *, char *, size_t);
18 int mixread(void *, char *, size_t);
19 int mpdread(void *, char *, size_t);
20 int tempread(void *, char *, size_t);
21 int wifiread(void *, char *, size_t);
22 int xkblayoutread(void *, char *, size_t);
23 int fileread(void *, char *, size_t);
24 int keyread(void *, char *, size_t);
25 int netspeedread(void *, char *, size_t);
26 int brightnessread(void *, char *, size_t);
27 int countread(void *, char *, size_t);
28
29 struct ent {
30 char *fmt;
31 int (*read)(void *, char *, size_t);
32 void *arg;
33 };
34
35 #include "types.h"
36 #include "config.h"
37
38 char *argv0;
39 int single;
40 int tty;
41
42 int
43 dummyread(void *arg, char *buf, size_t len)
44 {
45 buf[0] = '\0';
46 return 0;
47 }
48
49 void
50 entcat(char *line, size_t len)
51 {
52 char buf[LINE_MAX];
53 char *s, *e;
54 struct ent *ent;
55 int ret, i;
56
57 s = line;
58 e = line + len;
59 for (i = 0; i < LEN(ents); i++) {
60 ent = &ents[i];
61 ret = ent->read(ent->arg, buf, sizeof(buf));
62 if (ret == 0 && s < e)
63 s += snprintf(s, e - s, ent->fmt, buf);
64 }
65 }
66
67 void
68 xloop(void)
69 {
70 char line[LINE_MAX];
71 Display *dpy;
72
73 dpy = XOpenDisplay(NULL);
74 if (dpy == NULL)
75 errx(1, "cannot open display");
76 for (;;) {
77 entcat(line, sizeof(line));
78 XStoreName(dpy, DefaultRootWindow(dpy), line);
79 XSync(dpy, False);
80 if (single)
81 break;
82 sleep(delay);
83 }
84 }
85
86 void
87 ttyloop(void)
88 {
89 char line[LINE_MAX];
90
91 for (;;) {
92 entcat(line, sizeof(line));
93 puts(line);
94 fflush(stdout);
95 if (single)
96 break;
97 sleep(delay);
98 }
99 }
100
101 void
102 usage(void)
103 {
104 fprintf(stderr, "%s: [-st]\n", argv0);
105 fprintf(stderr, " -s One shot mode\n");
106 fprintf(stderr, " -t Use TTY backend\n");
107 exit(1);
108 }
109
110 int
111 main(int argc, char *argv[])
112 {
113 char *end;
114
115 ARGBEGIN {
116 case 's':
117 single = 1;
118 break;
119 case 't':
120 tty = 1;
121 break;
122 default:
123 usage();
124 } ARGEND
125
126 if (tty)
127 ttyloop();
128 else
129 xloop();
130 return 0;
131 }