.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
.\" ========================================================================
.de Sh \" Subsection heading
.de Sp \" Vertical space (when we can't use .PP)
.de Vb \" Begin verbatim text
.de Ve \" End verbatim text
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
. tm Index:\\$1\t\\n%\t"\\$2"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. \" simple accents for nroff and troff
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
.\" ========================================================================
.TH GDS2 3 "2003-03-28" "perl v5.8.0" "User Contributed Perl Documentation"
\&\s-1GDS2\s0 \- \s-1GDS2\s0 stream module
This is \s-1GDS2\s0, a module for quickly creating programs to read and/or write \s-1GDS2\s0 files.
Send feedback/suggestions to
.IX Header "Create Method"
.Sh "new \- open gds2 file"
.IX Subsection "new - open gds2 file"
\& my $gds2File = new GDS2(-fileName => "filename.gds2"); ## to read
\& my $gds2File2 = new GDS2(-fileName => ">filename.gds2"); ## to write
.Sh "close \- close gds2 file"
.IX Subsection "close - close gds2 file"
\& $gds2File -> close(-markEnd=>1); ## experimental -- some systems have trouble closing files
\& $gds2File -> close(-pad=>2048); ## experimental -- pad end with \e0's till file size is a
\& ## multiple of number. Note: old reel to reel tapes on Calma
\& ## systems used 2048 byte blocks
.SH "High Level Write Methods"
.IX Header "High Level Write Methods"
.Sh "\fIprintInitLib()\fP \- Does all the things needed to start a library"
.IX Subsection "printInitLib() - Does all the things needed to start a library"
\& $gds2File -> printInitLib(-name => "testlib", ##writes HEADER,BGNLIB,LIBNAME,and UNITS records
\& -isoDate => 0|1 ## (optional) use ISO 4 digit date 2001 vs 101
\& ## defaults to current date for library date and 1e-3 and 1e-9 for units
\& remember to close library with printEndlib()
.Sh "printBgnstr \- Does all the things needed to start a structure definition"
.IX Subsection "printBgnstr - Does all the things needed to start a structure definition"
\& $gds2File -> printBgnstr(-name => "nand3" ## writes BGNSTR and STRNAME records
\& -isoDate => 1|0 ## (optional) use ISO 4 digit date 2001 vs 101
\& remember to close with printEndstr()
.Sh "printPath \- prints a gds2 path"
.IX Subsection "printPath - prints a gds2 path"
\& $gds2File -> printPath(
\& -dataType=>#, ##optional
\& -unitWidth=>#, ## (optional) directly specify width in data base units (vs -width which is multipled by resolution)
\& -xy=>\e@array, ## array of reals
\& -xyInt=>\e@array, ## array of internal ints (optional -wks better if you are modifying an existing GDS2 file)
\& layer defaults to 0 if -layer not used
\& pathType defaults to 0 if -pathType not used
\& pathType 0 = square end
\& 2 = square - extended 1/2 width
\& 4 = custom plus variable path extension...
\& width defaults to 0.0 if -width not used
.Sh "printBoundary \- prints a gds2 boundary"
.IX Subsection "printBoundary - prints a gds2 boundary"
\& $gds2File -> printBoundary(
\& -xy=>\e@array, ## array of reals
\& -xyInt=>\e@array, ## array of internal ints (optional -wks better if you are modifying an existing GDS2 file)
\& layer defaults to 0 if -layer not used
\& dataType defaults to 0 if -dataType not used
.Sh "printSref \- prints a gds2 Structure REFerence"
.IX Subsection "printSref - prints a gds2 Structure REFerence"
\& $gds2File -> printSref(
\& -name=>string, ## Name of structure
\& -xy=>\e@array, ## array of reals
\& -xyInt=>\e@array, ## array of internal ints (optional -wks better than -xy if you are modifying an existing GDS2 file)
\& -angle=>#.#, ## (optional) Default is 0.0
\& -mag=>#.#, ## (optional) Default is 1.0
\& -reflect=>0|1 ## (optional)
\& best not to specify angle or mag if not needed
.Sh "printAref \- prints a gds2 Array REFerence"
.IX Subsection "printAref - prints a gds2 Array REFerence"
\& $gds2File -> printAref(
\& -name=>string, ## Name of structure
\& -columns=>#, ## Default is 1
\& -rows=>#, ## Default is 1
\& -xy=>\e@array, ## array of reals
\& -xyInt=>\e@array, ## array of internal ints (optional -wks better if you are modifying an existing GDS2 file)
\& -angle=>#.#, ## (optional) Default is 0.0
\& -mag=>#.#, ## (optional) Default is 1.0
\& -reflect=>0|1 ## (optional)
\& best not to specify angle or mag if not needed
.Sh "printText \- prints a gds2 Text"
.IX Subsection "printText - prints a gds2 Text"
\& $gds2File -> printText(
\& -layer=>#, ## Default is 0
\& -textType=>#, ## Default is 0
\& -top, or -middle, -bottom, ##optional vertical presentation
\& -left, or -center, or -right, ##optional horizontal presentation
\& -xy=>\e@array, ## array of reals
\& -xyInt=>\e@array, ## array of internal ints (optional -wks better if you are modifying an existing GDS2 file)
\& -x=>#.#, ## optional way of passing in x value
\& -y=>#.#, ## optional way of passing in y value
\& -angle=>#.#, ## (optional) Default is 0.0
\& -mag=>#.#, ## (optional) Default is 1.0
\& -reflect=>#, ## (optional) Default is 0
\& best not to specify reflect, angle or mag if not needed
.SH "Low Level Generic Write Methods"
.IX Header "Low Level Generic Write Methods"
.Sh "\fIsaveGds2Record()\fP \- low level method to create a gds2 record given record type and data (if required). Data of more than one item should be given as a list."
.IX Subsection "saveGds2Record() - low level method to create a gds2 record given record type and data (if required). Data of more than one item should be given as a list."
\& NOTE: THIS ONLY USES GDS2 OBJECT TO GET RESOLUTION
\& -data=>data_If_Needed, ##optional for some types
\& -scale=>#.#, ##optional number to scale data to. I.E -scale=>0.5 #default is NOT to scale
\& -snap=>#.#, ##optional number to snap data to I.E. -snap=>0.005 #default is 1 resolution unit, typically 0.001
\& my $gds2File = new GDS2(-fileName => ">$fileName");
\& my $record = $gds2File -> saveGds2Record(-type=>'header',-data=>3);
\& $gds2FileOut -> printGds2Record(-type=>'record',-data=>$record);
.Sh "\fIprintGds2Record()\fP \- low level method to print a gds2 record given record type and data (if required). Data of more than one item should be given as a list."
.IX Subsection "printGds2Record() - low level method to print a gds2 record given record type and data (if required). Data of more than one item should be given as a list."
\& -data=>data_If_Needed, ##optional for some types
\& -scale=>#.#, ##optional number to scale data to. I.E -scale=>0.5 #default is NOT to scale
\& -snap=>#.#, ##optional number to snap data to I.E. -snap=>0.005 #default is 1 resolution unit, typically 0.001
\& my $gds2File = new GDS2(-fileName => ">$fileName");
\& $gds2File -> printGds2Record(-type=>'header',-data=>3);
\& $gds2File -> printGds2Record(-type=>'bgnlib',-data=>[99,12,1,22,33,0,99,12,1,22,33,9]);
\& $gds2File -> printGds2Record(-type=>'libname',-data=>"testlib");
\& $gds2File -> printGds2Record(-type=>'units',-data=>[0.001, 1e-9]);
\& $gds2File -> printGds2Record(-type=>'bgnstr',-data=>[99,12,1,22,33,0,99,12,1,22,33,9]);
\& $gds2File -> printGds2Record(-type=>'endstr');
\& $gds2File -> printGds2Record(-type=>'endlib');
\& Note: the special record type of 'record' can be used to copy a complete record
\& while (my $record = $gds2FileIn -> readGds2Record())
\& $gds2FileOut -> printGds2Record(-type=>'record',-data=>$record);
.Sh "printRecord \- prints a record just read"
.IX Subsection "printRecord - prints a record just read"
\& $gds2File -> printRecord(
.SH "Low Level Generic Read Methods"
.IX Header "Low Level Generic Read Methods"
.Sh "readGds2Record \- reads record header and data section"
.IX Subsection "readGds2Record - reads record header and data section"
\& while ($gds2File -> readGds2Record)
\& if ($gds2File -> returnRecordTypeString eq 'LAYER')
\& $layersFound[$gds2File -> layer] = 1;
.Sh "readGds2RecordHeader \- only reads gds2 record header section (2 bytes)"
.IX Subsection "readGds2RecordHeader - only reads gds2 record header section (2 bytes)"
.Sh "readGds2RecordData \- only reads record data section"
.IX Subsection "readGds2RecordData - only reads record data section"
\& slightly faster if you just want a certain thing...
\& while ($gds2File -> readGds2RecordHeader)
\& if ($gds2File -> returnRecordTypeString eq 'LAYER')
\& $gds2File -> readGds2RecordData;
\& $layersFound[$gds2File -> returnLayer] = 1;
.SH "Low Level Generic Evaluation Methods"
.IX Header "Low Level Generic Evaluation Methods"
.Sh "returnRecordType \- returns current (read) record type as integer"
.IX Subsection "returnRecordType - returns current (read) record type as integer"
\& if ($gds2File -> returnRecordType == 6)
\& print "found STRNAME";
.Sh "returnRecordTypeString \- returns current (read) record type as string"
.IX Subsection "returnRecordTypeString - returns current (read) record type as string"
\& if ($gds2File -> returnRecordTypeString eq 'LAYER')
.Sh "returnRecordAsString \- returns current (read) record as a string"
.IX Subsection "returnRecordAsString - returns current (read) record as a string"
\& while ($gds2File -> readGds2Record)
\& print $gds2File -> returnRecordAsString;
.Sh "returnXyAsArray \- returns current (read) \s-1XY\s0 record as an array"
.IX Subsection "returnXyAsArray - returns current (read) XY record as an array"
\& $gds2File -> returnXyAsArray(
\& -asInteger => 0|1 ## (optional) default is true. Return integer
\& ## array or if false return array of reals.
\& -withClosure => 0|1 ## (optional) default is true. Whether to
\& ##return a rectangle with 5 or 4 points.
\& while ($gds2File -> readGds2Record)
\& my @xy = $gds2File -> returnXyAsArray if ($gds2File -> isXy);
.Sh "returnRecordAsPerl \- returns current (read) record as a perl command to facilitate the creation of parameterized gds2 data with perl."
.IX Subsection "returnRecordAsPerl - returns current (read) record as a perl command to facilitate the creation of parameterized gds2 data with perl."
\& my $gds2File = new GDS2(-fileName=>"test.gds");
\& while ($gds2File -> readGds2Record)
\& print $gds2File -> returnRecordAsPerl;
.SH "Low Level Specific Write Methods"
.IX Header "Low Level Specific Write Methods"
.Sh "printAngle \- prints \s-1ANGLE\s0 record"
.IX Subsection "printAngle - prints ANGLE record"
\& $gds2File -> printAngle(-num=>#.#);
.Sh "printAttrtable \- prints \s-1ATTRTABLE\s0 record"
.IX Subsection "printAttrtable - prints ATTRTABLE record"
\& $gds2File -> printAttrtable(-string=>$string);
.Sh "printBgnextn \- prints \s-1BGNEXTN\s0 record"
.IX Subsection "printBgnextn - prints BGNEXTN record"
\& $gds2File -> printBgnextn(-num=>#.#);
.Sh "printBgnlib \- prints \s-1BGNLIB\s0 record"
.IX Subsection "printBgnlib - prints BGNLIB record"
\& $gds2File -> printBgnlib(
\& -isoDate => 0|1 ## (optional) use ISO 4 digit date 2001 vs 101
.Sh "printBox \- prints \s-1BOX\s0 record"
.IX Subsection "printBox - prints BOX record"
\& $gds2File -> printBox;
.Sh "printBoxtype \- prints \s-1BOXTYPE\s0 record"
.IX Subsection "printBoxtype - prints BOXTYPE record"
\& $gds2File -> printBoxtype(-num=>#);
.Sh "printColrow \- prints \s-1COLROW\s0 record"
.IX Subsection "printColrow - prints COLROW record"
\& $gds2File -> printBoxtype(-columns=>#, -rows=>#);
.Sh "printDatatype \- prints \s-1DATATYPE\s0 record"
.IX Subsection "printDatatype - prints DATATYPE record"
\& $gds2File -> printDatatype(-num=>#);
.Sh "printElkey \- prints \s-1ELKEY\s0 record"
.IX Subsection "printElkey - prints ELKEY record"
\& $gds2File -> printElkey(-num=>#);
.Sh "printEndel \- closes an element definition"
.IX Subsection "printEndel - closes an element definition"
.Sh "printEndextn \- prints path end extension record"
.IX Subsection "printEndextn - prints path end extension record"
\& $gds2File printEndextn -> (-num=>#.#);
.Sh "printEndlib \- closes a library definition"
.IX Subsection "printEndlib - closes a library definition"
.Sh "printEndstr \- closes a structure definition"
.IX Subsection "printEndstr - closes a structure definition"
.Sh "printEndmasks \- prints a \s-1ENDMASKS\s0"
.IX Subsection "printEndmasks - prints a ENDMASKS"
.Sh "printFonts \- prints a \s-1FONTS\s0 record"
.IX Subsection "printFonts - prints a FONTS record"
\& $gds2File -> printFonts(-string=>'names_of_font_files');
.Sh "printHeader \- Prints a rev 3 header"
.IX Subsection "printHeader - Prints a rev 3 header"
\& $gds2File -> printHeader(
\& -num => # ## optional, defaults to 3. valid revs are 0,3,4,5,and 600
.Sh "printLayer \- prints a \s-1LAYER\s0 number"
.IX Subsection "printLayer - prints a LAYER number"
\& $gds2File -> printLayer(
\& -num => # ## optional, defaults to 0.
.Sh "printLibname \- Prints library name"
.IX Subsection "printLibname - Prints library name"
\& printLibname(-name=>$name);
.Sh "printPathtype \- prints a \s-1PATHTYPE\s0 number"
.IX Subsection "printPathtype - prints a PATHTYPE number"
\& $gds2File -> printPathtype(
\& -num => # ## optional, defaults to 0.
.Sh "printMag \- prints a \s-1MAG\s0 number"
.IX Subsection "printMag - prints a MAG number"
\& $gds2File -> printMag(
\& -num => #.# ## optional, defaults to 0.0
.Sh "printNodetype \- prints a \s-1NODETYPE\s0 number"
.IX Subsection "printNodetype - prints a NODETYPE number"
\& $gds2File -> printNodetype(
.Sh "printPresentation \- prints a text presentation record"
.IX Subsection "printPresentation - prints a text presentation record"
\& $gds2File -> printPresentation(
\& -font => #, ##optional, defaults to 0, valid numbers are 0-3
\& -top, ||-middle, || -bottom, ## vertical justification
\& -left, ||-center, || -right, ## horizontal justification
\& gds2File -> printPresentation(-font=>0,-top,-left);
.Sh "printPropattr \- prints a property id number"
.IX Subsection "printPropattr - prints a property id number"
\& $gds2File -> printPropattr( -num => # );
.Sh "printPropvalue \- prints a property value string"
.IX Subsection "printPropvalue - prints a property value string"
\& $gds2File -> printPropvalue( -string => $string );
.Sh "printSname \- prints a \s-1SNAME\s0 string"
.IX Subsection "printSname - prints a SNAME string"
\& $gds2File -> printSname( -name => $cellName );
.Sh "printStrans \- prints a \s-1STRANS\s0 record"
.IX Subsection "printStrans - prints a STRANS record"
\& $gds2File -> printStrans( -reflect );
.Sh "printString \- prints a \s-1STRING\s0 record"
.IX Subsection "printString - prints a STRING record"
\& $gds2File -> printSname( -string => $text );
.Sh "printStrname \- prints a structure name string"
.IX Subsection "printStrname - prints a structure name string"
\& $gds2File -> printStrname( -name => $cellName );
.Sh "printTexttype \- prints a text type number"
.IX Subsection "printTexttype - prints a text type number"
\& $gds2File -> printTexttype( -num => # );
.Sh "printUnits \- Prints units record."
.IX Subsection "printUnits - Prints units record."
\& Defaults to 1e-3 and 1e-9
.Sh "printPropattr \- prints a width number"
.IX Subsection "printPropattr - prints a width number"
\& $gds2File -> printWidth( -num => # );
.Sh "printXy \- prints an \s-1XY\s0 array"
.IX Subsection "printXy - prints an XY array"
\& $gds2File -> printXy( -xy => \e@array );
.SH "Low Level Specific Evaluation Methods"
.IX Header "Low Level Specific Evaluation Methods"
.Sh "returnDatatype \- returns datatype # if record is \s-1DATATYPE\s0 else returns \-1"
.IX Subsection "returnDatatype - returns datatype # if record is DATATYPE else returns -1"
\& $dataTypesFound[$gds2File -> returnDatatype] = 1;
.Sh "returnPathtype \- returns pathtype # if record is \s-1PATHTYPE\s0 else returns \-1"
.IX Subsection "returnPathtype - returns pathtype # if record is PATHTYPE else returns -1"
.Sh "returnTexttype \- returns texttype # if record is \s-1TEXTTYPE\s0 else returns \-1"
.IX Subsection "returnTexttype - returns texttype # if record is TEXTTYPE else returns -1"
\& $TextTypesFound[$gds2File -> returnTexttype] = 1;
.Sh "returnWidth \- returns width # if record is \s-1WIDTH\s0 else returns \-1"
.IX Subsection "returnWidth - returns width # if record is WIDTH else returns -1"
.Sh "returnLayer \- returns layer # if record is \s-1LAYER\s0 else returns \-1"
.IX Subsection "returnLayer - returns layer # if record is LAYER else returns -1"
\& $layersFound[$gds2File -> returnLayer] = 1;
.Sh "returnBgnextn \- returns bgnextn if record is \s-1BGNEXTN\s0 else returns 0"
.IX Subsection "returnBgnextn - returns bgnextn if record is BGNEXTN else returns 0"
.Sh "returnEndextn\- returns endextn if record is \s-1ENDEXTN\s0 else returns 0"
.IX Subsection "returnEndextn- returns endextn if record is ENDEXTN else returns 0"
.Sh "returnString \- return string if record type is \s-1STRING\s0 else ''"
.IX Subsection "returnString - return string if record type is STRING else ''"
.Sh "returnSname \- return string if record type is \s-1SNAME\s0 else ''"
.IX Subsection "returnSname - return string if record type is SNAME else ''"
.Sh "returnStrname \- return string if record type is \s-1STRNAME\s0 else ''"
.IX Subsection "returnStrname - return string if record type is STRNAME else ''"
.SH "Low Level Specific Boolean Methods"
.IX Header "Low Level Specific Boolean Methods"
.Sh "isAref \- return 0 or 1 depending on whether current record is an aref"
.IX Subsection "isAref - return 0 or 1 depending on whether current record is an aref"
.Sh "isBgnlib \- return 0 or 1 depending on whether current record is a bgnlib"
.IX Subsection "isBgnlib - return 0 or 1 depending on whether current record is a bgnlib"
.Sh "isBgnstr \- return 0 or 1 depending on whether current record is a bgnstr"
.IX Subsection "isBgnstr - return 0 or 1 depending on whether current record is a bgnstr"
.Sh "isBoundary \- return 0 or 1 depending on whether current record is a boundary"
.IX Subsection "isBoundary - return 0 or 1 depending on whether current record is a boundary"
.Sh "isDatatype \- return 0 or 1 depending on whether current record is datatype"
.IX Subsection "isDatatype - return 0 or 1 depending on whether current record is datatype"
.Sh "isEndlib \- return 0 or 1 depending on whether current record is endlib"
.IX Subsection "isEndlib - return 0 or 1 depending on whether current record is endlib"
.Sh "isEndel \- return 0 or 1 depending on whether current record is endel"
.IX Subsection "isEndel - return 0 or 1 depending on whether current record is endel"
.Sh "isEndstr \- return 0 or 1 depending on whether current record is endstr"
.IX Subsection "isEndstr - return 0 or 1 depending on whether current record is endstr"
.Sh "isHeader \- return 0 or 1 depending on whether current record is a header"
.IX Subsection "isHeader - return 0 or 1 depending on whether current record is a header"
.Sh "isLibname \- return 0 or 1 depending on whether current record is a libname"
.IX Subsection "isLibname - return 0 or 1 depending on whether current record is a libname"
.Sh "isPath \- return 0 or 1 depending on whether current record is a path"
.IX Subsection "isPath - return 0 or 1 depending on whether current record is a path"
.Sh "isSref \- return 0 or 1 depending on whether current record is an sref"
.IX Subsection "isSref - return 0 or 1 depending on whether current record is an sref"
.Sh "isSrfname \- return 0 or 1 depending on whether current record is an srfname"
.IX Subsection "isSrfname - return 0 or 1 depending on whether current record is an srfname"
.Sh "isText \- return 0 or 1 depending on whether current record is a text"
.IX Subsection "isText - return 0 or 1 depending on whether current record is a text"
.Sh "isUnits \- return 0 or 1 depending on whether current record is units"
.IX Subsection "isUnits - return 0 or 1 depending on whether current record is units"
.Sh "isLayer \- return 0 or 1 depending on whether current record is layer"
.IX Subsection "isLayer - return 0 or 1 depending on whether current record is layer"
.Sh "isStrname \- return 0 or 1 depending on whether current record is strname"
.IX Subsection "isStrname - return 0 or 1 depending on whether current record is strname"
.Sh "isWidth \- return 0 or 1 depending on whether current record is width"
.IX Subsection "isWidth - return 0 or 1 depending on whether current record is width"
.Sh "isXy \- return 0 or 1 depending on whether current record is xy"
.IX Subsection "isXy - return 0 or 1 depending on whether current record is xy"
.Sh "isSname \- return 0 or 1 depending on whether current record is sname"
.IX Subsection "isSname - return 0 or 1 depending on whether current record is sname"
.Sh "isColrow \- return 0 or 1 depending on whether current record is colrow"
.IX Subsection "isColrow - return 0 or 1 depending on whether current record is colrow"
.Sh "isTextnode \- return 0 or 1 depending on whether current record is a textnode"
.IX Subsection "isTextnode - return 0 or 1 depending on whether current record is a textnode"
.Sh "isNode \- return 0 or 1 depending on whether current record is a node"
.IX Subsection "isNode - return 0 or 1 depending on whether current record is a node"
.Sh "isTexttype \- return 0 or 1 depending on whether current record is a texttype"
.IX Subsection "isTexttype - return 0 or 1 depending on whether current record is a texttype"
.Sh "isPresentation \- return 0 or 1 depending on whether current record is a presentation"
.IX Subsection "isPresentation - return 0 or 1 depending on whether current record is a presentation"
.Sh "isSpacing \- return 0 or 1 depending on whether current record is a spacing"
.IX Subsection "isSpacing - return 0 or 1 depending on whether current record is a spacing"
.Sh "isString \- return 0 or 1 depending on whether current record is a string"
.IX Subsection "isString - return 0 or 1 depending on whether current record is a string"
.Sh "isStrans \- return 0 or 1 depending on whether current record is a strans"
.IX Subsection "isStrans - return 0 or 1 depending on whether current record is a strans"
.Sh "isMag \- return 0 or 1 depending on whether current record is a mag"
.IX Subsection "isMag - return 0 or 1 depending on whether current record is a mag"
.Sh "isAngle \- return 0 or 1 depending on whether current record is a angle"
.IX Subsection "isAngle - return 0 or 1 depending on whether current record is a angle"
.Sh "isUinteger \- return 0 or 1 depending on whether current record is a uinteger"
.IX Subsection "isUinteger - return 0 or 1 depending on whether current record is a uinteger"
.Sh "isUstring \- return 0 or 1 depending on whether current record is a ustring"
.IX Subsection "isUstring - return 0 or 1 depending on whether current record is a ustring"
.Sh "isReflibs \- return 0 or 1 depending on whether current record is a reflibs"
.IX Subsection "isReflibs - return 0 or 1 depending on whether current record is a reflibs"
.Sh "isFonts \- return 0 or 1 depending on whether current record is a fonts"
.IX Subsection "isFonts - return 0 or 1 depending on whether current record is a fonts"
.Sh "isPathtype \- return 0 or 1 depending on whether current record is a pathtype"
.IX Subsection "isPathtype - return 0 or 1 depending on whether current record is a pathtype"
.Sh "isGenerations \- return 0 or 1 depending on whether current record is a generations"
.IX Subsection "isGenerations - return 0 or 1 depending on whether current record is a generations"
.Sh "isAttrtable \- return 0 or 1 depending on whether current record is a attrtable"
.IX Subsection "isAttrtable - return 0 or 1 depending on whether current record is a attrtable"
.Sh "isStyptable \- return 0 or 1 depending on whether current record is a styptable"
.IX Subsection "isStyptable - return 0 or 1 depending on whether current record is a styptable"
.Sh "isStrtype \- return 0 or 1 depending on whether current record is a strtype"
.IX Subsection "isStrtype - return 0 or 1 depending on whether current record is a strtype"
.Sh "isEflags \- return 0 or 1 depending on whether current record is a eflags"
.IX Subsection "isEflags - return 0 or 1 depending on whether current record is a eflags"
.Sh "isElkey \- return 0 or 1 depending on whether current record is a elkey"
.IX Subsection "isElkey - return 0 or 1 depending on whether current record is a elkey"
.Sh "isLinktype \- return 0 or 1 depending on whether current record is a linktype"
.IX Subsection "isLinktype - return 0 or 1 depending on whether current record is a linktype"
.Sh "isLinkkeys \- return 0 or 1 depending on whether current record is a linkkeys"
.IX Subsection "isLinkkeys - return 0 or 1 depending on whether current record is a linkkeys"
.Sh "isNodetype \- return 0 or 1 depending on whether current record is a nodetype"
.IX Subsection "isNodetype - return 0 or 1 depending on whether current record is a nodetype"
.Sh "isPropattr \- return 0 or 1 depending on whether current record is a propattr"
.IX Subsection "isPropattr - return 0 or 1 depending on whether current record is a propattr"
.Sh "isPropvalue \- return 0 or 1 depending on whether current record is a propvalue"
.IX Subsection "isPropvalue - return 0 or 1 depending on whether current record is a propvalue"
.Sh "isBox \- return 0 or 1 depending on whether current record is a box"
.IX Subsection "isBox - return 0 or 1 depending on whether current record is a box"
.Sh "isBoxtype \- return 0 or 1 depending on whether current record is a boxtype"
.IX Subsection "isBoxtype - return 0 or 1 depending on whether current record is a boxtype"
.Sh "isPlex \- return 0 or 1 depending on whether current record is a plex"
.IX Subsection "isPlex - return 0 or 1 depending on whether current record is a plex"
.Sh "isBgnextn \- return 0 or 1 depending on whether current record is a bgnextn"
.IX Subsection "isBgnextn - return 0 or 1 depending on whether current record is a bgnextn"
.Sh "isEndextn \- return 0 or 1 depending on whether current record is a endextn"
.IX Subsection "isEndextn - return 0 or 1 depending on whether current record is a endextn"
.Sh "isTapenum \- return 0 or 1 depending on whether current record is a tapenum"
.IX Subsection "isTapenum - return 0 or 1 depending on whether current record is a tapenum"
.Sh "isTapecode \- return 0 or 1 depending on whether current record is a tapecode"
.IX Subsection "isTapecode - return 0 or 1 depending on whether current record is a tapecode"
.Sh "isStrclass \- return 0 or 1 depending on whether current record is a strclass"
.IX Subsection "isStrclass - return 0 or 1 depending on whether current record is a strclass"
.Sh "isReserved \- return 0 or 1 depending on whether current record is a reserved"
.IX Subsection "isReserved - return 0 or 1 depending on whether current record is a reserved"
.Sh "isFormat \- return 0 or 1 depending on whether current record is a format"
.IX Subsection "isFormat - return 0 or 1 depending on whether current record is a format"
.Sh "isMask \- return 0 or 1 depending on whether current record is a mask"
.IX Subsection "isMask - return 0 or 1 depending on whether current record is a mask"
.Sh "isEndmasks \- return 0 or 1 depending on whether current record is a endmasks"
.IX Subsection "isEndmasks - return 0 or 1 depending on whether current record is a endmasks"
.Sh "isLibdirsize \- return 0 or 1 depending on whether current record is a libdirsize"
.IX Subsection "isLibdirsize - return 0 or 1 depending on whether current record is a libdirsize"
.Sh "isLibsecur \- return 0 or 1 depending on whether current record is a libsecur"
.IX Subsection "isLibsecur - return 0 or 1 depending on whether current record is a libsecur"
.Sh "tellSize \- return current byte position (\s-1NOT\s0 zero based)"
.IX Subsection "tellSize - return current byte position (NOT zero based)"
\& my $position = $gds2File -> tellSize;
\& here's a bare bones script to change all layer 59 to 66 given a file to
\& read and a new file to create.
\& #!/usr/local/bin/perl -w
\& my $fileName1 = $ARGV[0];
\& my $fileName2 = $ARGV[1];
\& my $gds2File1 = new GDS2(-fileName => $fileName1);
\& my $gds2File2 = new GDS2(-fileName => ">$fileName2");
\& while (my $record = $gds2File1 -> readGds2Record)
\& if ($gds2File1 -> returnLayer == 59)
\& $gds2File2 -> printLayer(-num=>66);
\& $gds2File2 -> printRecord(-data=>$record);
\& here's a program to dump the contents of a stream file.
\& #!/usr/local/bin/perl -w
\& my $gds2File = new GDS2(-fileName=>$ARGV[0]);
\& while ($gds2File -> readGds2Record)
\& print $gds2File -> returnRecordAsString;
\& Create a complete GDS2 stream file from scratch:
\& #!/usr/local/bin/perl -w
\& my $gds2File = new GDS2(-fileName=>'>test.gds');
\& $gds2File -> printInitLib(-name=>'testlib');
\& $gds2File -> printBgnstr(-name=>'test');
\& $gds2File -> printPath(
\& -xy=>[0,0, 10.5,0, 10.5,3.3],
\& $gds2File -> printSref(
\& $gds2File -> printAref(
\& $gds2File -> printEndstr;
\& $gds2File -> printBgnstr(-name => 'contact');
\& $gds2File -> printBoundary(
\& -xy=>[0,0, 1,0, 1,1, 0,1],
\& $gds2File -> printEndstr;
\& $gds2File -> printEndlib();
.IX Header "GDS2 Stream Format"
\& #########################################################################################
\& # Gds2 stream format is composed of variable length records. The mininum
\& # length record is 4 bytes. The 1st 2 bytes of a record contain a count (in 8 bit
\& # bytes) of the total record length. The 3rd byte of the header is the record
\& # type. The 4th byte describes the type of data contained w/in the record. The
\& # 5th through last bytes are data.
\& # If the output file is a mag tape, then the records of the library are written
\& # out in 2048-byte physical blocks. Records may overlap block boundaries.
\& # For this reason I think gds2 is often padded with null bytes so that the
\& # file size ends up being a multiple of 2048.
\& # A null word consists of 2 consecutive zero bytes. Use null words to fill the
\& # o the last record of a library and the end of its block
\& # o the last record of a tape in a mult-reel stream file.
\& # DATA TYPE VALUE RECORD
\& # --------- ----- -----------------------
\& # no data present 0 4 byte header + 0
\& # Bit Array 1 4 byte header + 2 bytes data
\& # 2byte Signed Int 2 SMMMMMMM MMMMMMMM -> S - sign ; M - magnitude.
\& # Twos complement format, with the most significant byte first.
\& # 4byte Signed Int 3 SMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
\& # 8byte Real 5 SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM E-expon in excess-64
\& # MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM representation
\& # Mantissa == pos fraction >=1/16 && <1 bit 8==1/2, 9==1/4 etc...
\& # The first bit is the sign (1 = negative), the next 7 bits
\& # are the exponent, you have to subtract 64 from this number to
\& # get the real value. The next seven bytes are the mantissa in
\& # 4 word floating point representation.
\& # string 6 odd length strings must be padded w/ null character and
\& #########################################################################################
.SH "Backus-naur representation of GDS2 Stream Syntax"
.IX Header "Backus-naur representation of GDS2 Stream Syntax"
\& ################################################################################
\& # <STREAM FORMAT>::= HEADER BGNLIB [LIBDIRSIZE] [SRFNAME] [LIBSECR] #
\& # LIBNAME [REFLIBS] [FONTS] [ATTRTABLE] [GENERATIONS] #
\& # [<FormatType>] UNITS {<structure>}* ENDLIB #
\& # <FormatType>::= FORMAT | FORMAT {MASK}+ ENDMASKS #
\& # <structure>::= BGNSTR STRNAME [STRCLASS] {<element>}* ENDSTR #
\& # <element>::= {<boundary> | <path> | <SREF> | <AREF> | <text> | #
\& # <node> | <box} {<property>}* ENDEL #
\& # <boundary>::= BOUNDARY [ELFLAGS] [PLEX] LAYER DATATYPE XY #
\& # <path>::= PATH [ELFLAGS] [PLEX] LAYER DATATYPE [PATHTYPE] #
\& # [WIDTH] [BGNEXTN] [ENDEXTN] [XY] #
\& # <SREF>::= SREF [ELFLAGS] [PLEX] SNAME [<strans>] XY #
\& # <AREF>::= AREF [ELFLAGS] [PLEX] SNAME [<strans>] COLROW XY #
\& # <text>::= TEXT [ELFLAGS] [PLEX] LAYER <textbody> #
\& # <textbody>::= TEXTTYPE [PRESENTATION] [PATHTYPE] [WIDTH] [<strans>] XY #
\& # <strans>::= STRANS [MAG] [ANGLE] #
\& # <node>::= NODE [ELFLAGS] [PLEX] LAYER NODETYPE XY #
\& # <box>::= BOX [ELFLAGS] [PLEX] LAYER BOXTYPE XY #
\& # <property>::= PROPATTR PROPVALUE #
\& ################################################################################
.SH "GDS2 Stream Record Datatypes"
.IX Header "GDS2 Stream Record Datatypes"
\& ################################################################################
\& REAL_4 = 4; ## NOT supported, never really used
\& ################################################################################
.SH "GDS2 Stream Record Types"
.IX Header "GDS2 Stream Record Types"
\& ################################################################################
\& HEADER = 0; ## 2-byte Signed Integer
\& BGNLIB = 1; ## 2-byte Signed Integer
\& LIBNAME = 2; ## ASCII String
\& UNITS = 3; ## 8-byte Real
\& ENDLIB = 4; ## no data present
\& BGNSTR = 5; ## 2-byte Signed Integer
\& STRNAME = 6; ## ASCII String
\& ENDSTR = 7; ## no data present
\& BOUNDARY = 8; ## no data present
\& PATH = 9; ## no data present
\& SREF = 10; ## no data present
\& AREF = 11; ## no data present
\& TEXT = 12; ## no data present
\& LAYER = 13; ## 2-byte Signed Integer
\& DATATYPE = 14; ## 2-byte Signed Integer
\& WIDTH = 15; ## 4-byte Signed Integer
\& XY = 16; ## 4-byte Signed Integer
\& ENDEL = 17; ## no data present
\& SNAME = 18; ## ASCII String
\& COLROW = 19; ## 2 2-byte Signed Integer <= 32767
\& TEXTNODE = 20; ## no data present
\& NODE = 21; ## no data present
\& TEXTTYPE = 22; ## 2-byte Signed Integer
\& PRESENTATION = 23; ## Bit Array. One word (2 bytes) of bit flags. Bits 11 and
\& ## 12 together specify the font 00->font 0 11->font 3.
\& ## Bits 13 and 14 specify the vertical presentation, 15
\& ## and 16 the horizontal presentation. 00->'top/left' 01->
\& ## middle/center 10->bottom/right bits 1-10 were reserved
\& ## for future use and should be 0.
\& SPACING = 24; ## discontinued
\& STRING = 25; ## ASCII String <= 512 characters
\& STRANS = 26; ## Bit Array: 2 bytes of bit flags for graphic presentation
\& ## The 1st (high order or leftmost) bit specifies
\& ## reflection. If set then reflection across the X-axis
\& ## is applied before rotation. The 14th bit flags
\& ## absolute mag, the 15th absolute angle, the other bits
\& ## were reserved for future use and should be 0.
\& MAG = 27; ## 8-byte Real
\& ANGLE = 28; ## 8-byte Real
\& UINTEGER = 29; ## UNKNOWN User int, used only in Calma V2.0
\& USTRING = 30; ## UNKNOWN User string, used only in Calma V2.0
\& REFLIBS = 31; ## ASCII String
\& FONTS = 32; ## ASCII String
\& PATHTYPE = 33; ## 2-byte Signed Integer
\& GENERATIONS = 34; ## 2-byte Signed Integer
\& ATTRTABLE = 35; ## ASCII String
\& STYPTABLE = 36; ## ASCII String "Unreleased feature"
\& STRTYPE = 37; ## 2-byte Signed Integer "Unreleased feature"
\& EFLAGS = 38; ## BIT_ARRAY Flags for template and exterior data.
\& ## bits 15 to 0, l to r 0=template, 1=external data, others unused
\& ELKEY = 39; ## INTEGER_4 "Unreleased feature"
\& LINKTYPE = 40; ## UNKNOWN "Unreleased feature"
\& LINKKEYS = 41; ## UNKNOWN "Unreleased feature"
\& NODETYPE = 42; ## INTEGER_2 Nodetype specification. On Calma this could be 0 to 63,
\& ## GDSII allows 0 to 255. Of course a 16 bit integer allows up to 65535...
\& PROPATTR = 43; ## INTEGER_2 Property number.
\& PROPVALUE = 44; ## STRING Property value. On GDSII, 128 characters max, unless an
\& ## SREF, AREF, or NODE, which may have 512 characters.
\& BOX = 45; ## NO_DATA The beginning of a BOX element.
\& BOXTYPE = 46; ## INTEGER_2 Boxtype specification.
\& PLEX = 47; ## INTEGER_4 Plex number and plexhead flag. The least significant bit of
\& ## the most significant byte is the plexhead flag.
\& BGNEXTN = 48; ## INTEGER_4 Path extension beginning for pathtype 4 in Calma CustomPlus.
\& ## In database units, may be negative.
\& ENDEXTN = 49; ## INTEGER_4 Path extension end for pathtype 4 in Calma CustomPlus. In
\& ## database units, may be negative.
\& TAPENUM = 50; ## INTEGER_2 Tape number for multi-reel stream file.
\& TAPECODE = 51; ## INTEGER_2 Tape code to verify that the reel is from the proper set.
\& ## 12 bytes that are supposed to form a unique tape code.
\& STRCLASS = 52; ## BIT_ARRAY Calma use only.
\& RESERVED = 53; ## INTEGER_4 Used to be NUMTYPES per Calma GDSII Stream Format Manual, v6.0.
\& FORMAT = 54; ## INTEGER_2 Archive or Filtered flag. 0: Archive 1: filtered
\& MASK = 55; ## STRING Only in filtered streams. Layers and datatypes used for mask
\& ## in a filtered stream file. A string giving ranges of layers and datatypes
\& ## separated by a semicolon. There may be more than one mask in a stream file.
\& ENDMASKS = 56; ## NO_DATA The end of mask descriptions.
\& LIBDIRSIZE = 57; ## INTEGER_2 Number of pages in library director, a GDSII thing, it seems
\& ## to have only been used when Calma INFORM was creating a new library.
\& SRFNAME = 58; ## STRING Calma "Sticks"(c) rule file name.
\& LIBSECUR = 59; ## INTEGER_2 Access control list stuff for CalmaDOS, ancient. INFORM used
\& ## this when creating a new library. Had 1 to 32 entries with group
\& ## numbers, user numbers and access rights.