+#include "config.h"
+
+static void
+setstatus(const char *str)
+{
+ /* set WM_NAME via X11 */
+ XStoreName(dpy, DefaultRootWindow(dpy), str);
+ XSync(dpy, False);
+}
+
+static char *
+smprintf(const char *fmt, ...)
+{
+ va_list ap;
+ char tmp[120];
+ char *ret = NULL;
+
+ va_start(ap, fmt);
+ vsnprintf(tmp, sizeof(tmp)-1, fmt, ap);
+ tmp[strlen(tmp)+1] = '\0';
+
+ if (asprintf(&ret, "%s", tmp) < 0)
+ return NULL;
+
+ va_end(ap);
+ return ret;
+}
+
+static char *
+battery_perc(const char *battery)
+{
+ int now, full, perc;
+ char batterynowfile[64];
+ char batteryfullfile[64];
+ FILE *fp;
+
+ strlcpy(batterynowfile, BATTERY_PATH, sizeof(batterynowfile));
+ strlcat(batterynowfile, battery, sizeof(batterynowfile));
+ strlcat(batterynowfile, "/", sizeof(batterynowfile));
+ strlcat(batterynowfile, BATTERY_NOW, sizeof(batterynowfile));
+
+ strlcpy(batteryfullfile, BATTERY_PATH, sizeof(batteryfullfile));
+ strlcat(batteryfullfile, battery, sizeof(batteryfullfile));
+ strlcat(batteryfullfile, "/", sizeof(batteryfullfile));
+ strlcat(batteryfullfile, BATTERY_FULL, sizeof(batteryfullfile));
+
+ if (!(fp = fopen(batterynowfile, "r"))) {
+ fprintf(stderr, "Error opening battery file: %s.\n", batterynowfile);
+ return smprintf(UNKNOWN_STR);
+ }
+
+ fscanf(fp, "%i", &now);
+ fclose(fp);
+
+ if (!(fp = fopen(batteryfullfile, "r"))) {
+ fprintf(stderr, "Error opening battery file.\n");
+ return smprintf(UNKNOWN_STR);
+ }
+
+ fscanf(fp, "%i", &full);
+ fclose(fp);
+
+ perc = now / (full / 100);
+
+ return smprintf("%d%%", perc);
+}
+
+static char *
+cpu_perc(void)