From 4ec0c211eee0bfab45d1d1fdd220cfe68b0681fa Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Tue, 14 May 2019 10:05:19 +0200 Subject: Some exploratory changes, it looks like this will take longer than I thought, will finish later --- dwmstatus.c | 311 +++++++++++++++++++++++++++++++----------------------------- 1 file 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 -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; } -- cgit v1.2.3