@progs = ('barbie.pl', 'blumberg.pl', 'boessenkool.pl', 'boger.pl',
          'bruhat.pl', 'camilio.pl', 'finkel.pl', 'fysh.pl',
          'hek.pl', 'hek2.pl', 'hofmann.pl', 'kennedy.pl',
          'koenig.pl', 'koenig2.pl', 'kripa.pl', 'lopresto.pl',
          'marvell.pl', 'mccarthy.pl', 'mjd.pl', 'mjd2.pl',
          'payrard.pl', 'ryan.pl', 'ryan2.pl', 'sanger.pl',
          'scott.pl', 'sde-i.pl', 'sde.pl', 'sidhekin.pl',
          'trottmann.pl', 'wilson.pl', 'wilson1.pl', 'wilson2.pl',
         );

@progs = @ARGV if @ARGV;

for $p (@progs) {
  my (undef, undef, $scs, $scu) = times;
  my %d;
  unless (open F, "perl -MScoreTest2 -X $p < /dev/null |") {
    $d{status} = -1;
    $d{result} = $!;
    next;
  }
  while (my $out = <F>) {
    next unless $out =~ /^\*{3}FAILURES (\d+)/;
    $d{failures} = $1;
    $d{result} = $out;
  }
  close F;
  $d{status} = $?;

  my (undef, undef, $ecs, $ecu) = times;
  $d{system} = $ecs-$scs;
  $d{user}   = $ecu-$scu;
  $d{total}  = $d{system} + $d{user};
  $d{failures} = '999' unless defined $d{failures};
  $data{$p} = \%d;
}

for $p (sort by_time keys %data) {
  *d = $data{$p};
  write;
}

sub by_time {
  my $aworks = ($data{$a}{failures} == 0);
  my $bworks = ($data{$b}{failures} == 0);
  $bworks <=> $aworks ||
  $data{$a}{total} <=>   $data{$b}{total};
}

format STDOUT_TOP =
             -------TIMES------
        Program    Sys   User  Total   Wrong  $?   $!
.

format STDOUT =
@>>>>>>>>>>>>>> @###.# @###.# @###.#   @#### (@##, @<<<<<<<<<<<<<<<<<<<<<<<<<<)
$p, $d{user}, $d{system}, $d{total}, $d{failures}, $d{status}, $d{result}
.
