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 e276c5ff75309f5a904bea54427f5bd871527f8b /git/dwmstatus-sdk/commit/e276c5ff75309f5a904bea54427f5bd871527f8b.gph codevoid.de 70 1parent 813aed994aac60d514a3387d3346b0d05c5a3257 /git/dwmstatus-sdk/commit/813aed994aac60d514a3387d3346b0d05c5a3257.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Mon, 21 May 2018 11:02:31 +0200 Err codevoid.de 70 i Err codevoid.de 70 iAdding USR1 signal handler to force update status Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M dwmstatus.c | 76 +++++++++++++++++++++---------- Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 52 insertions(+), 24 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@@ -17,6 +17,7 @@ Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 i+#include Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 i Err codevoid.de 70 it@@ -86,7 +87,6 @@ getsysctl(char *input_str) { Err codevoid.de 70 i char * Err codevoid.de 70 i getvolume(char *mixerpath) { Err codevoid.de 70 i char defaultmixer[] = "/dev/mixer"; Err codevoid.de 70 i- char *ret_val; Err codevoid.de 70 i int mixfd, vol, devmask = 0; Err codevoid.de 70 i Err codevoid.de 70 i if (mixerpath == NULL) Err codevoid.de 70 it@@ -235,41 +235,69 @@ gettemperature(char *base, char *sensor) 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+ Err codevoid.de 70 i+// update all values and print statusbar Err codevoid.de 70 i+void update() { 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 *volume; Err codevoid.de 70 i Err codevoid.de 70 i+ // cpu temperature Err codevoid.de 70 i+ cputemp = smprintf("%i", ZEROCTOC((int)getsysctl("hw.acpi.thermal.tz0.temperature"))); Err codevoid.de 70 i+ Err codevoid.de 70 i+ // battery Err codevoid.de 70 i+ battery = smprintf("%i", getsysctl("hw.acpi.battery.life")); Err codevoid.de 70 i+ Err codevoid.de 70 i+ // audio volume Err codevoid.de 70 i+ volume = smprintf("%s", getvolume("/dev/mixer")); Err codevoid.de 70 i+ Err codevoid.de 70 i+ // IP + (lan speed / wlan ssid) Err codevoid.de 70 i+ // TBD Err codevoid.de 70 i+ Err codevoid.de 70 i+ // free disk space (root/home) Err codevoid.de 70 i+ // TBD Err codevoid.de 70 i+ Err codevoid.de 70 i+ // date and time Err codevoid.de 70 i+ datetime = mktimes("%d.%m.%Y %H:%M", tzberlin); Err codevoid.de 70 i+ Err codevoid.de 70 i+ // assemble and display Err codevoid.de 70 i+ status = smprintf(" CPU:%s°C BAT:%s%% VOL:%s | %s ", cputemp, battery, volume, datetime); Err codevoid.de 70 i+ setstatus(status); Err codevoid.de 70 i+ Err codevoid.de 70 i+ free(volume); 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+ Err codevoid.de 70 i+// A user might want to force update dwmstatus (for example after a Err codevoid.de 70 i+// changing the volume. This can be done by sending signal SIGUSR1. Err codevoid.de 70 i+void Err codevoid.de 70 i+sig_handler(int signo) { Err codevoid.de 70 i+ if (signo == SIGUSR1) Err codevoid.de 70 i+ update(); 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+ 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+ // register signal handler Err codevoid.de 70 i+ if (signal(SIGUSR1, sig_handler) == SIG_ERR) Err codevoid.de 70 i+ fprintf(stderr, "Err: can't register SIGUSR1\n"); Err codevoid.de 70 i+ Err codevoid.de 70 i+ // update status Err codevoid.de 70 i for (;;sleep(60)) { Err codevoid.de 70 i- // cpu temperature Err codevoid.de 70 i- cputemp = smprintf("%i", ZEROCTOC((int)getsysctl("hw.acpi.thermal.tz0.temperature"))); Err codevoid.de 70 i- // battery Err codevoid.de 70 i- battery = smprintf("%i", getsysctl("hw.acpi.battery.life")); Err codevoid.de 70 i- // audio volume Err codevoid.de 70 i- volume = smprintf("%s", getvolume("/dev/mixer")); Err codevoid.de 70 i- // IP + (lan speed / wlan ssid) Err codevoid.de 70 i- // free disk space (root/home) Err codevoid.de 70 i- // date and time: done Err codevoid.de 70 i- datetime = mktimes("%d.%m.%Y %H:%M", tzberlin); Err codevoid.de 70 i- Err codevoid.de 70 i- // assemble and display Err codevoid.de 70 i- status = smprintf(" CPU:%s°C BAT:%s%% VOL:%s | %s ", cputemp, battery, volume, datetime); Err codevoid.de 70 i- setstatus(status); Err codevoid.de 70 i- Err codevoid.de 70 i- free(volume); 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+ update(); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i XCloseDisplay(dpy); Err codevoid.de 70 .