GSD

From Inkscape Wiki
Revision as of 08:22, 4 November 2009 by Mythgarr (talk | contribs)
Jump to navigation Jump to search


The GSD binary file format

This is my first try to reverse engineer a binary file format. If you like, you could add your thoughts! By comparison between different files with the extention .gsd i try to see what data is stored where. It has some parts in ansi-text and the most parts are just binary numbers of different length. As identification, the file starts with the text "GRAPHTEC PRT&CUT". The next line at offset 0000:0010 starts with binary numbers "03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00" (I don't know if they make any sense there).

  • From offset 0000:0080 to offset 0000:00cf is unknown binary data.
  • From offset 0000:00d3 to offset 0000:00de is binary data, which is exactly repeated from offset 0000:00fb to 0000:0107. It starts with the hex numbers 40 6a 40 which seems to be a marker for file seek. It ends with 40 00 04. Inbetween those bytes is data which funktion is still unknown.
  • Every object can have a different color in the 8bit-RGB-color-range. E.g. RGB(254,254,254), but most probably it is only black. RGB(0,0,0).
  • The size of the canvas is written in pure ansi text. The value could be "ISO A4" or "Letter".
  • The hex value 40 seems to be the delimiter between chunks of data of different length. Hex value ff ff ff semms to be a start delimiter and ff ff ff ff semms to be the end delimiter.

Footer

The footer is composed of several sections. A header portion, and several blocks of data. These blocks seem to be related to various configuration information, although the exact purpose is unknown. This is followed by a footer section of static length.

Header

54 bytes - unknown data

Blocks

The first two bytes of the block provide information on the purpose of the block. The following 2 bytes indicate the type of data and the number of data elements of that type.

Header Description
01 1-byte data chunks
02 2-byte data chunks
03 4-byte data chunks
05 ASCII data chunks


Sample Block Data
Prefix Type Length Data
0x0108 05 13 "Graphtec Craft ROBO"
0x0208 05 13 "Graphtec Craft ROBO"
0x0408 05 06 "Letter" (or whatever)
0x0508 03 02 56 54 00 00 24 6D 00 00 (unk)
0x1B08 01 01 00
0x2708 01 01 00
0x1A08 02 01 64 00
0x0908 01 01 00
0x0A08 03 01 00 00 00 00
0x0B08 03 01 00 00 00 00
0x0C08 01 01 00
0x0D08 03 01 00 00 00 00
0x2208 01 01 00
0x2008 01 01 00
0x2108 02 01 00 00
0x2308 02 01 01 00
0x2408 03 01 6F 08 00 00
0x2508 03 01 EA 0A 00 00
0x2608 02 01 01 00
0x0808 02 01 00 00
0x0E08 01 01 00
0x0F08 01 01 01
0x1008 03 01 00 00 00 00
0x1E08 01 01 01
0x1F08 01 01 01
0x1108 01 01 00
0x1C08 03 01 00 00 00 00
0x1D08 03 01 00 00 00 00
0x1408 03 01 00 00 00 00

Footer

Length Description
0x48 bytes unknown
1 byte use registration mark (bool)
15 bytes unknown
1 byte unknown (0x01)
8 bytes registration mark size
16 bytes unknown
8 bytes origin X
4 bytes unknown
8 bytes origin Y
3 bytes unknown
1 byte show grid (boolean)
8 bytes Registration Mark distance 1-2
4 bytes unknown
8 bytes Registration mark distance 1-3
22 bytes unknown
1 byte grid type(0=line, 1=dot)
5 bytes unknown
8 bytes grid size
4 bytes unknown
1 byte snap to grid(bool)
8 bytes unknown
<EOF>