gdsdump_dist/0000755000175000017500000000000013750311110012610 5ustar rooksrooksgdsdump_dist/INSTALL0000644000175000017500000000031613546124132013652 0ustar rooksrooks Unpack the archive file with tar xvf gdsdump.tar Compile the code: cd gdsdump_dist make Put the executable in the search PATH; e.g. cp gdsdump /usr/local/bin/ Enjoy. gdsdump_dist/README0000644000175000017500000000055613546124132013507 0ustar rooksrooksgdsdump.c by M. Rooks, Yale University Covered by the Gnu public license. use: gdsdump pattern-file.gds Produces a text dump of a GDSII pattern file, which might be useful for debugging CAD programs. This program is very generic C code, written on Centos Linux, which is very similar to Red Hat Linux. It will probably compile with nearly any C compiler. gdsdump_dist/gdsdump.c0000644000175000017500000002404713546124132014437 0ustar rooksrooks/* GDSDUMP Create a text dump of a GDSII file. requires LIBGDS */ #include "libgds.h" /*------------------------------------------------------------------------------------------*/ main( int argc, char *argv[] ) { /* Read in a GDSII file, returning a list of cells and their respective extents. */ struct gds_itemtype *current_item; struct gds_celltype **cell, /* Pointers into the library. */ *current_cell, *library; /* The library is a linked list of cells. */ /* A cell is a linked list of items. */ /* An item usually contains a list of coordinate pairs. */ /* This list has a variable length, allocated at run time. */ char **forward_name; /* array of forward referenced cell names */ float dbu_uu, // user units per database unit dbu_m, // meters per database unit (usually 1 um) dbu_um, // size of a database unit in microns current_mag = 1.0, current_angle = 0.0; int x, y, i, j, forward_num, /* number of cells with forward references */ cell_table_size, num_cells; /* The number of cells in this library. */ char *top_cell_name, // to be flattened etc *filename, *libraryname; int fd; /* file descriptor */ unsigned short word, count, /* number of bytes in a record */ token; /* record type */ struct gds_celltype *top_cell; BOOL not_found, absolute_angle = FALSE, absolute_mag = FALSE, search_friendly = FALSE, reflect_before_rotate = TRUE; if ( argc < 2 ) { filename = (char *) malloc( 256 ); printf( "\nGDS file to be dumped? " ); fflush( stdout ); scanf( "%s", filename ); } else filename = argv[1]; search_friendly = FALSE; if ( argc > 2 ) { if ( strcmp( argv[2], "search_friendly" ) == 0 ) search_friendly = TRUE; } printf( "\nInput file: %s\n\n", filename ); fd = open( filename, 0 ); if ( fd == -1 ) BAILOUT( "UNABLE TO OPEN THE INPUT FILE" ); current_mag = 1.0; current_angle = 0.0; absolute_mag = TRUE; absolute_angle = TRUE; while ( read( fd, &count, 2 ) ) { gds_swap2bytes( (BYTE *) &count ); if ( count >= 4 ) { token = 0; read( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &token ); switch( token ) { case 0x0002: printf( "HEADER \n" ) ; gds_read_header( fd, count, TRUE ); break; case 0x0102: printf( "BGNLIB \n" ); gds_read_bgnlib( fd, count, &cell_table_size, &library, &cell, ¤t_cell, 1 ); break; case 0x0206: printf( "LIBNAME \n" ) ; libraryname = gds_read_libname( fd, count, 1 ); break; case 0x0305: printf( "UNITS \n" ) ; gds_read_units( fd, &dbu_um, &dbu_uu, &dbu_m, 1 ); break; case 0x0400: printf( "ENDLIB \n" ) ; gds_read_endlib( fd, count, 1 ); break; case 0x0502: printf( "BGNSTR \n" ) ; gds_read_bgnstr( fd, count, &cell_table_size, &num_cells, &cell, ¤t_cell, ¤t_item, 1 ); break; case 0x0606: printf( "STRNAME " ) ; if ( ! search_friendly ) printf( "\n" ); gds_read_strname( fd, count, num_cells, &cell, ¤t_cell, 1 ); break; case 0x0700: printf( "ENDSTR \n" ) ; gds_read_endstr( fd, count, 1 ); break; case 0x0800: printf( "BOUNDARY \n" ) ; gds_read_boundary( fd, count, ¤t_item, 1 ); break; case 0x0900: printf( "PATH \n" ) ; gds_read_path( fd, count, ¤t_item, 1 ); break; case 0x0A00: printf( "SREF \n" ) ; gds_read_sref( fd, count, ¤t_item, 1 ); break; case 0x0B00: printf( "AREF \n" ) ; gds_read_aref( fd, count, ¤t_item, 1 ); break; case 0x0C00: printf( "TEXT \n" ) ; gds_read_text( fd, count, ¤t_item, 1 ); break; case 0x0D02: printf( "LAYER " ) ; if ( ! search_friendly ) printf( "\n" ); gds_read_layer( fd, count, ¤t_item, 1 ); break; case 0x0E02: printf( "DATATYPE \n" ) ; gds_read_datatype( fd, count, ¤t_item, 1 ); break; case 0x0F03: printf( "WIDTH \n" ) ; gds_read_width( fd, count, ¤t_item, 1 ); break; case 0x1003: printf( "XY \n" ) ; gds_read_xy( fd, count, dbu_um, ¤t_item, 1 ); break; case 0x1100: printf( "ENDEL \n" ) ; gds_read_endel( fd, count, 1 ); break; case 0x1206: printf( "SNAME " ) ; if ( ! search_friendly ) printf( "\n" ); gds_read_sname( fd, count, num_cells, &forward_num, &forward_name, &cell, ¤t_item, 1 ); break; case 0x1302: printf( "COLROW \n" ) ; gds_read_colrow( fd, count, ¤t_item, 1 ); break; case 0x1602: printf( "TEXTTYPE \n" ) ; gds_read_texttype( fd, count, ¤t_item, 1 ); break; case 0x1701: printf( "PRESENTATION \n" ) ; gds_read_presentation( fd, count, ¤t_item, 1 ); break; case 0x1906: printf( "STRING \n" ) ; gds_read_string( fd, count, ¤t_item, 1 ); break; case 0x1A01: printf( "STRANS \n" ) ; gds_read_strans( fd, count, ¤t_item, 1 ); break; case 0x1B05: printf( "MAG \n" ) ; gds_read_mag( fd, count, ¤t_item, 1 ); break; case 0x1C05: printf( "ANGLE \n" ) ; gds_read_angle( fd, count, ¤t_item, 1 ); break; case 0x2102: printf( "PATHTYPE \n" ) ; gds_read_pathtype( fd, count, ¤t_item, 1 ); break; case 0x2202: printf( "GENERATIONS \n" ) ; gds_read_generations( fd, count, 1 ); break; case 0x2D00: printf( "BOX \n" ) ; gds_read_box( fd, count, ¤t_item, 1 ); break; case 0x2E02: printf( "BOXTYPE \n" ) ; gds_read_boxtype( fd, count, ¤t_item, 1 ); break; default: printf( " UNSUPPORTED TOKEN: [%4x] \n", token ) ; SKIPOVER( fd, count ); } } } close( fd ); printf( "\n\nCELL TABLE:\n\n" ) ; for ( i=0; i <= num_cells; i++ ) printf( "[%2d] %s\n", i, cell[i]->name ) ; printf( "\n\n" ) ; /*-------------------------------------------------------------------------*/ /* Now we must parse the data again to resolve forward references to cells */ /*-------------------------------------------------------------------------*/ printf( "Forward references:\n\n" ); current_cell = library; j = -1; while ( current_cell != NULL ) { current_item = current_cell->item; while ( current_item != NULL ) { if ( (current_item->type == 2 || current_item->type == 3) && current_item->cell_number == -1 ) { j++; i = 0; not_found = TRUE; while ( not_found && (i <= num_cells) ) { not_found = strcmp( forward_name[j], cell[i]->name ) != 0; i++; } i--; if ( not_found ) { printf( " WARNING: missing cell definition: %s\n", forward_name[j] ); } else { printf( " Cell [%2d] matches %s\n", i, forward_name[j] ); current_item->cell_number = i; } } current_item = current_item->nextitem; } current_cell = current_cell->nextcell; } printf( "\nDone.\n\n" ); } gdsdump_dist/libgds.c0000644000175000017500000020757713750307010014246 0ustar rooksrooks/* GDSLIB 2.6 A library of C functions for reading and writing GDSII Stream format, following the specification of Release 6 from 1987. This library was written by M. Rooks, Yale University, and released under the GNU public license. GDSII was originally developed by the Calma Company, and later sold to General Electric. GE sold the format to Cadence Design Systems, which released GDSII format into the public domain in 1997 by allowing most of the specification to be reprinted in the SPIE Handbook of Microlithography, Micromachining and Microfabrication, vol 1, P. Rai-Choudhury ed. GDSII format is not compact. Lossless compression programs such as 'zip' and 'compress' can reduce file size by factors of three or more. Why use GDSII instead of a simple format like CIF? Indeed, CIF is quite adequate for most algorithmically generated patterns. GDSII is useful when you need also to generate cell names, arrays, doses (datatypes), text, and rotated cells. It also lets you skip the conversion step when combining patterns. Therefore GDS is just a tiny bit better. Diagonal arrays are not supported, because they are stupid. Arrays at angles other than 0, 90, 180, and 270 are not supported because it's too complicated and subject to misinterpretation. Besides, who really wants a rotated array? That's silly. You could simply rotate the cell in which the array appears. 2.1 Filters out degenerate vertices. 2.2 gds_read_double() by Hans Romijn replaces gds_read_float() 2.3 gds_write_xy no longer flips the bytes of x[] and y[] upon returning 2.4 Pad strings to make their length even (to conform to the silly gds spec) only because the python gds library enforces this rule. 2.5 Create the header with a specified user unit. I previously thought that this number did not matter. Sorry. Now you have the function gds_create_lib_correctly. The old version works fine if you are using 1000 db units per user unit, which is almost always the case. 2.6 gds_create_lib_correctly now gets it right for sure this time. Supported tokens: HEADER version number (6) BGNLIB creation date LIBNAME library name UNITS database units ENDLIB end of library BGNSTR begin structure (cell) STRNAME structure (cell) name ENDSTR end structure (cell) BOUNDARY polygon PATH path = line with width SREF structure reference = cell instance AREF array reference = matrix of cells TEXT text, not to be printed LAYER layer number DATATYPE datatype number (often used for dose assignment) WIDTH path width XY coordinates for cell placement or polygon verticies ENDEL end of element SNAME structure (cell) name COLROW number of columns and rows (for aref) TEXTTYPE just like datatype, for text PRESENTATION text justification STRING character string STRANS contains mirroring and other stuff MAG magnification ANGLE angle PATHTYPE describes ends of paths GENERATIONS how many generations to retain (useless) BOX boxes were originally intended as documentation only BOXTYPE boxes are often used like polygons, in practice which makes them redundant. They also require five vertices, which makes them stupid. Unsupported, discontinued, and unused tokens: REFLIBS SPACING STRCLASS PLEX ELFLAGS FONTS TEXTNODE RESERVED BGNEXTN PROPVALUE NODE UINTEGER FORMAT ENDEXTN ELKEY NODETYPE USTRING MASK LINKKEYS LINKTYPE PROPATTR STYPTABLE ENDMASKS TAPENUM SRFNAME ATTRTABLE STRTYPE LIBDIRSIZE TAPECODE LIBSECUR Token order: Library: Structure: Elements: HEADER BGNSTR BOUNDARY PATH SREF AREF TEXT BOX BGNLIB STRNAME LAYER LAYER SNAME SNAME LAYER LAYER LIBNAME DATATYPE DATATYPE STRANS* STRANS* TEXTTYPE BOXTYPE UNITS ENDSTR XY PATHTYPE* MAG* MAG* PRESENTATION* XY ENDEL WIDTH* ANGLE* ANGLE* PATHTYPE* ENDEL ENDLIB XY XY COLROW WIDTH* ENDEL ENDEL XY STRANS* ENDEL MAG* ANGLE* XY STRING ENDEL * optional */ #include "libgds.h" /*------------------------------------------------------------------------------------------*/ // UTILITY FUNCTIONS /*------------------------------------------------------------------------------------------*/ void gds_swap4bytes( BYTE *four ) { static BYTE temp; #if BYTESWAP temp = four[0]; four[0] = four[3]; four[3] = temp; temp = four[1]; four[1] = four[2]; four[2] = temp; #endif } /*------------------------------------------------------------------------------------------*/ void gds_swap2bytes( BYTE *two ) { static BYTE temp; #if BYTESWAP temp = two[0]; two[0] = two[1]; two[1] = temp; #endif } /*------------------------------------------------------------------------------------------*/ void gds_make_next_item( struct gds_itemtype **ci ) { // mag, angle and strans must be tallied // only when flattening the pattern. static struct gds_itemtype *current_item; current_item = *ci; current_item->nextitem = (struct gds_itemtype *) malloc( sizeof( struct gds_itemtype ) ); if ( ! current_item->nextitem ) BAILOUT( "UNABLE TO ALLOCATE NEXT ITEM" ); current_item = current_item->nextitem; // Each cell has a rotation, magnification and strans, but we do not need // to keep a running tally unless we are flattening the pattern. current_item->type = -2; // invalid current_item->width = 0; current_item->n = 0; current_item->layer = 0; current_item->dt = 0; current_item->cell_number = -1; // invalid current_item->path_end = 0; current_item->mag = 1.0; /* mag */ current_item->angle = 0.0; /* angle */ current_item->abs_angle = FALSE; /* from strans */ current_item->abs_mag = FALSE; /* from strans */ current_item->reflect = FALSE; /* from strans, reflect before rotation */ current_item->rows = 0; /* n cols */ current_item->cols = 0; /* n rows */ current_item->col_pitch = 0; /* column pitch */ current_item->row_pitch = 0; /* row pitch */ current_item->col_pitchy = 0; /* diagonal components are */ current_item->row_pitchx = 0; /* hopefully zero always */ current_item->nextitem = NULL; *ci = current_item; } // make_next_item /*------------------------------------------------------------------------------------------*/ double gds_read_double( int fd ) /* Real numbers are not represented in IEEE format. A floating point number is */ /* made up of three parts: the sign, the exponent, and the mantissa. The value */ /* of the number is defined to be (mantissa) (16) (exponent) . If "S" is the */ /* sign bit, "E" are exponent bits, and "M" are mantissa bits then an 8-byte */ /* real number has the format */ /* */ /* SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM */ /* MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM */ /* */ /* The exponent is in "excess 64" notation; that is, the 7-bit field shows a */ /* number that is 64 greater than the actual exponent. The mantissa is always */ /* a positive fraction greater than or equal to 1/16 and less than 1. For an */ /* 8-byte real, the mantissa is in bits 8 to 63. The decimal point of the */ /* binary mantissa is just to the left of bit 8. Bit 8 represents the value */ /* 1/2, bit 9 represents 1/4, and so on. */ /* */ /* In order to keep the mantissa in the range of 1/16 to 1, the results of */ /* floating point arithmetic are normalized. Normalization is a process whereby */ /* the mantissa is shifted left one hex digit at a time until its left four */ /* bits represent a non-zero quantity. For every hex digit shifted, the */ /* exponent is decreased by one. Since the mantssa is shifted four bits at a */ /* time, it is possible for the left three bits of a normalized mantissa to be */ /* zero. A zero value is represented by a number with all bits zero. The */ /* representation of negative numbers is the same as that of positive numbers, */ /* except that the highest order bit is 1, not 0. */ /* Contributed by Hans Romijn (Raith/Vistec) */ { BYTE e, m[8]; int i, b, bit, sign, bitmask, exponent; long mant = 0; long bitm = 0x80000000000000; double mantissa, number; read( fd, &m, 8 ); if ( m[0] >> 7 ) sign = -1; else sign = 1; exponent = (m[0] % 128) - 64; for ( b = 1; b <8; b++ ) { bitmask = 0x80; for ( bit = 7; bit >= 0; bit-- ) { i = ( m[b] & bitmask ) >> bit; if (i) mant += bitm ; // mantissa = (double)mant/(double)(0x100000000000000); // number = sign * mantissa * pow( 16, exponent ); // printf("%d 0x%16lX: %.24lf %.24lf\n",i,bitm,number,(float)number); bitmask = bitmask >> 1 ; bitm = bitm >> 1; } } mantissa = (double)mant/(double)(0x100000000000000); number = sign * mantissa * pow( 16, exponent ); return( number ); } // read_double /*------------------------------------------------------------------------------------------*/ float gds_read_float( int fd ) /* Read 8 bytes and interpret the number as a wacky GDS float. The format must be */ /* the legacy of some very ancient General Electric computer, built before the */ /* establishment of IEEE floating point format. */ { BYTE e, m[8]; int i, b, bit, sign, bitmask, exponent; float value, mantissa, number; read( fd, &e, 1 ); if ( e >> 7 ) sign = -1; else sign = 1; exponent = (e % 128) - 64; read( fd, m, 7 ); value = 2.0; mantissa = 0.0; for ( b = 0; b <= 6; b++ ) { bitmask = 0x80; for ( bit = 7; bit >= 0; bit-- ) { i = ( m[b] & bitmask ) >> bit ; mantissa += i / value ; value = value + value ; bitmask = bitmask >> 1 ; } } number = sign * mantissa * pow( 16, exponent ); return( number ); } // read_float /*------------------------------------------------------------------------------------------*/ void gds_bindump( BYTE x ) // dump one byte in binary format { // way too clever hack from a forum post, sorry int z; static char b[9]; b[0] = '\0'; for ( z=128; z>0; z >>=1 ) strcat( b, ((x & z) == z) ? "1" : "0" ); printf( "%s ", b ); } /*------------------------------------------------------------------------------------------*/ void gds_write_float( int fd, float x ) /* Write 8 bytes after converting back to wacky GDS float format. */ { unsigned int b, sign, e64, bit[56]; int // important exponent, i; float fexponent, mantissa, mantita; BYTE by, stupid[8]; if ( ! BYTESWAP ) WARNING( "WRITING OF FLOATING POINT ON LITTLE-ENDIAN MACHINES HAS NOT BEEN TESTED" ); // printf( "\nencoding %g\n", x ); fflush( stdout ); for ( i=0; i<8; i++ ) stupid[i] = 0; if ( x != 0.0 ) { if ( x < 0.0 ) sign = 1; else sign = 0; x = fabsf( x ); exponent = 1 + floor( log( x ) / log( 16 ) ); if ( exponent < -64 ) BAILOUT( "A NUMBER IS TOO SMALL TO ENCODE AS A GDS FLOAT" ); fexponent = exponent; e64 = exponent + 64; mantissa = x / powf( 16.0, fexponent ); mantita = mantissa; for( i=0; i<=56; i++ ) { bit[i] = floor( pow(2,i+1) * mantita ); mantita = mantita - bit[i] / pow(2,i+1); } stupid[0] = pow(2,7) * sign + e64; for ( i=0; i<8; i++ ) stupid[1] = stupid[1] + bit[i] * pow(2, 7-i); for ( i=8; i<16; i++ ) stupid[2] = stupid[2] + bit[i] * pow(2,15-i); for ( i=16; i<24; i++ ) stupid[3] = stupid[3] + bit[i] * pow(2,23-i); for ( i=24; i<32; i++ ) stupid[4] = stupid[4] + bit[i] * pow(2,31-i); for ( i=32; i<40; i++ ) stupid[5] = stupid[5] + bit[i] * pow(2,39-i); for ( i=40; i<48; i++ ) stupid[6] = stupid[6] + bit[i] * pow(2,47-i); for ( i=48; i<56; i++ ) stupid[7] = stupid[7] + bit[i] * pow(2,55-i); } // printf( "\n" ); for ( i=0; i<8; i++ ) { by = stupid[i]; write( fd, &by, 1 ); // gds_bindump( by ); } // printf( "\n" ); fflush( stdout ); } // write_float /*------------------------------------------------------------------------------------------*/ // TOKEN I/O FUNCTIONS /*------------------------------------------------------------------------------------------*/ /* Contains GDS version number- we don't care */ void gds_read_header( int fd, int count, BOOL verbose ) { int i; SKIPOVER( fd, count ); } /*------------------------------------------------------------------------------------------*/ void gds_write_header( int fd ) { unsigned short int count, si, token; ssize_t w; count = 6; gds_swap2bytes( (BYTE *) &count ); w = write( fd, &count, 2 ); if ( w <= 0 ) BAILOUT( "UNABLE TO WRITE TO OUTPUT FILE - CHECK OPEN() CALL" ); token = 0x0002; // header gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); si = 600; // GDSII version 6 gds_swap2bytes( (BYTE *) &si ); write( fd, &si, 2 ); } // write_header /*------------------------------------------------------------------------------------------*/ /* Beginning of library. Allocate the first cell. */ /* Ignore the creation date. */ void gds_read_bgnlib( int fd, // file descriptor int count, // bytes in this record (always 4) int *cell_table_size, // cell table size struct gds_celltype **lib, // pointer to library (main anchor point) struct gds_celltype ***c, // pointer to the cell table struct gds_celltype **cc, // pointer to the current cell BOOL verbose ) { struct gds_celltype *library, **cell, *current_cell; int i; SKIPOVER( fd, count ); library = (struct gds_celltype *) malloc( sizeof( struct gds_celltype ) ); /* start of the list */ current_cell = library; /* top of the list */ library->nextcell = NULL; if ( ! library ) BAILOUT( "UNABLE TO ALLOCATE LIBRARY POINTER. THAT'S STRANGE." ); cell = (struct gds_celltype **) malloc( 1025 * sizeof( struct gds_celltype * ) ); /* table of pointers to cells */ *cell_table_size = 1024; if ( ! cell ) BAILOUT( "UNABLE TO ALLOCATE MEMORY FOR CELL TABLE." ); *lib = library; *c = cell; *cc = current_cell; } // read_bgnlib /*------------------------------------------------------------------------------------------*/ void gds_write_bgnlib( int fd ) { time_t *now; struct tm *date; short int year, month, day, hour, minute, second, token, count; now = (time_t *) malloc( sizeof( time_t ) ); date = (struct tm *) malloc( sizeof( struct tm ) ); time( now ); date = localtime( now ); count = 0x1C; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0102; // BGNLIB gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); year = 1900 + date->tm_year; // last modification time gds_swap2bytes( (BYTE *) &year ); write( fd, &year, 2 ); month = 1 + date->tm_mon; gds_swap2bytes( (BYTE *) &month ); write( fd, &month, 2 ); day = date->tm_mday; gds_swap2bytes( (BYTE *) &day ); write( fd, &day, 2 ); hour = date->tm_hour; gds_swap2bytes( (BYTE *) &hour ); write( fd, &hour, 2 ); minute = date->tm_min; gds_swap2bytes( (BYTE *) &minute ); write( fd, &minute, 2 ); second = date->tm_sec; gds_swap2bytes( (BYTE *) &second ); write( fd, &second, 2 ); write( fd, &year, 2 ); // last access time (same) write( fd, &month, 2 ); write( fd, &day, 2 ); write( fd, &hour, 2 ); write( fd, &minute, 2 ); write( fd, &second, 2 ); } // write_bgnlib /*------------------------------------------------------------------------------------------*/ /* Beginning of a cell. If this is after the first cell */ /* then allocate it. Ignore the creation date. */ void gds_read_bgnstr( int fd, int count, int *cell_table_size, int *num_cells, struct gds_celltype ***c, // cell table struct gds_celltype **cc, // current cell struct gds_itemtype **ci, // current item BOOL verbose ) { static BOOL first_cell = TRUE; int i; static struct gds_celltype **cell, *current_cell; static struct gds_itemtype *current_item; current_item = *ci; cell = *c; current_cell = *cc; SKIPOVER( fd, count ); if ( first_cell ) /* Then we already created the first cell in bgnlib */ { first_cell = FALSE; *num_cells = 0; } else /* allocate a new cell and move up the pointer */ { current_cell->nextcell = (struct gds_celltype *) malloc( sizeof( struct gds_celltype ) ); if ( ! current_cell->nextcell ) BAILOUT( "UNABLE TO ALLOCATE MEMORY FOR THE NEXT CELL." ); current_cell = current_cell->nextcell; current_cell->nextcell = NULL; *num_cells = *num_cells + 1; if ( *num_cells > *cell_table_size ) { *cell_table_size *= 2; cell = (struct gds_celltype **) realloc( cell, (1 + *cell_table_size) * sizeof( struct gds_celltype * ) ); if ( ! cell ) BAILOUT( "UNABLE TO REALLOCATE CELL TABLE. SORRY DUDE." ); } } current_cell->item = (struct gds_itemtype *) malloc( sizeof( struct gds_itemtype ) ); current_item = current_cell->item; current_item->type = -1; current_item->mag = 1.0; current_item->nextitem = NULL; // Now let's be careful to not use the first item. // Seems like a waste, but it makes the logic simpler. *c = cell; *cc = current_cell; *ci = current_item; } // read_bgnstr /*------------------------------------------------------------------------------------------*/ void gds_write_bgnstr( int fd ) { static time_t *now; static struct tm *date; static short int year, month, day, hour, minute, second, token, count; now = (time_t *) malloc( sizeof( time_t ) ); date = (struct tm *) malloc( sizeof( struct tm ) ); time( now ); date = localtime( now ); year = 1900 + date->tm_year; month = 1 + date->tm_mon; day = date->tm_mday; hour = date->tm_hour; minute = date->tm_min; second = date->tm_sec; gds_swap2bytes( (BYTE *) &year ); gds_swap2bytes( (BYTE *) &month ); gds_swap2bytes( (BYTE *) &day ); gds_swap2bytes( (BYTE *) &hour ); gds_swap2bytes( (BYTE *) &minute ); gds_swap2bytes( (BYTE *) &second ); count = 28; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0502; // BGNSTR gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); write( fd, &year, 2 ); // creation time write( fd, &month, 2 ); write( fd, &day, 2 ); write( fd, &hour, 2 ); write( fd, &minute, 2 ); write( fd, &second, 2 ); write( fd, &year, 2 ); // access time write( fd, &month, 2 ); write( fd, &day, 2 ); write( fd, &hour, 2 ); write( fd, &minute, 2 ); write( fd, &second, 2 ); } // write_bgnstr /*------------------------------------------------------------------------------------------*/ /* Marks the end of a library */ void gds_read_endlib( int fd, int count, BOOL verbose ) { int i; SKIPOVER( fd, count ); } /*------------------------------------------------------------------------------------------*/ void gds_write_endlib( int fd ) { static short int count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0400; // ENDLIB gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_endlib /*------------------------------------------------------------------------------------------*/ /* Marks the end of a structure */ void gds_read_endstr( int fd, int count, BOOL verbose ) { static int i; SKIPOVER( fd, count ); } /*------------------------------------------------------------------------------------------*/ void gds_write_endstr( int fd ) { static short int count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0700; // ENDSTR gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_endstr /*------------------------------------------------------------------------------------------*/ /* Read the library name. */ char * gds_read_libname( int fd, int count, BOOL verbose ) { char *name; name = (char *) malloc( count - 3 ); read( fd, name, count-4 ); name[count-4] = '\0'; if ( verbose ) printf( " library \"%s\"\n", name ); return( name ); } // read_libname /*------------------------------------------------------------------------------------------*/ void gds_write_libname( int fd, char *s ) { short int // name should be null-terminated count, len, i, token; static BOOL pad; static char *ps; len = strlen( s ); pad = (len % 2) != 0; if ( pad ) len++; ps = (char *) malloc( len ); if ( pad ) { for ( i=0; i < len-1; i++ ) ps[i] = s[i]; ps[len-1] = 0; } else { for ( i=0; i < len; i++ ) ps[i] = s[i]; } count = 4 + len; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0206; // LIBNAME gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); write( fd, ps, len ); } // write_libname /*------------------------------------------------------------------------------------------*/ /* Contains a structure name. */ void gds_read_strname( int fd, int count, int num_cells, struct gds_celltype ***c, struct gds_celltype **cc, BOOL verbose ) { static struct gds_celltype **cell, *current_cell; cell = *c; current_cell = *cc; current_cell->name = (char *) malloc( count - 3 ); if ( ! current_cell->name ) BAILOUT( "UNABLE TO ALLOCATE MEMORY FOR NEXT CELL NAME" ); read( fd, current_cell->name, count-4 ); current_cell->name[count-4] = '\0'; if ( verbose ) printf( " cell \"%s\"\n", current_cell->name ); cell[ num_cells ] = current_cell; /* save the pointer to this cell */ *c = cell; *cc = current_cell; } // read_strname /*------------------------------------------------------------------------------------------*/ void gds_write_strname( int fd, char *s ) { static short int // name should be null-terminated count, len, i, token; static BOOL pad; static char *ps; len = strlen( s ); pad = (len % 2) != 0; if ( pad ) len++; ps = (char *) malloc( len ); if ( pad ) { for ( i=0; i < len-1; i++ ) ps[i] = s[i]; ps[len-1] = 0; } else { for ( i=0; i < len; i++ ) ps[i] = s[i]; } count = 4 + len; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0606; // STRNAME gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); write( fd, ps, len ); } // write_strname /*------------------------------------------------------------------------------------------*/ /* Contains a string for presentation, not for exposure. */ void gds_read_string( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { // A string should be saved as part of a text object // So hopefully the current item is TEXT. // gds_read_text generates a new text item. static struct gds_itemtype *current_item; static char str[513]; static int n, m, i; current_item = *ci; if ( current_item->type != 4 ) BAILOUT( "SYNTAX ERROR: STRING APPEARS OUTSIDE OF TEXT OBJECT" ); m = count - 4; n = m; if ( n > 512 ) n = 512; // that's the spec: maximum 512 characters read( fd, str, n ); if ( m > n ) { WARNING( "STRING HAS MORE THAN 512 CHARACTERS" ); printf( " [%s]\n", str ); fflush( stdout ); SKIPOVER( fd, m-n ); } str[n] = '\0'; if ( verbose ) printf( " %s\n", str ); current_item->n = count - 4; current_item->text = (char *) malloc( n+1 ); strcpy( current_item->text, str ); *ci = current_item; } // read_string /*------------------------------------------------------------------------------------------*/ void gds_write_string( int fd, char *s ) { // s must by null-terminated static short int count, token, i, len; static BOOL pad; static char *ps; len = strlen( s ); if ( len > 512 ) { WARNING( "ATTEMPT TO WRITE A STRING LONGER THAN 512 CHARACTERS. TRUNCATING." ); len = 512; ps[len] = '\0'; } pad = (len % 2) != 0; if ( pad ) len++; ps = (char *) malloc( len ); if ( pad ) { for ( i=0; i < len-1; i++ ) ps[i] = s[i]; ps[len-1] = 0; } else { for ( i=0; i < len; i++ ) ps[i] = s[i]; } count = 4 + len; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1906; // STRING gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); write( fd, ps, len ); } // write_string /*------------------------------------------------------------------------------------------*/ // Contains the name of a referenced structure (cell). // Passes by reference (!) the 2D array of forward references. void gds_read_sname( int fd, int count, int num_cells, int *forward_num, char ***f, struct gds_celltype ***c, struct gds_itemtype **ci, BOOL verbose ) { static char name[256]; static int i; static BOOL forward_ref_init = FALSE; static int max_forward_refs = MAX_FORWARD_REFS; static char **forward_name; static struct gds_celltype **cell; static struct gds_itemtype *current_item; current_item = *ci; cell = *c; // cell table, passed in but not out if ( count > 254 ) BAILOUT( "CELL NAME IS WAY TOO LONG" ); read( fd, name, count-4 ); name[count-4] = '\0'; if ( verbose ) printf( " %s\n", name ); /* look this up in the cell table */ i = 0; while ( (strcmp( name, cell[i]->name ) != 0) && (i < num_cells) ) i++; if ( i >= num_cells ) { if ( verbose ) printf( " forward reference\n" ); current_item->cell_number = -1; /* indicates that we must look again on the second pass */ if ( ! forward_ref_init ) { forward_ref_init = TRUE; forward_name = (char **) malloc( max_forward_refs * sizeof( char * ) ); if ( ! forward_name ) BAILOUT( "UNABLE TO ALLOCATE ARRAY OF FORWARD REFERENCE NAMES" ); *forward_num = -1; } else // we use the array as it was passed in { forward_name = *f; } *forward_num = *forward_num + 1; if ( *forward_num >= max_forward_refs ) { max_forward_refs *= 2; forward_name = (char **) realloc( forward_name, max_forward_refs * sizeof( char * ) ); if ( ! forward_name ) BAILOUT( "UNABLE TO REALLOCATE ARRAY OF FORWARD REFERENCE NAMES" ); } forward_name[*forward_num] = (char *) malloc( 256 ); if ( ! forward_name[*forward_num] ) BAILOUT( "UNABLE TO ALLOCATE STRING FOR FORWARD NAME" ); strcpy( forward_name[*forward_num], name ); } else { if ( verbose ) printf( " this is cell [%d]\n", i ); current_item->cell_number = i; } *f = forward_name; // send it back out again. yikes. *ci = current_item; } // read_sname /*------------------------------------------------------------------------------------------*/ void gds_write_sname( int fd, char *s ) { static short int // s should be null-terminated count, len, i, token; static BOOL pad; static char *ps; len = strlen( s ); pad = (len % 2) != 0; if ( pad ) len++; ps = (char *) malloc( len ); if ( pad ) { for ( i=0; i < len-1; i++ ) ps[i] = s[i]; ps[len-1] = 0; } else { for ( i=0; i < len; i++ ) ps[i] = s[i]; } count = 4 + len; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1206; // SNAME gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); write( fd, ps, len ); } // write_sname /*------------------------------------------------------------------------------------------*/ /* Marks the beginning of a boundary (polygon) */ void gds_read_boundary( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static struct gds_itemtype *current_item; int i; current_item = *ci; SKIPOVER( fd, count ); gds_make_next_item( ¤t_item ); current_item->type = 0; /* meaning, this is a polygon */ *ci = current_item; } // read_boundary /*------------------------------------------------------------------------------------------*/ void gds_write_boundary( int fd ) { // just the token here. "xy" writes the actual polygon. static short int count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0800; // BOUNDARY gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_boundary /*------------------------------------------------------------------------------------------*/ /* Marks the beginning of a box */ void gds_read_box( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static struct gds_itemtype *current_item; int i; current_item = *ci; SKIPOVER( fd, count ); gds_make_next_item( ¤t_item ); current_item->type = 5; /* meaning, this is a box */ *ci = current_item; } // read_box /*------------------------------------------------------------------------------------------*/ void gds_write_box( int fd ) { // Boxes were orignally for documentation only, // but later, people started using them like polygons. // The spec says we need to store five points, // just like a boundary, which is so stupid. static short int count, token; WARNING( "BOXES ARE STUPID. USE BOUNDARIES INSTEAD." ); count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x2D00; // BOX gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_box /*------------------------------------------------------------------------------------------*/ void gds_read_boxtype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static short num; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " %d\n", num ) ; if ( num < 0 ) WARNING( "NEGATIVE BOX TYPE NUMBER" ); if ( num > 255 ) WARNING( "BOX TYPE > 255 " ); current_item->dt = num; *ci = current_item; } // read_boxtype /*------------------------------------------------------------------------------------------*/ void gds_write_boxtype( int fd, short int dt ) { static short int count, token; if ( dt < 0 ) WARNING( "NEGATIVE BOXTYPE NUMBER" ); if ( dt > 255 ) WARNING( "BOXTYPE > 255 " ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x2E02; // BOXTYPE gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &dt ); write( fd, &dt, 2 ); } // write_boxtype /*------------------------------------------------------------------------------------------*/ /* Marks the beginning of a path */ void gds_read_path( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { int i; static struct gds_itemtype *current_item; current_item = *ci; SKIPOVER( fd, count ); gds_make_next_item( ¤t_item ); current_item->type = 1; /* meaning, this is a path */ *ci = current_item; } // read_path /*------------------------------------------------------------------------------------------*/ void gds_write_path( int fd ) { // Just the token here. "xy" writes the actual path. static short int count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0900; // PATH gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_path /*------------------------------------------------------------------------------------------*/ /* Marks the beginning of a sref (structure reference) */ void gds_read_sref( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { int i; static struct gds_itemtype *current_item; current_item = *ci; SKIPOVER( fd, count ); gds_make_next_item( ¤t_item ); current_item->type = 3; /* meaning, this is a sref */ *ci = current_item; } // read_sref /*------------------------------------------------------------------------------------------*/ void gds_write_sref( int fd ) { // Only the token is written here. static short int count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0A00; // SREF gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_sref /*------------------------------------------------------------------------------------------*/ /* Marks the beginning of an aref (array reference) */ void gds_read_aref( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { int i; static struct gds_itemtype *current_item; current_item = *ci; SKIPOVER( fd, count ); gds_make_next_item( ¤t_item ); current_item->type = 2; /* meaning, this is an aref */ current_item->cell_number = -1; /* indicates not found yet */ *ci = current_item; } // read_aref /*------------------------------------------------------------------------------------------*/ void gds_write_aref( int fd ) { static short int // write the aref token only count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0B00; // AREF gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_aref /*------------------------------------------------------------------------------------------*/ /* Marks the beginning of a text element */ void gds_read_text( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { int i; static struct gds_itemtype *current_item; current_item = *ci; SKIPOVER( fd, count ); gds_make_next_item( ¤t_item ); current_item->type = 4; /* meaning, this is text */ *ci = current_item; } /*------------------------------------------------------------------------------------------*/ void gds_write_text( int fd ) { static short int // write the text token only count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0C00; // TEXT gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_text /*------------------------------------------------------------------------------------------*/ /* Marks the end of an element, pointlessly. */ void gds_read_endel( int fd, int count, BOOL verbose ) { int i; SKIPOVER( fd, count ); } /*------------------------------------------------------------------------------------------*/ void gds_write_endel( int fd ) { static short int count, token; count = 4; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1100; // ENDEL gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); } // write_endel /*------------------------------------------------------------------------------------------*/ /* Contains the layer number 0..255 */ void gds_read_layer( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static short num; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " %d\n", num ); if ( num < 0 ) WARNING( "NEGATIVE LAYER NUMBER" ); if ( num > 255 ) WARNING( "LAYER > 255 " ); current_item->layer = num; *ci = current_item; } // read_layer /*------------------------------------------------------------------------------------------*/ void gds_write_layer( int fd, short int layer ) { static short int count, token; // Layers are actually supposed to go up to 64 only, but most programs allow // values up to 255, because 64 is stupid. Well 255 is also stupid, but less so. if ( layer < 0 || layer > 255 ) BAILOUT( "INVALID LAYER NUMBER" ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0D02; // LAYER gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &layer ); write( fd, &layer, 2 ); } // write_layer /*------------------------------------------------------------------------------------------*/ /* Contains the width of a path. Negative means that */ /* the width does not scale. */ void gds_read_width( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static int num; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 4 ); gds_swap4bytes( (BYTE *) &num ); if ( verbose ) printf( " %d", num ); if ( num < 0 ) if ( verbose ) printf( " does not scale" ); if ( verbose ) printf( "\n" ); current_item->width = num; *ci = current_item; } // read_width /*------------------------------------------------------------------------------------------*/ void gds_write_width( int fd, int width ) { static short int count, token; count = 8; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0F03; // WIDTH gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap4bytes( (BYTE *) &width ); write( fd, &width, 4 ); } // write_width /*------------------------------------------------------------------------------------------*/ /* Contains the datatype number 0..255 */ void gds_read_datatype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static short num; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " %d\n", num ); if ( num < 0 ) WARNING( "NEGATIVE DATATYPE NUMBER" ); if ( num > 255 ) WARNING( "DATATYPE > 255 " ); current_item->dt = num; *ci = current_item; } // read_datatype /*------------------------------------------------------------------------------------------*/ void gds_write_datatype( int fd, short int dt ) { static short int count, token; if ( dt < 0 ) WARNING( "NEGATIVE DATATYPE NUMBER" ); if ( dt > 255 ) WARNING( "DATATYPE > 255 " ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0E02; // DATATYPE gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &dt ); write( fd, &dt, 2 ); } // write_datatype /*------------------------------------------------------------------------------------------*/ /* Contains the text type. Should be 0..63, or whatever. */ void gds_read_texttype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static short num; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " %d\n", num ) ; if ( num < 0 ) WARNING( "NEGATIVE TEXT TYPE NUMBER" ); if ( num > 255 ) WARNING( "TEXT TYPE > 255 " ); current_item->dt = num; *ci = current_item; } // read_texttype /*------------------------------------------------------------------------------------------*/ void gds_write_texttype( int fd, short int dt ) { static short int count, token; if ( dt < 0 ) WARNING( "NEGATIVE TEXT TYPE NUMBER" ); if ( dt > 255 ) WARNING( "TEXT TYPE > 255 " ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1602; // TEXTTYPE gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &dt ); write( fd, &dt, 2 ); } // write_texttype /*------------------------------------------------------------------------------------------*/ /* Number of generations to retain. Irrelevant. */ void gds_read_generations( int fd, int count, BOOL verbose ) { static short num; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " %d\n", num ) ; if ( num < 0 ) WARNING( "NEGATIVE NUMBER OF GENERATIONS TO RETAIN" ); if ( num > 99 ) WARNING( "NUMBER OF GENERATIONS > 99 " ); } // read_generations /*------------------------------------------------------------------------------------------*/ void gds_write_generations( int fd, short int gens ) { // most useless parameter ever static short int count, token; if ( gens < 0 ) WARNING( "NEGATIVE GENERATIONS NUMBER" ); if ( gens > 99 ) WARNING( "GENERATIONS > 99 " ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x2202; // GENERATIONS gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &gens ); write( fd, &gens, 2 ); } // write_generations /*------------------------------------------------------------------------------------------*/ /* Defines what the ends of paths should look like */ void gds_read_pathtype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static short num; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " [0x%x] ", num ) ; if ( num == 0 ) { if ( verbose ) printf( " flush square ends" ) ; } else if ( num == 1 ) { if ( verbose ) printf( " round ends" ) ; } else if ( num == 2 ) { if ( verbose ) printf( " extended square ends" ) ; } else if ( num == 4 ) { if ( verbose ) printf( " variable square end extensions ARE NOT SUPPORTED HERE" ) ; } else WARNING( "UNKNOWN PATH END TYPE" ); if ( verbose ) printf( "\n" ) ; if ( (num > 4) || (num < 0) ) { num = 0; WARNING( "INVALID PATH TYPE" ); } current_item->path_end = num; *ci = current_item; } // read_pathtype /*------------------------------------------------------------------------------------------*/ void gds_write_pathtype( int fd, short int pt ) { static short int count, token; if ( (pt < 0) || (pt > 4) ) BAILOUT( "INVALID PATH TYPE NUMBER" ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x2102; // PATHTYPE gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &pt ); write( fd, &pt, 2 ); } // write_pathtype /*------------------------------------------------------------------------------------------*/ /* Contains the font and orientation of text */ void gds_read_presentation( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { static short num, vp, hp, font; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " [0x%x] ", num ) ; /* extract font from bits "10" and "11", meaning actually bits 5 and 4. */ font = ( num >> 4 ) % 4; /* extract vertical presentation from bits "12" and "13", meaning actually bits 3 and 2. */ vp = ( num >> 2 ) % 4; /* extract horizontal presentation from bits "14" and "15", meaning acutally bits 1 and 0. */ hp = num % 4; if ( verbose ) printf( "font %d ", font ) ; if ( vp == 0 ) { if ( verbose ) printf( " vertical: top " ) ; } else if ( vp == 1 ) { if ( verbose ) printf( " vertical: middle " ) ; } else if ( vp == 2 ) { if ( verbose ) printf( " vertical: bottom " ) ; } else { if ( verbose ) printf( " ERROR: VERTICAL PRESENTATION BITS BOTH SET " ) ; } if ( hp == 0 ) { if ( verbose ) printf( " horizontal: left \n" ) ; } else if ( hp == 1 ) { if ( verbose ) printf( " horizontal: center \n" ) ; } else if ( hp == 2 ) { if ( verbose ) printf( " horizontal: right \n" ) ; } else { if ( verbose ) printf( " ERROR: HORIZONTAL PRESENTATION BITS BOTH SET \n" ); } current_item->font = font; current_item->mag = 1.0; current_item->hor_present = hp; current_item->ver_present = vp; *ci = current_item; } // read_presentation /*------------------------------------------------------------------------------------------*/ /* Contains the font and orientation of text */ void gds_write_presentation( int fd, // file descriptor int font, // font number 0, 1, 2, 3 int vp, // vertical presentation 0 = top 1 = middle 2 = bottom int hp ) // horizontal presentation 0 = left 1 = center 2 = right { static unsigned short token, count, num; if ( (font < 0) || (font > 3) ) { font = 0; WARNING( "INVALID FONT NUMBER" ); } if ( (vp < 0) || (vp > 2) ) { vp = 0; WARNING( "INVALID VERTICAL PRESENTATION SENT TO WRITE_PRESENTATION" ); } if ( (hp < 0) || (hp > 2) ) { hp = 0; WARNING( "INVALID HORIZONTAL PRESENTATION SENT TO WRITE_PRESENTATION" ); } num = hp + 4*vp + 16*font; gds_swap2bytes( (BYTE *) &num ); count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1701; gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); write( fd, &num, 2 ); } // write_presentation /*------------------------------------------------------------------------------------------*/ /* Contains information about transformations */ void gds_read_strans( int fd, // input file descriptor int count, // number of bytes in this record struct gds_itemtype **ci, BOOL verbose ) { static short num, bit0, bit13, bit14; static struct gds_itemtype *current_item; current_item = *ci; read( fd, &num, 2 ); gds_swap2bytes( (BYTE *) &num ); if ( verbose ) printf( " [0x%x] ", num ) ; /* bit "0" is really bit 15. It specifies reflection. */ bit0 = (num >> 15); /* bit "13" is really bit 2. It specifies absolute magnification. */ bit13 = (num >> 2) % 2; /* bit "14" is really bit 1. It specifies absolute angle. */ bit14 = (num >> 1) % 2; current_item->abs_angle = FALSE; if ( bit0 ) { if ( verbose ) printf( " apply reflection about X before rotation," ) ; current_item->reflect = TRUE; } else { if ( verbose ) printf( " no reflection," ) ; current_item->reflect = FALSE; } if ( bit13 ) { if ( verbose ) printf( " absolute magnification," ) ; current_item->abs_mag = TRUE; } else { if ( verbose ) printf( " relative magnification," ) ; current_item->abs_mag = FALSE; } if ( bit14 ) { if ( verbose ) printf( " absolute angle" ) ; current_item->abs_angle = TRUE; } else { if ( verbose ) printf( " relative angle" ) ; current_item->abs_angle = FALSE; } if ( verbose ) printf( "\n" ) ; *ci = current_item; } // read_strans /*------------------------------------------------------------------------------------------*/ void gds_write_strans( int fd, // output file descriptor BOOL reflect, // reflect about X axis before rotation (normally false) BOOL abs_angle, // angles are absolute (normally false) BOOL abs_mag ) // magnification (scale) is absolute (normally false) { static unsigned short int count, token, strans; strans = 32768 * reflect + 2 * abs_mag + abs_angle; count = 6; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1A01; // STRANS gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &strans ); write( fd, &strans, 2 ); } // write_strans /*------------------------------------------------------------------------------------------*/ void nag( char *message, int *count ) { *count += 1; if ( *count < 10 ) printf( "WARNING: %s\n", message ); else if ( *count == 10 ) printf( "*** REPEATED WARNING MESSAGES SUPPRESSED\n" ); } /*------------------------------------------------------------------------------------------*/ /* Contains X,Y coordinate pairs */ void gds_read_xy( int fd, int count, float dbu_um, struct gds_itemtype **ci, BOOL verbose ) { /* type 0 = polygon, 1 = path, 2 = aref, 3 = sref, 4 = text */ static int i, ii, num, x, y, px, py, degenerates, count_da=0, count_dv=0, count_dp=0; static float angle; static struct gds_itemtype *current_item; current_item = *ci; num = (count - 4) / 8; current_item->x = (int *) malloc( (num + 1) * sizeof( int ) ); current_item->y = (int *) malloc( (num + 1) * sizeof( int ) ); if ( ! current_item->x || ! current_item->y ) BAILOUT( "UNABLE TO ALLOCATE MEMORY FOR COORDINATES." ); degenerates = 0; ii = 0; for ( i=0; i < num; i++ ) { read( fd, &x, 4 ); gds_swap4bytes( (BYTE *) &x ); read( fd, &y, 4 ); gds_swap4bytes( (BYTE *) &y ); if ( verbose ) printf( " (%8d, %8d) = (%9.3f, %9.3f) um \n", x, y, x * dbu_um, y * dbu_um ) ; if ( current_item->type == 3 || /* sref */ current_item->type == 4 ) /* text */ { if ( num != 1 ) BAILOUT( "THERE SHOULD BE ONLY ONE COORDINATE FOR SREF OR TEXT." ); current_item->x[0] = x; current_item->y[0] = y; } else if ( current_item->type == 2 ) /* aref */ { if ( num != 3 ) BAILOUT( "THERE SHOULD BE THREE COORDINATES FOR AN AREF." ); if ( i == 0 ) { /* aref reference point */ current_item->x[0] = x; current_item->y[0] = y; } else if ( i == 1 ) /* aref column spacing */ { if ( current_item->cols <= 0 ) BAILOUT( "NUMBER OF COLUMNS IS <= 0" ); angle = current_item->angle; current_item->col_pitch = (x - current_item->x[0]) / current_item->cols; current_item->col_pitchy = (y - current_item->y[0]) / current_item->cols; // hopefully zero if ( verbose ) printf( " Column pitch (points): %d, (%d) \n", current_item->col_pitch, current_item->col_pitchy ); if ( current_item->col_pitchy != 0 ) nag( "DIAGONAL ARRAY - PROBABLY A MISTAKE", &count_da ); } else if ( i == 2 ) { if ( current_item->rows <= 0 ) BAILOUT( "NUMBER OF ROWS IS <= 0" ); angle = current_item->angle; current_item->row_pitch = (y - current_item->y[0]) / current_item->rows; current_item->row_pitchx = (x - current_item->x[0]) / current_item->rows; if ( verbose ) printf( " Row pitch (points): (%d), %d \n", current_item->row_pitchx, current_item->row_pitch ); if ( current_item->row_pitchx != 0 ) nag( "DIAGONAL ARRAY - PROBABLY A MISTAKE", &count_da ); } } else if ( current_item->type == 1 || // path current_item->type == 0 || // polygon current_item->type == 5 ) // box { current_item->x[ii] = x; current_item->y[ii] = y; if ( i == 0 ) { px = x; py = y; } else // look for degenerates { if ( x == px && y == py ) { ii--; degenerates++; nag( "degenerate vertex", &count_dv ); } else { px = x; py = y; } } } else BAILOUT( "INVALID ITEM TYPE FOUND IN XY FUNCTION." ); ii++; } current_item->n = num - degenerates; if ( current_item->n <= 0 ) nag( "DEGENERATE POLYGON, PATH, OR BOX. THERE IS ONLY ONE VERTEX.", &count_dp ); *ci = current_item; } // read_xy /*------------------------------------------------------------------------------------------*/ void gds_write_xy( int fd, int *x, int *y, int n ) { static short int // If this is a polygon, be sure to repeat the first vertex. count, // If this is a path, do not repeat. token; static int i, xx, yy; //if ( n > 200 ) WARNING( "OVER 200 VERTICIES" ); if ( n > 8200 ) BAILOUT( "WAY TOO MANY VERTICIES" ); count = 4 + 8 * n; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1003; // XY gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); for ( i=0; icols = ncols; current_item->rows = nrows; *ci = current_item; } // colrow /*------------------------------------------------------------------------------------------*/ void gds_write_colrow( int fd, int ncols, int nrows ) { static unsigned short int count, token, sicols, sirows; if ( (ncols < 0) || (ncols > 32767) ) BAILOUT( "NUMBER OF COLUMNS IS INVALID" ); if ( (nrows < 0) || (nrows > 32767) ) BAILOUT( "NUMBER OF ROWS IS INVALID" ); sicols = ncols; sirows = nrows; count = 8; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1302; // COLROW gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_swap2bytes( (BYTE *) &sicols ); write( fd, &sicols, 2 ); gds_swap2bytes( (BYTE *) &sirows ); write( fd, &sirows, 2 ); } // write_colrow /*------------------------------------------------------------------------------------------*/ void gds_read_units( int fd, float *Pdbu_um, float *Pdbu_uu, float *Pdbu_m, BOOL verbose ) /* Read the database UNIT in "user units" (typically 0.001), then read the database unit */ /* in units of meters. The first number doesn't really matter, unless you want a CAD */ /* program to display the data in convenient units (such as microns). */ /* The imporant number is the second one: meters per bit. */ { double uu_um, dbu_uu, /* database unit in user units, usually 0.001 */ dbu_m; /* database unit in meters, usually 1e-9 */ dbu_uu = gds_read_double( fd ); dbu_m = gds_read_double( fd ); if ( dbu_uu <= 0.0 ) BAILOUT( "INVALID DATABASE USER UNIT, < 0" ); if ( dbu_m <= 0.0 ) BAILOUT( "INVALID DATABASE UNIT, < 0" ); uu_um = dbu_uu / (dbu_m * 1e6); // user units per micron, usually 1 if ( verbose ) { printf( " Database units in user units: %f\n", dbu_uu ); printf( " User units per micron: %1.0f\n", uu_um ); printf( " Database units in microns: %f\n", dbu_m * 1e6 ); } *Pdbu_um = dbu_m * 1e6; // microns per database unit *Pdbu_uu = dbu_uu; // user units per database unit *Pdbu_m = dbu_m; // meters per database unit } // read_units /*------------------------------------------------------------------------------------------*/ void gds_write_units( int fd, float dbu_uu, float dbu_m ) { short int count, token; count = 20; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x0305; // UNITS gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_write_float( fd, dbu_uu ); gds_write_float( fd, dbu_m ); } // write_units /*------------------------------------------------------------------------------------------*/ void gds_read_mag( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { double magnification; static struct gds_itemtype *current_item; current_item = *ci; magnification = gds_read_double( fd ); if ( verbose ) printf( " %g \n", magnification ) ; current_item->mag = magnification; *ci = current_item; } // read_mag /*------------------------------------------------------------------------------------------*/ void gds_write_mag( int fd, float mag ) { static int count, token; count = 12; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1B05; // MAG gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_write_float( fd, mag ); } // write_mag /*------------------------------------------------------------------------------------------*/ void gds_read_angle( int fd, int count, struct gds_itemtype **ci, BOOL verbose ) { double a; static struct gds_itemtype *current_item; current_item = *ci; a = gds_read_double( fd ); if ( verbose ) printf( " %g \n", a ) ; current_item->angle = a; *ci = current_item; } // read_angle /*------------------------------------------------------------------------------------------*/ void gds_write_angle( int fd, float angle ) { static int count, token; count = 12; gds_swap2bytes( (BYTE *) &count ); write( fd, &count, 2 ); token = 0x1C05; // ANGLE gds_swap2bytes( (BYTE *) &token ); write( fd, &token, 2 ); gds_write_float( fd, angle ); } // write_angle /*------------------------------------------------------------------------------------------*/ // HIGHER LEVEL FUNCTIONS /*------------------------------------------------------------------------------------------*/ void gds_create_lib( int fd, char *libname, float dbu_um ) { // Write HEADER, BGNLIB, LIBNAME, and UNITS. // This older version works fine if there are 1000 user units per database unit. float dbu_uu, // database user units, 1 nm per bit dbu_m; // database unit in meters, usually 1e-9m printf( "\nGDS library %s created with deprecated function.", libname ); printf( "\nPlease use gds_create_lib_correctly() when the number \nof database units per user unit is not 1000.\n" ); dbu_uu = 0.001; dbu_m = dbu_uu * 1.0e-6; gds_write_header( fd ); gds_write_bgnlib( fd ); gds_write_libname( fd, libname ); gds_write_units( fd, dbu_uu, dbu_m ); } // create_lib /*------------------------------------------------------------------------------------------*/ void gds_create_lib_correctly( int fd, char *libname, float dbu_um, float dbu_uu ) { // Write HEADER, BGNLIB, LIBNAME, and UNITS. // OMG this is so confusing! float dbu_m; // dbu_m = 1.0e-6 * dbu_uu; is wrong. dbu_m = dbu_um * 1e-6; gds_write_header( fd ); gds_write_bgnlib( fd ); gds_write_libname( fd, libname ); gds_write_units( fd, dbu_uu, dbu_m ); } // create_lib /*------------------------------------------------------------------------------------------*/ void gds_create_text( int fd, char *str, int x, int y, int layer, int size ) { static int xx[1], yy[1]; // generate text centered at x,y gds_write_text( fd ); gds_write_layer( fd, layer ); gds_write_texttype( fd, 0 ); gds_write_presentation( fd, 0, 1, 0 ); // fd, font=0, vp=center, hp=left gds_write_width( fd, size ); gds_write_strans( fd, 0, 0, 0 ); // fd, reflect, abs_angle, abs_mag xx[0] = x; yy[0] = y; gds_write_xy( fd, xx, yy, 1 ); gds_write_string( fd, str ); gds_write_endel( fd ); } // create_text /*------------------------------------------------------------------------------------------*/ gdsdump_dist/libgds.h0000644000175000017500000002137713546124132014250 0ustar rooksrooks #include #include #include #include #include #include #include #include // Setting BYTESWAP to 1 is appropriate for big-endian Intel processors. // GDS format was originally used on little-endian, older computers. #define BYTESWAP 1 #define BYTE unsigned char #define BOOL int #define TRUE 1 #define FALSE 0 BYTE gdsswap; short gdsword; #define SKIPOVER( fd, count ) { for ( i=0; i < ((count)-4); i+=2 ) read( (fd), &gdsword, 2 ); } #define BAILOUT( message ) { printf( "\n\nERROR: %s\n\n", (message) ); fflush(stdout); exit(-1); } #define WARNING( message ) { printf( "\n\nWARNING: %s\n\n", (message) ); fflush(stdout); } #define MAX_FORWARD_REFS 1000 struct gds_itemtype { /* an item might be a polygon, path, aref, sref or text */ int type; /* 0 = polygon, 1 = path, 2 = aref, 3 = sref, 4 = text, 5 = box */ int n; /* in the case of polygons or paths, this is the number of verticies */ /* for text this is the number of characters in the string */ int layer; /* layer */ int dt; /* datatype */ int cell_number; /* index into the table of cells- relevant for sref and aref */ float mag; /* magnification- relevant to sref, aref and text */ float angle; /* the angle - relevant to sref and aref */ BOOL abs_angle; /* from strans - normally false */ BOOL abs_mag; /* from strans - normally false */ BOOL reflect; /* from strans (reflect over x axis before rotating) */ int cols; /* Yes, many of these items are relevant to only one type of item, so */ int rows; /* perhaps we should invent a different item type for each item, then */ int col_pitch; /* string them together in a linked list of items. Why not? */ int row_pitch; /* Because the "library" has to be a linked list of one "thing". What we */ int col_pitchy; /* An array's column pitch in y, which would create a diagonal array. */ int row_pitchx; /* An array's row pitch in x. Diagonal arrays are strange and useless. */ int path_end; /* 0 = flush, 1 = round, 2 = extended. Default 0. */ int hor_present; /* The horizontal presentation for text. */ int ver_present; /* The vertical presentation for text. */ int font; /* Also relevant only for text. */ int width; /* Relevant only to paths. */ int *x; /* array of x coordinates or possibly just the reference point X */ int *y; /* array of y coordinates or possibly just the reference point Y */ char *text; /* Used only for strings. Such a waste. */ struct gds_itemtype *nextitem; }; struct gds_celltype /* A GDS library is a linked list of cells. */ { /* A cell is a linked list of items. */ char *name; /* name of the cell */ struct gds_itemtype *item; /* one element of the cell */ struct gds_celltype *nextcell; /* pointer to the next cell, forming a linked list */ }; char *gds_read_libname( int fd, int count, BOOL verbose ); void gds_read_header( int fd, int count, BOOL verbose ); void gds_swap4bytes( BYTE *four ); void gds_swap2bytes( BYTE *two ); void gds_read_header( int fd, int count, BOOL verbose ); void gds_write_header( int fd ); void gds_read_bgnlib( int fd, int count, int *cell_table_size, struct gds_celltype **lib, struct gds_celltype ***c, struct gds_celltype **cc, BOOL verbose ); void gds_write_bgnlib( int fd ); void gds_read_bgnstr( int fd, int count, int *cell_table_size, int *num_cells, struct gds_celltype ***c, struct gds_celltype **cc, struct gds_itemtype **ci, BOOL verbose ); void gds_write_bgnstr( int fd ); void gds_read_endlib( int fd, int count, BOOL verbose ); void gds_write_endlib( int fd ); void gds_read_endstr( int fd, int count, BOOL verbose ); void gds_write_endstr( int fd ); void gds_write_libname( int fd, char *name ); void gds_read_strname( int fd, int count, int num_cells, struct gds_celltype ***c, struct gds_celltype **cc, BOOL verbose ); void gds_write_strname( int fd, char *name ); void gds_read_string( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_string( int fd, char *s ); void gds_read_sname( int fd, int count, int num_cells, int *forward_num, char ***f, struct gds_celltype ***c, struct gds_itemtype **ci, BOOL verbose ); void gds_write_sname( int fd, char *s ); void gds_read_boundary( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_boundary( int fd ); void gds_read_box( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_box( int fd ); void gds_read_boxtype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_boxtype( int fd, short int dt ); void gds_read_path( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_path( int fd ); void gds_read_sref( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_sref( int fd ); void gds_read_aref( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_aref( int fd ); void gds_read_text( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_text( int fd ); void gds_read_endel( int fd, int count, BOOL verbose ); void gds_write_endel( int fd ); void gds_read_layer( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_layer( int fd, short int layer ); void gds_read_width( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_width( int fd, int width ); void gds_read_datatype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_datatype( int fd, short int dt ); void gds_read_texttype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_texttype( int fd, short int dt ); void gds_read_generations( int fd, int count, BOOL verbose ); void gds_write_generations( int fd, short int gens ); void gds_read_pathtype( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_pathtype( int fd, short int pt ); void gds_read_presentation( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_presentation( int fd, int font, int vp, int hp ); void gds_read_strans( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_strans( int fd, BOOL reflect, BOOL abs_angle, BOOL abs_mag ); void gds_read_xy( int fd, int count, float dbu_um, struct gds_itemtype **ci, BOOL verbose ); void gds_write_xy( int fd, int *x, int *y, int n ); void gds_read_colrow( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_colrow( int fd, int ncols, int nrows ); void gds_read_units( int fd, float *Pdbu_um, float *Pdbu_uu, float *Pdbu_m, BOOL verbose ); void gds_write_units( int fd, float dbu_uu, float dbu_m ); void gds_read_mag( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_mag( int fd, float mag ); void gds_read_angle( int fd, int count, struct gds_itemtype **ci, BOOL verbose ); void gds_write_angle( int fd, float angle ); void gds_create_lib( int fd, char *libname, float dbu_um ); void gds_create_lib_correctly( int fd, char *libname, float dbu_um, float dbu_uu ); void gds_create_text( int fd, char *str, int x, int y, int layer, int size ); gdsdump_dist/log0000664000175000017500000010640013546124132013330 0ustar rooksrooksrm -f libgds.a libgds.o gcc -g -c libgds.c -lc -lm -o libgds.o libgds.c:102:20: error: libgds.h: No such file or directory libgds.c:111: error: expected ‘)’ before ‘*’ token libgds.c:127: error: expected ‘)’ before ‘*’ token libgds.c:140: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c:140: warning: its scope is only this definition or declaration, which is probably not what you want libgds.c: In function ‘gds_make_next_item’: libgds.c:149: error: dereferencing pointer to incomplete type libgds.c:149: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:149: error: invalid application of ‘sizeof’ to incomplete type ‘struct gds_itemtype’ libgds.c:151: error: dereferencing pointer to incomplete type libgds.c:153: error: dereferencing pointer to incomplete type libgds.c:158: error: dereferencing pointer to incomplete type libgds.c:159: error: dereferencing pointer to incomplete type libgds.c:160: error: dereferencing pointer to incomplete type libgds.c:161: error: dereferencing pointer to incomplete type libgds.c:162: error: dereferencing pointer to incomplete type libgds.c:163: error: dereferencing pointer to incomplete type libgds.c:164: error: dereferencing pointer to incomplete type libgds.c:165: error: dereferencing pointer to incomplete type libgds.c:166: error: dereferencing pointer to incomplete type libgds.c:166: error: ‘FALSE’ undeclared (first use in this function) libgds.c:166: error: (Each undeclared identifier is reported only once libgds.c:166: error: for each function it appears in.) libgds.c:167: error: dereferencing pointer to incomplete type libgds.c:168: error: dereferencing pointer to incomplete type libgds.c:169: error: dereferencing pointer to incomplete type libgds.c:170: error: dereferencing pointer to incomplete type libgds.c:171: error: dereferencing pointer to incomplete type libgds.c:172: error: dereferencing pointer to incomplete type libgds.c:173: error: dereferencing pointer to incomplete type libgds.c:174: error: dereferencing pointer to incomplete type libgds.c:175: error: dereferencing pointer to incomplete type libgds.c:175: error: ‘NULL’ undeclared (first use in this function) libgds.c: In function ‘gds_read_float’: libgds.c:191: error: ‘BYTE’ undeclared (first use in this function) libgds.c:192: error: expected ‘;’ before ‘e’ libgds.c:209: error: ‘e’ undeclared (first use in this function) libgds.c:218: error: ‘m’ undeclared (first use in this function) libgds.c:236: warning: incompatible implicit declaration of built-in function ‘pow’ libgds.c: At top level: libgds.c:245: error: expected ‘)’ before ‘x’ libgds.c: In function ‘gds_write_float’: libgds.c:283: error: ‘BYTE’ undeclared (first use in this function) libgds.c:284: error: expected ‘;’ before ‘by’ libgds.c:288: error: ‘BYTESWAP’ undeclared (first use in this function) libgds.c:293: error: ‘stupid’ undeclared (first use in this function) libgds.c:303: warning: incompatible implicit declaration of built-in function ‘fabsf’ libgds.c:305: warning: incompatible implicit declaration of built-in function ‘floor’ libgds.c:305: warning: incompatible implicit declaration of built-in function ‘log’ libgds.c:309: warning: incompatible implicit declaration of built-in function ‘powf’ libgds.c:314: warning: incompatible implicit declaration of built-in function ‘pow’ libgds.c:318: warning: incompatible implicit declaration of built-in function ‘pow’ libgds.c:333: error: ‘by’ undeclared (first use in this function) libgds.c: At top level: libgds.c:348: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_write_header’: libgds.c:364: error: ‘ssize_t’ undeclared (first use in this function) libgds.c:364: error: expected ‘;’ before ‘w’ libgds.c:367: error: ‘BYTE’ undeclared (first use in this function) libgds.c:367: error: expected expression before ‘)’ token libgds.c:368: error: ‘w’ undeclared (first use in this function) libgds.c:373: error: expected expression before ‘)’ token libgds.c:376: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:391: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:391: warning: ‘struct gds_celltype’ declared inside parameter list libgds.c: In function ‘gds_read_bgnlib’: libgds.c:398: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:398: error: invalid application of ‘sizeof’ to incomplete type ‘struct gds_celltype’ libgds.c:400: error: dereferencing pointer to incomplete type libgds.c:400: error: ‘NULL’ undeclared (first use in this function) libgds.c: In function ‘gds_write_bgnlib’: libgds.c:420: error: ‘time_t’ undeclared (first use in this function) libgds.c:420: error: ‘now’ undeclared (first use in this function) libgds.c:433: error: expected expression before ‘)’ token libgds.c:434: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:434: error: invalid application of ‘sizeof’ to incomplete type ‘struct tm’ libgds.c:440: error: ‘BYTE’ undeclared (first use in this function) libgds.c:440: error: expected expression before ‘)’ token libgds.c:443: error: expected expression before ‘)’ token libgds.c:445: error: dereferencing pointer to incomplete type libgds.c:446: error: expected expression before ‘)’ token libgds.c:448: error: dereferencing pointer to incomplete type libgds.c:449: error: expected expression before ‘)’ token libgds.c:451: error: dereferencing pointer to incomplete type libgds.c:452: error: expected expression before ‘)’ token libgds.c:454: error: dereferencing pointer to incomplete type libgds.c:455: error: expected expression before ‘)’ token libgds.c:457: error: dereferencing pointer to incomplete type libgds.c:458: error: expected expression before ‘)’ token libgds.c:460: error: dereferencing pointer to incomplete type libgds.c:461: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:484: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:484: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c:484: warning: ‘struct gds_celltype’ declared inside parameter list libgds.c: In function ‘gds_read_bgnstr’: libgds.c:487: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘first_cell’ libgds.c:487: error: ‘first_cell’ undeclared (first use in this function) libgds.c:487: error: ‘TRUE’ undeclared (first use in this function) libgds.c:506: error: ‘FALSE’ undeclared (first use in this function) libgds.c:511: error: dereferencing pointer to incomplete type libgds.c:511: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:511: error: invalid application of ‘sizeof’ to incomplete type ‘struct gds_celltype’ libgds.c:513: error: dereferencing pointer to incomplete type libgds.c:515: error: dereferencing pointer to incomplete type libgds.c:516: error: dereferencing pointer to incomplete type libgds.c:516: error: ‘NULL’ undeclared (first use in this function) libgds.c:523: warning: incompatible implicit declaration of built-in function ‘realloc’ libgds.c:530: error: dereferencing pointer to incomplete type libgds.c:530: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:530: error: invalid application of ‘sizeof’ to incomplete type ‘struct gds_itemtype’ libgds.c:531: error: dereferencing pointer to incomplete type libgds.c:532: error: dereferencing pointer to incomplete type libgds.c:533: error: dereferencing pointer to incomplete type libgds.c:534: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_bgnstr’: libgds.c:550: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token libgds.c:550: error: ‘now’ undeclared (first use in this function) libgds.c:563: error: ‘time_t’ undeclared (first use in this function) libgds.c:563: error: expected expression before ‘)’ token libgds.c:564: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:564: error: invalid application of ‘sizeof’ to incomplete type ‘struct tm’ libgds.c:569: error: dereferencing pointer to incomplete type libgds.c:570: error: dereferencing pointer to incomplete type libgds.c:571: error: dereferencing pointer to incomplete type libgds.c:572: error: dereferencing pointer to incomplete type libgds.c:573: error: dereferencing pointer to incomplete type libgds.c:574: error: dereferencing pointer to incomplete type libgds.c:576: error: ‘BYTE’ undeclared (first use in this function) libgds.c:576: error: expected expression before ‘)’ token libgds.c:577: error: expected expression before ‘)’ token libgds.c:578: error: expected expression before ‘)’ token libgds.c:579: error: expected expression before ‘)’ token libgds.c:580: error: expected expression before ‘)’ token libgds.c:581: error: expected expression before ‘)’ token libgds.c:584: error: expected expression before ‘)’ token libgds.c:587: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:607: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_write_endlib’: libgds.c:623: error: ‘BYTE’ undeclared (first use in this function) libgds.c:623: error: expected expression before ‘)’ token libgds.c:626: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:634: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_write_endstr’: libgds.c:650: error: ‘BYTE’ undeclared (first use in this function) libgds.c:650: error: expected expression before ‘)’ token libgds.c:653: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:661: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_read_libname’: libgds.c:664: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:668: error: ‘verbose’ undeclared (first use in this function) libgds.c:668: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c: In function ‘gds_write_libname’: libgds.c:682: warning: incompatible implicit declaration of built-in function ‘strlen’ libgds.c:683: error: ‘BYTE’ undeclared (first use in this function) libgds.c:683: error: expected expression before ‘)’ token libgds.c:686: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:701: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:701: warning: ‘struct gds_celltype’ declared inside parameter list libgds.c: In function ‘gds_read_strname’: libgds.c:710: error: dereferencing pointer to incomplete type libgds.c:710: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:712: error: dereferencing pointer to incomplete type libgds.c:714: error: dereferencing pointer to incomplete type libgds.c:715: error: dereferencing pointer to incomplete type libgds.c:716: error: ‘verbose’ undeclared (first use in this function) libgds.c:716: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:716: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_strname’: libgds.c:734: warning: incompatible implicit declaration of built-in function ‘strlen’ libgds.c:735: error: ‘BYTE’ undeclared (first use in this function) libgds.c:735: error: expected expression before ‘)’ token libgds.c:738: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:748: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:748: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_string’: libgds.c:762: error: dereferencing pointer to incomplete type libgds.c:771: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:772: error: ‘stdout’ undeclared (first use in this function) libgds.c:777: error: ‘verbose’ undeclared (first use in this function) libgds.c:777: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:779: error: dereferencing pointer to incomplete type libgds.c:780: error: dereferencing pointer to incomplete type libgds.c:780: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:781: warning: incompatible implicit declaration of built-in function ‘strcpy’ libgds.c:781: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_string’: libgds.c:797: warning: incompatible implicit declaration of built-in function ‘strlen’ libgds.c:807: error: ‘BYTE’ undeclared (first use in this function) libgds.c:807: error: expected expression before ‘)’ token libgds.c:810: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:831: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:831: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c:831: warning: ‘struct gds_celltype’ declared inside parameter list libgds.c: In function ‘gds_read_sname’: libgds.c:835: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘forward_ref_init’ libgds.c:835: error: ‘forward_ref_init’ undeclared (first use in this function) libgds.c:835: error: ‘FALSE’ undeclared (first use in this function) libgds.c:836: error: ‘MAX_FORWARD_REFS’ undeclared (first use in this function) libgds.c:848: error: ‘verbose’ undeclared (first use in this function) libgds.c:848: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:853: error: dereferencing pointer to incomplete type libgds.c:858: error: dereferencing pointer to incomplete type libgds.c:862: error: ‘TRUE’ undeclared (first use in this function) libgds.c:863: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:877: warning: incompatible implicit declaration of built-in function ‘realloc’ libgds.c:881: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:885: warning: incompatible implicit declaration of built-in function ‘strcpy’ libgds.c:891: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_sname’: libgds.c:908: warning: incompatible implicit declaration of built-in function ‘strlen’ libgds.c:909: error: ‘BYTE’ undeclared (first use in this function) libgds.c:909: error: expected expression before ‘)’ token libgds.c:912: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:922: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:922: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_boundary’: libgds.c:930: warning: passing argument 1 of ‘gds_make_next_item’ from incompatible pointer type libgds.c:140: note: expected ‘struct gds_itemtype **’ but argument is of type ‘struct gds_itemtype **’ libgds.c:931: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_boundary’: libgds.c:947: error: ‘BYTE’ undeclared (first use in this function) libgds.c:947: error: expected expression before ‘)’ token libgds.c:950: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:958: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:958: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_box’: libgds.c:966: warning: passing argument 1 of ‘gds_make_next_item’ from incompatible pointer type libgds.c:140: note: expected ‘struct gds_itemtype **’ but argument is of type ‘struct gds_itemtype **’ libgds.c:967: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_box’: libgds.c:988: error: ‘BYTE’ undeclared (first use in this function) libgds.c:988: error: expected expression before ‘)’ token libgds.c:991: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:999: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:999: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_boxtype’: libgds.c:1006: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1006: error: expected expression before ‘)’ token libgds.c:1008: error: ‘verbose’ undeclared (first use in this function) libgds.c:1008: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1016: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_boxtype’: libgds.c:1038: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1038: error: expected expression before ‘)’ token libgds.c:1041: error: expected expression before ‘)’ token libgds.c:1043: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1051: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1051: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_path’: libgds.c:1057: warning: passing argument 1 of ‘gds_make_next_item’ from incompatible pointer type libgds.c:140: note: expected ‘struct gds_itemtype **’ but argument is of type ‘struct gds_itemtype **’ libgds.c:1058: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_path’: libgds.c:1072: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1072: error: expected expression before ‘)’ token libgds.c:1075: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1083: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1083: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_sref’: libgds.c:1089: warning: passing argument 1 of ‘gds_make_next_item’ from incompatible pointer type libgds.c:140: note: expected ‘struct gds_itemtype **’ but argument is of type ‘struct gds_itemtype **’ libgds.c:1090: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_sref’: libgds.c:1105: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1105: error: expected expression before ‘)’ token libgds.c:1108: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1116: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1116: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_aref’: libgds.c:1122: warning: passing argument 1 of ‘gds_make_next_item’ from incompatible pointer type libgds.c:140: note: expected ‘struct gds_itemtype **’ but argument is of type ‘struct gds_itemtype **’ libgds.c:1123: error: dereferencing pointer to incomplete type libgds.c:1124: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_aref’: libgds.c:1139: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1139: error: expected expression before ‘)’ token libgds.c:1142: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1151: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1151: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_text’: libgds.c:1157: warning: passing argument 1 of ‘gds_make_next_item’ from incompatible pointer type libgds.c:140: note: expected ‘struct gds_itemtype **’ but argument is of type ‘struct gds_itemtype **’ libgds.c:1158: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_text’: libgds.c:1172: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1172: error: expected expression before ‘)’ token libgds.c:1175: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1184: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_write_endel’: libgds.c:1200: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1200: error: expected expression before ‘)’ token libgds.c:1203: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1212: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1212: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_layer’: libgds.c:1218: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1218: error: expected expression before ‘)’ token libgds.c:1219: error: ‘verbose’ undeclared (first use in this function) libgds.c:1219: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1227: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_layer’: libgds.c:1246: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1246: error: expected expression before ‘)’ token libgds.c:1249: error: expected expression before ‘)’ token libgds.c:1251: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1260: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1260: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_width’: libgds.c:1267: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1267: error: expected expression before ‘)’ token libgds.c:1269: error: ‘verbose’ undeclared (first use in this function) libgds.c:1269: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1276: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_width’: libgds.c:1291: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1291: error: expected expression before ‘)’ token libgds.c:1294: error: expected expression before ‘)’ token libgds.c:1296: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1305: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1305: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_datatype’: libgds.c:1312: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1312: error: expected expression before ‘)’ token libgds.c:1314: error: ‘verbose’ undeclared (first use in this function) libgds.c:1314: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1322: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_datatype’: libgds.c:1343: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1343: error: expected expression before ‘)’ token libgds.c:1346: error: expected expression before ‘)’ token libgds.c:1348: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1357: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1357: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_texttype’: libgds.c:1364: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1364: error: expected expression before ‘)’ token libgds.c:1366: error: ‘verbose’ undeclared (first use in this function) libgds.c:1366: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1374: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_texttype’: libgds.c:1395: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1395: error: expected expression before ‘)’ token libgds.c:1398: error: expected expression before ‘)’ token libgds.c:1400: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1409: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_read_generations’: libgds.c:1414: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1414: error: expected expression before ‘)’ token libgds.c:1416: error: ‘verbose’ undeclared (first use in this function) libgds.c:1416: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c: In function ‘gds_write_generations’: libgds.c:1442: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1442: error: expected expression before ‘)’ token libgds.c:1445: error: expected expression before ‘)’ token libgds.c:1447: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1455: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1455: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_pathtype’: libgds.c:1462: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1462: error: expected expression before ‘)’ token libgds.c:1464: error: ‘verbose’ undeclared (first use in this function) libgds.c:1464: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1486: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_pathtype’: libgds.c:1504: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1504: error: expected expression before ‘)’ token libgds.c:1507: error: expected expression before ‘)’ token libgds.c:1509: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1518: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1518: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_presentation’: libgds.c:1530: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1530: error: expected expression before ‘)’ token libgds.c:1532: error: ‘verbose’ undeclared (first use in this function) libgds.c:1532: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1568: error: dereferencing pointer to incomplete type libgds.c:1569: error: dereferencing pointer to incomplete type libgds.c:1570: error: dereferencing pointer to incomplete type libgds.c:1571: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_presentation’: libgds.c:1611: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1611: error: expected expression before ‘)’ token libgds.c:1613: error: expected expression before ‘)’ token libgds.c:1616: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1628: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1628: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_strans’: libgds.c:1641: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1641: error: expected expression before ‘)’ token libgds.c:1643: error: ‘verbose’ undeclared (first use in this function) libgds.c:1643: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1652: error: dereferencing pointer to incomplete type libgds.c:1652: error: ‘FALSE’ undeclared (first use in this function) libgds.c:1657: error: dereferencing pointer to incomplete type libgds.c:1657: error: ‘TRUE’ undeclared (first use in this function) libgds.c:1662: error: dereferencing pointer to incomplete type libgds.c:1668: error: dereferencing pointer to incomplete type libgds.c:1673: error: dereferencing pointer to incomplete type libgds.c:1679: error: dereferencing pointer to incomplete type libgds.c:1684: error: dereferencing pointer to incomplete type libgds.c: At top level: libgds.c:1696: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1697: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1698: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_write_strans’: libgds.c:1706: error: ‘reflect’ undeclared (first use in this function) libgds.c:1706: error: ‘abs_mag’ undeclared (first use in this function) libgds.c:1706: error: ‘abs_angle’ undeclared (first use in this function) libgds.c:1709: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1709: error: expected expression before ‘)’ token libgds.c:1712: error: expected expression before ‘)’ token libgds.c:1714: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1723: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1723: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_xy’: libgds.c:1739: error: dereferencing pointer to incomplete type libgds.c:1739: warning: incompatible implicit declaration of built-in function ‘malloc’ libgds.c:1740: error: dereferencing pointer to incomplete type libgds.c:1741: error: dereferencing pointer to incomplete type libgds.c:1741: error: dereferencing pointer to incomplete type libgds.c:1746: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1746: error: expected expression before ‘)’ token libgds.c:1748: error: expected expression before ‘)’ token libgds.c:1749: error: ‘verbose’ undeclared (first use in this function) libgds.c:1749: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1751: error: dereferencing pointer to incomplete type libgds.c:1752: error: dereferencing pointer to incomplete type libgds.c:1755: error: dereferencing pointer to incomplete type libgds.c:1756: error: dereferencing pointer to incomplete type libgds.c:1758: error: dereferencing pointer to incomplete type libgds.c:1763: error: dereferencing pointer to incomplete type libgds.c:1764: error: dereferencing pointer to incomplete type libgds.c:1768: error: dereferencing pointer to incomplete type libgds.c:1769: error: dereferencing pointer to incomplete type libgds.c:1770: error: dereferencing pointer to incomplete type libgds.c:1770: error: dereferencing pointer to incomplete type libgds.c:1770: error: dereferencing pointer to incomplete type libgds.c:1771: error: dereferencing pointer to incomplete type libgds.c:1771: error: dereferencing pointer to incomplete type libgds.c:1771: error: dereferencing pointer to incomplete type libgds.c:1773: error: dereferencing pointer to incomplete type libgds.c:1773: error: dereferencing pointer to incomplete type libgds.c:1774: error: dereferencing pointer to incomplete type libgds.c:1778: error: dereferencing pointer to incomplete type libgds.c:1779: error: dereferencing pointer to incomplete type libgds.c:1780: error: dereferencing pointer to incomplete type libgds.c:1780: error: dereferencing pointer to incomplete type libgds.c:1780: error: dereferencing pointer to incomplete type libgds.c:1781: error: dereferencing pointer to incomplete type libgds.c:1781: error: dereferencing pointer to incomplete type libgds.c:1781: error: dereferencing pointer to incomplete type libgds.c:1783: error: dereferencing pointer to incomplete type libgds.c:1783: error: dereferencing pointer to incomplete type libgds.c:1784: error: dereferencing pointer to incomplete type libgds.c:1787: error: dereferencing pointer to incomplete type libgds.c:1788: error: dereferencing pointer to incomplete type libgds.c:1789: error: dereferencing pointer to incomplete type libgds.c:1791: error: dereferencing pointer to incomplete type libgds.c:1792: error: dereferencing pointer to incomplete type libgds.c:1799: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_xy’: libgds.c:1819: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1819: error: expected expression before ‘)’ token libgds.c:1822: error: expected expression before ‘)’ token libgds.c:1827: error: expected expression before ‘)’ token libgds.c:1828: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1838: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1838: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_colrow’: libgds.c:1848: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1848: error: expected expression before ‘)’ token libgds.c:1850: error: expected expression before ‘)’ token libgds.c:1851: error: ‘verbose’ undeclared (first use in this function) libgds.c:1851: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1856: error: dereferencing pointer to incomplete type libgds.c:1857: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_colrow’: libgds.c:1883: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1883: error: expected expression before ‘)’ token libgds.c:1886: error: expected expression before ‘)’ token libgds.c:1888: error: expected expression before ‘)’ token libgds.c:1890: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1898: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c: In function ‘gds_read_units’: libgds.c:1920: error: ‘verbose’ undeclared (first use in this function) libgds.c:1920: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c: In function ‘gds_write_units’: libgds.c:1938: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1938: error: expected expression before ‘)’ token libgds.c:1941: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1951: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1951: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_mag’: libgds.c:1959: error: ‘verbose’ undeclared (first use in this function) libgds.c:1959: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:1961: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_mag’: libgds.c:1976: error: ‘BYTE’ undeclared (first use in this function) libgds.c:1976: error: expected expression before ‘)’ token libgds.c:1979: error: expected expression before ‘)’ token libgds.c: At top level: libgds.c:1988: error: expected declaration specifiers or ‘...’ before ‘BOOL’ libgds.c:1988: warning: ‘struct gds_itemtype’ declared inside parameter list libgds.c: In function ‘gds_read_angle’: libgds.c:1999: error: ‘verbose’ undeclared (first use in this function) libgds.c:1999: warning: incompatible implicit declaration of built-in function ‘printf’ libgds.c:2001: error: dereferencing pointer to incomplete type libgds.c: In function ‘gds_write_angle’: libgds.c:2017: error: ‘BYTE’ undeclared (first use in this function) libgds.c:2017: error: expected expression before ‘)’ token libgds.c:2020: error: expected expression before ‘)’ token libgds.c: In function ‘gds_create_text’: libgds.c:2069: error: too many arguments to function ‘gds_write_strans’ make: *** [libgds] Error 1 gdsdump_dist/makefile0000644000175000017500000000034013546124132014316 0ustar rooksrooksall: libgds gdsdump libgds libgds.a: libgds.c libgds.h rm -f libgds.a libgds.o gcc -g -c libgds.c -lc -lm -o libgds.o ar -cvq libgds.a libgds.o gdsdump: gdsdump.c libgds.a gcc -g -o gdsdump gdsdump.c -lm -lc libgds.a gdsdump_dist/libgds.o0000664000175000017500000031652013750311076014260 0ustar rooksrooksELF>@@UHH}HEHEPHEHEHPHE@HEHPHE@HEHP]UHH}HEHEPHEHEHP]UHSHH}HEHHHxHCpHH@pHu-HHHH@pHHH@PH@H@H@ H@H@@HBHBH@H@ H@$H@,H@(H@0H@4H@8H@<HH@pHHEHH[]UHH`}HEHHEHMEHΉEy EEE@EEQEE7EHD#E‹EЉE؃}tHEHE}H}m}yÃE}~H*E ^E*EYEE*EH0@f(HEEYEEHEHEEUHHP}HMۋE̺HΉEۄy EEE@EHMЋE̺HΉEEEeEEKEHD#E‹EЉE*E^EMXEEXE}m}yE}~*EYEZU*EH0@f(HEEYEffZ]܋E܉EEUHH EEKE#E;EuHHƸHHHHHf}}UHH0EEHƄE}~W.zW.~W.v EETZ ^ X,E}}-HH*EEE@EE쉅^(EEEEE*H@f(HMZYH,‹EHuZEHHxH*!HHH H*f(XE*H@f(H^f(\f(ffZuE}8EHxH*HHH H*X YȋEHxH*HHH H*XX,E*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE *EHHxH*!HHH H*f(X'+E*H@f(HYX,E}'QE(*EHHxH*!HHH H*f(X/+E*H@f(HYX,E}/QE0*EHHxH*!HHH H*f(X7+E*H@f(HYX,E}7QE3EHHHΉE}~UHH }uUEEEE;EUHH }fEHEHHMEHΉHEH}-HHfEHEHHMEHΉfEXHEHHMEHΉUHHP}܉uHUHMLELMEEܺEE؃;EݿHEHEHEHEH@H}u-HH HEHEH}u-HHHEHUHHEHUHHEHUHUHH0}ܿHE8HEHEHHEHHEfEHEHHMEܺHΉfEHEHHMEܺHΉHE@flfEHEHHMEܺHΉHE@fEHEHHMEܺHΉHE@ fEHEHHMEܺHΉHE@fEHEHHMEܺHΉHE@fEHEHHMEܺHΉHEfEHEHHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉUHSHH}܉uHUHMLELMHEHHHEHHHEHHEEܺEE؃;E݋tHEHHCHH@Hu-HHHH@HHH@HEȋPHEȉHEȋHEЋ9~tHEЋHEЉHEЋHHHHHHHHu-HHHxHCHH@HHHBHH@pHHEHHHEHHHEHHH[]UHH}H8HHHHHHH@flfH@fH@ fH@fH@fHffEfEEEEEEEEEEEEEUHH }uUEEEE;EUHH}fEfEUHH}uU#EEP9UHH}fEfEUHH }uUEHHHEEHcHMEHΉEHHPHEH}tHEHƿHEUHH }HuHEHfEEft EfEHEHHtZfE+HHEHHMHEHEfEEU9|HHUHH=fE+HHEHHMHEHEfEEf;E|EfEHEHHMEHΉfEHEHHMEHΉHUH EHΉUHSH(}uUHMLEDMHEHHHEHHHEHHHHHHu-HHEHcHHEHΉHHUHcHH}tHHHƿHUHcHHHHHHEHHHEHH([]UHH}HuHEHfftfHHHtf=HHHHHEHf҃9|HHHH[f=HHHHHEHff9|fEfEHH EHΉUHSH(}uHUMHEHHHt-HHE=~ HcЋE9HHHH#E)‰ЍP9Hƀ}tHUPHHHHChHH@hHHHEHH([]UHH}HuHEHff=~DHHfHHHftfHHHtf=HHHHHEHf҃9|HHHH[f=HHHHHEHff9|fEfEHH EHΉUHSH8}uUHMLELMHEHHHEHH}~-HHEHcЋEEHƀ}tHHcHHHHHƿt ;E|;E}t H@ujHHHHHHu-HHHEHEHHHE؋PHE؉HE؋9|pHHHHHHHHu-HHHHE؋HHHHHHE؋HHHHHu-HHHHE؋HHHHH-}tƿHPHHEHHHEHH8[]UHH}HuHEHfftfHHHtf=HHHHHEHf҃9|HHHH[f=HHHHHEHff9|fEfEHH EHΉUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEfEUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}HHfEf-EUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉P HHEHUHH}fEEfy#HHEf=~#HHfEf.EHEHHMEHΉUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEf EUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEf EUHH0}uHUMHEHHEEEE;EݿHH@HHEHUHH}fEf EUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEf EUHH }uUEEEE;EUHH}fEfEUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉PHHEHUHH}fEEfx Ef=~-HHfEf EHEHHMEHΉUHH }uHUMHEHHE}tƿy}t}t HPPHHEHUHH}ufEfEHEHHMEHΉUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉P HHEHUHH}fEEfy#HHEf=~#HHfEfEHEHHMEHΉUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉P HHEHUHH}fEEfy#HHEf=~#HHfEfEHEHHMEHΉUHH}uUE}tƿfy#HHfc~#HHUHH}fEEfy#HHEfc~#HHfEf"EHEHHMEHΉUHH }uHUMHEHHE}tƿfu}fu}t|kfu}tXGfu}t4#HH}t f fy,fHHH҉P@HHEHUHH}fEEfx Ef~-HHfEf!EHEHHMEHΉUHH }uHUMHEHHE}tƿf‰ffƒ)‰ff‰ffƒ)‰fffЃ)f}tƿfu}tn]fu}tJ9fu}t&}tfu}tZNfu}t;/fu}t}t H҉PLHBH҉PDH҉PHHHEHUHH}uUM}x}~*EHH}x}~*EHH}x}~*EHHEUЍEffEfEEUHH }uHUMHEHHE}tƿfff‰ffƒ)‰ff‰ffƒ)‰fH@ft%}tH@$#}tH@$ft%}tH@ #}tH@ ft%}tH@#}tH@}t HHEHUHH}uUME‹EЍEffEfEEUHHH}HuHEPHEHE HEHƿHE u UHSH(}uEHU؉MHEHHEPHHHHHHCXHHHHHC`HH@XHtHH@`Hu-HHEE}tG*YEZȋ*YEZƿHtHuct-HHHH@XHH@`Ht-HHu+HH@XHH@`EH@(-HHH@H HH@X)HX(A0H HH@`)HX(A8}t%HP8H@0ƿH@8N:+H@,-HHH@H HH@`)HX,A4H HH@X)HX,A<}t%HP4H@<ƿH@<C/HtHtHHH@XHcHH‹HH@`HcHH‹ui9u?9u//-HH9H )щʉPH@HHEHH([]UHH }HuHUM} ~-HHEfEfEHHHEHЋHHHEHЋEE;EhUHH }uHUMHEHHEE}tƿ-HH-HHHP(HP,HHEHUHH}uU}x }~-HH}x }~-HHEfEffEfEEEUHHP}HuHUHMDE؋E܉EHEHEE܉EHEHEfWf.Er-HHfWf.Er-HHMYM^f(E}tXHEHEEHEHEEMYMYffZHEEfZHEEfZHEUHH }EMfEHEHHMEHΉfEHEHHMEHΉEUEEEUEEUHH0}uHUMHEHHEEHEHE}tHEHEEпHEfZ@HHEHUHH}E EEEUEEUHH0}uHUMHEHHEEHEHE}tHEHEEпHEfZ@HHEHUHH}E EEEUEEUHH0}HuEHEHƿEEZ YffZUEEHUEH։UEMUM܉EE܉UHH0}HuEMEZ YffZUEEHUEH։UE܋MUM؉EE؉UHH }HuUMDEDMEEЋE։EEUE։EEEEHUEH։EUNABLE TO ALLOCATE NEXT ITEM ERROR: %s 10%s A NUMBER IS TOO SMALL TO ENCODE AS A GDS FLOATUNABLE TO WRITE TO OUTPUT FILE - CHECK OPEN() CALLUNABLE TO ALLOCATE LIBRARY POINTER. THAT'S STRANGE.UNABLE TO ALLOCATE MEMORY FOR CELL TABLE.UNABLE TO ALLOCATE MEMORY FOR THE NEXT CELL.UNABLE TO REALLOCATE CELL TABLE. SORRY DUDE. library "%s" UNABLE TO ALLOCATE MEMORY FOR NEXT CELL NAME cell "%s" SYNTAX ERROR: STRING APPEARS OUTSIDE OF TEXT OBJECTSTRING HAS MORE THAN 512 CHARACTERS WARNING: %s [%s] %s ATTEMPT TO WRITE A STRING LONGER THAN 512 CHARACTERS. TRUNCATING.CELL NAME IS WAY TOO LONG forward referenceUNABLE TO ALLOCATE ARRAY OF FORWARD REFERENCE NAMESUNABLE TO REALLOCATE ARRAY OF FORWARD REFERENCE NAMESUNABLE TO ALLOCATE STRING FOR FORWARD NAME this is cell [%d] BOXES ARE STUPID. USE BOUNDARIES INSTEAD. %d NEGATIVE BOX TYPE NUMBERBOX TYPE > 255 NEGATIVE BOXTYPE NUMBERBOXTYPE > 255 NEGATIVE LAYER NUMBERLAYER > 255 INVALID LAYER NUMBER %d does not scaleNEGATIVE DATATYPE NUMBERDATATYPE > 255 NEGATIVE TEXT TYPE NUMBERTEXT TYPE > 255 NEGATIVE NUMBER OF GENERATIONS TO RETAINNUMBER OF GENERATIONS > 99 NEGATIVE GENERATIONS NUMBERGENERATIONS > 99 [0x%x] flush square ends round ends extended square ends variable square end extensions ARE NOT SUPPORTED HEREUNKNOWN PATH END TYPEINVALID PATH TYPEINVALID PATH TYPE NUMBERfont %d vertical: top vertical: middle vertical: bottom ERROR: VERTICAL PRESENTATION BITS BOTH SET horizontal: left horizontal: center horizontal: right ERROR: HORIZONTAL PRESENTATION BITS BOTH SET INVALID FONT NUMBERINVALID VERTICAL PRESENTATION SENT TO WRITE_PRESENTATIONINVALID HORIZONTAL PRESENTATION SENT TO WRITE_PRESENTATION apply reflection about X before rotation, no reflection, absolute magnification, relative magnification, absolute angle relative angleWARNING: %s *** REPEATED WARNING MESSAGES SUPPRESSEDUNABLE TO ALLOCATE MEMORY FOR COORDINATES. (%8d, %8d) = (%9.3f, %9.3f) um THERE SHOULD BE ONLY ONE COORDINATE FOR SREF OR TEXT.THERE SHOULD BE THREE COORDINATES FOR AN AREF.NUMBER OF COLUMNS IS <= 0 Column pitch (points): %d, (%d) DIAGONAL ARRAY - PROBABLY A MISTAKENUMBER OF ROWS IS <= 0 Row pitch (points): (%d), %d degenerate vertexINVALID ITEM TYPE FOUND IN XY FUNCTION.DEGENERATE POLYGON, PATH, OR BOX. THERE IS ONLY ONE VERTEX.WAY TOO MANY VERTICIES %d %d NEGATIVE OR ZERO NUMBER OF COLUMNSNEGATIVE OR ZERO NUMBER OF ROWSNUMBER OF COLUMNS IS INVALIDNUMBER OF ROWS IS INVALIDINVALID DATABASE USER UNIT, < 0INVALID DATABASE UNIT, < 0 Database units in user units: %f User units per micron: %1.0f Database units in microns: %f %g GDS library %s created with deprecated function. Please use gds_create_lib_correctly() when the number of database units per user unit is not 1000.?pC@9B.@?A`@.Ao:ư>N+L8intiiii3b ( 0 8 @ H P X  k`  qh  bp bt px F T w  &{ / 0 1 2 3- 5b 7 kkqb:  3   fbKtm8pbbbb bbbbb i(0x!bn"b$bdt%b &bmag'()b*b +b$,b(-b,.b0/b40b81b<2b@3bD4bH5bL6bPx7Xy8`9h:pp>@ABg  h? ?6gtwo h? ciX ʺ|fdbe?m|ibHbblbitbhbdb`bLiXiP@ ? $:[fd$be,?Km-|@i0bPb1blbit2bh3bd4b`5bT8\9X:Laxa?\zcblbd   rfdrb}xr}byMzMle64{MXbit|}b`ibh\Tdby?}|} M 7?fdb\bXbTiblb fdb\FfsiFdFbwh# fdbLbH@lib# c) cc# b`# PXibl# - fdbLnow h `[^[\day[Z[X[V[T[R[PJ" fdJbLJbHK@LcM) ccN# ciOPbSb iUb\X# Y \ : fdblnow  [ [ day[ [ [ [ [ [ ?Y fdb\bXbTibl[ fdbl[ [ Rfdblbhbdib [jfdbl[ [ tfdb\bXbThogfdb\sP[jlen[ni[l[hpadb ps 9-fd9b\:bX;bTc<) Hcc=# @>bPA# B ZfdZblsZ`][ len^[ i^[ _[ padab psb fdb\bXciPbL str nb mb ib  Pfdbls`[ [ i[ len[ padb ps *zfdb\bXbTHfz@c) cib ib b b  #    ,Qfd,bls,`/[ len0[ i0[ 1[ pad2b ps3 RvfdRb\RbXciRPRbLU iVbld[&fddblg[ h[ vvfdvb\vbXcivPvbLy izbl~fdbl[ [ fdblbhci`b\num[  fdbldt[h[ [ vcfdb\bXciPbLibl [fdbl[ [ v8fdb\bXciPbLibl [fdbl[ [  fdb\bXciPbLibl $[ffd$bl'[ ([ 7vfd7b\7bXci7P7bLi9bl: E[;fdEblH[ I[ X?fdXb\XbXXbTiZbla[fdabld[ e[ tqfdtbltbhcit`tb\numv[ w fdbl[h[ [ ^fdblbhci`b\numb  fdblbh[ [ Kfdblbhci`b\num[  fdbldt[h[ [ 7fdblbhci`b\num[  fdbldt[h![ "[ 9fd9bl9bh9bdnum;[ MgfdMblM[hP[ Q[ gfdgblgbhcig`gb\numi[ j S fdblpt[h[ [ 4!fdblbhci`b\num[ vp[ hp[ [  B!fdblbhvpbdhpb`F F numF y"fdblbhci`b\num[ [ [ [  W#fdWblXbhYbdZb`]F ^F _F  nagrYR#rhr`~>$fd~b\~bX~Tci~H~bPib iib numb xb yb pxb pyb b b b b   J%fdblx`yXnbh[ [ ib xxb yyb  (&fdblbhci`b\b b  /)&fd/bl/bh/bd2F 3F 4F 5F Pc'fdPbLPc'@Pc'Pc'PbHZX[h\`y'fdyb\yXyT|[n}[lP(fdb\bXciPbLh w(fdblmaghb b 4)fdb\bXciPbLah w)fdblhb b *fdb\PXlhn*fdb\PXL l  +fd blstr `x bhy b\ bX bTxx + yy +  b+ !q"? "[ % : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I : ;  : ; I8 .?: ; '@B: ; I4: ; I: ; I.?: ; '@B.?: ; 'I@B4: ; I4: ; I.?: ;'I@B: ;I4: ;I4: ;I.?: ;'@B4: ;I: ;I!I/ .?: ;'@B!4: ; I?<"4: ; I?,L  /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/includelibgds.cstddef.htypes.hlibio.hstdio.htime.hlibgds.h !44L-%#t Zvug=uJJcJfh:L ZvZuu7JcJ fH>vtX0<i> .hv4f-2hPJb/J f .t4gt-gYgZ.t׃t-נt-4ػgYgYY׻YYYYZYYYYYZ. tL-!,-K!zZK==============>4t4=>4#4=>4>0fYL4 Y=+x+YgY .-fz /==1==6 X-u>#=#f>vz 0#w==1==. -uf@.=fؠ-)-$-(fgz/==1==5Ot4=>4Ot4#=>4M=f##=5##==Z4Mt3=>4Mt4=>4Mt4=>5Mt4=>5t4=>5M=f##=4-==Z5M=fhff4ۑ==Z5M=f##=4##==Z5M=f##=4##==Z5=f##4##==Z4M=f=fff#f#=4-==Z5R=f''fffffffff==> .Bfhu#fhu#fhu#ʟ==> . J=f"'&ؼffټffټfff .C==>4u4h""-==fG[-/v"-/v-00gs=s> >-00gs=s> ?L##pJ-<z`-=>=y< 4P==f--4f-f-===> .hh--#h4OgYgYKL4MhfK4==L4PhfL4==L . <Y6 6!size_tsizetypetm_hourcellgds_write_colrow__ssize_tgds_read_boxcols_IO_save_endcount_dacount_dptime_t_IO_write_basesigncurrent_cell_lockcount_dvtype_IO_save_baseyearmagnificationdegeneratesgds_read_datatype_chainssize_tgens_cur_columngds_swap4bytesabs_anglegds_read_xygds_read_headergds_write_widthlong inttm_isdstgds_read_boxtypegds_read_strans_IO_markergds_read_floatmax_forward_refsnextcellsigned char_IO_FILEgdswordlibrarydbu_umunsigned chardbu_uucell_table_sizegds_write_boxtypevaluegdsswapgds_write_headerchar_IO_lock_tgds_read_anglegds_write_stranscol_pitchfexponentrowslibnamegds_read_pathtypetm_min_IO_read_ptrgds_read_presentationPdbu_uustupid_postextgds_write_xydbu_mgds_read_widthmant_markersforward_numgds_read_textgds_write_boundarytm_sec_offsetbitmaskgds_write_presentationgds_read_pathlong unsigned intcell_numbergds_write_anglegds_read_layerlibgds.c_flags2_IO_read_basebit13bit14_unused2nrowsgds_make_next_itemgds_write_snameangle_old_offsetmantitagds_write_textrow_pitchverboselong long intwidthtm_monncolsgds_write_pathsecondminutedouble_IO_write_endgds_write_strnamefloatforward_ref_initcountgds_write_layer_IO_buf_basebit0unsigned intgds_swap2bytesgds_read_bgnstrgds_write_magfirst_cell__pad1__pad2__pad3__pad4__pad5_sbufbitmlayerforward_namenum_cellsgds_write_libname_flagsgds_read_endstr_modegds_read_boundaryhor_presentgds_celltypefontGNU C 4.8.5 20150623 (Red Hat 4.8.5-39) -mtune=generic -march=x86-64 -gtm_mdayreflectgds_write_texttypegds_write_pathtypesizelong long unsigned intgds_create_textgds_read_strnamegds_read_snamegds_create_lib_correctlygds_write_bgnstr__off_tcol_pitchygds_itemtypetm_wdaygds_read_doubletm_ydayexponentgds_write_endstr__time_t_IO_backup_base_shortbufver_presentgds_read_libname/home/rooks/c/gdsdump_distgds_read_aref_next__off64_tgds_read_stringnumbersirowsmonthgds_read_mag_IO_buf_endgds_read_bgnlibmantissaPdbu_mgds_write_datatypenametm_gmtoffgds_create_libshort intgds_write_boxgds_read_endlibnextitemsicolsgds_read_endel_vtable_offsetitemgds_bindumpfourgds_read_srefgds_read_texttypegds_read_generationsgds_read_unitshourgds_write_generationsgds_write_arefpath_endtm_zone_IO_read_endgds_write_floatabs_maggds_write_stringgds_read_colrowcurrent_itemuu_um_filenogds_write_bgnlibtokentm_yearshort unsigned intstdoutPdbu_ummessage_IO_write_ptrstransgds_write_endlibgds_write_sreftempgds_write_endeldategds_write_unitsrow_pitchxGCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-39)zRx gAC b <6AC q  \AC E AC  :AC 5 AC  AC  ?AC z  AC  @AC   `-AC (  "AC E :AC 5 ?AC z [AC V RAC M $[AC V DtAC o doAC j  -AC E# AC   AC E AC   *AC E  0AC  PvAC q p[AC V vAC q ~AC y AC  AC  vAC q 0[AC V PvAC q p[AC V AC  [AC V vAC q [AC V ?AC z 0[AC V PAC  pAC  AC  AC { AC  AC  AC  0AC  PAC  pAC  AC  AC  4AC / BAC = AC  0AC  PYAC T  p>AC E4 JAC E  AC  )AC $ AC z AC  4AC | TwAC r tAC | wAC r AC  AC | AC   0 7 I(S0eu8~@HJLNPRTVXZ\`bdh"p,x>GPX_ju 5GPYa h"s$~(028@BHPRTX`b'h9pDrOxalw )2=HZcny/8BMXdoz (,048<@DHLPTXZ\%`-d5hGpRt]xizu|~   g g6,3:AHM?]bf^:u3 ?r />-k" :?+[<aRL[]tno-*"$v @%[" %v/ &~= &N r'` N(vn ([} )v )[ ) t*[ *v E+[ +? +[ :, - -! ) .9  /K /^ 0p 1 2 :3 4 5 k64 8B 9 ;! h<Y% <>1 BJ> ID N iE)_ Fn H~ H #Iw I Jw J 7K Klibgds.ctemp.5033temp.5037current_item.5041b.5087current_item.5195cell.5193current_cell.5194first_cell.5191now.5202date.5203year.5204month.5205day.5206hour.5207minute.5208second.5209count.5211token.5210count.5224token.5225i.5231count.5238token.5239pad.5254ps.5255cell.5270current_cell.5271len.5277pad.5280ps.5281i.5278count.5276token.5279current_item.5294m.5297n.5296str.5295i.5298len.5309ps.5311pad.5310i.5308count.5306token.5307current_item.5334cell.5333name.5328i.5329forward_ref_init.5330max_forward_refs.5331forward_name.5332len.5343pad.5346ps.5347i.5344count.5342token.5345current_item.5360count.5368token.5369current_item.5376count.5384token.5385current_item.5393num.5392count.5398token.5399current_item.5407count.5414token.5415current_item.5423count.5430token.5431current_item.5439count.5446token.5447current_item.5455count.5462token.5463count.5476token.5477current_item.5485num.5484count.5490token.5491current_item.5499num.5498count.5504token.5505current_item.5513num.5512count.5518token.5519current_item.5527num.5526count.5532token.5533num.5539count.5544token.5545current_item.5553num.5552count.5558token.5559current_item.5570num.5566font.5569vp.5567hp.5568num.5579count.5578token.5577current_item.5590num.5586bit0.5587bit13.5588bit14.5589strans.5599count.5597token.5598current_item.5623num.5613degenerates.5618ii.5612i.5611x.5614y.5615angle.5622count_da.5619px.5616py.5617count_dv.5620count_dp.5621count.5633token.5634i.5635xx.5636yy.5637current_item.5649ncols.5647nrows.5648sicols.5657sirows.5658count.5655token.5656current_item.5683count.5688token.5689current_item.5697count.5702token.5703xx.5726yy.5727gdsswapgdswordgds_swap4bytesgds_swap2bytesgds_make_next_itemmallocprintfstdoutfflushexitgds_read_doublereadpowgds_read_floatgds_bindumpgds_write_floatlogfloorpowfwritegds_read_headergds_write_headergds_read_bgnlibgds_write_bgnliblocaltimegds_read_bgnstrreallocgds_write_bgnstrgds_read_endlibgds_write_endlibgds_read_endstrgds_write_endstrgds_read_libnamegds_write_libnamestrlengds_read_strnamegds_write_strnamegds_read_stringstrcpygds_write_stringgds_read_snamestrcmpputsgds_write_snamegds_read_boundarygds_write_boundarygds_read_boxgds_write_boxgds_read_boxtypegds_write_boxtypegds_read_pathgds_write_pathgds_read_srefgds_write_srefgds_read_arefgds_write_arefgds_read_textgds_write_textgds_read_endelgds_write_endelgds_read_layergds_write_layergds_read_widthputchargds_write_widthgds_read_datatypegds_write_datatypegds_read_texttypegds_write_texttypegds_read_generationsgds_write_generationsgds_read_pathtypegds_write_pathtypegds_read_presentationgds_write_presentationgds_read_stransgds_write_stransnaggds_read_xygds_write_xygds_read_colrowgds_write_colrowgds_read_unitsgds_write_unitsgds_read_maggds_write_maggds_read_anglegds_write_anglegds_create_libgds_create_lib_correctlygds_create_text.>_x   ,:HVdr  -r A{  u  + -     /    8  7 <1 a   M   # V ]    h      )_ f     O]my.E[r #9Oe$, ,,) . 8?GQX,c,j,$$$ 8  ,!,,3@F P_$m,{4<44<<D<F <H<&J-<7L><GNL HQV J[` Lej Not Py~ RN T TP V V H J L  N!. P5B RIV H]j Jq~ L N P R R X - X4;TB ZGT Z[tT XXXZ ` `\ b b+In ex``d`d/dOddl't.t>HtU Z dks}ttt ltl t5<|C|U[f|p|w|||%,:Q[bi|u|    |  ! +2:DPV\boy   $  8   -7? K P _Zaqw  p $/AGR\cov|&=GNUakp u      ( / 7 A R Y g s x _              !!!+!2!9!C! H! R!Y!a!k!!!!!!!!!!! (! !" """5"?"[" ``" j"q"y"""" """ """""## $# 6#<#G# Q# X# d#k#q#|######## ## #$ $$2$<$C$J$ V$ `$e$ "j$w$ "~$$$ $$$ $$$ $$$$$ %% (%&%$3%$N%*U% 0Z%g% 0n%u%,|% 2%% 2%%4% %% 8%%4&4& "& $,&3&;&B&:I& @N&[& @b&i&<p& Bu&& B&&D& P&& P&&L& &&L& ' $ '''!'L,' 1' $;'B'J'Q'DX'Le'D' ' $'''' ,' $''''L' R'' R'(N ( T(( T&(2(H(m(T( (( X((T(T(Z( `(( `((\) b)) b)>)dT) [)o) ht){)d)d)j) p)) p))l) r)) r)*t%* ,*@* xE*L*tY*tg*t*z* ** **|* ** **+ ++ $+++8+S+Z+ _+l+ s+z++ ++ ++ +++ +,  ,,,  ,-, 4,Y,f, m,r, w,,, ,,, ;, $,,,,, Q, $,,,,--B- ^G- Q-X-`-j-q-x- }-- --- -- ---- . .. .).0. s:.@.O. Y.i.p.v.... .. ... .. ../,/9/ @/E/ J/W/_/ i/p/z/ / $///// / $////// 0 0 $0!0)080 =0 $G0N0V0]0d0 i0v0 }000 00 00000 01  111 (1/191 >1 $H1O1W1^1i1 n1 $x1111111 1 $1111 1 $2 222#2 (252 <2C2J2 O2\2 c2o222 22 222 222 2 $223 33 3 $%3,343U3 5Z3 $d3k3s33 Q3 $33333 33 333 33 33454B4 I4N4 S4`4h4 cr4y44 x444 444 444 5 5 5 $5#5+5;5B5O5[5b5 g5 $q5x555555 5 555556 66 6#6*6 /6<6 C6O6e666 66 666 c66667747A7I7 (S7Z7j7 1t7}77 A777 T77 h777 77 8 88(8 -8:8 ?8F8M8Z8`8 j8q8~8888 8 $8888  9 $ 99939 `89 $B9I9Q9o9t9 y999 99 999 99 99 9: : :: :+: 3: c=:D: O:V: v:}: :::: ::: ::;; ;&;:; D;K;Y;i;  s;z;; ;;;;;;<  << <$<+< 0<=< D<I< N<[< b<< -<< @<<<$= =$=&=,=$==H=X=f= pk= u=|====$=(=,= 8== 8== <== <==8>4#>8)>40> :>A>O>\>$f> k> u>|>>>>>4>>8>>$>  > >>>? ?0??4'?1?8>?0N?Z? 7 _? i?p?x????<??4????8??? @@ X @$@4@ D9@  >@I@0Y@e@  j@ t@{@@@@@<@@8@@@@4@@ AAA  (A/A?A DDA  IAUAcApAAA,A4AA,A8A0A4ADA8AHA4ADA8BH B,B,B(#B((B P-B  2B:B4@BDFB8LBHUB  ZB dBkBsB}BB,B,B0B0B0B$BB$B(BB TB 8 BBC t $C .C5C=CGCWCT\C XaCnC XuC|CTC ZCC ZCCTCXC\CXC`C `CC dC D `DD d%D+DX4DX:DXhDduD p|DD pDD tDD tDDpDlD  DDlD  D DDDDEp E  E E#E+E5EI CIPI WI]IfI kIxI IIIII  IIJ-J6J ;JHJ OJUJ^J cJpJ wJJJ  JJ H JJ J JKK1K\K wKKKKKKKL$L=LFLOL\L aL hLyLL   g) . ; qB I P W ^ .l Iq |   ' . 2      p   " / < 0I JV c p r }    u @  < / 6 = D  K & 4 7; |G S R_     F i \ 5   ! Z( 4 @ L RX d  q }  ]    6  ) E v  b 4" . " :  F R J^ j T  V        ' -gR ^h n _  ? ' D5 C Q X_ m  ^  D . = L \ c &  , H lW f   )3   > ! r ) F c j /   >   0 z 7 >k z   } v   k+ : I p > $   ( 0 _   2 8; H @Q ^ Hg t J L  N } P v R V  T F . = >Z a   X Z  a  >\ > K`T abk Vv  >  z - Id^hh o  p > p x  B Oey     > _ )?Sg{ >   2GQ X}  p  >   " /8 cEN [d _ q " "  $3HR Y$~  > _ ( "@% 0 2' 8.%S p > _ 8 8& @ B [&( E >aPj _ wH r' R T cN( 1 >M _ ZXd gk( ` b )  >" _ /h9 @)e rp{ r )  > _ x t*: GP ]g n*  > _  %E+ % 2< fC+h w > +   :, 6 >R[ _ hr y- ]   - # >?H _ U_ 9f. T    /  >,5 _ BL S/   0  >! _ .8 1?1r   2  > :3, ; HQ ^h o4  > _  D5' 4 = J T [ k6  >     ! _ !! L !8E! p! }!! !!! l!9! ! >"!" ."7" D"M" Z"c" _ p"z" Q";" )" " 6 " "" "" ##h<4# C# S# Z#<# # # >#4#0#($8$<-$HB$LK$ X$,a$ Wn$Dw$ $P$ `$T$ $@$ _ $ $ $B#% 0%X9% F%ZZ%\o%`%d% O %ID% % >% a%p%  &t& _ &h)& 0&iEU& ad& s& &|& &~& _&x& &z& &F& ' ' '' >6' l E' T' j'  q'H' ' ' ' ' 'H' ( >+( :( _ G(Q( X(#I( (( (( B(I( ) >) _ +)5) <)Ja) p) })) )) )J) {) ) ) *  *7K2* {A* P* _* o* sv*K* ]* W*++ (+ 4+=+ I+  @g`?^3 $r D/d>ka(Hh4"T$t@%%&&r'N(4(T)t))t**E++4+T:,t--. //041T2t:345k6894;Th<t<BIDiEFH8HX#IxIJJ7KK.symtab.strtab.shstrtab.rela.text.data.bss.rodata.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @L@&L,L 1L >YR+9@T;JJ]]0X@p0 q l@ }0- 0B.pp @H Ⱦ `gdsdump_dist/libgds.a0000664000175000017500000032161213750311076014240 0ustar rooksrooks! / 1604424254 0 0 0 1466 ` Igdsswapgdswordgds_swap4bytesgds_swap2bytesgds_make_next_itemgds_read_doublegds_read_floatgds_bindumpgds_write_floatgds_read_headergds_write_headergds_read_bgnlibgds_write_bgnlibgds_read_bgnstrgds_write_bgnstrgds_read_endlibgds_write_endlibgds_read_endstrgds_write_endstrgds_read_libnamegds_write_libnamegds_read_strnamegds_write_strnamegds_read_stringgds_write_stringgds_read_snamegds_write_snamegds_read_boundarygds_write_boundarygds_read_boxgds_write_boxgds_read_boxtypegds_write_boxtypegds_read_pathgds_write_pathgds_read_srefgds_write_srefgds_read_arefgds_write_arefgds_read_textgds_write_textgds_read_endelgds_write_endelgds_read_layergds_write_layergds_read_widthgds_write_widthgds_read_datatypegds_write_datatypegds_read_texttypegds_write_texttypegds_read_generationsgds_write_generationsgds_read_pathtypegds_write_pathtypegds_read_presentationgds_write_presentationgds_read_stransgds_write_stransnaggds_read_xygds_write_xygds_read_colrowgds_write_colrowgds_read_unitsgds_write_unitsgds_read_maggds_write_maggds_read_anglegds_write_anglegds_create_libgds_create_lib_correctlygds_create_textlibgds.o/ 1604424254 1000 1000 100664 105808 ` ELF>@@UHH}HEHEPHEHEHPHE@HEHPHE@HEHP]UHH}HEHEPHEHEHP]UHSHH}HEHHHxHCpHH@pHu-HHHH@pHHH@PH@H@H@ H@H@@HBHBH@H@ H@$H@,H@(H@0H@4H@8H@<HH@pHHEHH[]UHH`}HEHHEHMEHΉEy EEE@EEQEE7EHD#E‹EЉE؃}tHEHE}H}m}yÃE}~H*E ^E*EYEE*EH0@f(HEEYEEHEHEEUHHP}HMۋE̺HΉEۄy EEE@EHMЋE̺HΉEEEeEEKEHD#E‹EЉE*E^EMXEEXE}m}yE}~*EYEZU*EH0@f(HEEYEffZ]܋E܉EEUHH EEKE#E;EuHHƸHHHHHf}}UHH0EEHƄE}~W.zW.~W.v EETZ ^ X,E}}-HH*EEE@EE쉅^(EEEEE*H@f(HMZYH,‹EHuZEHHxH*!HHH H*f(XE*H@f(H^f(\f(ffZuE}8EHxH*HHH H*X YȋEHxH*HHH H*XX,E*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE*EHHxH*!HHH H*f(X+E*H@f(HYX,E}QE *EHHxH*!HHH H*f(X'+E*H@f(HYX,E}'QE(*EHHxH*!HHH H*f(X/+E*H@f(HYX,E}/QE0*EHHxH*!HHH H*f(X7+E*H@f(HYX,E}7QE3EHHHΉE}~UHH }uUEEEE;EUHH }fEHEHHMEHΉHEH}-HHfEHEHHMEHΉfEXHEHHMEHΉUHHP}܉uHUHMLELMEEܺEE؃;EݿHEHEHEHEH@H}u-HH HEHEH}u-HHHEHUHHEHUHHEHUHUHH0}ܿHE8HEHEHHEHHEfEHEHHMEܺHΉfEHEHHMEܺHΉHE@flfEHEHHMEܺHΉHE@fEHEHHMEܺHΉHE@ fEHEHHMEܺHΉHE@fEHEHHMEܺHΉHE@fEHEHHMEܺHΉHEfEHEHHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉHMEܺHΉUHSHH}܉uHUHMLELMHEHHHEHHHEHHEEܺEE؃;E݋tHEHHCHH@Hu-HHHH@HHH@HEȋPHEȉHEȋHEЋ9~tHEЋHEЉHEЋHHHHHHHHu-HHHxHCHH@HHHBHH@pHHEHHHEHHHEHHH[]UHH}H8HHHHHHH@flfH@fH@ fH@fH@fHffEfEEEEEEEEEEEEEUHH }uUEEEE;EUHH}fEfEUHH}uU#EEP9UHH}fEfEUHH }uUEHHHEEHcHMEHΉEHHPHEH}tHEHƿHEUHH }HuHEHfEEft EfEHEHHtZfE+HHEHHMHEHEfEEU9|HHUHH=fE+HHEHHMHEHEfEEf;E|EfEHEHHMEHΉfEHEHHMEHΉHUH EHΉUHSH(}uUHMLEDMHEHHHEHHHEHHHHHHu-HHEHcHHEHΉHHUHcHH}tHHHƿHUHcHHHHHHEHHHEHH([]UHH}HuHEHfftfHHHtf=HHHHHEHf҃9|HHHH[f=HHHHHEHff9|fEfEHH EHΉUHSH(}uHUMHEHHHt-HHE=~ HcЋE9HHHH#E)‰ЍP9Hƀ}tHUPHHHHChHH@hHHHEHH([]UHH}HuHEHff=~DHHfHHHftfHHHtf=HHHHHEHf҃9|HHHH[f=HHHHHEHff9|fEfEHH EHΉUHSH8}uUHMLELMHEHHHEHH}~-HHEHcЋEEHƀ}tHHcHHHHHƿt ;E|;E}t H@ujHHHHHHu-HHHEHEHHHE؋PHE؉HE؋9|pHHHHHHHHu-HHHHE؋HHHHHHE؋HHHHHu-HHHHE؋HHHHH-}tƿHPHHEHHHEHH8[]UHH}HuHEHfftfHHHtf=HHHHHEHf҃9|HHHH[f=HHHHHEHff9|fEfEHH EHΉUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEfEUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}HHfEf-EUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉P HHEHUHH}fEEfy#HHEf=~#HHfEf.EHEHHMEHΉUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEf EUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEf EUHH0}uHUMHEHHEEEE;EݿHH@HHEHUHH}fEf EUHH0}uHUMHEHHEEEE;EݿHHHEHUHH}fEf EUHH }uUEEEE;EUHH}fEfEUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉PHHEHUHH}fEEfx Ef=~-HHfEf EHEHHMEHΉUHH }uHUMHEHHE}tƿy}t}t HPPHHEHUHH}ufEfEHEHHMEHΉUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉P HHEHUHH}fEEfy#HHEf=~#HHfEfEHEHHMEHΉUHH }uHUMHEHHE}tƿfy#HHf=~#HHH҉P HHEHUHH}fEEfy#HHEf=~#HHfEfEHEHHMEHΉUHH}uUE}tƿfy#HHfc~#HHUHH}fEEfy#HHEfc~#HHfEf"EHEHHMEHΉUHH }uHUMHEHHE}tƿfu}fu}t|kfu}tXGfu}t4#HH}t f fy,fHHH҉P@HHEHUHH}fEEfx Ef~-HHfEf!EHEHHMEHΉUHH }uHUMHEHHE}tƿf‰ffƒ)‰ff‰ffƒ)‰fffЃ)f}tƿfu}tn]fu}tJ9fu}t&}tfu}tZNfu}t;/fu}t}t H҉PLHBH҉PDH҉PHHHEHUHH}uUM}x}~*EHH}x}~*EHH}x}~*EHHEUЍEffEfEEUHH }uHUMHEHHE}tƿfff‰ffƒ)‰ff‰ffƒ)‰fH@ft%}tH@$#}tH@$ft%}tH@ #}tH@ ft%}tH@#}tH@}t HHEHUHH}uUME‹EЍEffEfEEUHHH}HuHEPHEHE HEHƿHE u UHSH(}uEHU؉MHEHHEPHHHHHHCXHHHHHC`HH@XHtHH@`Hu-HHEE}tG*YEZȋ*YEZƿHtHuct-HHHH@XHH@`Ht-HHu+HH@XHH@`EH@(-HHH@H HH@X)HX(A0H HH@`)HX(A8}t%HP8H@0ƿH@8N:+H@,-HHH@H HH@`)HX,A4H HH@X)HX,A<}t%HP4H@<ƿH@<C/HtHtHHH@XHcHH‹HH@`HcHH‹ui9u?9u//-HH9H )щʉPH@HHEHH([]UHH }HuHUM} ~-HHEfEfEHHHEHЋHHHEHЋEE;EhUHH }uHUMHEHHEE}tƿ-HH-HHHP(HP,HHEHUHH}uU}x }~-HH}x }~-HHEfEffEfEEEUHHP}HuHUHMDE؋E܉EHEHEE܉EHEHEfWf.Er-HHfWf.Er-HHMYM^f(E}tXHEHEEHEHEEMYMYffZHEEfZHEEfZHEUHH }EMfEHEHHMEHΉfEHEHHMEHΉEUEEEUEEUHH0}uHUMHEHHEEHEHE}tHEHEEпHEfZ@HHEHUHH}E EEEUEEUHH0}uHUMHEHHEEHEHE}tHEHEEпHEfZ@HHEHUHH}E EEEUEEUHH0}HuEHEHƿEEZ YffZUEEHUEH։UEMUM܉EE܉UHH0}HuEMEZ YffZUEEHUEH։UE܋MUM؉EE؉UHH }HuUMDEDMEEЋE։EEUE։EEEEHUEH։EUNABLE TO ALLOCATE NEXT ITEM ERROR: %s 10%s A NUMBER IS TOO SMALL TO ENCODE AS A GDS FLOATUNABLE TO WRITE TO OUTPUT FILE - CHECK OPEN() CALLUNABLE TO ALLOCATE LIBRARY POINTER. THAT'S STRANGE.UNABLE TO ALLOCATE MEMORY FOR CELL TABLE.UNABLE TO ALLOCATE MEMORY FOR THE NEXT CELL.UNABLE TO REALLOCATE CELL TABLE. SORRY DUDE. library "%s" UNABLE TO ALLOCATE MEMORY FOR NEXT CELL NAME cell "%s" SYNTAX ERROR: STRING APPEARS OUTSIDE OF TEXT OBJECTSTRING HAS MORE THAN 512 CHARACTERS WARNING: %s [%s] %s ATTEMPT TO WRITE A STRING LONGER THAN 512 CHARACTERS. TRUNCATING.CELL NAME IS WAY TOO LONG forward referenceUNABLE TO ALLOCATE ARRAY OF FORWARD REFERENCE NAMESUNABLE TO REALLOCATE ARRAY OF FORWARD REFERENCE NAMESUNABLE TO ALLOCATE STRING FOR FORWARD NAME this is cell [%d] BOXES ARE STUPID. USE BOUNDARIES INSTEAD. %d NEGATIVE BOX TYPE NUMBERBOX TYPE > 255 NEGATIVE BOXTYPE NUMBERBOXTYPE > 255 NEGATIVE LAYER NUMBERLAYER > 255 INVALID LAYER NUMBER %d does not scaleNEGATIVE DATATYPE NUMBERDATATYPE > 255 NEGATIVE TEXT TYPE NUMBERTEXT TYPE > 255 NEGATIVE NUMBER OF GENERATIONS TO RETAINNUMBER OF GENERATIONS > 99 NEGATIVE GENERATIONS NUMBERGENERATIONS > 99 [0x%x] flush square ends round ends extended square ends variable square end extensions ARE NOT SUPPORTED HEREUNKNOWN PATH END TYPEINVALID PATH TYPEINVALID PATH TYPE NUMBERfont %d vertical: top vertical: middle vertical: bottom ERROR: VERTICAL PRESENTATION BITS BOTH SET horizontal: left horizontal: center horizontal: right ERROR: HORIZONTAL PRESENTATION BITS BOTH SET INVALID FONT NUMBERINVALID VERTICAL PRESENTATION SENT TO WRITE_PRESENTATIONINVALID HORIZONTAL PRESENTATION SENT TO WRITE_PRESENTATION apply reflection about X before rotation, no reflection, absolute magnification, relative magnification, absolute angle relative angleWARNING: %s *** REPEATED WARNING MESSAGES SUPPRESSEDUNABLE TO ALLOCATE MEMORY FOR COORDINATES. (%8d, %8d) = (%9.3f, %9.3f) um THERE SHOULD BE ONLY ONE COORDINATE FOR SREF OR TEXT.THERE SHOULD BE THREE COORDINATES FOR AN AREF.NUMBER OF COLUMNS IS <= 0 Column pitch (points): %d, (%d) DIAGONAL ARRAY - PROBABLY A MISTAKENUMBER OF ROWS IS <= 0 Row pitch (points): (%d), %d degenerate vertexINVALID ITEM TYPE FOUND IN XY FUNCTION.DEGENERATE POLYGON, PATH, OR BOX. THERE IS ONLY ONE VERTEX.WAY TOO MANY VERTICIES %d %d NEGATIVE OR ZERO NUMBER OF COLUMNSNEGATIVE OR ZERO NUMBER OF ROWSNUMBER OF COLUMNS IS INVALIDNUMBER OF ROWS IS INVALIDINVALID DATABASE USER UNIT, < 0INVALID DATABASE UNIT, < 0 Database units in user units: %f User units per micron: %1.0f Database units in microns: %f %g GDS library %s created with deprecated function. Please use gds_create_lib_correctly() when the number of database units per user unit is not 1000.?pC@9B.@?A`@.Ao:ư>N+L8intiiii3b ( 0 8 @ H P X  k`  qh  bp bt px F T w  &{ / 0 1 2 3- 5b 7 kkqb:  3   fbKtm8pbbbb bbbbb i(0x!bn"b$bdt%b &bmag'()b*b +b$,b(-b,.b0/b40b81b<2b@3bD4bH5bL6bPx7Xy8`9h:pp>@ABg  h? ?6gtwo h? ciX ʺ|fdbe?m|ibHbblbitbhbdb`bLiXiP@ ? $:[fd$be,?Km-|@i0bPb1blbit2bh3bd4b`5bT8\9X:Laxa?\zcblbd   rfdrb}xr}byMzMle64{MXbit|}b`ibh\Tdby?}|} M 7?fdb\bXbTiblb fdb\FfsiFdFbwh# fdbLbH@lib# c) cc# b`# PXibl# - fdbLnow h `[^[\day[Z[X[V[T[R[PJ" fdJbLJbHK@LcM) ccN# ciOPbSb iUb\X# Y \ : fdblnow  [ [ day[ [ [ [ [ [ ?Y fdb\bXbTibl[ fdbl[ [ Rfdblbhbdib [jfdbl[ [ tfdb\bXbThogfdb\sP[jlen[ni[l[hpadb ps 9-fd9b\:bX;bTc<) Hcc=# @>bPA# B ZfdZblsZ`][ len^[ i^[ _[ padab psb fdb\bXciPbL str nb mb ib  Pfdbls`[ [ i[ len[ padb ps *zfdb\bXbTHfz@c) cib ib b b  #    ,Qfd,bls,`/[ len0[ i0[ 1[ pad2b ps3 RvfdRb\RbXciRPRbLU iVbld[&fddblg[ h[ vvfdvb\vbXcivPvbLy izbl~fdbl[ [ fdblbhci`b\num[  fdbldt[h[ [ vcfdb\bXciPbLibl [fdbl[ [ v8fdb\bXciPbLibl [fdbl[ [  fdb\bXciPbLibl $[ffd$bl'[ ([ 7vfd7b\7bXci7P7bLi9bl: E[;fdEblH[ I[ X?fdXb\XbXXbTiZbla[fdabld[ e[ tqfdtbltbhcit`tb\numv[ w fdbl[h[ [ ^fdblbhci`b\numb  fdblbh[ [ Kfdblbhci`b\num[  fdbldt[h[ [ 7fdblbhci`b\num[  fdbldt[h![ "[ 9fd9bl9bh9bdnum;[ MgfdMblM[hP[ Q[ gfdgblgbhcig`gb\numi[ j S fdblpt[h[ [ 4!fdblbhci`b\num[ vp[ hp[ [  B!fdblbhvpbdhpb`F F numF y"fdblbhci`b\num[ [ [ [  W#fdWblXbhYbdZb`]F ^F _F  nagrYR#rhr`~>$fd~b\~bX~Tci~H~bPib iib numb xb yb pxb pyb b b b b   J%fdblx`yXnbh[ [ ib xxb yyb  (&fdblbhci`b\b b  /)&fd/bl/bh/bd2F 3F 4F 5F Pc'fdPbLPc'@Pc'Pc'PbHZX[h\`y'fdyb\yXyT|[n}[lP(fdb\bXciPbLh w(fdblmaghb b 4)fdb\bXciPbLah w)fdblhb b *fdb\PXlhn*fdb\PXL l  +fd blstr `x bhy b\ bX bTxx + yy +  b+ !q"? "[ % : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I : ;  : ; I8 .?: ; '@B: ; I4: ; I: ; I.?: ; '@B.?: ; 'I@B4: ; I4: ; I.?: ;'I@B: ;I4: ;I4: ;I.?: ;'@B4: ;I: ;I!I/ .?: ;'@B!4: ; I?<"4: ; I?,L  /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/includelibgds.cstddef.htypes.hlibio.hstdio.htime.hlibgds.h !44L-%#t Zvug=uJJcJfh:L ZvZuu7JcJ fH>vtX0<i> .hv4f-2hPJb/J f .t4gt-gYgZ.t׃t-נt-4ػgYgYY׻YYYYZYYYYYZ. tL-!,-K!zZK==============>4t4=>4#4=>4>0fYL4 Y=+x+YgY .-fz /==1==6 X-u>#=#f>vz 0#w==1==. -uf@.=fؠ-)-$-(fgz/==1==5Ot4=>4Ot4#=>4M=f##=5##==Z4Mt3=>4Mt4=>4Mt4=>5Mt4=>5t4=>5M=f##=4-==Z5M=fhff4ۑ==Z5M=f##=4##==Z5M=f##=4##==Z5=f##4##==Z4M=f=fff#f#=4-==Z5R=f''fffffffff==> .Bfhu#fhu#fhu#ʟ==> . J=f"'&ؼffټffټfff .C==>4u4h""-==fG[-/v"-/v-00gs=s> >-00gs=s> ?L##pJ-<z`-=>=y< 4P==f--4f-f-===> .hh--#h4OgYgYKL4MhfK4==L4PhfL4==L . <Y6 6!size_tsizetypetm_hourcellgds_write_colrow__ssize_tgds_read_boxcols_IO_save_endcount_dacount_dptime_t_IO_write_basesigncurrent_cell_lockcount_dvtype_IO_save_baseyearmagnificationdegeneratesgds_read_datatype_chainssize_tgens_cur_columngds_swap4bytesabs_anglegds_read_xygds_read_headergds_write_widthlong inttm_isdstgds_read_boxtypegds_read_strans_IO_markergds_read_floatmax_forward_refsnextcellsigned char_IO_FILEgdswordlibrarydbu_umunsigned chardbu_uucell_table_sizegds_write_boxtypevaluegdsswapgds_write_headerchar_IO_lock_tgds_read_anglegds_write_stranscol_pitchfexponentrowslibnamegds_read_pathtypetm_min_IO_read_ptrgds_read_presentationPdbu_uustupid_postextgds_write_xydbu_mgds_read_widthmant_markersforward_numgds_read_textgds_write_boundarytm_sec_offsetbitmaskgds_write_presentationgds_read_pathlong unsigned intcell_numbergds_write_anglegds_read_layerlibgds.c_flags2_IO_read_basebit13bit14_unused2nrowsgds_make_next_itemgds_write_snameangle_old_offsetmantitagds_write_textrow_pitchverboselong long intwidthtm_monncolsgds_write_pathsecondminutedouble_IO_write_endgds_write_strnamefloatforward_ref_initcountgds_write_layer_IO_buf_basebit0unsigned intgds_swap2bytesgds_read_bgnstrgds_write_magfirst_cell__pad1__pad2__pad3__pad4__pad5_sbufbitmlayerforward_namenum_cellsgds_write_libname_flagsgds_read_endstr_modegds_read_boundaryhor_presentgds_celltypefontGNU C 4.8.5 20150623 (Red Hat 4.8.5-39) -mtune=generic -march=x86-64 -gtm_mdayreflectgds_write_texttypegds_write_pathtypesizelong long unsigned intgds_create_textgds_read_strnamegds_read_snamegds_create_lib_correctlygds_write_bgnstr__off_tcol_pitchygds_itemtypetm_wdaygds_read_doubletm_ydayexponentgds_write_endstr__time_t_IO_backup_base_shortbufver_presentgds_read_libname/home/rooks/c/gdsdump_distgds_read_aref_next__off64_tgds_read_stringnumbersirowsmonthgds_read_mag_IO_buf_endgds_read_bgnlibmantissaPdbu_mgds_write_datatypenametm_gmtoffgds_create_libshort intgds_write_boxgds_read_endlibnextitemsicolsgds_read_endel_vtable_offsetitemgds_bindumpfourgds_read_srefgds_read_texttypegds_read_generationsgds_read_unitshourgds_write_generationsgds_write_arefpath_endtm_zone_IO_read_endgds_write_floatabs_maggds_write_stringgds_read_colrowcurrent_itemuu_um_filenogds_write_bgnlibtokentm_yearshort unsigned intstdoutPdbu_ummessage_IO_write_ptrstransgds_write_endlibgds_write_sreftempgds_write_endeldategds_write_unitsrow_pitchxGCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-39)zRx gAC b <6AC q  \AC E AC  :AC 5 AC  AC  ?AC z  AC  @AC   `-AC (  "AC E :AC 5 ?AC z [AC V RAC M $[AC V DtAC o doAC j  -AC E# AC   AC E AC   *AC E  0AC  PvAC q p[AC V vAC q ~AC y AC  AC  vAC q 0[AC V PvAC q p[AC V AC  [AC V vAC q [AC V ?AC z 0[AC V PAC  pAC  AC  AC { AC  AC  AC  0AC  PAC  pAC  AC  AC  4AC / BAC = AC  0AC  PYAC T  p>AC E4 JAC E  AC  )AC $ AC z AC  4AC | TwAC r tAC | wAC r AC  AC | AC   0 7 I(S0eu8~@HJLNPRTVXZ\`bdh"p,x>GPX_ju 5GPYa h"s$~(028@BHPRTX`b'h9pDrOxalw )2=HZcny/8BMXdoz (,048<@DHLPTXZ\%`-d5hGpRt]xizu|~   g g6,3:AHM?]bf^:u3 ?r />-k" :?+[<aRL[]tno-*"$v @%[" %v/ &~= &N r'` N(vn ([} )v )[ ) t*[ *v E+[ +? +[ :, - -! ) .9  /K /^ 0p 1 2 :3 4 5 k64 8B 9 ;! h<Y% <>1 BJ> ID N iE)_ Fn H~ H #Iw I Jw J 7K Klibgds.ctemp.5033temp.5037current_item.5041b.5087current_item.5195cell.5193current_cell.5194first_cell.5191now.5202date.5203year.5204month.5205day.5206hour.5207minute.5208second.5209count.5211token.5210count.5224token.5225i.5231count.5238token.5239pad.5254ps.5255cell.5270current_cell.5271len.5277pad.5280ps.5281i.5278count.5276token.5279current_item.5294m.5297n.5296str.5295i.5298len.5309ps.5311pad.5310i.5308count.5306token.5307current_item.5334cell.5333name.5328i.5329forward_ref_init.5330max_forward_refs.5331forward_name.5332len.5343pad.5346ps.5347i.5344count.5342token.5345current_item.5360count.5368token.5369current_item.5376count.5384token.5385current_item.5393num.5392count.5398token.5399current_item.5407count.5414token.5415current_item.5423count.5430token.5431current_item.5439count.5446token.5447current_item.5455count.5462token.5463count.5476token.5477current_item.5485num.5484count.5490token.5491current_item.5499num.5498count.5504token.5505current_item.5513num.5512count.5518token.5519current_item.5527num.5526count.5532token.5533num.5539count.5544token.5545current_item.5553num.5552count.5558token.5559current_item.5570num.5566font.5569vp.5567hp.5568num.5579count.5578token.5577current_item.5590num.5586bit0.5587bit13.5588bit14.5589strans.5599count.5597token.5598current_item.5623num.5613degenerates.5618ii.5612i.5611x.5614y.5615angle.5622count_da.5619px.5616py.5617count_dv.5620count_dp.5621count.5633token.5634i.5635xx.5636yy.5637current_item.5649ncols.5647nrows.5648sicols.5657sirows.5658count.5655token.5656current_item.5683count.5688token.5689current_item.5697count.5702token.5703xx.5726yy.5727gdsswapgdswordgds_swap4bytesgds_swap2bytesgds_make_next_itemmallocprintfstdoutfflushexitgds_read_doublereadpowgds_read_floatgds_bindumpgds_write_floatlogfloorpowfwritegds_read_headergds_write_headergds_read_bgnlibgds_write_bgnliblocaltimegds_read_bgnstrreallocgds_write_bgnstrgds_read_endlibgds_write_endlibgds_read_endstrgds_write_endstrgds_read_libnamegds_write_libnamestrlengds_read_strnamegds_write_strnamegds_read_stringstrcpygds_write_stringgds_read_snamestrcmpputsgds_write_snamegds_read_boundarygds_write_boundarygds_read_boxgds_write_boxgds_read_boxtypegds_write_boxtypegds_read_pathgds_write_pathgds_read_srefgds_write_srefgds_read_arefgds_write_arefgds_read_textgds_write_textgds_read_endelgds_write_endelgds_read_layergds_write_layergds_read_widthputchargds_write_widthgds_read_datatypegds_write_datatypegds_read_texttypegds_write_texttypegds_read_generationsgds_write_generationsgds_read_pathtypegds_write_pathtypegds_read_presentationgds_write_presentationgds_read_stransgds_write_stransnaggds_read_xygds_write_xygds_read_colrowgds_write_colrowgds_read_unitsgds_write_unitsgds_read_maggds_write_maggds_read_anglegds_write_anglegds_create_libgds_create_lib_correctlygds_create_text.>_x   ,:HVdr  -r A{  u  + -     /    8  7 <1 a   M   # V ]    h      )_ f     O]my.E[r #9Oe$, ,,) . 8?GQX,c,j,$$$ 8  ,!,,3@F P_$m,{4<44<<D<F <H<&J-<7L><GNL HQV J[` Lej Not Py~ RN T TP V V H J L  N!. P5B RIV H]j Jq~ L N P R R X - X4;TB ZGT Z[tT XXXZ ` `\ b b+In ex``d`d/dOddl't.t>HtU Z dks}ttt ltl t5<|C|U[f|p|w|||%,:Q[bi|u|    |  ! +2:DPV\boy   $  8   -7? K P _Zaqw  p $/AGR\cov|&=GNUakp u      ( / 7 A R Y g s x _              !!!+!2!9!C! H! R!Y!a!k!!!!!!!!!!! (! !" """5"?"[" ``" j"q"y"""" """ """""## $# 6#<#G# Q# X# d#k#q#|######## ## #$ $$2$<$C$J$ V$ `$e$ "j$w$ "~$$$ $$$ $$$ $$$$$ %% (%&%$3%$N%*U% 0Z%g% 0n%u%,|% 2%% 2%%4% %% 8%%4&4& "& $,&3&;&B&:I& @N&[& @b&i&<p& Bu&& B&&D& P&& P&&L& &&L& ' $ '''!'L,' 1' $;'B'J'Q'DX'Le'D' ' $'''' ,' $''''L' R'' R'(N ( T(( T&(2(H(m(T( (( X((T(T(Z( `(( `((\) b)) b)>)dT) [)o) ht){)d)d)j) p)) p))l) r)) r)*t%* ,*@* xE*L*tY*tg*t*z* ** **|* ** **+ ++ $+++8+S+Z+ _+l+ s+z++ ++ ++ +++ +,  ,,,  ,-, 4,Y,f, m,r, w,,, ,,, ;, $,,,,, Q, $,,,,--B- ^G- Q-X-`-j-q-x- }-- --- -- ---- . .. .).0. s:.@.O. Y.i.p.v.... .. ... .. ../,/9/ @/E/ J/W/_/ i/p/z/ / $///// / $////// 0 0 $0!0)080 =0 $G0N0V0]0d0 i0v0 }000 00 00000 01  111 (1/191 >1 $H1O1W1^1i1 n1 $x1111111 1 $1111 1 $2 222#2 (252 <2C2J2 O2\2 c2o222 22 222 222 2 $223 33 3 $%3,343U3 5Z3 $d3k3s33 Q3 $33333 33 333 33 33454B4 I4N4 S4`4h4 cr4y44 x444 444 444 5 5 5 $5#5+5;5B5O5[5b5 g5 $q5x555555 5 555556 66 6#6*6 /6<6 C6O6e666 66 666 c66667747A7I7 (S7Z7j7 1t7}77 A777 T77 h777 77 8 88(8 -8:8 ?8F8M8Z8`8 j8q8~8888 8 $8888  9 $ 99939 `89 $B9I9Q9o9t9 y999 99 999 99 99 9: : :: :+: 3: c=:D: O:V: v:}: :::: ::: ::;; ;&;:; D;K;Y;i;  s;z;; ;;;;;;<  << <$<+< 0<=< D<I< N<[< b<< -<< @<<<$= =$=&=,=$==H=X=f= pk= u=|====$=(=,= 8== 8== <== <==8>4#>8)>40> :>A>O>\>$f> k> u>|>>>>>4>>8>>$>  > >>>? ?0??4'?1?8>?0N?Z? 7 _? i?p?x????<??4????8??? @@ X @$@4@ D9@  >@I@0Y@e@  j@ t@{@@@@@<@@8@@@@4@@ AAA  (A/A?A DDA  IAUAcApAAA,A4AA,A8A0A4ADA8AHA4ADA8BH B,B,B(#B((B P-B  2B:B4@BDFB8LBHUB  ZB dBkBsB}BB,B,B0B0B0B$BB$B(BB TB 8 BBC t $C .C5C=CGCWCT\C XaCnC XuC|CTC ZCC ZCCTCXC\CXC`C `CC dC D `DD d%D+DX4DX:DXhDduD p|DD pDD tDD tDDpDlD  DDlD  D DDDDEp E  E E#E+E5EI CIPI WI]IfI kIxI IIIII  IIJ-J6J ;JHJ OJUJ^J cJpJ wJJJ  JJ H JJ J JKK1K\K wKKKKKKKL$L=LFLOL\L aL hLyLL   g) . ; qB I P W ^ .l Iq |   ' . 2      p   " / < 0I JV c p r }    u @  < / 6 = D  K & 4 7; |G S R_     F i \ 5   ! Z( 4 @ L RX d  q }  ]    6  ) E v  b 4" . " :  F R J^ j T  V        ' -gR ^h n _  ? ' D5 C Q X_ m  ^  D . = L \ c &  , H lW f   )3   > ! r ) F c j /   >   0 z 7 >k z   } v   k+ : I p > $   ( 0 _   2 8; H @Q ^ Hg t J L  N } P v R V  T F . = >Z a   X Z  a  >\ > K`T abk Vv  >  z - Id^hh o  p > p x  B Oey     > _ )?Sg{ >   2GQ X}  p  >   " /8 cEN [d _ q " "  $3HR Y$~  > _ ( "@% 0 2' 8.%S p > _ 8 8& @ B [&( E >aPj _ wH r' R T cN( 1 >M _ ZXd gk( ` b )  >" _ /h9 @)e rp{ r )  > _ x t*: GP ]g n*  > _  %E+ % 2< fC+h w > +   :, 6 >R[ _ hr y- ]   - # >?H _ U_ 9f. T    /  >,5 _ BL S/   0  >! _ .8 1?1r   2  > :3, ; HQ ^h o4  > _  D5' 4 = J T [ k6  >     ! _ !! L !8E! p! }!! !!! l!9! ! >"!" ."7" D"M" Z"c" _ p"z" Q";" )" " 6 " "" "" ##h<4# C# S# Z#<# # # >#4#0#($8$<-$HB$LK$ X$,a$ Wn$Dw$ $P$ `$T$ $@$ _ $ $ $B#% 0%X9% F%ZZ%\o%`%d% O %ID% % >% a%p%  &t& _ &h)& 0&iEU& ad& s& &|& &~& _&x& &z& &F& ' ' '' >6' l E' T' j'  q'H' ' ' ' ' 'H' ( >+( :( _ G(Q( X(#I( (( (( B(I( ) >) _ +)5) <)Ja) p) })) )) )J) {) ) ) *  *7K2* {A* P* _* o* sv*K* ]* W*++ (+ 4+=+ I+  @g`?^3 $r D/d>ka(Hh4"T$t@%%&&r'N(4(T)t))t**E++4+T:,t--. //041T2t:345k6894;Th<t<BIDiEFH8HX#IxIJJ7KK.symtab.strtab.shstrtab.rela.text.data.bss.rodata.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @L@&L,L 1L >YR+9@T;JJ]]0X@p0 q l@ }0- 0B.pp @H Ⱦ `gdsdump_dist/gdsdump0000775000175000017500000021207013750311076014220 0ustar rooksrooksELF>p @@x @8 @#"@@@@@88@8@@@~~ `` ``TT@T@DDPtdrr@r@llQtdRtd``/lib64/ld-linux-x86-64.so.2GNU GNUeZV8 _ԽUe)D?LfSxq _$l0+X`libm.so.6__gmon_start__libc.so.6fflushexit__isoc99_scanfputsputcharprintfreadstdoutmalloccloseopenstrcmp__libc_start_mainpowlogfloorpowfwritelocaltimereallocstrlenstrcpyGLIBC_2.2.5GLIBC_2.7 ui ii ui ``` `(`0`8`@`H`P`X` `` h` p` x` `````````Ȑ`HH HtH5 % @% h% h% h% h% h% h% h%چ hp%҆ h`%ʆ h P%† h @% h 0% h % h % h% h% h% h% h%z h%r h%j h%b h1I^HHPTI@H0@H] @fD`UH-`HHw]øHt]``UH-`HHHH?HHu]úHt]Hƿ`=х uUH~] @H=؂ tHtU`H]{sUHH|HpYEYEEEEE|DJHEPc@H H8HEHƿic@bHpH@HEE|~&HpHHlc@HuEHEHƿ|c@HEHǸEЃ}u-c@c@H[ HXEXEEEHEHA EfxfEHMEкHΉHEH E=6===Q==b=~==== = &== =cP= = <= *==^==&===N=C=a==!=!&===p=-+=.F="\c@|EȋEкΉ }c@UELEH}HMHUE$MI@c@EȋEкΉHEc@HMHUHuEAMc@EȋEкΉc@ELMLEHMHUED$H}H<$Gc@}u UEH}HMEAI:c@EȋEкΉc@EHUEй +d@EHUEйh. d@EHUEй/d@pEHUEй/od@GEHUEйn0Fd@I}u EHUEй1$d@EHUEйE4.d@EHUEй25d@EUHU}йxxA~9d@VEȋEкΉP0W@d@Z}u UELMLEHMED$H}H<$1$Gd@EHUEй|HOd@EHUEй4Yd@EHUEйL:gd@`EHUEй_od@7EHUEйp=6wd@EHUEйL |d@EHUEйLd@EHUEй*7d@EȋEкΉx5d@lEHUEй_(nd@FEHUEй-)HEƿd@BEEк`eEE;EHMEкHΉh HEHh JHCHoh H@Hu-xf@e@Hg H#iH2h H@H'h H h H@HEȋPHEȉHEȋHEЋ9~tHEЋHEЉHEЋHHHg HHHg Hg Hu-f@e@HGg HoH~g xDHCHig H@HNg HGg H:g 4HBH*g H@pH#g HEHHg HEHHf HEHHH[]UHH}Hf 8Hf Hf HuHf HHf Hf @flff Hf @ff Hf @ ff H~f @ff Hmf @fsf H\f fef H`J`L`N`P`R`f"f T`ET`fe V`EV`EH`EJ`EL`EN`yEP`eER`QEH`=EJ`)EL`EN`EP`ER`UHH }uUEE` EE;EUHH}fd X`CEX`ffwd Z`EZ`?UHH}uU>d #E`l"d d EP d 9UHH}fc ``E``fc b`oEb`UHH }uUEHH/HEEHcHMEHΉEHHPHEH}tHEHƿf@BHEUHH }HuHEHfEEf c c t EfEHEHHb b tZfE+Hb HEHHMHEHEfEEU9|Hb HUHH=fE+Hsb HEHHMHEHEfEEf;E|EfEHEHHMEHΉfEHEHHMEHΉHUH a EHΉUHSH(}uUHMLEDMHEHHa HEHHa Ha EHHHHa HHu-f@e@VH` H=EHcHEa HEHΉ]H.a HUHcHH}tHa HHƿg@H` UHcHHH` HH` HEHH` HEHH([]UHH}HuHEHuf` ` f` ` tt` fj` c` HHHX` N` tfM` =H<` =` HH/` HHEH` f` ` _ ҃9|H_ _ HHH[f_ =H_ _ HH_ HHEH_ f_ _ q_ f9|e_ fm_ `E`fH_ `E`_ HH _ EHΉUHSH(}uHUMHEHH^ H^ t-8g@e@H^ H0vE^ ^ ^ ^ =~ ^ ^ HcЋE`oi^ g^ 9pg@g@H] H`g@H]] H/` #E``  ` ] ] )‰ЍP_ 9] Hƀ`}t`g@`H] UPH] ] HHHChHc] H@h`HHK] HEHH([]UHH}HuHEHfK_ D_ f=~Dg@g@H;\ Hcf_ H_ _ HH^ f^ ^ t^ f^ ^ HHH^ ^ tf^ =H^ ^ HH^ HHEHx^ fn^ g^ K^ ҃9|HB^ 3^ HHH[f.^ =H^ ^ HH^ HHEH] f] ] ] f9|] f] ޓ`Eޓ`f] `E`k] HH h] EHΉUHSH8}uUHMLELMHEHHE] HEHH?] }~-"h@e@H Z H3yEHcЋE`EHƀ`}t`g@8] ] ] H\ ] HcHHHHHƿ`St ] ;E|~] ;E}t @h@HF\ @U] ujG] Y HHH/H0] H)] Hu-`h@e@hHX H OHEHEHH\ HE؋PHE؉HE؋X 9|pX X zX HHH\ HHH\ H\ Hu-h@e@H8X H`HG\ HE؋HHH%HH#\ HE؋HHHHHu-h@e@PHW H7H[ HE؋HHHH`H-}t[ ƿi@HsZ [ PH[ HEHHUZ HEHH8[]UHH}HuHEHfM[ F[ f8[ 2[ t#[ f[ [ HHH[ Z tfZ =HZ Z HHZ HHEHZ fZ Z Z ҃9|HZ Z HHH[f}Z =HlZ mZ HH_Z HHEHHZ f>Z 7Z  Z f9|Z fZ "`E"`fY $`E$`Y HH Y EHΉUHH0}uHUMHEHHY EE`EE;Eݿ(`zH\Y HOY HEHUHH}f:Y 0` E0`,fY 2`E2`UHH0}uHUMHEHHX EE`#EE;Eݿ8`HX HX HEHUHH} i@g@HT H/fVX @`E@`8f1X -B`EB`UHH }uHUMHEHHW EP`8P`}tW ƿJi@W fy#[i@g@H(S HPW f=~#ti@g@HR H HQW RW ҉P H=W HEHUHH}fEEfy#i@g@HR HEf=~#i@g@HjR HfV R`xER`fV .T`QET`tHEH1HMEHΉRUHH0}uHUMHEHHEV EE`pEE;EݿX`HV HU HEHUHH}fU ``E``fU b`^Eb`UHH0}uHUMHEHHU EE`EE;Eݿh`%HGU H:U HEHUHH}f%U p`Ep`fU r`Er`UHH0}uHUMHEHHT EE`EE;Eݿx`THT HyT @HkT HEHUHH}fVT `E`f1T `E`UHH0}uHUMHEHHS EE`EE;Eݿ`uHS HS HEHUHH}fS `E`'fpS `E`UHH }uUEE`0EE;EUHH}fR `jE`fR `CE`fUHH }uHUMHEHHR E``}tvR ƿJi@$]R fy#i@g@H}M H.R f=~#i@g@HMM HuHQ Q ҉PHQ HEHUHH}fEEfx Ef=~-i@e@iHL H PfQ `E` fdQ  `E`HEHHMEHΉUHH }uHUMHEHHQ E``}tP ƿi@P y}ti@a}t HP P PPHP HEHUHH}ufnP `E`fIP `E`HEH HMEHΉUHH }uHUMHEHHO E``}tO ƿJi@QO fy#j@g@1HJ H{O f=~#j@g@HzJ HHCO DO ҉P H/O HEHUHH}fEEfy#j@g@HJ HAEf=~#j@g@sHI HfN •`E•`fN ĕ`Eĕ`HEHHMEHΉUHH }uHUMHEHH7N EЕ`Е`Z}tN ƿJi@M fy#/j@g@rHH HM f=~#Ij@g@BHH HHM M ҉P HM HEHUHH}fEEfy#/j@g@HZH HEf=~#Ij@g@H-H HUfM ҕ`;Eҕ`^fL ԕ`Eԕ`7HEHHMEHΉUHH}uUE֕`N֕`}tmL ƿJi@TL fy#`j@g@ſH>G Hf%L fc~#j@g@蕿HG H6UHH}fEEfy#j@g@VHF HEfc~#j@g@)HF HʿfK ؕ`Eؕ`ӾfdK "ڕ`Eڕ`謾HEHiHMEHΉ芾UHH }uHUMHEHHK E`豾`}tJ ƿj@HJ fu}j@#J fu}t|j@k{J fu}tXk@ؽGWJ fu}t4 k@贽#Wk@g@螽HE H?}t J f I fy,fI mk@g@IHD HHI I ҉P@HI HEHUHH}fEEfx Ef~-k@e@޼HWD HŽfFI `[E`~f!I !`4E`WHEHHMEHΉ5UHH }uHUMHEHHH E`\`}tH ƿj@H f‰ffƒ)‰ffH ]H f‰ffƒ)‰fAH 6H ffЃ)f$H }tH ƿk@gG fu}tnk@F]G fu}tJk@"9G fu}t&k@}tk@~G fu}tZl@蛺N`G fu}t;l@|/AG fu}t-l@]}t Hl@KHG G ҉PLHF #BHF F ҉PDHF F ҉PHHF HEHUHH}uUM}x}~*Ewl@g@H]A H腺}x}~*El@g@讹H'A HO}x}~*El@g@xH@ HEUЍEfE `fE `E`fE `E`ӸE`迸UHH }uHUMHEHHbE E``E}t?E ƿj@}&E ffE E f‰ffƒ)‰fD D f‰ffƒ)‰fD HD @D ft%}tm@HD @$#}t;m@ʷHkD @$iD ft%}tKm@蛷H @> H > > H> H@`)H> X,A4H > > H> H@X)H> X,A<}t%Hp> P4Hf> @<ƿ8o@蒱HK> @<CD`n@/H%> tH> tH > H= H@X= HcHH‹= H= H@`= HcHH‹= = u= = = = i= = 9u?= = 9u/= v= l= c= P`go@2X= b= P= Z= /-o@e@VH7 H== < < < < < 9H< < < )щʉPH< @T`o@~H< HEHH([]UHH }HuHUM} ~-o@e@茯H7 H-sEf[< X`EX`%f6< Z`ۼEZ`< < HHHEHЋ; ; HHHEHЋ; `` d`E``艮Ed`u; ; |; ;EhUHH }uHUMHEHHZ; Ep`~p`ݻEt``t`迻}t; ; ƿo@: -p@e@խHN5 Hv輮: -8p@e@螭H5 H?腮H: : P(Hv: |: P,Hf: HEHUHH}uU}x }~-Xp@e@!H4 H­}x }~-up@e@H^4 H膭̭Ef9 Ef9 f9 |`NE|`qf9 ~`'E~`Jx` Ex`,z`Ez`UHHP}HuHUHMDE؋E܉舻EHEHEE܉qEHEHEfWf.Er-p@e@īH=3 He諬fWf.Er-p@e@茫H3 H-sMvYM^f(E}tXHEHEEp@.HEHEEq@MY8q@MYffZHEEfZHEEfZHEUHH }EMfEHEH/HMEHΉPfEHEHHMEHΉ(EUEE葼EUEE|UHH0}uHUMHEHH7 EpEHEHE}tHEHEEпgq@H6 EfZ@H6 HEHUHH}E6 ` E`C6 `E`EUEE脻UHH0}uHUMHEHH16 ExEHEHE}tHEHEEпgq@ȨH5 EfZ@H5 HEHUHH}E5 `(E`K5 `E`#EUEE茺UHH0}HuEHEHƿq@q@ȧ EEZ YffZUExE:HUEH։mUEMUM܉EE܉UHH0}HuEMEZ ~YffZUEEHUEH։UE܋MUM؉EE؉[UHH }HuUMDEDMEfEЋE։,EEUE։eEE3 E3 E``HUEH։ 255 NEGATIVE BOXTYPE NUMBERBOXTYPE > 255 NEGATIVE LAYER NUMBERLAYER > 255 INVALID LAYER NUMBER %d does not scaleNEGATIVE DATATYPE NUMBERDATATYPE > 255 NEGATIVE TEXT TYPE NUMBERTEXT TYPE > 255 NEGATIVE NUMBER OF GENERATIONS TO RETAINNUMBER OF GENERATIONS > 99 NEGATIVE GENERATIONS NUMBERGENERATIONS > 99 [0x%x] flush square ends round ends extended square ends variable square end extensions ARE NOT SUPPORTED HEREUNKNOWN PATH END TYPEINVALID PATH TYPEINVALID PATH TYPE NUMBERfont %d vertical: top vertical: middle vertical: bottom ERROR: VERTICAL PRESENTATION BITS BOTH SET horizontal: left horizontal: center horizontal: right ERROR: HORIZONTAL PRESENTATION BITS BOTH SET INVALID FONT NUMBERINVALID VERTICAL PRESENTATION SENT TO WRITE_PRESENTATIONINVALID HORIZONTAL PRESENTATION SENT TO WRITE_PRESENTATION apply reflection about X before rotation, no reflection, absolute magnification, relative magnification, absolute angle relative angleWARNING: %s *** REPEATED WARNING MESSAGES SUPPRESSEDUNABLE TO ALLOCATE MEMORY FOR COORDINATES. (%8d, %8d) = (%9.3f, %9.3f) um THERE SHOULD BE ONLY ONE COORDINATE FOR SREF OR TEXT.THERE SHOULD BE THREE COORDINATES FOR AN AREF.NUMBER OF COLUMNS IS <= 0 Column pitch (points): %d, (%d) DIAGONAL ARRAY - PROBABLY A MISTAKENUMBER OF ROWS IS <= 0 Row pitch (points): (%d), %d degenerate vertexINVALID ITEM TYPE FOUND IN XY FUNCTION.DEGENERATE POLYGON, PATH, OR BOX. THERE IS ONLY ONE VERTEX.WAY TOO MANY VERTICIES %d %d NEGATIVE OR ZERO NUMBER OF COLUMNSNEGATIVE OR ZERO NUMBER OF ROWSNUMBER OF COLUMNS IS INVALIDNUMBER OF ROWS IS INVALIDINVALID DATABASE USER UNIT, < 0INVALID DATABASE UNIT, < 0 Database units in user units: %f User units per micron: %1.0f Database units in microns: %f %g GDS library %s created with deprecated function. Please use gds_create_lib_correctly() when the number of database units per user unit is not 1000.?pC@9B.@?A`@.Ao:ư>;lLh՘H`Yx6(MHhIX 0{Pͺp( 8@`Z+(Hhh9 (_HhT7 '( H h T 0  ( H h  c 0 P +p = 5  Q0 P zRx X*zRx $FJ w?;*3$"D AC  DdeBEE E(H0H8M@l8A0A(B BBBȠgAC b 6AC q $AC E ,AC  L:AC 5 lAC  AC  ?AC z AC  AC    -AC ( $,"AC E T:AC 5 tɴ?AC z [AC V #RAC M U[AC V tAC o oAC j $43-AC E# \8AC  $|AC E AC  $*AC E  AC   4vAC q ,[AC V LvAC q l~AC y yAC  <AC  vAC q N[AC V  vAC q ,[AC V LAC  l~[AC V vAC q [AC V J?AC z i[AC V  AC  ,gAC  L AC  lAC { AC  AC  vAC  9AC   AC  ,AC  L@AC  lAC  U4AC / iBAC = AC  TAC   YAC T $, >AC E4 T!JAC E tK AC  K)AC $ TAC z AC  $AC |  wAC r 4 AC | T =wAC r t AC   AC |  zAC  0 @ @ @ ,c@``o@@@ `(@x@0 o(@oo@` @ @& @6 @F @V @f @v @ @ @ @ @ @ @ @ @ @ @& @6 @F @V @f @GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-39),] @ ,4@L0{?] @ 8<int7iiV&mbGf/ _( 0 y8 T@ H P /X  U`  [h  bp bt px IF }T a #q &{ / (0 1 2 3- `5b >7w UzUu[ab$ q   bxa!b n"b$b dt%b &b mag'"()bF*b N+b$,b(9-b,.b0/b40b8?1b<q2b@3bDU4bHt5bL6bP x7X y8`9h:p>@AtBlb] @ b~f~#s&k' ()T1*Px-by.bi/blj0bh1b2b~k3b~67``8fd:b@,=F >F~?F~BEb\FbL*GbHHbXJIbD[? `)[ `N+%{@L 8<int7iiVii&3mbGf/ _( 0 y8 T@ H P /X  k`  qh  bp bt px IF }T w # &{ / (0 1 2 3- `5b >7 kzkuqab:  3   fbKtm8pbUbbFb sb bbbb i(K 0xa!bn"b$bdt%b &bmag'"()bF*b N+b$,b(9-b,.b0/b40b8?1b<q2b@3bDU4bHt5bL6bPx7Xy8`9h:pp>@AtBk@g  h ? `? @6gtwo h ? `1?@ciX `ʺ@|fdbe?m|ibHbblbitbh,bdb`:bLiX iPa@ ? $@:[fd$be,?Km-|@i0bPb1blbit2bh,3bd4b`:5bT8\a9X:La:@xa?\zcblbd `  S r@fdrb}xr}byM,zMle64{MXbit|}:b`ibh9\aTTdby?}z|} M 7#@?fdb\ bXkbTibl$@b fdb\ FfsiFdFbwhQ$@# fdbL bH@lib# c) cc# kb`# PXibl#  %@- fdbLnow h  ` [^>[\day[Z[X[V[T[R [PJ (@" fdJbL JbHK@kLcM) ccN# ciOkPbSb Ԑ`iUb\X# (`Y 0`\  `/*@: fdblnow 8`  @` [ H`>[ J`day[ L`[ N`[ P`[ R`[ V` [ T`i,@?Y fdb\ bXkbTibl ,@[ fdbl [ X`[ Z`$-@Rfdbl bhkbdib \`U-@[jfdbl [ ``[ b`-@tfdb\ bXkbTh$.@ogfdb\sP [jlen[ni[l[hpadb d`ps h`9/@-fd9b\ :bXk;bTc<) Hcc=# @k>bPA# p`B x`Z0@fdZblsZ` ][ `len^[ `i^[ `_[ `padab `psb `'2@fdb\ bXciPkbL `str `nb `mb `ib ē` c [4@Pfdbls` [ ޓ`[ `i[ ܓ`len[ ȓ`padb ؓ`ps Г`w6@*zfdb\ bXkbTHfz@c) cikb `ib `b `b ؐ` `# ` `  D,9@Qfd,bls,` /[ "`len0[ `i0[  `1[ $`pad2b `ps3 `4Rl;@vfdRb\ RbXciRPkRbLU (`iVbld;@[&fddbl g[ 0`h[ 2` v=<@vfdvb\ vbXcivPkvbLy 8`izbl<@~fdbl [ @`[ B`1=@fdbl bhci`kb\num[ P` H`>@fdbldt[h [ R`[ T`>@vcfdb\ bXciPkbLibl X`f?@[fdbl [ ``[ b`?@v8fdb\ bXciPkbLibl h` 7@@[fdbl [ p`[ r`@@ fdb\ bXciPkbLibl x`< $A@[ffd$bl '[ `([ `7qA@vfd7b\ 7bXci7Pk7bLi9bl: `\EA@[;fdEbl H[ `I[ `XBB@?fdXb\ XbXkXbTiZbl aB@[fdabl d[ `e[ `tB@qfdtbl tbhcit`ktb\numv[ `w `C@fdbl[h [ `[ `D@^fdbl bhci`kb\numb ` `/E@fdblbh [ `[ `TE@Kfdbl bhci`kb\num[ ` `qF@fdbldt[h [ •`[ ĕ`nG@7fdbl bhci`kb\num[ Е` ȕ`NQH@fdbldt[h ![ ҕ`"[ ԕ` 9-I@fd9bl 9bhk9bdnum;[ ֕`& MI@gfdMblfM[h P[ ؕ`Q[ ڕ`CgJ@fdgbl gbhcig`kgb\numi[ `j `aJL@S fdblpt[h [ `[ `\ M@4!fdbl bhci`kb\num[ `vp[ `hp[ `t[ ` `AO@B!fdbltbhvpbdhpb`F ` F `numF `P@y"fdbl bhci`kb\num[ `[ `[ `%[ ` `(WlR@#fdWblNXbhYbdFZb` ]F `^F `_F ` nagr S@YR# rh r`z~cS@>$fd~b\ ~bX ~Tci~Hk~bPib 4`iib 0`numb (`xb 8`yb <`pxb H`pyb L`Hb ,`b D`1b P`#b T`" @`  `Y@J%fdblx`yXnbh [ X`[ Z`ib \`xxb ``yyb d`t Z@ (&fdbl bhci`kb\zb p`+b t` h`/ \@)&fd/blz/bh+/bd 2F |`3F ~`4F x`75F z` P4]@c'fdPbL Pc'@rPc'jPc'kPbH ZXs[hk\` y^@'fdyb\syXkyT |[n}[lDD_@P(fdb\ bXciPkbL:h `_@w(fdblmagh b `b `<`@4)fdb\ bXciPkbLah ``@w)fdbl"h b `b `4a@*fdb\P Xslkha@n*fdb\P XsLk lt Zb@ +fd blstr `x bhy b\ bX bTxx + `yy + ` b+ !q"? `")[ `% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ : ; I8 .?: ; 'I@B: ; I4: ; I4: ; I4: ; I4: ; I4: ; I?<4: ; I?% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I : ;  : ; I8 .?: ; '@B: ; I4: ; I: ; I.?: ; '@B.?: ; 'I@B4: ; I4: ; I.?: ;'I@B: ;I4: ;I4: ;I.?: ;'@B4: ;I: ;I!I/ .?: ;'@B!4: ; I?<"4: ; I? /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/includegdsdump.cstddef.htypes.hlibio.hlibgds.hstdio.h ] @tuuuxwuwZf-uvZgYuY.YYYuY1Yf%YuYYYYYYfYYY)YuYf0YYYYYYYYYuY//ut֡+JvZ[Kuu0AGfLh((f^(ȡ  /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/includelibgds.cstddef.htypes.hlibio.hstdio.htime.hlibgds.h @!44L-%#t Zvug=uJJcJfh:L ZvZuu7JcJ fH>vtX0<i> .hv4f-2hPJb/J f .t4gt-gYgZ.t׃t-נt-4ػgYgYY׻YYYYZYYYYYZ. tL-!,-K!zZK==============>4t4=>4#4=>4>0fYL4 Y=+x+YgY .-fz /==1==6 X-u>#=#f>vz 0#w==1==. -uf@.=fؠ-)-$-(fgz/==1==5Ot4=>4Ot4#=>4M=f##=5##==Z4Mt3=>4Mt4=>4Mt4=>5Mt4=>5t4=>5M=f##=4-==Z5M=fhff4ۑ==Z5M=f##=4##==Z5M=f##=4##==Z5=f##4##==Z4M=f=fff#f#=4-==Z5R=f''fffffffff==> .Bfhu#fhu#fhu#ʟ==> . J=f"'&ؼffټffټfff .C==>4u4h""-==fG[-/v"-/v-00gs=s> >-00gs=s> ?L##pJ-<z`-=>=y< 4P==f--4f-f-===> .hh--#h4OgYgYKL4MhfK4==L4PhfL4==L . <Y6 6!token_old_offsettop_cellcol_pitchy_IO_FILE_IO_save_endshort intabs_magreflectsizetype_IO_write_ptr_flagsfont_IO_buf_basecol_pitchgds_itemtyperow_pitch_markersforward_nameabs_angleabsolute_anglefilenamenot_foundhor_presentcell_numberlong long int_flags2forward_num_lockgdswordcurrent_anglegdsdump.c_cur_columnver_present_posargvnum_cells_sbufGNU C 4.8.5 20150623 (Red Hat 4.8.5-39) -mtune=generic -march=x86-64 -gunsigned charargccurrent_maglong long unsigned int_IO_marker_shortbufgds_celltype_IO_read_end__pad2_IO_write_base_unused2_IO_read_ptr_IO_buf_endlibrarynamemainpath_end_next__pad1__pad3__pad4__pad5short unsigned intcell_table_sizesearch_friendly_IO_write_end__off64_t_fileno_chainlibrarycurrent_itemcountnextitem_IO_backup_baseabsolute_mag__off_trow_pitchxreflect_before_rotate_mode_IO_read_basenextcell_vtable_offsetcurrent_cell_IO_save_basegdsswaptop_cell_name/home/rooks/c/gdsdump_diststdout_IO_lock_ttm_hourgds_write_colrow__ssize_tgds_read_boxcount_dacount_dpsigncount_dvmagnificationdegeneratesgds_read_datatypegensgds_swap4bytesgds_read_xygds_read_headergds_write_widthtm_isdstgds_read_boxtypegds_read_stransgds_read_floatmax_forward_refsgds_write_boxtypevaluegds_write_headergds_read_anglegds_write_stransfexponentgds_read_pathtypetm_mingds_read_presentationPdbu_uustupidgds_write_xygds_read_widthmantgds_read_textgds_write_boundarytm_secbitmaskgds_write_presentationgds_read_pathgds_write_anglegds_read_layerlibgds.cbit13bit14nrowsgds_make_next_itemgds_write_snamemantitagds_write_textverbosetm_monncolsgds_write_pathsecondminutegds_write_strnameforward_ref_initgds_write_layerbit0gds_swap2bytesgds_read_bgnstrgds_write_magfirst_cellbitmgds_write_libnamegds_read_endstrgds_read_boundarytm_mdaygds_write_texttypegds_write_pathtypegds_create_textgds_read_strnamegds_read_snamegds_create_lib_correctlygds_write_bgnstrtm_wdaygds_read_doubletm_ydaygds_write_endstr__time_tgds_read_libnamegds_read_arefgds_read_stringsirowsmonthgds_read_maggds_read_bgnlibmantissaPdbu_mgds_write_datatypetm_gmtoffgds_create_libgds_write_boxgds_read_endlibsicolsgds_read_endelgds_bindumpfourgds_read_srefgds_read_texttypegds_read_generationsgds_read_unitsgds_write_generationsgds_write_areftm_zonegds_write_floatgds_write_stringgds_read_colrowuu_umgds_write_bgnlibtm_yearPdbu_ummessagegds_write_endlibgds_write_sreftempgds_write_endeldategds_write_units8@T@t@@@@@(@ x@ @ @ @ p @,c@@c@r@t@``````А`` ` @ @.  @D`S`z 0 @`````  `(`0`Ԑ`#8`,@`6H`@J`KL`TN`^P`jR`vT`V`X`Z`\```b`d`h`p`x````` ``#`5`<`C`Lē`Sȓ`\Г`dؓ`mܓ`tޓ```````ؐ````` `"`!$`,(`>0`I2`T8`f@`qB`|H`P`R`T`X```b`h`p`r`x```%`7`B`M`X`c`u`~````````•`ĕ`ȕ`Е`ҕ`ԕ`'֕`0ؕ`;ڕ`F`X`a`l`w````````````````( `:(`C,`T0`\4`c8`j<`q@`|D`H`L`P`T`X`Z`\```d`h`p`t` x`z`#|`.~`9`K`V`a`s`~```~@````r@`  @ %@-* 1=@; [4@Lax BB@? D_@` А` Zb@ I@ f?@[ B@[   U-@[$  4a@3  @C V  =<@vc ܐ`j  -@t{  Z@   `@w  nG@,c@  (@"   -@R  i,@?   lR@  AO@B-  $@>  \@)O  ?@b  P@r  2@  9@     @6  l;@v   А`& :  A@[I  @:X  4]@g  @w ` Hc@  >@v @c@  qA@vf  JL@  /*@:  QH@  0@  $.@o!  0@e1 C  cS@>O  $@_ s   S@Y  ^@`  #@?  p @  Y@J  D@  <@~  ?@v  E@  ;@[  ܐ`)  /E@9  :@E  ] @ J  @@X ``  /@-q  A@[  J@   @g  F@   B@  -I@  >@) <`@8 C@HZ`+  @f a@ ,@[ M@4 _@w 7@@[ w6@*crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6355__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrygdsdump.clibgds.ctemp.5033temp.5037current_item.5041b.5087current_item.5195cell.5193current_cell.5194first_cell.5191now.5202date.5203year.5204month.5205day.5206hour.5207minute.5208second.5209count.5211token.5210count.5224token.5225i.5231count.5238token.5239pad.5254ps.5255cell.5270current_cell.5271len.5277pad.5280ps.5281i.5278count.5276token.5279current_item.5294m.5297n.5296str.5295i.5298len.5309ps.5311pad.5310i.5308count.5306token.5307current_item.5334cell.5333name.5328i.5329forward_ref_init.5330max_forward_refs.5331forward_name.5332len.5343pad.5346ps.5347i.5344count.5342token.5345current_item.5360count.5368token.5369current_item.5376count.5384token.5385current_item.5393num.5392count.5398token.5399current_item.5407count.5414token.5415current_item.5423count.5430token.5431current_item.5439count.5446token.5447current_item.5455count.5462token.5463count.5476token.5477current_item.5485num.5484count.5490token.5491current_item.5499num.5498count.5504token.5505current_item.5513num.5512count.5518token.5519current_item.5527num.5526count.5532token.5533num.5539count.5544token.5545current_item.5553num.5552count.5558token.5559current_item.5570num.5566font.5569vp.5567hp.5568num.5579count.5578token.5577current_item.5590num.5586bit0.5587bit13.5588bit14.5589strans.5599count.5597token.5598current_item.5623num.5613degenerates.5618ii.5612i.5611x.5614y.5615angle.5622count_da.5619px.5616py.5617count_dv.5620count_dp.5621count.5633token.5634i.5635xx.5636yy.5637current_item.5649ncols.5647nrows.5648sicols.5657sirows.5658count.5655token.5656current_item.5683count.5688token.5689current_item.5697count.5702token.5703xx.5726yy.5727__FRAME_END____JCR_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_finigds_write_bgnlibgds_read_boxtypegds_write_stringputchar@@GLIBC_2.2.5localtime@@GLIBC_2.2.5gds_read_endelgds_read_magstdout@@GLIBC_2.2.5strcpy@@GLIBC_2.2.5gds_create_textgds_write_generationsgds_write_pathgds_write_endelputs@@GLIBC_2.2.5gds_write_endstrgds_create_libgds_read_doublewrite@@GLIBC_2.2.5gds_read_box_edatagds_read_libnamegds_read_colrowgds_write_anglegds_read_texttypegds_read_bgnstrstrlen@@GLIBC_2.2.5gds_read_endstrgds_read_endlibprintf@@GLIBC_2.2.5gds_write_stransgds_write_presentationgds_write_headergds_write_colrowgds_make_next_itemgds_read_stransgds_read_stringgds_write_snamepow@@GLIBC_2.2.5log@@GLIBC_2.2.5close@@GLIBC_2.2.5gds_swap2bytesgds_read_boundaryread@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5__data_startstrcmp@@GLIBC_2.2.5gds_write_textgds_read_floatgds_read_unitsgds_write_floatgdsword__gmon_start____dso_handlegds_read_path_IO_stdin_usedgds_read_textgds_write_pathtypegds_write_bgnstrgds_write_texttypegds_write_strnamegds_write_libname__libc_csu_initpowf@@GLIBC_2.2.5gds_read_xygds_read_bgnlibmalloc@@GLIBC_2.2.5fflush@@GLIBC_2.2.5naggds_write_unitsgds_read_headergds_write_xygds_read_widthgds_write_boxgds_read_srefgds_read_datatypegds_write_boundaryrealloc@@GLIBC_2.2.5__bss_startgds_write_widthgds_bindumpmaingds_read_arefgdsswapgds_read_strnamegds_write_arefgds_read_pathtypeopen@@GLIBC_2.2.5gds_swap4bytesgds_write_datatypefloor@@GLIBC_2.2.5gds_read_layergds_read_generations__isoc99_scanf@@GLIBC_2.7gds_write_boxtypegds_read_anglegds_write_layerexit@@GLIBC_2.2.5__TMC_END__gds_create_lib_correctlygds_write_endlibgds_read_presentationgds_write_maggds_write_srefgds_read_sname.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str8@8#T@T 1t@t$Do@$N @XV@^o@2ko(@(Pzx@x0B@(@@p @p X,c@,c @c@@cHr@rlt@t ``````А`А `ܐ 0ܐ- `i1#81' =0 ! X* H