sub mk_bar { my ($width, $map) = @_; return '
'; } ## end sub mk_bar sub mk_completion_bar { my ($map, $desc) = @_; my $out; my @data = @$map; my $len = @data; if ($len==0) { return; } # Currently percentage, change this to however many segments you want # and change mk_bar above to match. my $barwidth = 100; my $err = int($len / 2); my $w = 0; my $state = undef; my $cur = 0; for (my $i = 0; $i < $len; $i++) { $cur = ($data[$i] > $cur) ? $data[$i] : $cur; $err -= $barwidth; if ($err < 0) { if (!defined($state) || $state != $cur) { if ($w > 0) { $out .= mk_bar($w, $desc->{$state}); } $w = 0; $state = $cur; } while ($err < 0) { $w++; $err += $len; } $cur = 0; } } if ($w > 0) { $out .= mk_bar($w, $desc->{$state}); } return $out; } ## end sub mk_completion_bar