int main(void) { char *status; float mem; int bat0; char *datetime; char *address; char battext[6]; char *volume; if (!(dpy = XOpenDisplay(NULL))) { fprintf(stderr, "Cannot open display.\n"); return 1; } status = xmalloc(200); for (;;sleep(1)) { datetime = getdatetime(); mem = getmeminfo(); bat0 = getbattery(); address = getaddress(); volume = getvolume(); if (ischarging()) strcpy(battext, "ac:"); else { if (bat0 > 50) strcpy(battext, "bat:"); else if (bat0 < 20) strcpy(battext, "bat:"); else strcpy(battext, "bat:"); } snprintf(status, 200, "|%s|mem:%0.0f%%|%s%d%%|vol:%s|%s|", address, mem, battext, bat0, volume, datetime); free(datetime); free(address); free(volume); setstatus(status); } free(status); XCloseDisplay(dpy); return 0; }
char* getbattery() { char *co; int descap, remcap; //int energy_now, energy_full, voltage_now; //return ((float)energy_now * 1000 / (float)voltage_now) * 100 / ((float)energy_full * 1000 / (float)voltage_now); descap = -1; remcap = -1; co = readfile(present); if (co == NULL || co[0] != '1') { if (co != NULL) free(co); return smprintf(""); } free(co); co = readfile(energy_full); if (co == NULL) return smprintf(""); sscanf(co, "%d", &descap); free(co); co = readfile(energy_now); if (co == NULL) return smprintf(""); sscanf(co, "%d", &remcap); free(co); if (remcap < 0 || descap < 0) return smprintf("invalid"); float charge = ((float)remcap / (float)descap) * 100; return smprintf("Batt %.0f%%%s \x19 ", charge, (ischarging()? "<<" : ">>")); }