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