#! /usr/cs/bin/perl
#
# File: combine_graphs.pl
#
# Purpose: Combines multiple graphs onto one page (TEX)
#
# Modifications:
#   04-JUN-1998  txe  Initial creation
#   05-JUN-1998  txe  Added .dvi and .ps creation
#   08-JUN-1998  txe  Fixed bad spacing
#   15-JUN-1998  txe  Fixed misalignments
#   17-JUN-1998  txe  Fixing bad vertical spacing on last graph
#   18-JUN-1998  txe  Fixed multi file ordering
#

require "subs/ir_subs.pm";

$data_dir = GetArgument (0, "data directory", "test");

&CombineGraphs ($data_dir);
print "Done.\n\n";

##########################################################################

sub CombineGraphs {
  my ($data_dir) = @_;
  my (@ids, $id) = ("r.5", "r.10", "r.n", "h.5", "h.10", "h.n",
		    "r.avg", "h.avg", "p.avg", "mse", "nstar");

  foreach $id (@ids) {
    &MakeCombo ("$data_dir/graphs/*.$id.eps", "$data_dir/graphs/all.$id.tex");
  }
}

##########################################################################

sub MakeCombo {
  my ($in_files, $tex_file) = @_;
  my $ps_file  = $tex_file;
  $ps_file =~ s/\.tex/\.ps/;

  print "Combining $in_files into $tex_file/.ps\n";

  if (!SaveTex ($in_files, $tex_file)) {
    print "Error saving TEX file '$tex_file'\n";
    exit;
  }

  if (!TexToPS ($tex_file, $ps_file)) {
    print "Error creating postscript file '$ps_file'\n";
    exit;
  }
}

##########################################################################

sub SaveTex {
  my ($in_files, $out_file) = @_;
  my ($in_file, %unsorted_in_files);
  my ($width, $height, $vspace) = (2.5, 2.5, 1.0); 

  while ($in_file = <./$in_files>) {
    $in_file =~ s/\.\///;
    $unsorted_in_files {$in_file} = 1;
  }

  my @sorted_in_files = sort ByInFileName (keys (%unsorted_in_files));

  if (!open (OUT, ">$out_file")) {
    print "Error writing to TEX file '$out_file'\n";
    return 0;
  }

  print OUT "\\documentclass\[\]\{article\}\n";
  print OUT "\\usepackage\{epsfig,fullpage,twocolumn\}\n";
  print OUT "\\begin\{document\}\n\n";

  foreach $in_file (@sorted_in_files) {
    print OUT "%$in_file:\n";
    print OUT "\\epsfig \{ file = $in_file, width = ${width}in, height = ${height}in \}\n";
    print OUT "\n\n";
  }

  print OUT "\\vspace \{ ${vspace}in \}\n";
  print OUT "\n\\end\{document\}\n";
  close (OUT);
  return 1;
}

##########################################################################

sub ByInFileName {
  my ($a_num, $b_num);

  if ($a =~ /multi_/) {
    if ($b =~ /multi_/) {
      $a_num = $a;
      $a_num =~ s/.*multi_//;
      $a_num =~ s/\..*//;

      $b_num = $b;
      $b_num =~ s/.*multi_//;
      $b_num =~ s/\..*//;

      $a_num <=> $b_num;
    }
    else {
      1;
    }
  }
  elsif ($b =~ /multi_/) {
    -1;
  }
  else {
    $a cmp $b;
  }
}

##########################################################################

sub TexToPS {
  my ($tex_file, $ps_file) = @_;
  my $temp_file = "temp.tex";
  my $dvi_file  = $temp_file;
  $dvi_file =~ s/\..*/\.dvi/;

  &System ("cp $tex_file $temp_file");
  &System ("/usr/cs/contrib/bin/latex $temp_file > temp.out");
  &System ("/tex/bin/dvips $dvi_file -o $ps_file 2> temp.out");
  return 1;
}

##########################################################################
