it* dwmstatus for OpenBSD Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/dwmstatus-sdk URL:git://git.codevoid.de/dwmstatus-sdk codevoid.de 70 1Log /git/dwmstatus-sdk/log.gph codevoid.de 70 1Files /git/dwmstatus-sdk/files.gph codevoid.de 70 1Refs /git/dwmstatus-sdk/refs.gph codevoid.de 70 1LICENSE /git/dwmstatus-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit aacfb04966639f402407af14bb8f421c09238f0b /git/dwmstatus-sdk/commit/aacfb04966639f402407af14bb8f421c09238f0b.gph codevoid.de 70 1parent c891fa7936514f8933b0bd23dadac36149d67f19 /git/dwmstatus-sdk/commit/c891fa7936514f8933b0bd23dadac36149d67f19.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:github@textmail.me codevoid.de 70 iDate: Sun, 20 May 2018 22:33:25 +0200 Err codevoid.de 70 i Err codevoid.de 70 iRetab (argh, tabs) Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M dwmstatus.c | 256 ++++++++++++++++--------------- Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 129 insertions(+), 127 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/dwmstatus.c b/dwmstatus.c /git/dwmstatus-sdk/file/dwmstatus.c.gph codevoid.de 70 it@@ -1,6 +1,8 @@ Err codevoid.de 70 i /* Err codevoid.de 70 i * Copy me if you can. Err codevoid.de 70 i * by 20h Err codevoid.de 70 i+ * Err codevoid.de 70 i+ * done. ~sdk Err codevoid.de 70 i */ Err codevoid.de 70 i Err codevoid.de 70 i #define _BSD_SOURCE Err codevoid.de 70 it@@ -18,37 +20,37 @@ Err codevoid.de 70 i Err codevoid.de 70 i #include Err codevoid.de 70 i Err codevoid.de 70 i-#define ZEROC 2731 Err codevoid.de 70 i-#define CONVC(x) ((x)-ZEROC) / 10 Err codevoid.de 70 i- Err codevoid.de 70 i+// conversation presets Err codevoid.de 70 i+#define ZEROCTOC(x) ((x)-2731) / 10 Err codevoid.de 70 i+#define BTOMB(x) ((x)*1048576 Err codevoid.de 70 i+#define BTOGB(x) ((x)*1073741824 Err codevoid.de 70 i Err codevoid.de 70 i char *tzberlin = "Europe/Berlin"; Err codevoid.de 70 i Err codevoid.de 70 i static Display *dpy; Err codevoid.de 70 i Err codevoid.de 70 i- Err codevoid.de 70 i char * Err codevoid.de 70 i smprintf(char *fmt, ...) Err codevoid.de 70 i { Err codevoid.de 70 i- va_list fmtargs; Err codevoid.de 70 i- char *ret; Err codevoid.de 70 i- int len; Err codevoid.de 70 i+ va_list fmtargs; Err codevoid.de 70 i+ char *ret; Err codevoid.de 70 i+ int len; Err codevoid.de 70 i Err codevoid.de 70 i- va_start(fmtargs, fmt); Err codevoid.de 70 i- len = vsnprintf(NULL, 0, fmt, fmtargs); Err codevoid.de 70 i- va_end(fmtargs); Err codevoid.de 70 i+ va_start(fmtargs, fmt); Err codevoid.de 70 i+ len = vsnprintf(NULL, 0, fmt, fmtargs); Err codevoid.de 70 i+ va_end(fmtargs); Err codevoid.de 70 i Err codevoid.de 70 i- ret = malloc(++len); Err codevoid.de 70 i- if (ret == NULL) { Err codevoid.de 70 i- perror("malloc"); Err codevoid.de 70 i- exit(1); Err codevoid.de 70 i- } Err codevoid.de 70 i+ ret = malloc(++len); Err codevoid.de 70 i+ if (ret == NULL) { Err codevoid.de 70 i+ perror("malloc"); Err codevoid.de 70 i+ exit(1); Err codevoid.de 70 i+ } Err codevoid.de 70 i Err codevoid.de 70 i- va_start(fmtargs, fmt); Err codevoid.de 70 i- vsnprintf(ret, len, fmt, fmtargs); Err codevoid.de 70 i- va_end(fmtargs); Err codevoid.de 70 i+ va_start(fmtargs, fmt); Err codevoid.de 70 i+ vsnprintf(ret, len, fmt, fmtargs); Err codevoid.de 70 i+ va_end(fmtargs); Err codevoid.de 70 i Err codevoid.de 70 i- return ret; Err codevoid.de 70 i+ return ret; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i char * Err codevoid.de 70 it@@ -75,163 +77,163 @@ getsysctl(char *input_str) { Err codevoid.de 70 i void Err codevoid.de 70 i settz(char *tzname) Err codevoid.de 70 i { Err codevoid.de 70 i- setenv("TZ", tzname, 1); Err codevoid.de 70 i+ setenv("TZ", tzname, 1); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i char * Err codevoid.de 70 i mktimes(char *fmt, char *tzname) Err codevoid.de 70 i { Err codevoid.de 70 i- char buf[129]; Err codevoid.de 70 i- time_t tim; Err codevoid.de 70 i- struct tm *timtm; Err codevoid.de 70 i- Err codevoid.de 70 i- settz(tzname); Err codevoid.de 70 i- tim = time(NULL); Err codevoid.de 70 i- timtm = localtime(&tim); Err codevoid.de 70 i- if (timtm == NULL) Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i- Err codevoid.de 70 i- if (!strftime(buf, sizeof(buf)-1, fmt, timtm)) { Err codevoid.de 70 i- fprintf(stderr, "strftime == 0\n"); Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i- } Err codevoid.de 70 i- Err codevoid.de 70 i- return smprintf("%s", buf); Err codevoid.de 70 i+ char buf[129]; Err codevoid.de 70 i+ time_t tim; Err codevoid.de 70 i+ struct tm *timtm; Err codevoid.de 70 i+ Err codevoid.de 70 i+ settz(tzname); Err codevoid.de 70 i+ tim = time(NULL); Err codevoid.de 70 i+ timtm = localtime(&tim); Err codevoid.de 70 i+ if (timtm == NULL) Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (!strftime(buf, sizeof(buf)-1, fmt, timtm)) { Err codevoid.de 70 i+ fprintf(stderr, "strftime == 0\n"); Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ Err codevoid.de 70 i+ return smprintf("%s", buf); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i setstatus(char *str) Err codevoid.de 70 i { Err codevoid.de 70 i- XStoreName(dpy, DefaultRootWindow(dpy), str); Err codevoid.de 70 i- XSync(dpy, False); Err codevoid.de 70 i+ XStoreName(dpy, DefaultRootWindow(dpy), str); Err codevoid.de 70 i+ XSync(dpy, False); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i char * Err codevoid.de 70 i loadavg(void) Err codevoid.de 70 i { Err codevoid.de 70 i- double avgs[3]; Err codevoid.de 70 i+ double avgs[3]; Err codevoid.de 70 i Err codevoid.de 70 i- if (getloadavg(avgs, 3) < 0) Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i+ if (getloadavg(avgs, 3) < 0) Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i Err codevoid.de 70 i- return smprintf("%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]); Err codevoid.de 70 i+ return smprintf("%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i char * Err codevoid.de 70 i readfile(char *base, char *file) Err codevoid.de 70 i { Err codevoid.de 70 i- char *path, line[513]; Err codevoid.de 70 i- FILE *fd; Err codevoid.de 70 i+ char *path, line[513]; Err codevoid.de 70 i+ FILE *fd; Err codevoid.de 70 i Err codevoid.de 70 i- memset(line, 0, sizeof(line)); Err codevoid.de 70 i+ memset(line, 0, sizeof(line)); Err codevoid.de 70 i Err codevoid.de 70 i- path = smprintf("%s/%s", base, file); Err codevoid.de 70 i- fd = fopen(path, "r"); Err codevoid.de 70 i- free(path); Err codevoid.de 70 i- if (fd == NULL) Err codevoid.de 70 i- return NULL; Err codevoid.de 70 i+ path = smprintf("%s/%s", base, file); Err codevoid.de 70 i+ fd = fopen(path, "r"); Err codevoid.de 70 i+ free(path); Err codevoid.de 70 i+ if (fd == NULL) Err codevoid.de 70 i+ return NULL; Err codevoid.de 70 i Err codevoid.de 70 i- if (fgets(line, sizeof(line)-1, fd) == NULL) Err codevoid.de 70 i- return NULL; Err codevoid.de 70 i- fclose(fd); Err codevoid.de 70 i+ if (fgets(line, sizeof(line)-1, fd) == NULL) Err codevoid.de 70 i+ return NULL; Err codevoid.de 70 i+ fclose(fd); Err codevoid.de 70 i Err codevoid.de 70 i- return smprintf("%s", line); Err codevoid.de 70 i+ return smprintf("%s", line); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i char * Err codevoid.de 70 i getbattery(char *base) Err codevoid.de 70 i { Err codevoid.de 70 i- char *co, status; Err codevoid.de 70 i- int descap, remcap; Err codevoid.de 70 i- Err codevoid.de 70 i- descap = -1; Err codevoid.de 70 i- remcap = -1; Err codevoid.de 70 i- Err codevoid.de 70 i- co = readfile(base, "present"); Err codevoid.de 70 i- if (co == NULL) Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i- if (co[0] != '1') { Err codevoid.de 70 i- free(co); Err codevoid.de 70 i- return smprintf("not present"); Err codevoid.de 70 i- } Err codevoid.de 70 i- free(co); Err codevoid.de 70 i- Err codevoid.de 70 i- co = readfile(base, "charge_full_design"); Err codevoid.de 70 i- if (co == NULL) { Err codevoid.de 70 i- co = readfile(base, "energy_full_design"); Err codevoid.de 70 i- if (co == NULL) Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i- } Err codevoid.de 70 i- sscanf(co, "%d", &descap); Err codevoid.de 70 i- free(co); Err codevoid.de 70 i- Err codevoid.de 70 i- co = readfile(base, "charge_now"); Err codevoid.de 70 i- if (co == NULL) { Err codevoid.de 70 i- co = readfile(base, "energy_now"); Err codevoid.de 70 i- if (co == NULL) Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i- } Err codevoid.de 70 i- sscanf(co, "%d", &remcap); Err codevoid.de 70 i- free(co); Err codevoid.de 70 i- Err codevoid.de 70 i- co = readfile(base, "status"); Err codevoid.de 70 i- if (!strncmp(co, "Discharging", 11)) { Err codevoid.de 70 i- status = '-'; Err codevoid.de 70 i- } else if(!strncmp(co, "Charging", 8)) { Err codevoid.de 70 i- status = '+'; Err codevoid.de 70 i- } else { Err codevoid.de 70 i- status = '?'; Err codevoid.de 70 i- } Err codevoid.de 70 i- Err codevoid.de 70 i- if (remcap < 0 || descap < 0) Err codevoid.de 70 i- return smprintf("invalid"); Err codevoid.de 70 i- Err codevoid.de 70 i- return smprintf("%.0f%%%c", ((float)remcap / (float)descap) * 100, status); Err codevoid.de 70 i+ char *co, status; Err codevoid.de 70 i+ int descap, remcap; Err codevoid.de 70 i+ Err codevoid.de 70 i+ descap = -1; Err codevoid.de 70 i+ remcap = -1; Err codevoid.de 70 i+ Err codevoid.de 70 i+ co = readfile(base, "present"); Err codevoid.de 70 i+ if (co == NULL) Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i+ if (co[0] != '1') { Err codevoid.de 70 i+ free(co); Err codevoid.de 70 i+ return smprintf("not present"); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ free(co); Err codevoid.de 70 i+ Err codevoid.de 70 i+ co = readfile(base, "charge_full_design"); Err codevoid.de 70 i+ if (co == NULL) { Err codevoid.de 70 i+ co = readfile(base, "energy_full_design"); Err codevoid.de 70 i+ if (co == NULL) Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ sscanf(co, "%d", &descap); Err codevoid.de 70 i+ free(co); Err codevoid.de 70 i+ Err codevoid.de 70 i+ co = readfile(base, "charge_now"); Err codevoid.de 70 i+ if (co == NULL) { Err codevoid.de 70 i+ co = readfile(base, "energy_now"); Err codevoid.de 70 i+ if (co == NULL) Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ sscanf(co, "%d", &remcap); Err codevoid.de 70 i+ free(co); Err codevoid.de 70 i+ Err codevoid.de 70 i+ co = readfile(base, "status"); Err codevoid.de 70 i+ if (!strncmp(co, "Discharging", 11)) { Err codevoid.de 70 i+ status = '-'; Err codevoid.de 70 i+ } else if(!strncmp(co, "Charging", 8)) { Err codevoid.de 70 i+ status = '+'; Err codevoid.de 70 i+ } else { Err codevoid.de 70 i+ status = '?'; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (remcap < 0 || descap < 0) Err codevoid.de 70 i+ return smprintf("invalid"); Err codevoid.de 70 i+ Err codevoid.de 70 i+ return smprintf("%.0f%%%c", ((float)remcap / (float)descap) * 100, status); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i char * Err codevoid.de 70 i gettemperature(char *base, char *sensor) Err codevoid.de 70 i { Err codevoid.de 70 i- char *co; Err codevoid.de 70 i+ char *co; Err codevoid.de 70 i Err codevoid.de 70 i- co = readfile(base, sensor); Err codevoid.de 70 i- if (co == NULL) Err codevoid.de 70 i- return smprintf(""); Err codevoid.de 70 i- return smprintf("%02.0f°C", atof(co) / 1000); Err codevoid.de 70 i+ co = readfile(base, sensor); Err codevoid.de 70 i+ if (co == NULL) Err codevoid.de 70 i+ return smprintf(""); Err codevoid.de 70 i+ return smprintf("%02.0f°C", atof(co) / 1000); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i int Err codevoid.de 70 i main(void) Err codevoid.de 70 i { Err codevoid.de 70 i- char *status; Err codevoid.de 70 i- char *datetime; Err codevoid.de 70 i- char *cputemp; Err codevoid.de 70 i- char *battery; Err codevoid.de 70 i+ char *status; Err codevoid.de 70 i+ char *datetime; Err codevoid.de 70 i+ char *cputemp; Err codevoid.de 70 i+ char *battery; Err codevoid.de 70 i Err codevoid.de 70 i- if (!(dpy = XOpenDisplay(NULL))) { Err codevoid.de 70 i- fprintf(stderr, "dwmstatus: cannot open display.\n"); Err codevoid.de 70 i- return 1; Err codevoid.de 70 i- } Err codevoid.de 70 i+ if (!(dpy = XOpenDisplay(NULL))) { Err codevoid.de 70 i+ fprintf(stderr, "dwmstatus: cannot open display.\n"); Err codevoid.de 70 i+ return 1; Err codevoid.de 70 i+ } Err codevoid.de 70 i Err codevoid.de 70 i- for (;;sleep(60)) { Err codevoid.de 70 i- datetime = mktimes("%d.%m.%Y %H:%M", tzberlin); Err codevoid.de 70 i+ for (;;sleep(60)) { Err codevoid.de 70 i+ datetime = mktimes("%d.%m.%Y %H:%M", tzberlin); Err codevoid.de 70 i Err codevoid.de 70 i- cputemp = smprintf("%i", CONVC((int)getsysctl("hw.acpi.thermal.tz0.temperature"))); Err codevoid.de 70 i- battery = smprintf("%i", (int)getsysctl("hw.acpi.battery.life")); Err codevoid.de 70 i+ cputemp = smprintf("%i", ZEROCTOC((int)getsysctl("hw.acpi.thermal.tz0.temperature"))); Err codevoid.de 70 i+ battery = smprintf("%i", (int)getsysctl("hw.acpi.battery.life")); Err codevoid.de 70 i Err codevoid.de 70 i- status = smprintf(" CPU:%s°C BAT:%s%% | %s %s", Err codevoid.de 70 i- cputemp, battery, datetime); Err codevoid.de 70 i+ status = smprintf(" CPU:%s°C BAT:%s%% | %s %s", Err codevoid.de 70 i+ cputemp, battery, datetime); Err codevoid.de 70 i Err codevoid.de 70 i- setstatus(status); Err codevoid.de 70 i+ setstatus(status); Err codevoid.de 70 i Err codevoid.de 70 i- free(battery); Err codevoid.de 70 i- free(cputemp); Err codevoid.de 70 i- free(datetime); Err codevoid.de 70 i- free(status); Err codevoid.de 70 i- } Err codevoid.de 70 i+ free(battery); Err codevoid.de 70 i+ free(cputemp); Err codevoid.de 70 i+ free(datetime); Err codevoid.de 70 i+ free(status); Err codevoid.de 70 i+ } Err codevoid.de 70 i Err codevoid.de 70 i- XCloseDisplay(dpy); Err codevoid.de 70 i+ XCloseDisplay(dpy); Err codevoid.de 70 i Err codevoid.de 70 i- return 0; Err codevoid.de 70 i+ return 0; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 .