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 813aed994aac60d514a3387d3346b0d05c5a3257 /git/dwmstatus-sdk/commit/813aed994aac60d514a3387d3346b0d05c5a3257.gph codevoid.de 70 1parent c85db57b426932e6f6a5664ebefa2c6c2d7b559e /git/dwmstatus-sdk/commit/c85db57b426932e6f6a5664ebefa2c6c2d7b559e.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Mon, 21 May 2018 09:03:58 +0200 Err codevoid.de 70 i Err codevoid.de 70 iAdd volume via mixer device Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M dwmstatus.c | 38 ++++++++++++++++++++++++++++++- Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 37 insertions(+), 1 deletion(-) 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,8 @@ 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 i #include Err codevoid.de 70 i Err codevoid.de 70 it@@ -53,6 +55,10 @@ smprintf(char *fmt, ...) Err codevoid.de 70 i return ret; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i+/* Use FreeBSDs sysctl to retrieve information Err codevoid.de 70 i+ * Sysctl may return different types, so you want Err codevoid.de 70 i+ * to call the appropriate smprintf() in main(); Err codevoid.de 70 i+ */ Err codevoid.de 70 i char * Err codevoid.de 70 i getsysctl(char *input_str) { Err codevoid.de 70 i char *ret_val; Err codevoid.de 70 it@@ -74,6 +80,33 @@ getsysctl(char *input_str) { Err codevoid.de 70 i return ret_val; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i+/* Use FreeBSDs mixer device to determine the master Err codevoid.de 70 i+ * volume. Returns the volume %. Err codevoid.de 70 i+ */ 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 i+ mixerpath = defaultmixer; Err codevoid.de 70 i+ Err codevoid.de 70 i+ if ((mixfd = open(mixerpath, O_RDWR)) < 0) { Err codevoid.de 70 i+ smprintf(("Cannot open mixer")); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (ioctl(mixfd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1) { Err codevoid.de 70 i+ smprintf(("Cannot read mixer info")); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (ioctl(mixfd, MIXER_READ(0), &vol) == -1) { Err codevoid.de 70 i+ smprintf(("Cannot read mixer info")); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ close(mixfd); Err codevoid.de 70 i+ return smprintf("%i", vol & 0x7f); Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i void Err codevoid.de 70 i settz(char *tzname) Err codevoid.de 70 i { Err codevoid.de 70 it@@ -209,6 +242,7 @@ main(void) 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 if (!(dpy = XOpenDisplay(NULL))) { Err codevoid.de 70 i fprintf(stderr, "dwmstatus: cannot open display.\n"); Err codevoid.de 70 it@@ -221,15 +255,17 @@ main(void) 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%% | %s ", cputemp, battery, datetime); 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 .