#!/usr/bin/perl
#
# fixprogs  - run through the list of entropy commands and
#             score out the losers
#

$entscale = 50; # divisor for optional entropy measurement

sub usage {
  return("Usage: $0 <command file>\n");
}

if (($#ARGV == -1) || ($#ARGV>1)) {
  die(&usage);
}

# 'undocumented' option - run ent (in second param) on the output
if ($#ARGV==1) {
  $entcmd=$ARGV[1]
} else {
  $entcmd = ""
};

$infilename = $ARGV[0];

if (!open(IN, "<".$infilename)) {
  die("Couldn't open input file");
}
$outfilename=$infilename.".out";
if (!open(OUT, ">$outfilename")) {
  die("Couldn't open output file $outfilename");
}
@infile=<IN>;

select(OUT); $|=1; select(STDOUT);

foreach (@infile) {
  if (/^\s*\#/ || /^\s*$/) {
    print OUT;
    next;
  }
  ($cmd, $path, $est) = /^\"([^\"]+)\"\s+([\w\/_-]+)\s+([\d\.\-]+)/o;
  @args = split(/ /, $cmd);
   if (! ($pid = fork())) {
     # child
     close STDIN; close STDOUT; close STDERR;
     open (STDIN,  "</dev/null");
     open (STDOUT, ">/dev/null");
     open (STDERR, ">/dev/null");
     exec $path @args;
     exit 1; # shouldn't be here
   }
   # parent
   waitpid ($pid, 0); $ret=$? >> 8;

  if ($ret != 0) {
    $path = "undef";
  } else {
    if ($entcmd ne "") {
      # now try to run ent on the command
      $mostargs=join(" ", splice(@args,1));
      print "Evaluating '$path $mostargs'\n";
      @ent = qx{$path $mostargs | $entcmd -b -t};
      @ent = grep(/^1,/, @ent);
      ($null, $null, $rate) = split(/,/, $ent[0]);
      $est = $rate / $entscale;		# scale the estimate back
    }
  }
  print OUT "\"$cmd\" $path $est\n";
}

close(IN);
