The Norton Guide Database File Format
Background
The following text is a rough guide to the file format of a Norton Guide database. The information has been pieced together from other sources and from my investigations while writing Norton Guide readers. It isn't fully complete but it should be enough to get anyone started.
If you are able to fill in any of the blanks please feel free to drop me a line with any information you've got.
Introduction
A Norton Guide database consists of a header followed by a series of encrypted records. There are three record types, each of which have an associated ID:
Record Type | ID |
---|---|
Short Entry | 0 |
Long Entry | 1 |
Menu | 2 |
Encryption
Short, long and menu entries are all encrypted. The encryption is a simple XOR 26 scheme. Example C code to decrypt this is:
unsigned char ng_decrypt( unsigned char b )
{
return( (unsigned char) ( b ^ 0x1A ) );
}
Compression
The text of short, long and menu
entries uses a simple form of run-length
encoding for spaces. If,
when reading text, you encounter a byte value of 255
you should read the
next byte and take that as a count of spaces.
The Header
Field | Size | Notes |
---|---|---|
Magic Value | short |
0x474e is a Norton Guide database, 0x4845 is an Expert Help database. |
Unknown | short |
|
Unkknown | short |
|
Menu count | short |
Count of the number of main menus. |
Title | char[40] |
The text is NUL terminated if the length is less than 40 characters. |
Credit line 1 | char[66] |
The text is NUL terminated if the length is less than 66 characters. |
Credit line 2 | char[66] |
The text is NUL terminated if the length is less than 66 characters. |
Credit line 3 | char[66] |
The text is NUL terminated if the length is less than 66 characters. |
Credit line 4 | char[66] |
The text is NUL terminated if the length is less than 66 characters. |
Credit line 5 | char[66] |
The text is NUL terminated if the length is less than 66 characters. |
The Short Entry
Field | Size | Notes |
---|---|---|
ID | short |
Value is always 0 |
Length | short |
The length of the record in bytes. |
Line Count | short |
The count of lines in the entry. |
Unknown | short |
|
Parent Line | short |
The number of the line in the parent entry that points to this entry. |
Parent | long |
The file offset of the parent entry. |
Menu | short |
The number of the menu that points to this entry. |
Menu Prompt | short |
The number of the menu prompt that points to this entry. |
Unkonwn | char[8] |
|
Pointers | long[Line Count] |
This is an array of file offsets, each offset points to the entry that each line jumps to. |
Lines | Line Count lines of NUL terminated text. |
The Long Entry
Field | Size | Notes |
---|---|---|
ID | short |
Value is always 1 |
Length | short |
The length of the record in bytes. |
Line Count | short |
The count of lines in the entry. |
See Also Flag | short |
Flag to indicate if there are any see-also items. |
Parent Line | short |
The number of the line in the parent entry that points here. |
Parent | long |
The file offset of the parent entry. |
Menu | short |
The number of the menu that points to this entry. |
Menu Prompt | short |
The number of the menu prompt that points to this entry. |
Previous | long |
The file offset of the previous entry. |
Next | long |
The file offset of the next entry. |
Lines | Line Count lines of NUL terminated text. |
Plus, if and only if the See Also Flag is not 0...
Field | Size | Notes |
---|---|---|
See Also Count | short |
The count of see also entries. |
Pointers | long |
An array of file offsets, each offset points to the entry associated with the see also. |
See Alsos | See Also Count lines of NUL terminated text. |
The Menu Entry
Field | Size | Notes |
---|---|---|
ID | short |
Value is always 2 |
Length | short |
The length of the record in bytes. |
Prompt Count | short |
The count of the number of prompts in the menu. |
Unknown | char[20] |
|
Pointers | long[Prompt Count] |
This is an array of file offsets, each offset points to the entry that each menu prompt jumps to. |
Unkonwn | char[8*Prompt Count] |
|
Title | The menu's title, a NUL terminated string with a maximum of 40 characters1 |
|
Prompts | The menu prompts, Prompt Count NUL terminated strings with a maximum of 50 characters each2 |