summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dwmstatus.c311
1 files changed, 162 insertions, 149 deletions
diff --git a/dwmstatus.c b/dwmstatus.c
index d2a4b03..30ff983 100644
--- a/dwmstatus.c
+++ b/dwmstatus.c
@@ -17,211 +17,224 @@
#include <X11/Xlib.h>
-char *tzargentina = "America/Buenos_Aires";
-char *tzutc = "UTC";
-char *tzberlin = "Europe/Berlin";
+char *colourFaded = "\x01"; // grey on black
+char *colourNeutral = "\x02"; // blue on black
+char *colourWarning = "\x03"; // yellow on black
+char *colourCritical = "\x04"; // red on black
+char *colourNormal = "\x05"; // grey on black
+
+char *iconClock = "\uE3D2";
+
+char *tzSaoPaulo = "America/Sao_Paulo";
+char *tzLocal = "Europe/Zurich";
static Display *dpy;
char *
smprintf(char *fmt, ...)
{
- va_list fmtargs;
- char *ret;
- int len;
+ va_list fmtargs;
+ char *ret;
+ int len;
- va_start(fmtargs, fmt);
- len = vsnprintf(NULL, 0, fmt, fmtargs);
- va_end(fmtargs);
+ va_start(fmtargs, fmt);
+ len = vsnprintf(NULL, 0, fmt, fmtargs);
+ va_end(fmtargs);
- ret = malloc(++len);
- if (ret == NULL) {
- perror("malloc");
- exit(1);
- }
+ ret = malloc(++len);
+ if (ret == NULL) {
+ perror("malloc");
+ exit(1);
+ }
- va_start(fmtargs, fmt);
- vsnprintf(ret, len, fmt, fmtargs);
- va_end(fmtargs);
+ va_start(fmtargs, fmt);
+ vsnprintf(ret, len, fmt, fmtargs);
+ va_end(fmtargs);
- return ret;
+ return ret;
}
void
settz(char *tzname)
{
- setenv("TZ", tzname, 1);
+ setenv("TZ", tzname, 1);
}
char *
mktimes(char *fmt, char *tzname)
{
- char buf[129];
- time_t tim;
- struct tm *timtm;
-
- settz(tzname);
- tim = time(NULL);
- timtm = localtime(&tim);
- if (timtm == NULL)
- return smprintf("");
-
- if (!strftime(buf, sizeof(buf)-1, fmt, timtm)) {
- fprintf(stderr, "strftime == 0\n");
- return smprintf("");
- }
-
- return smprintf("%s", buf);
+ char buf[129];
+ time_t tim;
+ struct tm *timtm;
+
+ settz(tzname);
+ tim = time(NULL);
+ timtm = localtime(&tim);
+ if (timtm == NULL)
+ return smprintf("");
+
+ if (!strftime(buf, sizeof(buf)-1, fmt, timtm)) {
+ fprintf(stderr, "strftime == 0\n");
+ return smprintf("");
+ }
+
+ return smprintf("%s", buf);
}
void
setstatus(char *str)
{
- XStoreName(dpy, DefaultRootWindow(dpy), str);
- XSync(dpy, False);
+ XStoreName(dpy, DefaultRootWindow(dpy), str);
+ XSync(dpy, False);
}
char *
loadavg(void)
{
- double avgs[3];
+ double avgs[3];
- if (getloadavg(avgs, 3) < 0)
- return smprintf("");
+ if (getloadavg(avgs, 3) < 0)
+ return smprintf("");
- return smprintf("%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]);
+ return smprintf("%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]);
}
char *
readfile(char *base, char *file)
{
- char *path, line[513];
- FILE *fd;
+ char *path, line[513];
+ FILE *fd;
- memset(line, 0, sizeof(line));
+ memset(line, 0, sizeof(line));
- path = smprintf("%s/%s", base, file);
- fd = fopen(path, "r");
- free(path);
- if (fd == NULL)
- return NULL;
+ path = smprintf("%s/%s", base, file);
+ fd = fopen(path, "r");
+ free(path);
+ if (fd == NULL)
+ return NULL;
- if (fgets(line, sizeof(line)-1, fd) == NULL)
- return NULL;
- fclose(fd);
+ if (fgets(line, sizeof(line)-1, fd) == NULL)
+ return NULL;
+ fclose(fd);
- return smprintf("%s", line);
+ return smprintf("%s", line);
}
char *
getbattery(char *base)
{
- char *co, status;
- int descap, remcap;
-
- descap = -1;
- remcap = -1;
-
- co = readfile(base, "present");
- if (co == NULL)
- return smprintf("");
- if (co[0] != '1') {
- free(co);
- return smprintf("not present");
- }
- free(co);
-
- co = readfile(base, "charge_full_design");
- if (co == NULL) {
- co = readfile(base, "energy_full_design");
- if (co == NULL)
- return smprintf("");
- }
- sscanf(co, "%d", &descap);
- free(co);
-
- co = readfile(base, "charge_now");
- if (co == NULL) {
- co = readfile(base, "energy_now");
- if (co == NULL)
- return smprintf("");
- }
- sscanf(co, "%d", &remcap);
- free(co);
-
- co = readfile(base, "status");
- if (!strncmp(co, "Discharging", 11)) {
- status = '-';
- } else if(!strncmp(co, "Charging", 8)) {
- status = '+';
- } else {
- status = '?';
- }
-
- if (remcap < 0 || descap < 0)
- return smprintf("invalid");
-
- return smprintf("%.0f%%%c", ((float)remcap / (float)descap) * 100, status);
+ // charging E20D, empty E20E, full E20F, 2/3 E210, 1/3 E211
+ char *co, status;
+ int descap, remcap;
+
+ descap = -1;
+ remcap = -1;
+
+ co = readfile(base, "present");
+ if (co == NULL)
+ return smprintf("");
+ if (co[0] != '1') {
+ free(co);
+ return smprintf("not present");
+ }
+ free(co);
+
+ co = readfile(base, "charge_full_design");
+ if (co == NULL) {
+ co = readfile(base, "energy_full_design");
+ if (co == NULL)
+ return smprintf("");
+ }
+ sscanf(co, "%d", &descap);
+ free(co);
+
+ co = readfile(base, "charge_now");
+ if (co == NULL) {
+ co = readfile(base, "energy_now");
+ if (co == NULL)
+ return smprintf("");
+ }
+ sscanf(co, "%d", &remcap);
+ free(co);
+
+ co = readfile(base, "status");
+ if (!strncmp(co, "Discharging", 11)) {
+ status = '-';
+ } else if(!strncmp(co, "Charging", 8)) {
+ status = '+';
+ } else {
+ status = '?';
+ }
+
+ if (remcap < 0 || descap < 0)
+ return smprintf("invalid");
+
+ return smprintf("%.0f%%%c", ((float)remcap / (float)descap) * 100, status);
}
char *
gettemperature(char *base, char *sensor)
{
- char *co;
+ char *co;
- co = readfile(base, sensor);
- if (co == NULL)
- return smprintf("");
- return smprintf("%02.0f°C", atof(co) / 1000);
+ co = readfile(base, sensor);
+ if (co == NULL)
+ return smprintf("");
+ return smprintf("%02.0f°C", atof(co) / 1000);
}
int
main(void)
{
- char *status;
- char *avgs;
- char *bat;
- char *bat1;
- char *tmar;
- char *tmutc;
- char *tmbln;
- char *t0, *t1, *t2;
-
- if (!(dpy = XOpenDisplay(NULL))) {
- fprintf(stderr, "dwmstatus: cannot open display.\n");
- return 1;
- }
-
- for (;;sleep(60)) {
- avgs = loadavg();
- bat = getbattery("/sys/class/power_supply/BAT0");
- bat1 = getbattery("/sys/class/power_supply/BAT1");
- tmar = mktimes("%H:%M", tzargentina);
- tmutc = mktimes("%H:%M", tzutc);
- tmbln = mktimes("KW %W %a %d %b %H:%M %Z %Y", tzberlin);
- t0 = gettemperature("/sys/devices/virtual/hwmon/hwmon0", "temp1_input");
- t1 = gettemperature("/sys/devices/virtual/hwmon/hwmon2", "temp1_input");
- t2 = gettemperature("/sys/devices/virtual/hwmon/hwmon4", "temp1_input");
-
- status = smprintf("T:%s|%s|%s L:%s B:%s|%s A:%s U:%s %s",
- t0, t1, t2, avgs, bat, bat1, tmar, tmutc,
- tmbln);
- setstatus(status);
-
- free(t0);
- free(t1);
- free(t2);
- free(avgs);
- free(bat);
- free(bat1);
- free(tmar);
- free(tmutc);
- free(tmbln);
- free(status);
- }
-
- XCloseDisplay(dpy);
-
- return 0;
+ char *status;
+ char *avgs;
+ char *bat1;
+ char *tmar;
+ char *tmutc;
+ char *tmbln;
+ char *t0, *t1, *t2;
+
+ char *localTime;
+ char *spTime;
+ char *date;
+ char *bat;
+
+ if (!(dpy = XOpenDisplay(NULL))) {
+ fprintf(stderr, "dwmstatus: cannot open display.\n");
+ return 1;
+ }
+
+ for (;;sleep(1)) {
+ /*
+ bat1 = getbattery("/sys/class/power_supply/BAT1");
+ t0 = gettemperature("/sys/devices/virtual/hwmon/hwmon0", "temp1_input");
+ t1 = gettemperature("/sys/devices/virtual/hwmon/hwmon2", "temp1_input");
+ t2 = gettemperature("/sys/devices/virtual/hwmon/hwmon4", "temp1_input");
+ */
+ localTime = mktimes("%H:%M", tzLocal);
+ spTime = mktimes("%H:%M", tzSaoPaulo);
+ date = mktimes("%d.%m.%y", tzLocal);
+
+ avgs = loadavg();
+ bat = getbattery("/sys/class/power_supply/BAT0");
+
+ // [wifi] [storage] [cpu usage] [cpu temp] [ram usage] [battery] [backlight] [volume] [time]
+ status = smprintf(
+ "%s"
+ " %s"
+ " %s%s%s%s%s%s%s%s",
+ bat,
+ avgs,
+ colourNeutral, iconClock, colourNormal, localTime, colourFaded, spTime, colourNormal, date);
+ setstatus(status);
+
+ free(localTime);
+ free(spTime);
+ free(date);
+ }
+
+ XCloseDisplay(dpy);
+
+ return 0;
}