#!/usr/bin/perl -w

(@ARGV==2) || die("usage: list-inits cds fasta-file\n");

$list=shift(@ARGV); 
$seqs=shift(@ARGV);

open(LIST,$list) || die("No $list!\n");
open(SEQ,$seqs) || die ("No $seqs!\n"); 

$seq=" ";
while($seq ne "") {
  ($seq,$header)=load_next_seq(\*SEQ);
  $contig{$header}=$seq;
}
close(SEQ);

$pvalue=0;
$matrix=0;

while(<LIST>) {
  ($name,$start,$end)=split(" ",$_);
  if (index($start,"e")>-1) { 
    ($name,$pvalue,$matrix,$start,$end)=split(" ",$_);
  }
  $init=substr(lookat($contig{$name},$start,$end),0,3);
  if(!isinit($init)) {next;}
  printf("%15s %6d %6d %3s\n",$name,$start,$end,$init);
  
}
close(LIST);

sub load_next_seq {
  my $fname=shift;
  my $seq=""; my $header=""; my $curpos=0; 
  while(<$fname>) {
    chop($_);
    if (/^>/) {
      if ($header ne "") {last;}
      else {($header)=split(" ",substr($_,1));}
    }
    else{$seq.=uc($_);}
    $curpos = tell($fname);
  }
  seek($fname, $curpos, 0);
  return ($seq,$header);
}

sub lookat
{
  ($seq,$lstart,$lend)=@_;
  my ($ln,$str);  
  if ($lstart < $lend)
  {
    if ($lstart<0) {$lstart=0;}  
    $ln = $lend+1-$lstart;
    $str = substr($seq,$lstart-1,$ln);
  }
  else
  {
    if ($lstart>length($seq)) {$lstart=length($seq);}  
    $ln = $lstart+1-$lend;
    $str = substr($seq,$lend-1,$ln);
    $str = complement($str);
   }
   return $str;
}

sub complement {
  my($seq) = @_;
    my($rev,$i,$j,$c);

    $rev = $seq;
    $ln = length($rev);

    for ($i=0, $j=($ln-1); $i < $ln; $i++,$j--)
    {
        $c = substr($seq,$j,1);
        if     ($c eq "A") {$c = "T";}
        elsif  ($c eq "C") {$c = "G";}
        elsif  ($c eq "G") {$c = "C";}
        elsif  ($c eq "T") {$c = "A";}
        else               {$c = "X";}
        substr($rev,$i,1) = $c;
    }
    return $rev;
}
  
sub isinit {
  my $triplet=pop(@_);
  if (($triplet eq "ATG") || ($triplet eq "GTG") || ($triplet eq "TTG")) {
    return 1;
  }
  else {
    return 0;
  }
}

