DWM Status Bar
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
867 B

7 years ago
  1. char *
  2. readfile(char *base, char *file)
  3. {
  4. char *path, line[513];
  5. FILE *fd;
  6. memset(line, 0, sizeof(line));
  7. path = smprintf("%s/%s", base, file);
  8. fd = fopen(path, "r");
  9. if (fd == NULL) {
  10. perror("fopen");
  11. exit(1);
  12. }
  13. free(path);
  14. if (fgets(line, sizeof(line)-1, fd) == NULL) {
  15. perror("fgets");
  16. exit(1);
  17. }
  18. fclose(fd);
  19. return smprintf("%s", line);
  20. }
  21. char *
  22. getbattery(char *base)
  23. {
  24. char *co;
  25. int descap, remcap;
  26. descap = -1;
  27. remcap = -1;
  28. co = readfile(base, "present");
  29. if (co[0] != '1') {
  30. free(co);
  31. return smprintf("not present");
  32. }
  33. free(co);
  34. co = readfile(base, "charge_full_design");
  35. sscanf(co, "%d", &descap);
  36. free(co);
  37. co = readfile(base, "charge_now");
  38. sscanf(co, "%d", &remcap);
  39. free(co);
  40. if (remcap < 0 || descap < 0)
  41. return smprintf("invalid");
  42. return smprintf("%.0f", ((float)remcap / (float)descap) * 100);
  43. }