#!/usr/sww/bin/perl

# die if they didn't give us work to do
#
die "Please enter a list of files (or extensions) to report on!\n"
  if (@ARGV == 0);

# population for all runs
#
$M = 500;

# probability of success
#
$Z = 0.99;

# read all the files
#
$maxgen = 0;
for ($i = 0; $i < @ARGV; $i++) {

  # try to open the file
  #
  $file = $ARGV[$i];
  if (!open(DATA, $file)) {
    if (!open(DATA, 'longrun.'.$file)) {
      print STDERR "Couldn't read data file $file!\n";
      next;
    }

    # they only specified the extension
    #
    $file = 'longrun.'.$file;
  }

  # figure out what the array should be called
  #
  if ($file =~ /.*\.([^.]*$)/) {
    $array = $1;
  } else {
    $array = $file;
  }
  push(@arraylist, $array);

  while (<DATA>) {
    if (/[ 0-9]*: Seed=[0-9.]*, Last=([0-9]*), Best=[0-9]*, Time=([0-9.]*)/) {
      ($last,$time) = ($1,$2);
      $cmd = '$' . $array . "[$last]++;";
      eval $cmd;
      $maxgen = $last if ($maxgen < $last);
    } else {
      print STDERR "Mismatch '$_'"
	if (! /^Initial seed = / && !/^\s+[0-9]+: H\[.*\] S\[.*\]/);
    }
  }
  close(DATA);
}

print "   ";
foreach $array (@arraylist) {
  $cum = 0;
  for ($i = 0; $i <= $maxgen; $i++) {
    $cmd = '$' . $array . "[$i] += 0;";
    eval $cmd;
    $cmd = '$cum += $' . $array . "[$i];";
    eval $cmd;
    $cmd = '$' . $array . "cum[$i] = " . '$cum;';
    eval $cmd;
    $cmd = '$total' . $array . ' += $' . $array . "[$i];";
    eval $cmd;
  }
  printf "         %6s          ", $array;
}
print "\n";

for ($i = 0; $i < $maxgen; $i++) {
  foreach $array (@arraylist) {
    $cmd = '$P_Mi = $' . $array . "cum[$i] / " . '$total' . $array . ';';
    eval $cmd;
    if ($P_Mi == 0 || $P_Mi == 1) {
      $cmd = '$' . $array . 'P_Mi[' . $i . '] = 0;';
    } else {
      $cmd = '$' . $array . 'P_Mi[' . $i . '] = $P_Mi;';
      eval $cmd;
      $cmd = '$' . $array . '_Rz[$i] = int((log(1-$Z) / log(1-$P_Mi)) + 0.5);';
      eval $cmd;
      $cmd = '$I_Miz = $M * $i * $' . $array . '_Rz[$i];';
      eval $cmd;
      $cmd = '$' . $array . '_I_Miz[$i] = $I_Miz;';
      eval $cmd;
      $cmd = '$' . $array . '_Imin = $I_Miz if ($I_miz < $Imin' . $array . ');';
      eval $cmd;
    }
  }
}

for ($i = 0; $i < $maxgen; $i++) {
  printf "%2d:", $i;
  foreach $array (@arraylist) {
    $cmd = '$P_Mi = $' . $array . 'P_Mi[$i];';
    eval $cmd;
    if ($P_Mi == 0 || $P_Mi == 1) {
      print "                      ";
    } else {
      $cmd = '$Rz = $' . $array . '_Rz[$i];';
      eval $cmd;
      $cmd = '$I_Miz = $' . $array . '_I_Miz[$i];';
      eval $cmd;
      $cmd = '$IMin = $' . $array . '_IMin;';
      eval $cmd;
      printf " %3.2f %5d %8d", $P_Mi, $Rz, $I_Miz;
      print ($I_Miz <= $IMin ? '*' : ' ');
    }
  }
  print "\n";
}

exit 0;
