#!/usr/bin/perl

open (FICHIER0, "staco0001.out");
@map0 = <FICHIER0>;
#&trim(@map0);

$diro = `pwd`;
chop($diro);

$n_nodes=$ARGV[0];
$n_nodm1=$n_nodes-1;
$n=0;
$ind1=0;
$read_header=0;
$end_header=0;

$ind1=-1;

#--------------------------------------------------------
#first pass, get n_codes, prepare dirs, etc ...
foreach $lign0 (@map0) {
  $ind1++;
#  @lis0=split(/ /,$lign0);
  if ($lign0=~ m/code/) {
     $n_codes++;
  }
  if (($lign0=~ m/Miller/) && ($read_header==0)) {
    $read_header=1;
    $end_header=$ind1-1;
  }
}

$n_lastdir=$n_codes%($n_nodes);
if ($n_lastdir == 0) {
   $n_regdir=int($n_codes/($n_nodes));
   $n_lastdir=$n_regdir;
} else {
   $n_lastdir=$n_codes%($n_nodm1);
   if ($n_lastdir == 0) {
      $n_regdir=int($n_codes/($n_nodes-1))-1;
      $n_lastdir=$n_nodes-1;
   } else {
   $n_regdir=int($n_codes/($n_nodes-1));
   }
}
print $n_codes,"   codes\n";
print $n_nodes,"   nodes\n";
print $n_nodm1." x ".$n_regdir." + ".$n_lastdir."\n";

for ($i=1; $i<=$n_nodes; $i++) {
  $nam0=NODE_.$i;
  mkdir ($nam0, 0777);
  system("cp poten.txt $nam0/.");
  # deal with run.meta
#      push (@mapout,'initial_dir = '.$diro.'/'.$nam0."\n");
  chdir ($nam0);
  open (FICHIER2, ">run.meta");
  print FICHIER2 '
Universe       =  vanilla
Requirements   = (OpSys == "WINNT50" && Arch =="INTEL")
transfer_input_files = input.txt poten.txt
executable = /home4/arnaud/bin/meta434.exe
Error   = metadise.err
Output  = metadise.out
Log     = metadise.log
transfer_files = ALWAYS
';
 print FICHIER2 'initial_dir = '.$diro.'/'.$nam0."\n";
 print FICHIER2 'queue
';
  chdir ("..");
  close(FICHIER2);
}


#--------------------------------------------------------
#Second Pass
$ind2=0;
foreach $lign0 (@map0) {
$ind2++;
  #New code
  if (($lignm1=~ m/Miller/) && ($lign0=~ m/code/)) {
    $n=$n+1;
    $ndir=int($n/$n_regdir)+1;
    $nn=$n%$n_regdir;
    print "$n, $nn, $ndir \n";
    if ($nn == 1) {   #first of a dir
       $nam0=NODE_.$ndir;
       @mapout=();
       for ($i=0; $i<=$end_header; $i++)   {  #write header
         push (@mapout,$map0[$i]);
       }
       push (@mapout,'@include poten.txt'."\n");
    }
#    if ($nn != 1) {push (@mapout,"meta\n");}
    push (@mapout,$lignm1);
    push (@mapout,$lign0);
    $j=$ind2;
    $lign=$map0[$j];
    while ( (not ($lign=~ m/Miller/)) && (not ($lign=~ m/anal/)) ) {
      if (not ($lign=~ m/poten/)) {push (@mapout,$lign)}
      $j++;
      $lign=$map0[$j];
    }
    if ($nn == 0) {  #last of a reg dir
      pop (@mapout);
      push (@mapout,"anal\n");
      push (@mapout,"start\n");
      push (@mapout,"stop\n");
      chdir ($nam0);
      open (FICHIER2, ">input.txt");
      print FICHIER2 @mapout;
      chdir ("..");
      close(FICHIER2);
    }
    if ($n == $n_codes) {  #last dir
      push (@mapout,"anal\n");
      push (@mapout,"start\n");
      push (@mapout,"stop\n");
      chdir ($nam0);
      open (FICHIER2, ">input.txt");
      print FICHIER2 @mapout;
      chdir ("..");
      close(FICHIER2);
    }
    print "$n, $nn, $ndir : $nam0\n";
  }
  $lignm1=$lign0;
}
#--------------------------------------------------------
sub trim {
  foreach $lign (@_) {
    $lign=~s/ +/ /g;
    if (substr($lign,0,1) eq ' ') {substr($lign,0,1)=''}
    chop ($lign);
  }
}