Difference between revisions of "GSD"
Line 52: | Line 52: | ||
|0x0408 ||05 ||06 ||"Letter" - Text Paper Size | |0x0408 ||05 ||06 ||"Letter" - Text Paper Size | ||
|- | |- | ||
|0x0508 ||03 ||02 ||56 54 00 00 24 6D 00 00 - Paper size in 1/2540" units (Little Endian) 4-byte width, 4-byte height | |0x0508 ||03 ||02 ||56 54 00 00 24 6D 00 00 - Paper size in 1/2540" (ie:0.01mm) units (Little Endian). This seems to have been chosen to allow precise storing of both fractional imperial and metric units. 4-byte width, 4-byte height | ||
|- | |- | ||
|0x1B08 ||01 ||01 ||00 - Portrait(0) or Landscape(1) | |0x1B08 ||01 ||01 ||00 - Portrait(0) or Landscape(1) |
Revision as of 19:34, 4 November 2009
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.
The footer is composed of blocks of data. Each block begins with a 2-byte code indicating the type of data, followed by 1 byte code indicating the datatype and a second 1 byte code indicating how many elements of data are stored.
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.
While the data typically follows this pattern, in some cases (most notably distance measurements) the "datatype" indicates the incorrect length.
Header | Description |
---|---|
00 | 1 byte of data stored in length byte |
01 | 1-byte data chunks |
01 | 1-byte data chunks |
02 | 2-byte data chunks |
03 | 4-byte data chunks |
04 | 8-byte little endian IEEE-754 float. Usually for storing a distance in mm units |
05 | ASCII data chunks |
Prefix | Type | Length | Data |
---|---|---|---|
0x0108 | 05 | 13 | "Graphtec Craft ROBO" - Optional |
0x0208 | 05 | 13 | "Graphtec Craft ROBO" - Optional |
0x0408 | 05 | 06 | "Letter" - Text Paper Size |
0x0508 | 03 | 02 | 56 54 00 00 24 6D 00 00 - Paper size in 1/2540" (ie:0.01mm) units (Little Endian). This seems to have been chosen to allow precise storing of both fractional imperial and metric units. 4-byte width, 4-byte height |
0x1B08 | 01 | 01 | 00 - Portrait(0) or Landscape(1) |
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 |
0x0306 | 00 | 00 | |
0x0009 | 00 | 09 | |
0x0109 | 01 | 01 | 00 |
0x0209 | 01 | 01 | 05 |
0x0309 | 01 | 01 | 05 |
0x0409 | 01 | 01 | 00 |
0x0406 | 00 | 00 | |
0x000A | 00 | 0A | |
0x010A | 03 | 01 | 00 00 00 00 |
0x020A | 00 | 00 | |
0x000C | 00 | 01 | |
0x010C | 03 | 01 | 00 00 00 00 |
0x0506 | 00 | 00 | |
0x000E | 00 | 0A | |
0x010E | 01 | 01 | 01 - Show Registration Marks |
0x020E | 02 | 01 | 01 00 |
0x030E | 02 | 01 | 01 00 |
0x0A0E | 04 | 01 | CD CC CC CC CC 0C 33 40 - Registration Mark Size |
0x0B0E | 02 | 01 | A8 C6 4B 37 89 41 E0 3F - Registration Mark Thickness |
0x0C0E | 03 | 01 | 66 66 66 66 66 66 29 40 - Origin X |
0x0D0E | 03 | 01 | 52 B8 1E 85 EB 51 24 40 - Origin Y |
0x0E0E | 03 | 01 | 01 00 00 00 00 D0 67 40 - Distance 1-2 |
0x0F0E | 03 | 01 | 48 E1 7A 14 AE 87 6E 40 - Distance 1-3 |
0x110E | 01 | 01 | 00 |
0x0606 | 00 | 00 | |
0x000F | 00 | 04 | |
0x010F | 01 | 01 | 00 |
0x020F | 02 | 01 | 00 00 |
0x030F | 04 | 01 | 66 66 66 66 66 66 29 40 - Grid Spacing |
0x040F | 01 | 01 | 01 |
0x0010 | 03 | 01 | 00 00 00 00 - End of file? |