Blame: John "Eljay" Love-Jensen Date : 2001.Nov.04 //----------------------------------------------------------------------------- Overview size : varies qty : 1 -- the whole file range: [0x0000,EOF) Header Entry[126] Annotation[(Entry[0].offset - 0x200) / 0x20] Chunk[Header.length] //----------------------------------------------------------------------------- Header size : 8 qty : 1 range: [0x0000,0x0008) byte length // the number of entries byte zero // always zero byte AD // always 0xAD byte FE // always 0xFE byte zero // always zero byte zero // always zero byte flag // unknown flags byte zero // always zero //----------------------------------------------------------------------------- Entry size : 0x04 qty : 126 (qv Overview) range: [0x0008,0x0200) nat32 offset // the offset into the file for the chunk, LSB->MSB The number of entries is ALWAYS 126. However, the number of active entries is Header.length. And there is always a terminating EOF entry. The remainder are all zeroes. //----------------------------------------------------------------------------- Annotation size : 0x20 qty : Header.length (often), but sometimes less (see NOTE) range: [0x0200,Entry[0].offset) -- maximum theoretical end of range is 0x11C0 byte text[32] // annotative text associated with the approparite entry, in the same order NOTE: sometimes there a few less annotations than there are entries, #annotations <= Header.length. That's why the funky "(Entry[0].offset - 0x200) / 0x20" to determine the number of entries. NOTE: sometimes the Annotation text is all zeroes. //----------------------------------------------------------------------------- Chunk size : Entry[next].offset - Entry[this].offset qty : Header.length (exact) range: [Entry[this].offset,Entry[next].offset) The layout varies depending on what the chunk actually is. Also note, there are FALLOW chunks where Entry[next].offset == Entry[this].offset. Fallow chunks annotation is always all zeroes.