DIRECTORY
SEARCHING
The Directory search routine searches the directory entries for a file
name that matches the name in FNAME. The routine has two entry points:
SFDIR which is used to begin the search at the start of the directory,
and CSFDIR, which is used to continue searching the directory at the entry
just past the previously found matching entry.
The routines have five memory cells that they
use for controlling the search operation: DHOLES, DHOLED, CDIRS, CDIRD
and SFNUM. The CDIRS cell contains the current relative directory sector
number (zero through seven). The CDIRD cell contains the displacement into
the directory sector of the current entry. DHOLES gives the relative directory
sector number (zero through seven) of the first hole or available entry
in the directory. The DHOLED cell gives the displacement to the first available
entry that is the hole. The SFNUM cell is used to contain the current file
number of the entry being examined. The value in SFNUM will be from zero
through 63.
If the value of DHOLES is $FF at the end of
the search, then the directory is full.
The directory search routine will exit with
the carry clear if a match was found. It will exit with the carry set if
no matching entry was found.
SFDIR
The SFDIR routine ($F21) is called to start searching the directory
at the start of the directory.
1) Initialize DHOLES, CDIRS, SFNUM to $FF.
2) Initialize CDIRD to $70.
3) Continue at CSFDIR.
CSFDIR
The CSFDIR routine ($F31) is called to continue searching the directory.
1) Increment the file number, SFNUM.
2) Increment CDIRD by the size of a directory entry (16).
3) If the CDIRD is now greater than, or equal to, 128 ($80) then increment CDIRS by one. If the value of CDIRD is now eight, then exit with the carry set to indicate that a match was not found. If CDIRD is less than eight, then read the next directory sector via RDDIR. Set CDIRD to zero.
4) If the directory entry flag field is zero then the end of the used portion of the directory has been reached. If a hole has not been found, then mark this entry as a hole. Exit with the carry set to indicate that the file was not found.
5) If the directory entry flag field indicates that the file is open for output, then skip this entry.
6) If the directory entry flag field indicates that the file has been deleted, and a hole has not been found, then mark this entry as a hole and continue searching the directory.
7) If the file is in use, then check the file name in the directory entry for a match with the name in FNAME. Wild card characters in FNAME (question marks) are assumed to match the corresponding characters in the directory entry file name.
8) If the names match, then exit with the carry clear to indicate that a match was found.
9) If a match was not found, then continue to search the directory.
Return to Table of Contents | Previous Chapter | Next Chapter