#!/usr/bin/perl
#
# $Id: sim2lav,v 1.3 1991/05/25 05:46:14 schwartz Exp $
#

die "Usage: simtolav x0 x1 y0 y1\n" unless $#ARGV == 3;
($original_x0, $original_x1, $original_y0, $original_y1) = @ARGV;

if ($original_x0 < 1 || $original_y0 < 1) {
  die "Alignments must start at a non-negative offset.\n";
}

#
# Chomp on header
#
print "#:lav\n";
print "gen { \"simtolav\" }\n";
$upper = $lower = 'axis-label';
while (<STDIN>) {
  last if /^Time/;
  last if /^\*/;
  $upper = $1 if /\s*Upper.*:\s*([\w\.]+)/;
  $lower = $1 if /\s*Lower.*:\s*([\w\.]+)/;
}
print "seq { \"$upper\" $original_x0 $original_x1\n";
print "      \"$lower\" $original_y0 $original_y1 }\n";
print "des { \"description?\" }\n";
#
# Munch on data
#
$xhi = $xlo = $xsc = '';
$score = 0.0;
while (<STDIN>) {
    last if /^Time/;
    next if /^\s*$/; 
    if (/^\*/) { 
	do report();
	$xhi = $xlo = $xsc = '';
	$score = 0;
    }
    elsif (/^\s*Similarity Score : ([\d.]+)/) { 
	$score = $1; 
    }
    elsif (/^\s*Begins at \((\d+),\s*(\d+)\) and Ends at \((\d+),\s*(\d+)\)/) {
	$x0 = $1; $y0 = $2;
	$x1 = $3; $y1 = $4;
    }
    elsif (/^\s*\d+/) {
	$hi = <STDIN>; $hi =~ s/\s*\d+\s(.*)\n/\1/; $xhi = $xhi . $hi;
	$sc = <STDIN>; $sc =~ s/\s{6}(.*)\n/\1/;    $xsc = $xsc . $sc;
	$lo = <STDIN>; $lo =~ s/\s*\d+\s(.*)\n/\1/; $xlo = $xlo . $lo;
    }
}
do report() if length($xhi) > 0;
exit 0;

#
# print in lav format
#
sub report {
    $lop = 0;
    $scp = 0;
    $hip = 0;
    $len = 0;
    print "align { score $score begin $x0 $x1 end $y0 $y1\n";
    for (;;) {
	$len = 0;
	$pt = 0;

	while ((substr($xlo,$lop,1) ne ' ') && (substr($xhi,$hip,1) ne ' ') 
		&& ($lop < length($xlo))) {
	    ++$lop;
	    ++$hip;
	    ++$len;
	    if (substr($xsc,$scp,1) eq '|') {++$pt;}
	    ++$scp;
	}

	printf "line %d %d %d %d %f\n",
		$x0 + $original_x0 - 1,
		$y0 + $original_y0 - 1,
		$x0+$len-1 + $original_x0 - 1, 
		$y0+$len-1 + $original_y0 - 1, 
		($pt)*100.0/$len;

	$x0 += $len;	
	$y0 += $len;	
	last if (length($xlo) <= $lop);
	while (substr($xhi,$hip,1) eq ' ') {
	    ++$y0;
	    ++$lop;
	    ++$hip;
	    ++$scp;
	}
	while (substr($xlo,$lop,1) eq ' ') {
	    ++$x0;
	    ++$lop;
	    ++$hip;
	    ++$scp;
	}
    }
    print "}\n";
}
