Mohawk archive format
Mohawk archives are organized in chunks, and this is the chunk layout:
- IFF chunk
- IFF header
- RSRC header
- Resource dir
- Type table
- Name tables (one for each resource type)
- Resource tables (one for each resource type)
- Resource name list
- File table
- Actual data (resource contents)
Note that the chunks may be found in a different order: never trust on them being at fixed locations, and use the offsets to reach them.
Every integer is in big-endian (Motorola) byte order.
This is always at the beginning of the file.
|4 bytes||chunk signature (MHWK), identifies Mohawk archive format|
|unsigned long||file size in bytes, not counting this IFF header (that is, file size - 8)|
I think this is actually the "Resource Dir header". Note that the Dir can be anywhere in file, but this header always follows the IFF Header.
|4 bytes||chunk signature (RSRC)|
|unsigned long||should be length of RSRC chunk (never bothered to check)|
|unsigned long||total file size in bytes|
|unsigned long||absolute offset of the Resource Dir|
|unsigned short||offset in Resource Dir of the File Table|
|unsigned short||File Table size in bytes|
It lists resource types in the Mohawk file. This table is always at the beginning of the Resource Dir.
|unsigned short||offset in Resource Dir of the Resource Name List (maybe this should go with the RSRC Header)|
|unsigned short||number of resource types in this file|
Entry (one for each type):
|4 bytes||resource type (tWAV, tBMP, NAME etc.)|
|unsigned short||offset in Resource Dir of the Resource Table for this type|
|unsigned short||offset in Resource Dir of the Name Table for this type|
There is one name table for each resource type. Many types don't have resource names; usually only tBMP, tWAV and tMOV do. Each entry holds the name offset in the name list for a resource.
|unsigned short||number of name entries (can be zero)|
|unsigned short||offset of the name string in Name List|
|unsigned short||resource index (equal to the resource's index in File Table)|
Resource name list
This is a simple list of null-terminated strings (C strings), where each string is a resource name. Given a resource, you can get the offset to its name by looking in the name table entry for that resource.