This document describes the format of L and D/E format directories.
For both formats the directory is arranged as follows:
DirHeader
Entries[n]
DirTail
The header and tail contain information about this directory, and the entries are the directory entries.
The two directory formats have the same DirHeader:
Name Bytes StartMasSeq 1 Update sequence number to check dir start with dir end StartName 4 'Hugo'; 'Nick'
The two directory formats have mostly the same entry format:
Name Bytes DirObName 10 DirLoad 4 DirExec 4 DirLen 4 DirIndDiscAdd 3OldDirObSeq/NewDirAtts 1
The DirTail formats are quite different:
Old:
Name Bytes OldDirLastMark 1 0 to indicate end of entries OldDirName 10 Directory name OldDirParent 3 Indirect disc address of parent OldDirTitle 19 Directory title Reserved 14 unused (padding) EndMasSeq 1 To match with StartMasSeq EndName 4 'Hugo'; 'Nick' DirCheckByte 1 Check byte on directoryNew: Bytes
NewDirLastMark 1 0 to indicate end of entries Reserved 2 unused (padding) NewDirParent 3 Indirect disc address of parent NewDirTitle 19 Directory title NewDirName 10 Directory name EndMasSeq 1 To match with StartMasSeq EndName 4 'Hugo'; 'Nick' DirCheckByte 1 Check byte on directory
The directory sizes are:
Old:
&500 (1280) bytes/47 entries
New:
&800 (2048) bytes/77 entries
There should be an exact number of entry slots between the headers and tails of both formats of directory (hence the padding). The last entry is indicated by there being a 0 in the first byte of the next entry's DirObName (hence xxxDirLastMark is there to indicate end of directory when the directory is full). DirNames are control character terminated and may be the full length of the field they sit in (in which case there is no terminator).
Calculating StartMasSeq and EndMasSeq:
StartMasSeq and EndMasSeq are there to check whether the directory was
completely written out when it was last written out. For an unbroken
directory they are always equal, and are increased by one (wrapping at 255
back to 0) whenever the directory is updated. This means that if the writing
of the directory was stopped halfway through then the start and end master
sequence numbers will not be the same, and so the directory will then be
identified as broken. Their values should equal each other, but, apart from
that, they can be anything.
Calculating DirCheckByte:
This is an accumulation of the used bytes in a directory. The used bytes are
all the bytes excluding the hole between the last directory entry and the
beginning of the structure at the tail of the directory. The generation of
the check byte is best described as an algorithm: