#!/usr/local/bin/perl -w
# GDSII generation
#
use GDS2;
use strict;
use Getopt::Std;

require '../pm/text2gds.pm';
require './Common';
package Squares;

my $DEBUG = 0;
sub square ($$$) {
    my ($a)        = shift;
    my ($structure) = shift;
    my ($gds2File) = shift;

    my (@names);
    $gds2File -> printBgnstr( -name => $structure);
    $gds2File -> printBoundary(
                        -layer=> 0,
                        -xy=>[ 0,  0,
			       $a, 0,
			       $a, $a,
			       0,  $a,
			       0, 0,]
	);
    my ($width);

#                       $string $x  $y      $pitch   $size

    my ($size) = $a;
    if ( $size < 20 )   {$size = 20;}
    if ( $size > 1000 ) {$size = 1000;}
    my ($y)    = $a * 1.05;
    if ($a > 100 ) { $y    = $a * 1.01};
    @names = common::place_text($a,      0, $y, $size/8,   $size, 0, $gds2File);
    print STDERR __LINE__, ' size: ', sprintf("%5.2f", $size),
	                      ' x: ', sprintf("%5.4f", 0),
			      ' y: ', $y,
                     	  ' pitch: ', sprintf("%5.4f", $size/8),
	"\n" if $DEBUG;
    $gds2File -> printEndstr;
    return ($a * 1.2, @names);
}


sub Squares($) {
    my ($gds2File) = shift;
# -------------------------------------------------------
#                      M A I N 
# -------------------------------------------------------
my ($filename) = $0 . '.gds';

my(@SET);

my(@SETa)  = qw( 10   15);
my(@SETb)  = qw( 22   33  47  68  100  150  220  330);
my(@SETc)  = qw( 470  680  1000  1500 2200);
my(@SETd)  = qw( 3300 4700  6800);

my(@set);

push(@set, @SETa);
push(@set, @SETb);
push(@set, @SETc);
push(@set, @SETd);
                 
my(@NAMESa, @NAMESb, @NAMESc, @NAMESd);
my(@SPANa, @SPANb, @SPANc, @SPANd);

my ($span);
my (@chars, @CHARS);

# ------------------------------------------------------
#          G E N E R A T E     S Q U A R E S
# ------------------------------------------------------

foreach my $dimension ( @SETa)  {
    my ($structure) = sprintf("SquareSize-%04d", $dimension);
    ($span, @chars) = square ($dimension, $structure, $gds2File);
    push(@NAMESa, $structure) ;
    push(@SPANa,  $span);
    push(@CHARS, @chars);
    }

foreach my $dimension ( @SETb)  {
    my ($structure) = sprintf("SquareSize-%04d", $dimension);
    ($span, @chars) = square ($dimension, $structure, $gds2File);
    push(@NAMESb, $structure) ;
    push(@SPANb,  $span);
    push(@CHARS, @chars);
    }

foreach my $dimension ( @SETc)  {
    my ($structure) = sprintf("SquareSize-%04d", $dimension);
    ($span, @chars) = square ($dimension, $structure, $gds2File);
    push(@NAMESc, $structure) ;
    push(@SPANc,  $span);
    push(@CHARS, @chars);
    }

foreach my $dimension ( @SETd)  {
    my ($structure) = sprintf("SquareSize-%04d", $dimension);
    ($span, @chars) = square ($dimension, $structure, $gds2File);
    push(@NAMESd, $structure) ;
    push(@SPANd,  $span);
    push(@CHARS, @chars);
    }


# ------------------------------------------------------
#          G E N E R A T E     C H A R S
# ------------------------------------------------------

my  %AVOIDDUPE;
foreach my $c (@CHARS){
    my ($prefix, $width, $char) = split '-', $c;
    if (! defined ($AVOIDDUPE{$width.'-'.$char}) ) {
	$AVOIDDUPE{$width.'-'.$char}++;
    common::letters_by_name($prefix.'-', $width, $char, $gds2File);
	}
}
# ------------------------------------------------------
#          P L A C E   N A M E S  on T O P
# ------------------------------------------------------
    my $shift;
    my ($baseX, $baseY)  = (0, 0);
    my ($LowerLeftX, $LowerLeftY, $UpperRightX, $UpperRightY);

$gds2File -> printBgnstr(-name => 'Squares');
foreach my $i ( 0..$#NAMESa) {
    $gds2File -> printSref( -name => $NAMESa[$i], -xy => [$baseX,  $baseY, ]);  $baseX += ($SPANa[$i] + 50);
}
$baseX = 80;
$baseY = 50;
    $UpperRightX = 80 + 22;
    $UpperRightY = 50 + 330;

foreach my $i ( 0..$#NAMESb) {
    $gds2File -> printSref( -name => $NAMESb[$i], -xy => [$baseX,  $baseY ]);  $baseX -= ($SPANb[$i] * 1.5);
}

$baseX = -370;
$baseY = -1000;
foreach my $i ( 0..$#NAMESc) {
    $gds2File -> printSref( -name => $NAMESc[$i], -xy => [$baseX,  $baseY, ]);  $baseX -= ($SPANc[$i] * 1.45)
}
# --- 3300 ---
$baseX = -10300;
$baseY = -3100;

$gds2File -> printSref( -name => $NAMESd[0], -xy => [$baseX,  $baseY, ]);  $baseX += $SPANd[0];

# --- 4700 ---
$baseX = -11700;
$baseY = -8100;

$LowerLeftX = $baseX;
$LowerLeftY = $baseY;

$gds2File -> printSref( -name => $NAMESd[1], -xy => [$baseX,  $baseY, ]);  $baseX += $SPANd[1];

# --- 6800 ---
$baseX = -6700;
$baseY = -8100;
$gds2File -> printSref( -name => $NAMESd[2], -xy => [$baseX,  $baseY, ]);  $baseX += $SPANd[1];

$gds2File -> printEndstr;

    return ($LowerLeftX,  $LowerLeftY, $UpperRightX, $UpperRightY);
}
1;
__END__
