#!/usr/bin/perl -w
use strict;

my %layersToDo=("li1"=>1,"mcon"=>1,"locali"=>1,"metal1"=>1);

sub readfile($)
{
  if(open MYRIN,"<$_[0]")
  {
    my $old=$/;
    undef $/;
    my $content=<MYRIN>;
    close MYRIN;
    $/=$old;
    return $content;
  }
  return undef;
}


foreach my $origlef (<orig/*.lef>)
{
  my $lef=$origlef; $lef=~s/^orig\///;	
  my $mag="../mag/$lef"; $mag=~s/\.lef$/\.mag/;
  print STDERR "origlef: $origlef\n lef: $lef\n mag:$mag\n";
  my $obs="";



  if(open(MAGIN,"<$mag"))
  {
    print "Extracting Obstruction information from $mag\n";	  
    my $active=0;
    while(<MAGIN>)
    {
      if(m/<< (\w+) >>/)
      {
        $active=defined($layersToDo{$1});
	$obs.="    LAYER $1 ;\n" if($active);
      }
      if(m/rect (-?\d+) (-?\d+) (-?\d+) (-?\d+)/ && $active)
      {
        $obs.="      RECT ( ".($1/100.0)." ".($2/100.0)." ) ( ".($3/100.0)." ".($4/100.0)." ) ;\n";
      }
    }
    close MAGIN;
  }
  else
  {
     print "ERROR: Could not open magic file $mag : $!\n";
  }

  #print "$mag\n$obs\n";
  #next;
  
  my $content=readfile("orig/$lef");
  $content=~s/\sOBS\s.*?\sEND\s//sg;
  #open OUT,">$lef.temp";
  #print OUT $content;
  #close OUT;

  my $cell=$lef; $cell=~s/\.lef//;
  print "$lef\n";
  #  open LEFIN,"<orig/$lef";
  open LEFOUT,">$lef";
  our $pin="";
  my $filled=0;
  our $macro="NOTTOBEFOUND";

  #print "$obs\n";
  foreach(split "\n",$content) # while(<LEFIN>)
  {
    $_.="\n";	  
    $macro=$1 if(m/MACRO\s+(\w+)/);
    $pin=$1 if(m/PIN\s+(\w+)/);
    #s/SYMMETRY X Y R90/SITE unit/;
    #s/SITE CORE/SYMMETRY X Y R90/;
    #s/SITE unit.*//;
    s/metal2/met1/;
    s/VDD/vccd1/;
    s/GND/vssd1/;
    s/USE SIGNAL/USE POWER/ if($pin eq "VDD");
    s/USE POWER/USE GROUND/ if($pin eq "GND"); # GND braucht USE GROUND statt USE POWER

    if(m/^\s*END\s+$macro/ && !$filled) # Inject the obstructions here
    {
      print LEFOUT "\n  OBS\n$obs\n  end\n";
      $filled=1;
    }
    #print $_;
    print LEFOUT $_;	   
    #print "$macro\n";
    #print $_;
    if(m/FOREIGN/)
    {
      if(open(MAG,"<$mag"))
      {
        my $layer="";
        while(<MAG>)
        {
          if(m/<< (\w+) >>/)
	  {
            $layer=$1;
	  }
          if(m/rect 0 0 (\d+) (\d+)/)
          {
            next if($layer eq "checkpaint");
            my $h=$1;
            my $w=$2;
            my $factor=0.01;
	    #print "$lef -> ".($1*$factor)." ".($2*$factor)."\n";
	    #print LEFOUT " SIZE ".($1*$factor)." BY ".($2*$factor)." ;\n";
          }
          if(m/string FIXED_BBOX 0 0 (\d+) (\d+)/)
          {
            my $h=$1;
            my $w=$2;
            my $factor=0.01;
	    #print "$lef -> ".($1*$factor)." ".($2*$factor)."\n";
	    #print LEFOUT " SIZE ".($1*$factor)." BY ".($2*$factor)." ;\n";
          }

	}
        close MAG;
      }
    }
  }
  close LEFOUT;
  #close LEFIN;

  system "cp $lef $lef.beforemagic";

  open MAGIC,"|magic -dnull -noconsole -T sky130A";
  print MAGIC "lef read $lef\n";
  print MAGIC "load $cell\n";
  print MAGIC "lef write $lef\n";
  print MAGIC "quit\n";
  close MAGIC;
}
