Norton Guide File Format
www.davep.org

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 TypeID
Short Entry0
Long Entry1
Menu2

Encryption

Short, long and menu entries are all encrypted. The encryption is a simple XOR 26 scheme. Example C code to decrypt 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

FieldSizeNotes
Magic valueshort0x474E == Norton Guide database.
0x4845 == Expert Help database.
Unknownshort 
Unknownshort 
Menu CountshortCount of the number of main menus.
Titlechar[ 40 ]The text is NUL terminated if the length is less than 40 bytes.
Credit Line 1char[ 66 ]The text is NUL terminated if the length is less than 66 bytes.
Credit Line 2char[ 66 ]The text is NUL terminated if the length is less than 66 bytes.
Credit Line 3char[ 66 ]The text is NUL terminated if the length is less than 66 bytes.
Credit Line 4char[ 66 ]The text is NUL terminated if the length is less than 66 bytes.
Credit Line 5char[ 66 ]The text is NUL terminated if the length is less than 66 bytes.

The Short Entry

FieldSizeNotes
IDshortValue is always 0.
LengthshortLength of the record in bytes.
CountshortCount of lines in the entry.
Unknownshort 
Parent LineshortThe number of the line in the parent entry that points here.
ParentlongFile offset of the parent entry.
MenushortNumber of the menu that points to this entry.
PromptshortNumber of the menu prompt that points to this entry.
Unknownchar[ 8 ] 
Pointerslong[ Count ]This is an array of file offsets, each offset points to the entry that each line jumps to.
Lines Count lines of NUL terminated text.

The Long Entry

FieldSizeNotes
IDshortValue is always 1.
LengthshortLength of the record in bytes.
CountshortCount of lines in the entry.
See Also FlagshortFlag to indicate if there are any see also entries
Parent LineshortThe number of the line in the parent entry that points here.
ParentlongFile offset of the parent entry.
MenushortNumber of the menu that points to this entry.
PromptshortNumber of the menu prompt that points to this entry.
PreviouslongFile offset of the previous entry
NextlongFile offset of the next entry
Lines Count lines of NUL terminated text.
If See Also Flag != 0
See Also CountshortCount of see also entries
Pointerslong[ See Also Count ]This is an array of file offsets, each offset points to the associated see also.
See Alsos See Also Count lines of NUL terminated text.

The Menu Entry

FieldSizeNotes
IDshortValue is always 2.
LengthshortLength of the record in bytes.
CountshortCount of lines in the entry.
Unknownchar[ 20 ] 
Pointerslong[ Count ]This is an array of file offsets, each offset points to the entry that each prompt jumps to.
Unknownchar[ 8 * Count ] 
Title Menu title, NUL terminated string, maximum of 40 characters (although I have found guides with longer titles).
Prompts Menu prompts. Count * NUL terminated strings, maximum of 50 characters each (although I have found guides with longer prompts).
Page last modified: 2006-08-18 10:36:24 UT
Dave Pearson <davep@davep.org>
Valid XHTML 1.1 Valid CSS