Skip to content

The Extended Structure

Mike Greene edited this page Sep 12, 2023 · 1 revision

Simple answer, I do not know. The MSGHEADER - extenblock element is a pointer to the EXTHDR structure:

// extended header block
typedef struct _EXTHDR
{
    uint16_t hdrlen;    // length of ???
    uint16_t numblocks; // number of additional FILECOUNTRYINFO blocks
} EXTHDR, *PEXTHDR;

When you run the decompiler the info will display if an extended header is present.

** Has an extended header **
Ext header length:        302
Number ext blocks:        0

It always is the last four bytes of the file and always (English files I have observed) end:

2E 01 00 00 which equates to 0x012E 0x0000 or a length of 302 and 0 blocks.

My best guess is length is always going to be 302 which is the size of FILECOUNTRYINFO structure. The number of blocks would be for additional codepages ... just a guess. This would make sense because FILECOUNTRYINFO contains a filename which seems redundant in the main FILECOUNTRYINFO.

I have found the extended header in OSO001.MSG, OSO001H.MSG, LIBC.MSG and I am sure there are others. Anyway, I just do not know more than what is written here.