package F7000S;
use warnings;
use strict;
use GDS2;
use Getopt::Std;

push(@INC, "../Perl_GDSII_Tutorial/code");
push(@INC, "../vernier/");

require 'text2gds.pm';


my $VERSION = "2026-08-19 07:18";
# ----------------------------------------------------------
#                    Dicing Mark  L
# ----------------------------------------------------------
sub WaferBoundary   {
    my ($args)     = @_;
    my ($layer)    =  $args -> { -layer };
    my ($size)     =  $args -> { -size };
    my ($gds2File) =  $args -> { -gds2File };

    my $name    = sprintf("Wafer-L%03d-S%0d",  $layer, $size/1000);
    $gds2File -> printBgnstr  (-name => $name);

    my @COORD = arc3::arc({
	    -x => 0, -y => 0, -radius => $size, -polygon_count => 72,
		-start_angle =>      - 71.03 - 3,
		-end_angle =>    180 + 71.03 - 3,
		-direction => 0,
			  });
    $gds2File -> printBoundary  (
	-xy => [ @COORD	],
	-layer => $layer,
	);
    $gds2File -> printEndstr();
    return $name;
}
sub ScribeL  { 
    my ($args)     = @_;
    my ($LX)        = $args -> { -lengthX }; # micro meter
    my ($LY)        = $args -> { -lengthY }; # micro meter
    my ($W)        = $args -> { -width }; # micro meter
    my ($G)        = $args -> { -gap }; # micro meter
    my ($layer)    =  $args -> { -layer};
    my ($gds2File) =  $args -> { -gds2File};

    my $name    = sprintf("scribe-X%03d-Y%03d",  $LX, $LY);
    $gds2File -> printBgnstr  (-name => $name);
    $gds2File -> printBoundary  (
        -xy=> [ 
              $G/2,        $G/2,
              $G/2 + $LX,   $G/2,
              $G/2 + $LX,   $G/2 + $W,
              $G/2 + $W,   $G/2 + $W,
              $G/2 + $W,   $G/2 + $LY,
              $G/2,        $G/2 + $LY,
        ],
        -layer=> $layer);
    $gds2File -> printBoundary  (
        -xy=> [  $LX + $G/2,    -$G/2, 2 * $LX + $G/2, -$G/2, 
		                       2 * $LX + $G/2, -$G/2 - $W, 
                 $LX + $G/2,     -$G/2 - $W
	],
        -layer=> $layer);
    $gds2File -> printBoundary  (
        -xy=> [  -$G/2,       $LY + $G/2,  -$G/2,      2 * $LY + $G/2, 
                                      -$G/2 - $W, 2 * $LY + $G/2, 
                 -$G/2 - $W,  $LY + $G/2], 
        -layer=> $layer);

    $gds2File -> printEndstr();
    return $name;
}
# ----------------------------------------------------------
#                    Coarse Mark
# ----------------------------------------------------------
sub CoarseMark {
    my ($args)	= @_;
    my ($size)		= $args -> {-size}; # um
    my ($width)		= $args -> {-width}; # um
    my ($cross)		= $args -> {-cross}; # um
    my $gds2File	= $args -> {-gds2File};
    my $name 		= sprintf("CoarseMark-%3.1f", $size);
    my $S  = $size / 2;
    my $W  = $width;
    my $W2 = $width / 2;
    my $C  = $cross/ 2;
    $gds2File	-> printBgnstr( -name => $name);
    $gds2File   -> printBoundary (
	-xy => [
	     -$S, -$S,  -$S, $S, $S, $S, $S, -$S,
	     -$S + $W, -$S,
	     -$S + $W, -$S + $W,
	      $S - $W, -$S + $W,
	      $S - $W,  $S - $W,
	     -$S + $W,  $S - $W,
	     -$S + $W,  $S - $W,
	     -$S + $W, -$S
	]);
    $gds2File   -> printBoundary (
	-xy => [ -$C, -$W2, -$W2, -$W2,
		 -$W2, -$C,
		  $W2, -$C,
		  $W2, -$W2, $C, -$W2,  $C, $W2,
		  $W2,  $W2,
		  $W2,  $C,
		 -$W2,  $C,
		 -$W2,  $W2,
		 -$C,  $W2,
	]);
    $gds2File	-> printEndstr();
    return $name;
}
sub box10 {
    my ($args)		= @_;
    my $gds2File	= $args -> {-gds2File};
    my $name 		= sprintf("box10");

    $gds2File	-> printBgnstr( -name => $name);
    $gds2File	-> printBoundary( -xy =>
	[ -5,-5,  -5, 5,  5,5, 5, -5]
	);
    $gds2File	-> printEndstr();
    return $name;
}
# Fine and Alignment set for each corner
sub cornerMark {
    my ($args)		= @_;
    my ($Aname)		= $args -> {-Aname};
    my ($Fname)		= $args -> {-Fname};
    my $gds2File	= $args -> {-gds2File};

    my $name 		= sprintf("cornerMark");
    $gds2File	-> printBgnstr( -name => $name);
    # Coarse
    $gds2File	-> printSref  ( -name => $Aname, -xy =>[0,0]) ;
    # Fine
    my $shift = 400;
    foreach my $i ( 0..4) {
	$gds2File	-> printSref  ( -name => $Fname, -xy => [- $shift, $i * 100 - $shift ]);
	$gds2File	-> printSref  ( -name => $Fname, -xy => [          $i * 100 - $shift, -$shift ]);
    }
        $gds2File	-> printSref  ( -name => $Fname, -xy => [ 0, 0 ]);
    $gds2File	-> printEndstr();
    return $name;
}

# ----------------------------------------------------------
#                    H E L P
# ----------------------------------------------------------
sub usage{
    my ($args)		= @_;
    my ($frame)		= $args -> {-frame}; # um

print STDERR <<HELP;
  synopsys:
     $0 [-h] [-S start] [ -s size] [ -l limit]
  where:
    -h      Show this help
    -f      frame size (default $frame um)
HELP
}
1;
# -----------------------------------------------------
#                    call sub main( )
# -----------------------------------------------------
__END__
;; ----- eval-region stuff
(require 'time-stamp)
(add-hook 'write-file-hooks 'time-stamp)
(setq time-stamp-active t)
;; (setq time-stamp-time-zone "UTC")
(setq time-stamp-time-zone nil)
(setq time-stamp-format "%Y-%02m-%02d %02H:%02M");
(setq time-stamp-start "$VERSION = \"") ;
(setq time-stamp-end "\"") ;
(setq time-stamp-line-limit 20) ; ; default is 8
