     1	#!/usr/local/bin/perl5 -w
     2	
     3	$input1 = 'chaintest.scan';
     4	$output= "OUT";
     5	$output2= "OUT.out";
     6	
     7	open (INFILE,"$input1")||die "cannot open $input1";
     8	open(OUTFILE,">$output")||die "canoot\n";
     9	open(OUTFILE2,">$output2")||die "canoot\n";
    10	
    11	#######################################################
    12	        &preprocess;
    13	open (INFILE2,"$output")||die "cannot open $input1";
    14	        $/=";";
    15	        $ct_scanout = 0;
    16	        while (<INFILE2>){
    17	        chomp;
    18	        $ct_scanout = 1 if (/apply\s*\"grp[0-9]_unload\"/);
    19	        $chain_test=1  if (/CHAIN_TEST/);
    20	
    21	if (( /\t*chain\s+\"chain([0-9])\"/) && ($chain_test)){
    22	                $chain_number = $1;
    23	                &cleanup;
    24	                        $chain_input = (split /=/,$_)[1];
    25	                        $chain_input =~ tr/\"//d;
    26	                SWITCH: {
    27	                                $chain_number==1 && do {
    28	                                @chain1 = split (//,$chain_input);
    29	                                $scan_chain_length1 = @chain1; };
    30	                                $chain_number==2 && do {
    31	                                @chain2 = split (//,$chain_input);
    32	                                $scan_chain_length2 = @chain2; };
    33	                                $chain_number==3 && do {
    34	                                @chain3 = split (//,$chain_input);
    35	                                $scan_chain_length3 = @chain3; };
    36	                                $chain_number==4 && do {
    37	                                @chain4 = split (//,$chain_input);
    38	                                $scan_chain_length4 = @chain4; };
    39	                                $chain_number==5 && do {
    40	                                @chain5 = split (//,$chain_input);
    41	                                $scan_chain_length5 = @chain5; };
    42	                                $chain_number==6 && do {
    43	                                @chain6 = split (//,$chain_input);
    44	                                $scan_chain_length6 = @chain6; };
    45	                                $chain_number==7 && do {
    46	                                @chain7 = split (//,$chain_input);
    47	                                $scan_chain_length7 = @chain7;
    48	                                &printout;
    49	                                };
    50	                }#END SWITCH
    51	        }
    52	} #end of While statement
    53	sub printout {
    54	        if ($ct_scanout ){
    55	                        for ($i=0;$i<$scan_chain_length3;$i++){
    56	               $chain1[$i] =~ s/0/L/g; $chain1[$i] =~ s/1/H/g;
    57	               $chain2[$i] =~ s/0/L/g; $chain2[$i] =~ s/1/H/g;
    58	               $chain3[$i] =~ s/0/L/g; $chain3[$i] =~ s/1/H/g;
    59	               $chain4[$i] =~ s/0/L/g; $chain4[$i] =~ s/1/H/g;
    60	               $chain5[$i] =~ s/0/L/g; $chain5[$i] =~ s/1/H/g;
    61	               $chain6[$i] =~ s/0/L/g; $chain6[$i] =~ s/1/H/g;
    62	               $chain7[$i] =~ s/0/L/g; $chain7[$i] =~ s/1/H/g;
    63	                print OUTFILE2 "\n(ct_so
    64	$chain1[$i]$chain2[$i]$chain3[$i]$chain4[$i]$chain5[$i]$chain6[$i]$chain7[$i]
    65	 )";
    66	                                        }
    67	                $ct_scanout=0;
    68	        }
    69	        elsif ($ct_scanout==0){
    70	                        for ($i=0;$i<$scan_chain_length3;$i++){
    71	                $chain1[$i] =~ s/X/0/g; $chain2[$i] =~ s/X/0/g;
    72	                $chain3[$i] =~ s/X/0/g; $chain4[$i] =~ s/X/0/g;
    73	                $chain5[$i] =~ s/X/0/g; $chain6[$i] =~ s/X/0/g;
    74	                $chain7[$i] =~ s/X/0/g;
    75	                        print OUTFILE2 "\n(ct_si  $ct_si{tdi}
    76	$chain1[$i]$chain2[$i]$chain3[$i]$chain4[$i]$chain5[$i]$chain6[$i]$chain7[$i]
    77	 )";
    78	                                        }
    79	        }
    80	}
    81	sub cleanup{
    82	                  s/^\s+|\s*\n+$//g;
    83	                  tr/\t  //d;            
    84	                  s/\n//g;                
    85	                  s/\\//g;
    86	}
    87	sub preprocess{
    88	        while (<INFILE>){
    89	                chomp;
    90	        s/$/;/g if (/apply/);
    91	        print OUTFILE ("$_\n");
    92	        last if ( /^SCAN_CELLS/);
    93	        }
    94	        close OUTFILE;
    95	}
