#include #include #include #include #include #define INTERVAL 10 int main(void) { Display *display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "dwmst: cannot open display.\n"); } /* time */ char tbuffer[128] = { 0 }; time_t currentTime; struct tm *timeinfo; /* battery */ char bbuffer[6] = { 0 }; FILE *f; /* status */ char status[256] = { 0 }; for (;;sleep(INTERVAL)) { /* get current time */ time(¤tTime); timeinfo = localtime(¤tTime); strftime(tbuffer, sizeof(tbuffer), "%a %b %d %H:%M", timeinfo); if (OPTION_BATTERY) { /* battery status */ f = fopen("/sys/class/power_supply/BAT0/capacity", "r"); if (f == NULL) { fprintf(stderr, "dwmst: cannot access battery.\n"); } else { fgets(bbuffer, 4, f); strtok(bbuffer, "\n"); /* remove trailing white space */ strcat(bbuffer, "%"); fclose(f); } f = fopen("/sys/class/power_supply/BAT0/status", "r"); if (f == NULL) { fprintf(stderr, "dwmst: cannot access battery.\n"); } else { switch(getc(f)) { case 'D': /* Discharging */ strcat(bbuffer, "-"); break; case 'C': /* Charging */ strcat(bbuffer, "+"); break; case 'F': /* Full */ strcat(bbuffer, "="); } fclose(f); } } /* build status */ if (OPTION_BATTERY) sprintf(status, "%s | %s", tbuffer, bbuffer); else sprintf(status, "%s", tbuffer); /* store root window name */ XStoreName(display, DefaultRootWindow(display), status); XSync(display, False); } }