GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  GDS2 (3)

.ds Aq ’

NAME

GDS2 - GDS2 stream module

CONTENTS

SYNOPSIS

This is GDS2, a module for creating programs to read and/or write GDS2 files.

Send feedback/suggestions to perl -le ’$_=q(Zpbhgnpe@pvnt.uxa);$_=~tr/n-sa-gt-zh-mZ/a-zS/;print;’

COPYRIGHT

Author: Ken Schumack (c) 1999-2014. All rights reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License. ( see http://www.perl.com/pub/a/language/misc/Artistic.html )
Have fun, Ken
perl -le ’$_=q(Zpbhgnpe@pvnt.uxa);$_=~tr/n-sa-gt-zh-mZ/a-zS/;print;’

DESCRIPTION

GDS2 allows you to read and write GDS2 files record by record in a stream fashion which inherently uses little memory. It is capable but not fast. If you have large files you may be happier using http://sourceforge.net/projects/gds2/

METHODS

    new - open gds2 file



  usage:
  my $gds2File  = new GDS2(-fileName => "filename.gds2"); ## to read
  my $gds2File2 = new GDS2(-fileName => ">filename.gds2"); ## to write



    fileNum - file number...



  usage:



    close - close gds2 file



  usage:
  $gds2File -> close;
   -or-
  $gds2File -> close(-markEnd=>1); ## -- some systems have trouble closing files
  $gds2File -> close(-pad=>2048);  ## -- pad end with \0s till file size is a
                                   ## multiple of number. Note: old reel to reel tapes on Calma
                                   ## systems used 2048 byte blocks



High Level Write Methods

printInitLib() - Does all the things needed to start a library, writes HEADER,BGNLIB,LIBNAME,and UNITS records

The default is to create a library with a default unit of 1 micron that has a resolution of 1000. To get this set uUnit to 0.001 (1/1000) and the dbUnit to 1/1000th of a micron (1e-9).
usage:
$gds2File -> printInitLib(-name => testlib, ## required
-isoDate => 0|1 ## (optional) use ISO 4 digit date 2001 vs 101
-uUnit => real number ## (optional) default is 0.001
-dbUnit => real number ## (optional) default is 1e-9
);



     ## defaults to current date for library date

   note:
     remember to close library with printEndlib()



    printBgnstr - Does all the things needed to start a structure definition



   usage:
    $gds2File -> printBgnstr(-name => "nand3" ## writes BGNSTR and STRNAME records
                             -isoDate => 1|0  ## (optional) use ISO 4 digit date 2001 vs 101
                             );

   note:
     remember to close with printEndstr()



    printPath - prints a gds2 path



  usage:
    $gds2File -> printPath(
                    -layer=>#,
                    -dataType=>#,     ##optional
                    -pathType=>#,
                    -width=>#.#,
                    -unitWidth=>#,    ## (optional) directly specify width in data base units (vs -width which is multipled by resolution)
                    -xy=>\@array,     ## array of reals
                    -xyInt=>\@array,  ## array of internal ints (optional -wks better if you are modifying an existing GDS2 file)
                  );

  note:
    layer defaults to 0 if -layer not used
    pathType defaults to 0 if -pathType not used
      pathType 0 = square end
               1 = round end
               2 = square - extended 1/2 width
               4 = custom plus variable path extension...
    width defaults to 0.0 if -width not used



    printBoundary - prints a gds2 boundary



  usage:
    $gds2File -> printBoundary(
                    -layer=>#,
                    -dataType=>#,
                    -xy=>\@array,     ## ref to array of reals
                    -xyInt=>\@array,  ## ref to array of internal ints (optional -wks better if you are modifying an existing GDS2 file)
                 );

  note:
    layer defaults to 0 if -layer not used
    dataType defaults to 0 if -dataType not used



    printSref - prints a gds2 Structure REFerence



  usage:
    $gds2File -> printSref(
                    -name=>string,   ## Name of structure
                    -xy=>\@array,    ## ref to array of reals
                    -xyInt=>\@array, ## ref to 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)
                 );

  note:
    best not to specify angle or mag if not needed



    printAref - prints a gds2 Array REFerence



  usage:
    $gds2File -> printAref(
                    -name=>string,   ## Name of structure
                    -columns=>#,     ## Default is 1
                    -rows=>#,        ## Default is 1
                    -xy=>\@array,    ## ref to array of reals
                    -xyInt=>\@array, ## ref to 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)
                 );

  note:
    best not to specify angle or mag if not needed
    xyList: 1st coord: origin, 2nd coord: X of col * xSpacing + origin, 3rd coord: Y of row * ySpacing + origin



    printText - prints a gds2 Text



  usage:
    $gds2File -> printText(
                    -string=>string,
                    -layer=>#,      ## Default is 0
                    -textType=>#,   ## Default is 0
                    -font=>#,       ## 0-3
                    -top, or -middle, -bottom,     ##optional vertical presentation
                    -left, or -center, or -right,  ##optional horizontal presentation
                    -xy=>\@array,     ## ref to array of reals
                    -xyInt=>\@array,  ## ref to 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
                 );

  note:
    best not to specify reflect, angle or mag if not needed



Low Level Generic Write Methods

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

  usage:
    saveGds2Record(
            -type=>string,
            -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
    );

  examples:
    my $gds2File = new GDS2(-fileName => ">$fileName");
    my $record = $gds2File -> saveGds2Record(-type=>header,-data=>3);
    $gds2FileOut -> printGds2Record(-type=>record,-data=>$record);



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.



  usage:
    printGds2Record(
            -type=>string,
            -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
    );

  examples:
    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
  just read in:
    while (my $record = $gds2FileIn -> readGds2Record())
    {
        $gds2FileOut -> printGds2Record(-type=>record,-data=>$record);
    }



    printRecord - prints a record just read



  usage:
    $gds2File -> printRecord(
                  -data => $record
                );



Low Level Generic Read Methods

    readGds2Record - reads record header and data section



  usage:
  while ($gds2File -> readGds2Record)
  {
      if ($gds2File -> returnRecordTypeString eq LAYER)
      {
          $layersFound[$gds2File -> layer] = 1;
      }
  }



    readGds2RecordHeader - only reads gds2 record header section (2 bytes)



  slightly faster if you just want a certain thing...
  usage:
  while ($gds2File -> readGds2RecordHeader)
  {
      if ($gds2File -> returnRecordTypeString eq LAYER)
      {
          $gds2File -> readGds2RecordData;
          $layersFound[$gds2File -> returnLayer] = 1;
      }
  }



    readGds2RecordData - only reads record data section



  slightly faster if you just want a certain thing...
  usage:
  while ($gds2File -> readGds2RecordHeader)
  {
      if ($gds2File -> returnRecordTypeString eq LAYER)
      {
          $gds2File -> readGds2RecordData;
          $layersFound[$gds2File -> returnLayer] = 1;
      }
  }



Low Level Generic Evaluation Methods

    returnRecordType - returns current (read) record type as integer



  usage:
  if ($gds2File -> returnRecordType == 6)
  {
      print "found STRNAME";
  }



    returnRecordTypeString - returns current (read) record type as string



  usage:
  if ($gds2File -> returnRecordTypeString eq LAYER)
  {
      code goes here...
  }



    returnRecordAsString - returns current (read) record as a string



  usage:
  while ($gds2File -> readGds2Record)
  {
      print $gds2File -> returnRecordAsString;
  }



    returnXyAsArray - returns current (read) XY record as an array



  usage:
    $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.
               );

  example:
  while ($gds2File -> readGds2Record)
  {
      my @xy = $gds2File -> returnXyAsArray if ($gds2File -> isXy);
  }



    returnRecordAsPerl - returns current (read) record as a perl command to facilitate the creation of parameterized gds2 data with perl.



  usage:
  #!/usr/local/bin/perl
  use GDS2;
  my $gds2File = new GDS2(-fileName=>"test.gds");
  while ($gds2File -> readGds2Record)
  {
      print $gds2File -> returnRecordAsPerl;
  }



