#include #include #include "block.h" #define DIR "/sys/class/power_supply/BAT0" #define EN DIR"/energy_now" #define EF DIR"/energy_full" #define ST DIR"/status" FILE *en; FILE *ef; FILE *st; int c, state, bat_delay = 6; float en_n, ef_n; float p; char pch[13], icon[5]; void battery(void) { if (bat_delay++ < 6) goto show_stat; else bat_delay = 0; if (!en) en = fopen(EN,"r"); if (!ef) ef = fopen(EF,"r"); if (!st) st = fopen(ST,"r"); if (en && ef && st) { rewind(en); rewind(ef); rewind(st); en_n = ef_n = 0; while((c = fgetc(en)) != '\n') en_n = 10 * en_n + (c - '0'); while((c = fgetc(ef)) != '\n') ef_n = 10 * ef_n + (c - '0'); p = en_n * 100 / ef_n; state = fgetc(st); switch(state) { case 'N': strncpy(icon,"",4); break; case 'C': strncpy(icon,"󱐋",5); break; case 'D': if (p > 0 && p <= 10) strncpy(icon," ",5); else if (p > 10 && p <= 30) strncpy(icon," ",5); else if (p > 30 && p <= 50) strncpy(icon," ",5); else if (p > 50 && p <= 79) strncpy(icon," ",5); else if (p > 79) strncpy(icon," ",5); } snprintf(pch,13,"%s %02.2f%%",icon,p); } show_stat: if (state == 'D') block(pch,"#222222","#83a59899","#83a59899"); else if (p < 30) block(pch,"#222222","#ea544399","#ea544399"); else if (state == 'N' || state == 'C') block(pch,"#222222","#dfb24999","#dfb24999"); }