new-acpi-battery.c - dwmstatus - A simple dwm status application in C.
 (HTM) git clone git://git.suckless.org/dwmstatus
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       new-acpi-battery.c (867B)
       ---
            1 char *
            2 readfile(char *base, char *file)
            3 {
            4         char *path, line[513];
            5         FILE *fd;
            6 
            7         memset(line, 0, sizeof(line));
            8 
            9         path = smprintf("%s/%s", base, file);
           10         fd = fopen(path, "r");
           11         if (fd == NULL) {
           12                 perror("fopen");
           13                 exit(1);
           14         }
           15         free(path);
           16 
           17         if (fgets(line, sizeof(line)-1, fd) == NULL) {
           18                 perror("fgets");
           19                 exit(1);
           20         }
           21         fclose(fd);
           22 
           23         return smprintf("%s", line);
           24 }
           25 
           26 char *
           27 getbattery(char *base)
           28 {
           29         char *co;
           30         int descap, remcap;
           31 
           32         descap = -1;
           33         remcap = -1;
           34 
           35         co = readfile(base, "present");
           36         if (co[0] != '1') {
           37                 free(co);
           38                 return smprintf("not present");
           39         }
           40         free(co);
           41 
           42         co = readfile(base, "charge_full_design");
           43         sscanf(co, "%d", &descap);
           44         free(co);
           45 
           46         co = readfile(base, "charge_now");
           47         sscanf(co, "%d", &remcap);
           48         free(co);
           49 
           50         if (remcap < 0 || descap < 0)
           51                 return smprintf("invalid");
           52 
           53         return smprintf("%.0f", ((float)remcap / (float)descap) * 100);
           54 }
           55