#!/usr/bin/perl
# S1 SP DS dataを作るwrapper
#	2008-6-25	Version 2.00 kno

$S1file="S1Data";
$tkkfile="tkkData";
$DSfile="DSData";

$loop_option="";
$separate_option="";
$one_option="";
$two_option="";
$four_option="";
$splitout_option="";
$isolated_option="";
$nonisolated_option="";
# -- me の処理 ---------------
$me=$0;
$me=~s#.*/##;

if(@ARGV <1){
    print "$me key-word : help command\n";
    print "$me s1\n";
    print "$me tkk\n";
    print "$me ds\n";
    print "$me chs1\n";
    print "$me compile : execute command\n";
    exit;
}

# -- makeS1 -----------------
if($ARGV[0] eq "s1"){
die "$me s1 : make S1file
Usage :$me s1 [-loop/-separate] num [output S1Data file(default S1Data)]
       :option : -loop     -> include loop (and separable), 
                 -separate -> include separable\n"
if(@ARGV <2);
if($ARGV[1] eq "-loop"){$loop_option="-loop";shift(@ARGV);}
if($ARGV[1] eq "-separate"){$separate_option="-separate";shift(@ARGV);}
if($ARGV[1] eq "-loop"){$loop_option="-loop";shift(@ARGV);}
unless($ARGV[1]=~/^\d+$/){die "$me [error!] [num] arg must be a number.
Usage :$me $ARGV[0] [-loop/-separate] num [output S1Data file(default S1Data)]\n";}
if(@ARGV==3){$outfile=$ARGV[2];}else{$outfile=$S1file;}
opendir($dirhdl,".");
while($f=readdir($dirhdl)){
	next if $f =~ /^\.$/;
	next if $f =~ /^\.\.$/;
	rename $f , $f."_bak" if ($f =~/^$S1file$/);
    }
system "makeS1 $loop_option $separate_option $ARGV[1] $outfile";
$tmpoutfile="tmpS1check";
system "checkS1 $outfile $tmpoutfile";
$ret=($?>>8);
$kaisuu=1;print("[$kaisuu] ");
    while($ret){
	rename $tmpoutfile ,$outfile;
	system "checkS1 $outfile $tmpoutfile";
	$ret=($?>>8);
	$kaisuu++;print("[$kaisuu] ");
    }
print("\n");
open (OUTHD,$tmpoutfile);
open HD,">$outfile" or die "Can't open file[$outfile]\n";
$DataNum=1;
while(<OUTHD>){
    if(s/^%//){s/# \d+/# $DataNum/;$DataNum=$DataNum+1;}
    print HD;
}
unlink $tmpoutfile;
exit;
}
# -- maketkk -----------------
if($ARGV[0] eq "tkk"){
die "$me tkk : make tkkfile
Usage :$me tkk [-1/2/4] num [output tkkData file(default tkkData)]
      :option :-1 -> include  1-gon,-2 -> include  2-gon, 
               -4 -> only greater than 3-gon \n"
      if(@ARGV <2);
if($ARGV[1] eq "-1"){$one_option="-1";shift(@ARGV);}
if($ARGV[1] eq "-2"){$two_option="-2";shift(@ARGV);}
if($ARGV[1] eq "-4"){$four_option="-4";shift(@ARGV);}
unless($ARGV[1]=~/^\d+$/){die "$me [error!] second arg must be a number.
Usage :$me $ARGV[0] num [output tkkData file(default tkkData)]\n";}
$outfile=$tkkfile;
if(@ARGV==3){$outfile=$ARGV[2];}
opendir($dirhdl,".");
while($f=readdir($dirhdl)){
	next if $f =~ /^\.$/;
	next if $f =~ /^\.\.$/;
	rename $f , $f."_bak" if ($f =~/^$tkkfile$/);
    }
system "maketkk $one_option $two_option $four_option $ARGV[1] $outfile";
exit;
}
# -- makeDS -----------------
if($ARGV[0] eq "ds"){
die "$me ds : make DSfile
Usage :$me ds [option1] num [output file(default DSData)]
  option1: -loop -> include loop, -separate -> include separable,
           -2    -> include 2-gon, -4 -> only greater than 3-gon
           -splitout -> output tmpfile, -isolated -> only non pair adjacent
      :$me ds [option2] S1_file tkk_file [output file(default DSData)]
  option2: -splitout/-isolatde/-nonisolated\n"
      if(@ARGV <2);
while($ARGV[1] =~/^-/){
if($ARGV[1] eq "-loop"){$loop_option="-loop";shift(@ARGV);}
if($ARGV[1] eq "-separate"){$separate_option="-separate";shift(@ARGV);}
if($ARGV[1] eq "-loop"){$loop_option="-loop";shift(@ARGV);}
if($ARGV[1] eq "-2"){$two_option="-2";shift(@ARGV);}
if($ARGV[1] eq "-4"){$four_option="-4";shift(@ARGV);}
if($ARGV[1] eq "-splitout"){$splitout_option="-splitout";shift(@ARGV);}
if($ARGV[1] eq "-isolated"){$isolated_option="-isolated";shift(@ARGV);}
if($ARGV[1] eq "-nonisolated"){$nonisolated_option="-nonisolated";shift(@ARGV);}
}
if($ARGV[1]=~/^[1-9]\d*$/){
    if(@ARGV==3){$outfile=$ARGV[2];}else{$outfile=$DSfile;}
    opendir($dirhdl,".");
    while($f=readdir($dirhdl)){
	next if $f =~ /^\.$/;
	next if $f =~ /^\.\.$/;
	rename $f , $f."_bak" if ($f =~/^$S1file/);
	rename $f , $f."_bak" if ($f =~/^$tkkfile$/);
    }
	$tmpS1file="S1".".$$";$tmptkkfile="tkk".".$$";
    system "$me s1 $loop_option $separate_option $ARGV[1] $tmpS1file";
    system "maketkk $two_option $four_option $ARGV[1] $tmptkkfile";
    system "$me ds $splitout_option $isolated_option $nonisolated_option $tmpS1file $tmptkkfile $outfile";
    unlink $tmpS1file; unlink $tmptkkfile;
    exit;
}
die "Usage :$me ds [-loop/separate/2/4] num [output DSData file(default DSData)]
      :$me ds [-splitout/isolated/nonisolated] S1Data_file [output DSData file(default DSData)]\n"
      if(@ARGV <2);
$infile1=$ARGV[1];
$infile2=$ARGV[2];
if(@ARGV>=4){$outfile=$ARGV[3];}else{$outfile=$DSfile;}
opendir($dirhdl,".");
while($f=readdir($dirhdl)){
    next if $f =~ /^\.$/;
    next if $f =~ /^\.\.$/;
    rename $f , $f."_bak" if ($f =~/^$DSfile/);
    }
system "makeDS $splitout_option $isolated_option $nonisolated_option $infile1 $infile2 $outfile";
exit;
}
# -- checkS1 -----------------
if($ARGV[0] eq "chs1"){
die "$me chs1 : check S1file
Usage :$me chs1 S1file [checked file(default is inputfile)]\n"
if(@ARGV <2);
$tmpoutfile="tmpS1check".".$$";
if($ARGV=3){$outfile=$ARGV[2];}else{$outfile=$ARGV[1];}
print("begin : checkS1 [$ARGV[1]]\n");
system "checkS1 $ARGV[1] $tmpoutfile";
$ret=($?>>8);
$kaisuu=1;print("[$kaisuu] ");
    while($ret){
	rename $tmpoutfile ,$ARGV[1];
	system "checkS1 $ARGV[1] $tmpoutfile";
	$ret=($?>>8);
	$kaisuu++;print("[$kaisuu] ");
    }
print("\n");
open (OUTHD,$tmpoutfile);
open HD,">$outfile" or die "Can't open file[$outfile]\n";
$DataNum=1;
while(<OUTHD>){
    if(s/^%//){s/# \d+/# $DataNum/;$DataNum=$DataNum+1;}
    print HD;
}
unlink $tmpoutfile;
exit;
}
# -- compile -----------------
if($ARGV[0] eq "compile"){
$base_dir="/home/kouno/NetBeansProjects/";
$tool_dir="/home/kouno/tools/";
$e_file="a.out";

@List=("makeS1","maketkk","checkS1","makeDS");
while($f=shift(@List)){
$dir=$base_dir.$f."/";
$file=$f.".c";
chdir $dir;
system "gcc $file";
$tgt=$tool_dir.$f;
rename $e_file, $tgt;
}

    exit;
}
