#define BATT_NOW "/sys/class/power_supply/BAT0/charge_now" #define BATT_FULL "/sys/class/power_supply/BAT0/charge_full" #define BATT_STATUS "/sys/class/power_supply/BAT0/status" #include #include #include #include char * smprintf(char *fmt, ...) { va_list fmtargs; char *buf = NULL; va_start(fmtargs, fmt); if (vasprintf(&buf, fmt, fmtargs) == -1){ fprintf(stderr, "malloc vasprintf\n"); exit(1); } va_end(fmtargs); return buf; } char * getbattery(){ long lnum1, lnum2 = 0; char *status = malloc(sizeof(char)*12); char s = '?'; FILE *fp = NULL; if ((fp = fopen(BATT_NOW, "r"))) { fscanf(fp, "%ld\n", &lnum1); fclose(fp); fp = fopen(BATT_FULL, "r"); fscanf(fp, "%ld\n", &lnum2); fclose(fp); fp = fopen(BATT_STATUS, "r"); fscanf(fp, "%s\n", status); fclose(fp); if (strcmp(status,"Charging") == 0) s = '+'; if (strcmp(status,"Discharging") == 0) s = '-'; if (strcmp(status,"Full") == 0) s = '='; return smprintf("%c%ld%%", s,(lnum1/(lnum2/100))); } else return smprintf(""); }