- }
-
- if ((full_design == -1) || (remaining == -1)) {
- OUTPUT_FULL_TEXT(format_down);
- return;
- }
-
- (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
-
- float percentage_remaining = (((float)remaining / (float)full_design) * 100);
- /* Some batteries report POWER_SUPPLY_CHARGE_NOW=<full_design> when fully
- * charged, even though that’s plainly wrong. For people who chose to see
- * the percentage calculated based on the last full capacity, we clamp the
- * value to 100%, as that makes more sense.
- * See http://bugs.debian.org/785398 */
- if (last_full_capacity && percentage_remaining > 100) {
- percentage_remaining = 100;
- }
- if (integer_battery_capacity) {
- (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.00f%s", percentage_remaining, pct_mark);
- } else {
- (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%s", percentage_remaining, pct_mark);
- }
-
- if (present_rate > 0) {
- float remaining_time;
- int seconds, hours, minutes, seconds_remaining;
- 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_remaining = (int)(remaining_time * 3600.0);
-
- hours = seconds_remaining / 3600;
- seconds = seconds_remaining - (hours * 3600);
- minutes = seconds / 60;
- seconds -= (minutes * 60);
-
- if (status == CS_DISCHARGING && low_threshold > 0) {
- if (strcasecmp(threshold_type, "percentage") == 0 && percentage_remaining < low_threshold) {
- START_COLOR("color_bad");
- colorful_output = true;
- } else if (strcasecmp(threshold_type, "time") == 0 && seconds_remaining < 60 * low_threshold) {
- START_COLOR("color_bad");
- colorful_output = true;
- } else {
- colorful_output = false;
- }