(Note: long = 4 bytes, short = 2 bytes, char = 1 byte)
DM3Image = long
| long
| long
| TagGroup
TagGroup = char
| char
| long (assume value = N)
| [TagEntry] x N
TagEntry = char
| short (assume value = N)
| N bytes
| (TagGroup | TagType)
TagType = long
| long ( assume value = N)
| [long] X N
| TagData
TagData = [item] x N
1. 4 bytes, image file version, should be 3 2. 4 bytes, number of bytes in the file 3. 4 bytes, byte-ordering of the tag data (0 = bigendian, 1 = littleendian) 4. a single TagGroup instance including all the tags and data
1. 1 byte, is this group sorted? 2. 1 byte, is this group open? 3. 4 bytes, number of tags in this group 4. all tag entries. each tag entry is a TagEntry instance.
1. 1 byte, specifying whether it is data (21) or tag group (20)
2. 2 bytes, length of tag's label
3. n bytes, tag's label as a string
4. tag instance: if tag is a group, it's a TagGroup instance.
if tag is a data tag, it's a TagType instance.
1. 4 bytes, equals to "%%%%".
2. 4 bytes, n = length of definiton of encoded type:
for a simple type this will = 1,
for a string this will = 2,
an array of a simple type will = 3,
structs have 1+2*f where f=number of fields in struct
NB arrays of structs and arrays of arrays etc. will require additional
fields for the complete definition (see Further details: TagType 3.
EncodedType)
3. 4 x n bytes: where n is number of encoded types defined above;
each 4 byte value helps defines the Encoded Type, either as an ID
to be looked up in the table below or (for complex types) indicating
field numbers etc as described below
4. data, its size depends on encoded types.
SHORT = 2,
LONG = 3,
USHORT = 4,
ULONG = 5,
FLOAT = 6,
DOUBLE = 7,
BOOLEAN = 8,
CHAR = 9,
OCTET = 10,
STRUCT = 15,
STRING = 18,
ARRAY = 20
For structs, strings and arrays additional fields are needed for the
defintion:
string: field 2 = string length.
struct: contains the following additional fields:
struct_namelength
number of fields (n)
(field_namelength, fieldtype) x n
where each of the n fieldtypes is one of the EncodedTypes.
array: field 2 = array_type, which is one of the EncodedTypes.
field 3 = array_length.
complex array: to give one example, an array of structs will look
something like this:
field 1 (encoded type) = 20 (Array)
field 2 (type of elements of array) = 15 (Struct)
definition of struct follows immediately
field 3= array_length
where definition of struct follows the normal pattern
1. short: data size = 2
2. long: data size = 4
3. unsigned short: data size = 2
4. unsigned long: data size = 4
5. float: data size = 4
6. double: data size = 8
7. boolean: data size = 1
8. char: data size = 1
9. octet: data size = 1
10. string: data size = 2 x string length
these strings are stored as 2 byte unicode
11. struct: contains the following data:
struct_name: data size = struct_namelength x 1
[ for the n fields in the struct ]
field_name: data size = field_namelength x 1
field_value: data size = sizeof(fieldtype)
12. array:
data size = array_length x sizeof(array_type)
------------------------------------------------------------------------
lpeng@bcm.tmc.edu Last modified: Thu Sep 26 15:50:49 CDT 2002