#!/opt/bin/perl
#  /usr/bin/perl
#
for (;$ARGV[0];shift @ARGV)
{ $pltId = $ARGV[0];
  $pltId =~ s+.*/++g;				# strip directory names
  $tabId = $pltId;
  if (!($pltId =~ s/time/plt/))			# substitute "time"
  { $pltId = $pltId.".plt";			# or append ".plt"
  }
  if (!($tabId =~ s/time/tab/))			# substitute "time"
  { $tabId = $tabId.".tab";			# or append ".tab"
  }

    print "-I-  processing: $ARGV[0]\n";	# shell output
  if (-e $pltId || -e $tabId)
  { print "-W- overwriting: $pltId $tabId\n";
  } else
  { print "        writing: $pltId $tabId\n";
  }

  open (inFile,  "<", $ARGV[0]) || die("-E- can't open input:  $!");
  open (pltFile, ">", $pltId)   || die("-E- can't open output: $!");
  open (tabFile, ">", $tabId)   || die("-E- can't open output: $!");

  print pltFile "# $pltId\t\t -- $ARGV[0]\n";
  print pltFile "# -- gnuplot: plot '<file>'  using 4:1:2:3 with errorbars\n";
  print pltFile "###########################################################\n";

  print tabFile "% $tabId\t\t -- $ARGV[0]\n";
  print tabFile "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
  print tabFile "\\begin{tabular}[t]{|r\@{,}l|r\@{,}l|r\@{,}l|}\n";
  print tabFile "\\hline\n";

  $plotX = 0;
  for($_=<inFile>;$_;)
  { if (($s, $u, $txt) = /^(\d+.\d+)u\s+(\d+.\d+)s\s+(.*)/)
    { $cnt = 1;
      $sum = $s + $u;
      $max = $sum;
      $min = $sum;
      $avr = $sum;
      print pltFile
		"###########################################################\n";
      print pltFile "# ", $s + $u, " = $s + $u $txt\n";
      for ($_=<inFile>; (($s, $u, $txt) = /^(\d+.\d+)u\s+(\d+.\d+)s\s+(.*)/);
	   $_=<inFile>)
      { $cnt++;
	$sum = $s + $u;
	$max = ($sum > $max)?$sum:$max;
	$min = ($sum < $min)?$sum:$min;
	$avr += $sum;
	print pltFile "# ", $s + $u, " = $s + $u $txt\n";
      };
      if ($cnt > 1)
      { $plotX++;
	print pltFile
		"# ---------------------------------------------------------\n";
	print pltFile $avr / $cnt, " $min $max $plotX\n";
	print pltFile
		"###########################################################\n";

	($x, $y) = round($avr/$cnt);
	print tabFile "\t$x&$y";
	($x, $y) = round($min);
	print tabFile "\t& $x&$y";
	($x, $y) = round($max);
	print tabFile "\t& $x&$y\\\\\n";
	print tabFile "% $cmdLine";
      }
    } else
    { if ($cmdLine =~ s/\\\s*\n//)
      { $cmdLine = $cmdLine.$lstLine;
      } else
      { $cmdLine  = $lstLine;
      }
      $lstLine = $_;
      print pltFile "# $_";
      $_=<inFile>;
    }
  }
  print tabFile "\\hline\n";
  print tabFile "\\end{tabular}\n";
  close inFile;
  close pltFile;
  close datFile;
}

sub round ($)
{ my $inVal = shift;
  if ($inVal =~ /\./)
  { ($x,$y) = /(\d+)(\d)/ for $inVal*1000;
    if ($y >= 5)
    { $x++;
    }
    ($x, $y, $z) = /(\d+)(\d)(\d)/ for $x;
    if ($z == 0)
    { return ($x,$y);
    } else
    { return ($x,$y.$z);
    }
  } else
  { return ($inVal, "0");
  }
}
