THE WINHELP |SYSTEM INTERNAL FILE
=================================

The |SYSTEM file contains much of the information which is global to the
help file, such as the compression level, help file title, and macros to
execute when the help file is opened.  The |SYSTEM file consists of a
fixed length header followed by a sequence of variable length records.

The |SYSTEM header
------------------

This is a 12 byte header arranged as follows:

    Bytes       Meaning
    -----------------------
    0           Magic Number:   0x6C
    1           Version Number.  Usually 0x03
    2           Revision Number.  Usually 0x15
                    15 = HC30 Windows 3.0 help file
                    21 = HC31 Windows 3.1 help file
                    27 = WMVC/MMVC media view file
                    33 = MVC or HCW 4.00 Windows 95
    3           Constant Value: 0x00
    4-5         Constant Value: 0x0001
    6-9         Date/Time help file was generated, in time_t format.
    10-11       Flags

The flag field can have several values.  The known values are 
0x0000 for an uncompressed file, 
0x0004 and 0x0008 for compressed files, and 
0x000A for a Windows 3.0 help file (which I'm not going to go into here).
If LZ77 compression is used on the |TOPIC and |Phrases files, the flag should
be 0x0004, otherwise 0x0000.

After the header are a series of variable-length records.  Note that the
only way to read the records is to go through them sequentially, and use
the length of the file as given in the file header to figure out when you're
done.

|SYSTEM Records
---------------

A system record has the following general format:

    Bytes       Meaning
    -----------------------
    0-1         Flag value
    2-3         Length of the data to follow
    4-?         Data area

Known flag values, and the associated data, are:

 0x0001 -- Title record.  The data area will contain a zero-terminated ASCII
 string containing the title of the help file.

 0x0002 -- Copyright record.  The data area will contain a zero-terminated
 ASCII string containing the copyright notice, as defined in the .HPJ file.
 If no copyright notice is specified, this record will still be present and
 the data area will contain a single zero byte.
 It looks like the maximum size of this text can be 55 bytes
 + null terminator otherwise Windows help viewer crash.

 0x0003 -- Contents Record.  The data area will contain the 'table of
 contents' topic as a 4-byte 'Character' offset (see topic.txt for info
 on the two kinds of topic file offsets) .

 0x0004 -- Macro Record.  The data area will contain a zero-terminated ASCII
 string containing a WinHelp macro to be executed when the file is opened.
 There will be one record for every macro specified in the [CONFIG] section
 of the *.HPJ file, presumably in the same order.

 0x0005 -- Icon record.  I'm not sure about this one, I've never seen one.
 But presumably it stores the icon to used for the minimized help program,
 since this can be changed in the *.HPJ file.  I don't know how it's stored.

 0x0006 -- Secondary window record.  The data area will contain a record
 specifying the nature of a secondary window type defined in the [WINDOW]
 section of a *.HPJ file.  See 'Secondary Window Records', below.

 0x0008 -- Citation record.  Again, I'm not sure about this one.  All I know
 is that it has something to do with the CITATIONS= command in the [OPTIONS]
 section of a *.HPJ file.  Gotta remember to check this out.

Secondary Window Records
------------------------

Following a type-0x0006 system record will be a 90-byte record of the
following format:

    Bytes       Meaning
    -----------------------
    0-1         Flags (see below)
    2-11        The type string for this window (?).
    12-20       Window name
    21-71       Window Caption
    72-73       X starting co-ordinate
    74-75       Y starting co-ordinate
    76-77       Width
    78-79       Height
    80-81       Maximize flag
    82-84       Background colour as RGB values
    85          Unknown (possible 0 as part of above)
    86-88       Background colour of non-scrollable region as RGB
    89          Unknown (possibly 0 as part of above)

The flags mostly specify which parts of the structure are actually valid:

 0x0001 -- Type         
 0x0002 -- Name          
 0x0004 -- Caption
 0x0008 -- X            
 0x0010 -- Y             
 0x0020 -- Width
 0x0040 -- Height       
 0x0080 -- Maximize      
 0x0100 -- First RGB
 0x0200 -- Second RGB   
 0x0400 -- "On Top" was set in HPJ file.
