package Marks;

sub GlobalMark {
    my ($args)	   = @_;
    my ($W)	   = $args -> { -width };
    my ($L)        = $args -> { -length };
    my ($gds2File) = $args -> { -gds2File };

    my $name       = 'GlobalMark500';
    $gds2File -> printBgnstr( -name => $name);
    $gds2File -> printBoundary (
	-xy => [ -$W/2, -$W/2,
		 -$L/2, -$W/2,
		 -$L/2,  $W/2,
		 -$W/2,  $W/2,
		 -$W/2,  $L/2,
		  $W/2,  $L/2,
		  $W/2,  $W/2,
		  $L/2,  $W/2,
		  $L/2, -$W/2,
		  $W/2, -$W/2,
		  $W/2, -$L/2,		  
		 -$W/2, -$L/2,		  
		 ]
	);
    $gds2File -> printEndstr();				# --- End of this new structure
    return $name;
}

sub Lshape  {
    my ($args)	   = @_;
    my ($W)	   = $args -> { -width };
    my ($L)        = $args -> { -length };
    my ($gap)      = $args -> { -gap };
    my ($gds2File) = $args -> { -gds2File };

    my $name	   = sprintf("W%2.2fxL%2.1fum-g%03.1f", $W, $L, $gap);
    $gds2File -> printBgnstr( -name=> $name);		# --- Start new structure
    $gds2File -> printBoundary( -xy => [
				 $gap/2,       $gap/2,
				 $gap/2 + $L,  $gap/2,
				 $gap/2 + $L,  $gap/2 + $W,
				 $gap/2 + $W,  $gap/2 + $W,
				 $gap/2 + $W,  $gap/2 + $L,
				 $gap/2     ,  $gap/2 + $L,

				]);
    $gds2File -> printEndstr();				# --- End of this new structure
    return $name;					#  呼出元に、名前を返します	 (渡します)
}

sub LshapeSet {    
    my ($args)	   = @_;
    my $W	   = $args -> { -W };
    my $L	   = $args -> { -L };
    my $G	   = $args -> { -G };  # gap
    my $N	   = $args -> { -N };  # number of one angle
    my $gds2File   = $args -> { -gds2File };

    my $name	   = sprintf("L-%dxL%02d-W%2.2f-G%2.f", $N, $L, $W, $G);

    my @CONF = (
	         # W        L                                G
		 [$W      , $L + $W * $G * 4,                       $G     ],
	         [$W 	  , $L + $W * $G * 2	      ,       $W  + $G * 2 + 0.7 * $W ],
		 [$W * 0.7, $L + $W * $G     + 0.7 * 3,       $W  + $G * 4 ],
		 [$W * 0.7, $L               + 0.7 * 3,       $W  + $G * 6 ],

	);

    my @LIST;
    foreach my $index (0..$N - 1) {
	push(@LIST,
	Lshape ({
	    -width  => $CONF[$index] -> [0],
	    -length => $CONF[$index] -> [1],
	    -gap    => $CONF[$index] -> [2],
	     -gds2File => $gds2File})
	    );
    }

    $gds2File -> printBgnstr( -name => $name);
        foreach my $index (0..$#LIST) {
	    $gds2File -> printSref  ( -name => $LIST[$index],
				      -xy   => [0, 0]);
	}
    $gds2File -> printEndstr();
    return $name;
}
sub LocalMark {
    my ($args) 		= @_;
    my $W	   = $args -> { -W };
    my $L	   = $args -> { -L };
    my $G	   = $args -> { -G };  # gap
    my $N	   = $args -> { -N };  # number of one angle

    my $gds2File	= $args -> {-gds2File};

    my @LIST;
my $corner = 
    LshapeSet ({ -W => $W, -L => $L, -G => $G, -N=> $N, -gds2File => $gds2File});
    push(@LIST, $corner);
                                    my $markName = sprintf("%dxL%02d-W%2.2f-G%02.1f", $N, $L, $W, $G);
    $gds2File -> printBgnstr( -name => $markName);
    foreach my $i (0..3){
	$gds2File -> printSref  ( -name => $corner, -xy => [0,0], -angle => $i * 90);
	    }
    #                           x           y layer dotsize
    text2gds::text_flat(        0 , - $L - 15, 10, 0.3, $markName, $gds2File);
    $gds2File -> printEndstr();
    return $markName;
}
sub Combo {
    my ($args) 		= @_;
    my $gds2File	= $args -> {-gds2File};
    my $name		= 'combo';
    $gds2File -> printBgnstr( -name => $name);

    foreach my $i (1..3) {
	$gds2File -> printSref  ( -name => '2xL10-W0.50-G1.5',
				  -xy   => [-400, $i * - 100]);
	$gds2File -> printSref  ( -name => '2xL10-W0.50-G1.5',
				  -xy   => [-$i * 100, -400]);
    }
	$gds2File -> printSref  ( -name => '2xL10-W0.50-G1.5',
				  -xy   => [-400, -400]);
    $gds2File -> printEndstr();
    return $name;
}
1;
__END__

See perldoc GDS2 for help

; please note I have copy in ~/.emacs-sub/time-stamp-setup.el
(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 "%04y-%02m-%02d %02H:%02M");
(setq time-stamp-start "$VERSION = \"") ;
(setq time-stamp-end "\"") ;
(setq time-stamp-line-limit 20) ; ; default is 8
