#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") FILE *fenergy_now, *fenergy_full, *fbat_status; 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(fenergy_now,"energy_now"); bat_open(fenergy_full,"energy_full"); bat_open(fbat_status,"status"); if (fenergy_now) { int energy_now, energy_full; rewind(fenergy_now); rewind(fenergy_full); rewind(fbat_status); energy_now = energy_full = 0; int c; bat_val(fenergy_now, energy_now); bat_val(fenergy_full, energy_full); bat_p = (float)energy_now * 100 / energy_full; 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"); }