The 8 standard file sections have the following contents:

--- Section 1 (pointer at +0): Ships ---
 +0     WORD    Number of ships
 +2   n BYTEs   Ship records of 107 bytes each, see SHIPx.DAT

--- Section 2 (pointer at +4): Visual Contacts ---
 +0     WORD    Number of contacts. Must be <= 50 for Wisseman clients.
                VPHost and PHost with AllowBigTargets allow more than 50
                contacts if the client-side unpacker can handle those
                (VPUnpack, k-unpack, CCUnpack).
 +2   n BYTEs   Records of 34 bytes each, see TARGETx.DAT.
                DOS-style RSTs: the 50 nearest contacts.
                Windows-style RSTs: the first 50 contacts (in Id order)

--- Section 3 (pointer at +8): Planets ---
 +0     WORD    Number of planets
 +2   n BYTEs   Planet records of 85 bytes each, see PDATAx.DAT

--- Section 4 (pointer at +12): Bases ---
 +0     WORD    Number of starbases
 +2   n BYTEs   Starbase records of 156 bytes each, see BDATAx.DAT

--- Section 5 (pointer at +16): Messages ---
 +0     WORD    Number of messages
 +2   n BYTEs   Records of 6 bytes each
                 +0     DWORD   Address of message in RST file + 1
                 +4     WORD    Length of message in bytes
                The messages usually follow the message headers, and are
                encrypted like in MDATAx.DAT.
                Reportedly, Winplan cannot unpack results where the number
                of messages exceeds 5461, i.e., where the message directory
                is larger than 32k.

--- Section 6 (pointer at +20): Ship Coordinates ---
 +0   n BYTEs   500 (or 999) Records of 8 bytes each, see SHIPXYx.DAT:
                 +0     WORD    X position
                 +2     WORD    Y position
                 +4     WORD    Owner
                 +6     WORD    Mass in kt

--- Section 7 (pointer at +24): GENx.DAT ---
 +0  18 BYTEs   Timestamp
+18  88 BYTEs   11 score records of 8 bytes each
+106    WORD    Player Id
+108 20 BYTEs   Password
+128  3 DWORDs  Checksums of ship, planet, and base block
                These checksums are the sum of all unsigned bytes in all
                ship/planet/base records in the RST file. The first word
                of each section ("Number of...") is not counted. Note that
                these are not exactly the same checksums as in GENx.DAT.
+140    WORD    Turn number
+142    WORD    Timestamp checksum
                See GENx.DAT for more information on each field. Not all
                GENx.DAT fields are stored here, set the others to zero.

--- Section 8 (pointer at +28): VCRs ---
 +0     WORD    Number of VCRs
 +2   n BYTEs   VCR records of 100 bytes each, see VCRx.DAT.

Unpack programs must generate two (nearly) identical copies of the ship, planet and base sections (.DAT and .DIS). Those files only differ in their signatures. The RST file does not contain the signatures.

Detecting Host999

There appears to be no signature telling whether you are dealing with a Host999 file or not. This only makes a difference for the SHIPXYx.DAT part which has no length specification. If section 1 or 2 contain an Id number greater than 500, you can be sure to have a Host999 RST (not for the scores or VCRs, those could have been changed by a 3rd party add on, since they have no other effect in a front-end program). You can use the fact that the Wisseman Host always places the sections in "correct" order, so if there are exactly 4000 bytes between sections 6 and 7, it's a "Host500" RST, if there are 7992, it's from Host999. Or, always assume you have 999 ships. If you then accidentally "run into" the GENx.DAT image: valid timestamps start with two numbers, which -- interpreted as a WORD -- yield an invalid or at least improbable X coordinate for a ship.

Note that the standard Winplan999 and Unpack999 programs do not attempt to detect that, and blindly copy 7992 bytes, thus making bogus SHIPXYx.DAT files (see there) if Host999 is not used.

"RST Format 36" / "RST Format 37"

With the introduction of "FF allies" in Host 3.22.039, Tim announced the change to "RST Format 36" (or 37, depending on where you look).

The basic RST file format did NOT change in these versions. Unpackers need not be changed. "RST Format 36" probably references the fact that allied targets are listed in TARGETx.DAT but not in SHIPXYx.DAT, making them invisible to DOS Planets. See the description of these two files for more details.