Low Level Specific Write Methods

    printAngle - prints ANGLE record



  usage:
    $gds2File -> printAngle(-num=>#.#);



    printAttrtable - prints ATTRTABLE record



  usage:
    $gds2File -> printAttrtable(-string=>$string);



    printBgnextn - prints BGNEXTN record



  usage:
    $gds2File -> printBgnextn(-num=>#.#);



    printBgnlib - prints BGNLIB record



  usage:
    $gds2File -> printBgnlib(
                            -isoDate => 0|1 ## (optional) use ISO 4 digit date 2001 vs 101
                           );



    printBox - prints BOX record



  usage:
    $gds2File -> printBox;



    printBoxtype - prints BOXTYPE record



  usage:
    $gds2File -> printBoxtype(-num=>#);



    printColrow - prints COLROW record



  usage:
    $gds2File -> printBoxtype(-columns=>#, -rows=>#);



    printDatatype - prints DATATYPE record



  usage:
    $gds2File -> printDatatype(-num=>#);



    printElkey - prints ELKEY record



  usage:
    $gds2File -> printElkey(-num=>#);



    printEndel - closes an element definition

    printEndextn - prints path end extension record



  usage:
    $gds2File printEndextn -> (-num=>#.#);



    printEndlib - closes a library definition

    printEndstr - closes a structure definition

    printEndmasks - prints a ENDMASKS

    printFonts - prints a FONTS record



  usage:
    $gds2File -> printFonts(-string=>names_of_font_files);



    printHeader - Prints a rev 3 header



  usage:
    $gds2File -> printHeader(
                  -num => #  ## optional, defaults to 3. valid revs are 0,3,4,5,and 600
                );



    printLayer - prints a LAYER number



  usage:
    $gds2File -> printLayer(
                  -num => #  ## optional, defaults to 0.
                );



    printLibname - Prints library name



  usage:
    printLibname(-name=>$name);



    printPathtype - prints a PATHTYPE number



  usage:
    $gds2File -> printPathtype(
                  -num => #  ## optional, defaults to 0.
                );



    printMag - prints a MAG number



  usage:
    $gds2File -> printMag(
                  -num => #.#  ## optional, defaults to 0.0
                );



    printNodetype - prints a NODETYPE number



  usage:
    $gds2File -> printNodetype(
                  -num => #
                );



    printPresentation - prints a text presentation record



  usage:
    $gds2File -> printPresentation(
                  -font => #,  ##optional, defaults to 0, valid numbers are 0-3
                  -top, ||-middle, || -bottom, ## vertical justification
                  -left, ||-center, || -right, ## horizontal justification
                );

  example:
    gds2File -> printPresentation(-font=>0,-top,-left);



    printPropattr - prints a property id number



  usage:
    $gds2File -> printPropattr( -num => # );



    printPropvalue - prints a property value string



  usage:
    $gds2File -> printPropvalue( -string => $string );



    printSname - prints a SNAME string



  usage:
    $gds2File -> printSname( -name => $cellName );



    printStrans - prints a STRANS record



  usage:
    $gds2File -> printStrans( -reflect );



    printString - prints a STRING record



  usage:
    $gds2File -> printSname( -string => $text );



    printStrname - prints a structure name string



  usage:
    $gds2File -> printStrname( -name => $cellName );



    printTexttype - prints a text type number



  usage:
    $gds2File -> printTexttype( -num => # );



    printUnits - Prints units record.



  options:
    -uUnit   => real number ## (optional) default is 0.001
    -dbUnit  => real number ## (optional) default is 1e-9



    printWidth - prints a width number



  usage:
    $gds2File -> printWidth( -num => # );



    printXy - prints an XY array



  usage:
    $gds2File -> printXy( -xyInt => \@arrayGds2Ints );
    -or-
    $gds2File -> printXy( -xy => \@arrayReals );

    -xyInt most useful if reading and modifying... -xy if creating from scratch



Low Level Specific Evaluation Methods

    returnFilePosition - return current byte position (NOT zero based)



  usage:
    my $position = $gds2File -> returnFilePosition;



    returnBgnextn - returns bgnextn if record is BGNEXTN else returns 0



  usage:



    returnDatatype - returns datatype # if record is DATATYPE else returns -1



  usage:
    $dataTypesFound[$gds2File -> returnDatatype] = 1;



    returnEndextn- returns endextn if record is ENDEXTN else returns 0



  usage:



    returnLayer - returns layer # if record is LAYER else returns -1



  usage:
    $layersFound[$gds2File -> returnLayer] = 1;



    returnPathtype - returns pathtype # if record is PATHTYPE else returns -1



  usage:



    returnPropattr - returns propattr # if record is PROPATTR else returns -1



  usage:



    returnPropvalue - returns propvalue string if record is PROPVALUE else returns ’’



  usage:



    returnSname - return string if record type is SNAME else ’’

    returnString - return string if record type is STRING else ’’

    returnStrname - return string if record type is STRNAME else ’’

    returnTexttype - returns texttype # if record is TEXTTYPE else returns -1



  usage:
    $TextTypesFound[$gds2File -> returnTexttype] = 1;



    returnWidth - returns width # if record is WIDTH else returns -1



  usage:



Low Level Specific Boolean Methods

    isAref - return 0 or 1 depending on whether current record is an aref

    isBgnlib - return 0 or 1 depending on whether current record is a bgnlib

    isBgnstr - return 0 or 1 depending on whether current record is a bgnstr

    isBoundary - return 0 or 1 depending on whether current record is a boundary

    isDatatype - return 0 or 1 depending on whether current record is datatype

    isEndlib - return 0 or 1 depending on whether current record is endlib

    isEndel - return 0 or 1 depending on whether current record is endel

    isEndstr - return 0 or 1 depending on whether current record is endstr

    isHeader - return 0 or 1 depending on whether current record is a header

    isLibname - return 0 or 1 depending on whether current record is a libname

    isPath - return 0 or 1 depending on whether current record is a path

    isSref - return 0 or 1 depending on whether current record is an sref

    isSrfname - return 0 or 1 depending on whether current record is an srfname

    isText - return 0 or 1 depending on whether current record is a text

    isUnits - return 0 or 1 depending on whether current record is units

    isLayer - return 0 or 1 depending on whether current record is layer

    isStrname - return 0 or 1 depending on whether current record is strname

    isWidth - return 0 or 1 depending on whether current record is width

    isXy - return 0 or 1 depending on whether current record is xy

    isSname - return 0 or 1 depending on whether current record is sname

    isColrow - return 0 or 1 depending on whether current record is colrow

    isTextnode - return 0 or 1 depending on whether current record is a textnode

    isNode - return 0 or 1 depending on whether current record is a node

    isTexttype - return 0 or 1 depending on whether current record is a texttype

    isPresentation - return 0 or 1 depending on whether current record is a presentation

    isSpacing - return 0 or 1 depending on whether current record is a spacing

    isString - return 0 or 1 depending on whether current record is a string

    isStrans - return 0 or 1 depending on whether current record is a strans

    isMag - return 0 or 1 depending on whether current record is a mag

    isAngle - return 0 or 1 depending on whether current record is a angle

    isUinteger - return 0 or 1 depending on whether current record is a uinteger

    isUstring - return 0 or 1 depending on whether current record is a ustring

    isReflibs - return 0 or 1 depending on whether current record is a reflibs

    isFonts - return 0 or 1 depending on whether current record is a fonts

    isPathtype - return 0 or 1 depending on whether current record is a pathtype

    isGenerations - return 0 or 1 depending on whether current record is a generations

    isAttrtable - return 0 or 1 depending on whether current record is a attrtable

    isStyptable - return 0 or 1 depending on whether current record is a styptable

    isStrtype - return 0 or 1 depending on whether current record is a strtype

    isEflags - return 0 or 1 depending on whether current record is a eflags

    isElkey - return 0 or 1 depending on whether current record is a elkey

    isLinktype - return 0 or 1 depending on whether current record is a linktype

    isLinkkeys - return 0 or 1 depending on whether current record is a linkkeys

    isNodetype - return 0 or 1 depending on whether current record is a nodetype

    isPropattr - return 0 or 1 depending on whether current record is a propattr

    isPropvalue - return 0 or 1 depending on whether current record is a propvalue

    isBox - return 0 or 1 depending on whether current record is a box

    isBoxtype - return 0 or 1 depending on whether current record is a boxtype

    isPlex - return 0 or 1 depending on whether current record is a plex

    isBgnextn - return 0 or 1 depending on whether current record is a bgnextn

    isEndextn - return 0 or 1 depending on whether current record is a endextn

    isTapenum - return 0 or 1 depending on whether current record is a tapenum

    isTapecode - return 0 or 1 depending on whether current record is a tapecode

    isStrclass - return 0 or 1 depending on whether current record is a strclass

    isReserved - return 0 or 1 depending on whether current record is a reserved

    isFormat - return 0 or 1 depending on whether current record is a format

    isMask - return 0 or 1 depending on whether current record is a mask

    isEndmasks - return 0 or 1 depending on whether current record is a endmasks

    isLibdirsize - return 0 or 1 depending on whether current record is a libdirsize

    isLibsecur - return 0 or 1 depending on whether current record is a libsecur

    recordSize - return current record size



  usage:
    my $len = $gds2File -> recordSize;



    dataSize - return current record size - 4 (length of data)



  usage:
    my $dataLen = $gds2File -> dataSize;



    returnUnitsAsArray - return user units and database units as a 2 element array



  usage:
    my ($uu,$dbu) = $gds2File -> returnUnitsAsArray;



    version - return GDS2 module version string

    version - return GDS2 module revision string

Examples



  Layer change:
    heres a bare bones script to change all layer 59 to 66 given a file to
    read and a new file to create.
    #!/usr/bin/perl -w
    use strict;
    use GDS2;
    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);
        }
        else
        {
            $gds2File2 -> printRecord(-data=>$record);
        }
    }


  Gds2 dump:
    heres a program to dump the contents of a stream file.
    #!/usr/bin/perl -w
    use GDS2;
    $\="\n";

    my $gds2File = new GDS2(-fileName=>$ARGV[0]);
    while ($gds2File -> readGds2Record)
    {
        print $gds2File -> returnRecordAsString;
    }

  Gds2 dump in GDT format (http://sourceforge.net/projects/gds2/) which is easier to parse
    #!/usr/bin/perl -w
    use GDS2;
    $\="\n";

    my $gds2File = new GDS2(-fileName=>$ARGV[0]);
    while ($gds2File -> readGds2Record)
    {
        print $gds2File -> returnRecordAsString(-compact);
    }


  Create a complete GDS2 stream file from scratch:
    #!/usr/bin/perl -w
    use GDS2;
    my $gds2File = new GDS2(-fileName=>>test.gds);
    $gds2File -> printInitLib(-name=>testlib);
    $gds2File -> printBgnstr(-name=>test);
    $gds2File -> printPath(
                    -layer=>6,
                    -pathType=>0,
                    -width=>2.4,
                    -xy=>[0,0, 10.5,0, 10.5,3.3],
                 );
    $gds2File -> printSref(
                    -name=>contact,
                    -xy=>[4,5.5],
                 );
    $gds2File -> printAref(
                    -name=>contact,
                    -columns=>2,
                    -rows=>3,
                    -xy=>[0,0, 10,0, 0,15],
                 );
    $gds2File -> printEndstr;
    $gds2File -> printBgnstr(-name => contact);
    $gds2File -> printBoundary(
                    -layer=>10,
                    -xy=>[0,0, 1,0, 1,1, 0,1],
                 );
    $gds2File -> printEndstr;
    $gds2File -> printEndlib();



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
 # space between:
 #     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.
 #                        I.E.
 #                        0x0001 = 1
 #                        0x0002 = 2
 #                        0x0089 = 137
 #                        0xffff = -1
 #                        0xfffe = -2
 #                        0xff77 = -137
 #
 # 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
 #                        byte count++
 #
 #########################################################################################



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 #
 #                     STRING                                                   #
 #                                                                              #
 #  <strans>::=        STRANS [MAG] [ANGLE]                                     #
 #                                                                              #
 #  <node>::=          NODE [ELFLAGS] [PLEX] LAYER NODETYPE XY                  #
 #                                                                              #
 #  <box>::=           BOX [ELFLAGS] [PLEX] LAYER BOXTYPE XY                    #
 #                                                                              #
 #  <property>::=      PROPATTR PROPVALUE                                       #
 ################################################################################



GDS2 Stream Record Datatypes



 ################################################################################
 NO_REC_DATA   =  0;
 BIT_ARRAY     =  1;
 INTEGER_2     =  2;
 INTEGER_4     =  3;
 REAL_4        =  4; ## NOT supported, never really used
 REAL_8        =  5;
 ACSII_STRING  =  6;
 ################################################################################



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.



Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 GDS2 (3) 2014-09-15

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.