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 9cd3f8860642d0feb9210335c46262947e48cee7 /git/dwmstatus-sdk/commit/9cd3f8860642d0feb9210335c46262947e48cee7.gph codevoid.de 70 1parent 3c50b451da564723f8a919954082293f741d3ea5 /git/dwmstatus-sdk/commit/3c50b451da564723f8a919954082293f741d3ea5.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Mon, 4 Nov 2019 18:26:37 +0100 Err codevoid.de 70 i Err codevoid.de 70 ilimited linux support Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M Makefile | 2 +- Err codevoid.de 70 i M dwmstatus.c | 137 +++++++++++++++++-------------- Err codevoid.de 70 i Err codevoid.de 70 i2 files changed, 77 insertions(+), 62 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/Makefile b/Makefile /git/dwmstatus-sdk/file/Makefile.gph codevoid.de 70 it@@ -4,7 +4,7 @@ include config.mk Err codevoid.de 70 i Err codevoid.de 70 i SRC = ${NAME}.c Err codevoid.de 70 i OBJ = ${SRC:.c=.o} Err codevoid.de 70 i-CC = clang Err codevoid.de 70 i+CC = cc Err codevoid.de 70 i Err codevoid.de 70 i all: options ${NAME} 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@@ -9,17 +9,23 @@ 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 #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 #include Err codevoid.de 70 i #include Err codevoid.de 70 i+#ifdef __linux__ Err codevoid.de 70 i+#include Err codevoid.de 70 i+#include Err codevoid.de 70 i+#else 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 i+#endif Err codevoid.de 70 i Err codevoid.de 70 i // configuration Err codevoid.de 70 i #define UPDATE_INTERVAL 10 Err codevoid.de 70 it@@ -29,10 +35,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-static Display *dpy; Err codevoid.de 70 i-char *tzlocal = "Europe/Berlin"; Err codevoid.de 70 i+ static Display *dpy; Err codevoid.de 70 i+ char *tzlocal = "Europe/Berlin"; Err codevoid.de 70 i Err codevoid.de 70 i-char * smprintf(char *fmt, ...) { Err codevoid.de 70 i+ char * smprintf(char *fmt, ...) { 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 it@@ -43,8 +49,8 @@ char * smprintf(char *fmt, ...) { 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+ 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 it@@ -52,7 +58,7 @@ char * smprintf(char *fmt, ...) { 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-} Err codevoid.de 70 i+ } Err codevoid.de 70 i Err codevoid.de 70 i char * getfreespace(const char *path) { Err codevoid.de 70 i struct statfs vfs; Err codevoid.de 70 it@@ -60,6 +66,7 @@ char * getfreespace(const char *path) { Err codevoid.de 70 i return smprintf("%ld", (vfs.f_bavail * vfs.f_bsize) / 1024 / 1024); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i+#ifdef __OpenBSD__ Err codevoid.de 70 i char * getcputemp() { Err codevoid.de 70 i struct sensor sensor; Err codevoid.de 70 i size_t slen = sizeof(sensor); Err codevoid.de 70 it@@ -68,7 +75,9 @@ char * getcputemp() { Err codevoid.de 70 i return smprintf("%.0f", (sensor.value - 273150000) / 1000000.0); Err codevoid.de 70 i return smprintf("err"); Err codevoid.de 70 i } Err codevoid.de 70 i+#endif Err codevoid.de 70 i Err codevoid.de 70 i+#ifdef __OpenBSD__ Err codevoid.de 70 i char * getfan() { Err codevoid.de 70 i struct sensor sensor; Err codevoid.de 70 i size_t slen = sizeof(sensor); Err codevoid.de 70 it@@ -77,47 +86,49 @@ char * getfan() { Err codevoid.de 70 i return smprintf("%i", sensor.value); Err codevoid.de 70 i return smprintf("err"); Err codevoid.de 70 i } Err codevoid.de 70 i+#endif Err codevoid.de 70 i Err codevoid.de 70 i+#ifdef __OpenBSD__ Err codevoid.de 70 i char * getvolume() { Err codevoid.de 70 i+ static int cls = -1, fd, v; Err codevoid.de 70 i+ static struct mixer_devinfo mdi; Err codevoid.de 70 i+ static struct mixer_ctrl mc; Err codevoid.de 70 i+ Err codevoid.de 70 i+ if ((fd = open("/dev/mixer", O_RDONLY)) == -1) Err codevoid.de 70 i+ return smprintf("NOMIXER"); Err codevoid.de 70 i+ Err codevoid.de 70 i+ for (mdi.index = 0; cls == -1; ++mdi.index) { Err codevoid.de 70 i+ if (ioctl(fd, AUDIO_MIXER_DEVINFO, &mdi) == -1) Err codevoid.de 70 i+ goto fail; Err codevoid.de 70 i+ if (mdi.type == AUDIO_MIXER_CLASS && Err codevoid.de 70 i+ strcmp(mdi.label.name, AudioCoutputs) == 0) Err codevoid.de 70 i+ cls = mdi.index; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ for (mdi.index = 0, v = -1; v == -1; ++mdi.index) { Err codevoid.de 70 i+ if (ioctl(fd, AUDIO_MIXER_DEVINFO, &mdi) == -1) Err codevoid.de 70 i+ goto fail; Err codevoid.de 70 i+ if (mdi.type == AUDIO_MIXER_VALUE && Err codevoid.de 70 i+ mdi.prev == AUDIO_MIXER_LAST && Err codevoid.de 70 i+ mdi.mixer_class == cls && Err codevoid.de 70 i+ strcmp(mdi.label.name, AudioNmaster) == 0) { Err codevoid.de 70 i+ mc.dev = mdi.index; Err codevoid.de 70 i+ if (ioctl(fd, AUDIO_MIXER_READ, &mc) == -1) Err codevoid.de 70 i+ goto fail; Err codevoid.de 70 i+ v = MAX(mc.un.value.level[AUDIO_MIXER_LEVEL_MONO], Err codevoid.de 70 i+ mc.un.value.level[AUDIO_MIXER_LEVEL_RIGHT]); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (v == -1 || close(fd) == -1) Err codevoid.de 70 i+ return smprintf("NOCHAN"); Err codevoid.de 70 i Err codevoid.de 70 i- static int cls = -1, fd, v; Err codevoid.de 70 i- static struct mixer_devinfo mdi; Err codevoid.de 70 i- static struct mixer_ctrl mc; Err codevoid.de 70 i- Err codevoid.de 70 i- if ((fd = open("/dev/mixer", O_RDONLY)) == -1) Err codevoid.de 70 i- return smprintf("NOMIXER"); Err codevoid.de 70 i- Err codevoid.de 70 i- for (mdi.index = 0; cls == -1; ++mdi.index) { Err codevoid.de 70 i- if (ioctl(fd, AUDIO_MIXER_DEVINFO, &mdi) == -1) Err codevoid.de 70 i- goto fail; Err codevoid.de 70 i- if (mdi.type == AUDIO_MIXER_CLASS && Err codevoid.de 70 i- strcmp(mdi.label.name, AudioCoutputs) == 0) Err codevoid.de 70 i- cls = mdi.index; Err codevoid.de 70 i- } Err codevoid.de 70 i- for (mdi.index = 0, v = -1; v == -1; ++mdi.index) { Err codevoid.de 70 i- if (ioctl(fd, AUDIO_MIXER_DEVINFO, &mdi) == -1) Err codevoid.de 70 i- goto fail; Err codevoid.de 70 i- if (mdi.type == AUDIO_MIXER_VALUE && Err codevoid.de 70 i- mdi.prev == AUDIO_MIXER_LAST && Err codevoid.de 70 i- mdi.mixer_class == cls && Err codevoid.de 70 i- strcmp(mdi.label.name, AudioNmaster) == 0) { Err codevoid.de 70 i- mc.dev = mdi.index; Err codevoid.de 70 i- if (ioctl(fd, AUDIO_MIXER_READ, &mc) == -1) Err codevoid.de 70 i- goto fail; Err codevoid.de 70 i- v = MAX(mc.un.value.level[AUDIO_MIXER_LEVEL_MONO], Err codevoid.de 70 i- mc.un.value.level[AUDIO_MIXER_LEVEL_RIGHT]); Err codevoid.de 70 i- } Err codevoid.de 70 i- } Err codevoid.de 70 i- Err codevoid.de 70 i- if (v == -1 || close(fd) == -1) Err codevoid.de 70 i- return smprintf("NOCHAN"); Err codevoid.de 70 i- Err codevoid.de 70 i- return smprintf("%i", v * 100 / 255); Err codevoid.de 70 i+ return smprintf("%i", v * 100 / 255); Err codevoid.de 70 i Err codevoid.de 70 i fail: Err codevoid.de 70 i- (void)close(fd); Err codevoid.de 70 i- return smprintf("FAILED"); Err codevoid.de 70 i+ (void)close(fd); Err codevoid.de 70 i+ return smprintf("FAILED"); Err codevoid.de 70 i } Err codevoid.de 70 i+#endif Err codevoid.de 70 i Err codevoid.de 70 i void settz(char *tzname) { Err codevoid.de 70 i setenv("TZ", tzname, 1); Err codevoid.de 70 it@@ -176,22 +187,24 @@ char * readfile(char *base, char *file) { Err codevoid.de 70 i return smprintf("%s", line); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i+#ifdef __OpenBSD__ Err codevoid.de 70 i char * getbattery() Err codevoid.de 70 i { Err codevoid.de 70 i- int fd; Err codevoid.de 70 i- struct apm_power_info pi; Err codevoid.de 70 i+ int fd; Err codevoid.de 70 i+ struct apm_power_info pi; Err codevoid.de 70 i Err codevoid.de 70 i- if ((fd = open("/dev/apm", O_RDONLY)) == -1 || Err codevoid.de 70 i- ioctl(fd, APM_IOC_GETPOWER, &pi) == -1 || Err codevoid.de 70 i- close(fd) == -1) Err codevoid.de 70 i- return smprintf("battery"); Err codevoid.de 70 i+ if ((fd = open("/dev/apm", O_RDONLY)) == -1 || Err codevoid.de 70 i+ ioctl(fd, APM_IOC_GETPOWER, &pi) == -1 || Err codevoid.de 70 i+ close(fd) == -1) Err codevoid.de 70 i+ return smprintf("battery"); Err codevoid.de 70 i Err codevoid.de 70 i- if (pi.battery_state == APM_BATT_UNKNOWN || Err codevoid.de 70 i- pi.battery_state == APM_BATTERY_ABSENT) Err codevoid.de 70 i- return smprintf("no battery"); Err codevoid.de 70 i+ if (pi.battery_state == APM_BATT_UNKNOWN || Err codevoid.de 70 i+ pi.battery_state == APM_BATTERY_ABSENT) Err codevoid.de 70 i+ return smprintf("no battery"); Err codevoid.de 70 i Err codevoid.de 70 i- return smprintf("%i", pi.battery_life); Err codevoid.de 70 i+ return smprintf("%i", pi.battery_life); Err codevoid.de 70 i } Err codevoid.de 70 i+#endif Err codevoid.de 70 i Err codevoid.de 70 i char * getifaddr(char * intf) Err codevoid.de 70 i { Err codevoid.de 70 it@@ -217,31 +230,33 @@ void update() { Err codevoid.de 70 i Err codevoid.de 70 i // date and time (local) Err codevoid.de 70 i char *time = mktimes("%H:%M", tzlocal); Err codevoid.de 70 i- //char *date = mktimes("%Y-%m-%d", tzlocal); Err codevoid.de 70 i+ char *date = mktimes("%a %Y-%m-%d", tzlocal); Err codevoid.de 70 i Err codevoid.de 70 i // free disk space Err codevoid.de 70 i char *freehomespace = getfreespace("/home"); Err codevoid.de 70 i- char *freedataspace = getfreespace("/data"); Err codevoid.de 70 i- char *freerootspace = getfreespace("/"); Err codevoid.de 70 i Err codevoid.de 70 i // display status Err codevoid.de 70 i+#ifdef __linux__ Err codevoid.de 70 i+ setstatus(smprintf( Err codevoid.de 70 i+ "SPACE: %.2fG | LOAD: %s | %s %s", Err codevoid.de 70 i+ (float)atoi(freehomespace) / 1024, loadavg(0), date, time)); Err codevoid.de 70 i+#else Err codevoid.de 70 i setstatus(smprintf( Err codevoid.de 70 i "H:%.2fG D:%.2fG šŸ”Œ %s%% šŸ”Š %s%% šŸ”„ %sĀ°C šŸ”ƒ %sRPM šŸ“ˆ %s @ %s", Err codevoid.de 70 i (float)atoi(freehomespace) / 1024, (float)atoi(freedataspace) / 1024, Err codevoid.de 70 i getbattery(), getvolume(), getcputemp(), getfan(), loadavg(0), time)); Err codevoid.de 70 i+#endif Err codevoid.de 70 i Err codevoid.de 70 i // free everything up Err codevoid.de 70 i free(time); Err codevoid.de 70 i- //free(date); Err codevoid.de 70 i+ free(date); Err codevoid.de 70 i free(freehomespace); Err codevoid.de 70 i- free(freerootspace); Err codevoid.de 70 i- free(freedataspace); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void sig_handler(int signo) { Err codevoid.de 70 i if (signo == SIGUSR1) Err codevoid.de 70 i update(); Err codevoid.de 70 i- usleep(50000); Err codevoid.de 70 i+ usleep(50000); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i int main(void) { Err codevoid.de 70 .