#!/usr/local/bin/perl5 -w

$input1 = 'chaintest.scan';
$output= "OUT";
$output2= "OUT.out";

open (INFILE,"$input1")||die "cannot open $input1";
open(OUTFILE,">$output")||die "canoot\n";
open(OUTFILE2,">$output2")||die "canoot\n";

#######################################################
&preprocess;
open (INFILE2,"$output")||die "cannot open $input1";
$/=";";
$ct_scanout = 0;
while (<INFILE2>) {
  chomp;
  $ct_scanout = 1 if (/apply\s*\"grp[0-9]_unload\"/);
  $chain_test=1  if (/CHAIN_TEST/);

  if ((/\t*chain\s+\"chain([0-9])\"/) && ($chain_test)){
    $chain_number = $1;
    &cleanup;
    $chain_input = (split /=/,$_)[1];
    $chain_input =~ tr/\"//d;
    $chain[$chain_number] = [split //, $chain_input];
    &printout if $chain_number == 7;
  }
}

sub printout {
  if ($ct_scanout ){
    for ($i=0;$i<@{$chain[3]};$i++){
      for (@chain) { 
        $_->[$i] =~ s/0/L/g; 
        $_->[$i] =~ s/1/H/g;
      }
      my @chars = map $_->[$i], @chain;
      print OUTFILE2 "\n(ct_so\n", join("", @chars), "\n )";
    }
    $ct_scanout=0;
  } elsif ($ct_scanout==0) {
    for ($i=0;$i<@{$chain[3]};$i++) {
      for (@chain) {
        $_->[$i] =~ s/X/0/g;
      }
      my @chars = map $_->[$i], @chain;
      print OUTFILE2 "\n(ct_si  $ct_si{tdi}\n", join("", @chars), "\n )";
    }
  }
}

sub cleanup {
  s/^\s+|\s*\n+$//g;
  tr/\t  //d;            
  s/\n//g;                
  s/\\//g;
}

sub preprocess {
  while (<INFILE>){
    chomp;
    s/$/;/g if (/apply/);
    print OUTFILE ("$_\n");
    last if ( /^SCAN_CELLS/);
  }
  close OUTFILE;
}

