-/*
- * Get battery information from /sys. Note that it uses the design capacity to
- * calculate the percentage, not the last full capacity, so you can see how
- * worn off your battery is.
- *
- */
-static char *get_battery_info(const char *path) {
- char buf[1024];
- static char part[512];
- char *walk, *last;
- int fd;
- int full_design = -1,
- remaining = -1,
- present_rate = -1;
- charging_status_t status = CS_DISCHARGING;
-
- if ((fd = open(path, O_RDONLY)) == -1)
- return "No battery found";
-
- memset(part, 0, sizeof(part));
- (void)read(fd, buf, sizeof(buf));
- for (walk = buf, last = buf; (walk-buf) < 1024; walk++)
- if (*walk == '=') {
- if (BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL_DESIGN") ||
- BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL_DESIGN"))
- full_design = atoi(walk+1);
- else if (BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_NOW") ||
- BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_NOW"))
- remaining = atoi(walk+1);
- else if (BEGINS_WITH(last, "POWER_SUPPLY_CURRENT_NOW"))
- present_rate = atoi(walk+1);
- else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Charging"))
- status = CS_CHARGING;
- else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Full"))
- status = CS_FULL;
- } else if (*walk == '\n')
- last = walk+1;
- (void)close(fd);
-
- if ((full_design == 1) || (remaining == -1))
- return part;
-
- if (present_rate > 0) {
- float remaining_time;
- int seconds, hours, minutes;
- if (status == CS_CHARGING)
- remaining_time = ((float)full_design - (float)remaining) / (float)present_rate;
- else if (status == CS_DISCHARGING)
- remaining_time = ((float)remaining / (float)present_rate);
- else remaining_time = 0;
-
- seconds = (int)(remaining_time * 3600.0);
- hours = seconds / 3600;
- seconds -= (hours * 3600);
- minutes = seconds / 60;
- seconds -= (minutes * 60);
-
- (void)snprintf(part, sizeof(part), "%s %.02f%% %02d:%02d:%02d",
- (status == CS_CHARGING ? "CHR" :
- (status == CS_DISCHARGING ? "BAT" : "FULL")),
- (((float)remaining / (float)full_design) * 100),
- max(hours, 0), max(minutes, 0), max(seconds, 0));
- } else {
- (void)snprintf(part, sizeof(part), "%s %.02f%%",
- (status == CS_CHARGING ? "CHR" :
- (status == CS_DISCHARGING ? "BAT" : "FULL")),
- (((float)remaining / (float)full_design) * 100));
- }
- return part;
-}
-
-/*
- * Return the IP address for the given interface or "no IP" if the
- * interface is up and running but hasn't got an IP address yet
- *
- */
-static const char *get_ip_address(const char *interface) {
- static char part[512];
- struct ifreq ifr;
- struct sockaddr_in addr;
- socklen_t len = sizeof(struct sockaddr_in);
- memset(part, 0, sizeof(part));
-
- /* First check if the interface is running */
- (void)strcpy(ifr.ifr_name, interface);
- if (ioctl(general_socket, SIOCGIFFLAGS, &ifr) < 0 ||
- !(ifr.ifr_flags & IFF_RUNNING))
- return NULL;
-
- /* Interface is up, get the IP address */
- (void)strcpy(ifr.ifr_name, interface);
- ifr.ifr_addr.sa_family = AF_INET;
- if (ioctl(general_socket, SIOCGIFADDR, &ifr) < 0)
- return "no IP";
-
- memcpy(&addr, &ifr.ifr_addr, len);
- (void)inet_ntop(AF_INET, &addr.sin_addr.s_addr, part, len);
- if (strlen(part) == 0)
- (void)snprintf(part, sizeof(part), "no IP");
-
- return part;
-}
+int main(int argc, char *argv[]) {
+ unsigned int j;
+
+ cfg_opt_t general_opts[] = {
+ CFG_STR("output_format", "dzen2", CFGF_NONE),
+ CFG_BOOL("colors", 1, CFGF_NONE),
+ CFG_STR("color_good", "#00FF00", CFGF_NONE),
+ CFG_STR("color_degraded", "#FFFF00", CFGF_NONE),
+ CFG_STR("color_bad", "#FF0000", CFGF_NONE),
+ CFG_STR("color_separator", "#333333", CFGF_NONE),
+ CFG_INT("interval", 1, CFGF_NONE),
+ CFG_END()
+ };