+ while (<$bat_inf_fh>) {
+ if (/(.+?)\s*:\s*(-?\d+)/) {
+ $battery_info->{$1} = int $2;
+ }
+ }
+ undef $bat_inf_fh;
+ $bat_inf{charging} = hex $battery_info->{flags} & 2;
+ $bat_inf{current} = 0;
+ if ($battery_info->{current} > 0) {
+ $bat_inf{current} = floor($battery_info->{current}/$max_in*1000)/10;
+ }
+ else {
+ $bat_inf{current} = floor($battery_info->{current}/$max_out*1000)/10;
+ }
+ $bat_inf{percent} = floor($battery_info->{'charge'}/$battery_info->{'max_charge'}*1000)/10;
+ $bat_inf{time_rem} = $battery_info->{'time rem.'};
+}
+elsif (-r '/sys/devices/platform/smapi/BAT0/remaining_capacity') {
+ $bat_inf{percent} = catfile('/sys/devices/platform/smapi/BAT0/remaining_percent');
+ $bat_inf{charging} = catfile('/sys/devices/platform/smapi/BAT0/state') ne 'discharging';
+ $bat_inf{time_rem} = $bat_inf{charging} ? catfile('/sys/devices/platform/smapi/BAT0/remaining_charging_time') :
+ catfile('/sys/devices/platform/smapi/BAT0/remaining_running_time');
+ $bat_inf{time_rem} !~ /\d/ and $bat_inf{time_rem} = 0;
+ $bat_inf{time_rem} *= 60;
+ $bat_inf{current} = -catfile('/sys/devices/platform/smapi/BAT0/current_now') / 10;}
+else {
+ print STDERR "No battery information\n";
+ exit 1;