Fixed DOS 3.3 directory sector linking. Tests are starting to pass!

This commit is contained in:
Rob McMullen 2017-02-23 19:51:22 -08:00
parent 605f77afb3
commit 2558a51826

View File

@ -122,13 +122,15 @@ class Dos33Directory(Directory):
return data return data
def set_sector_numbers(self, image): def set_sector_numbers(self, image):
num = image.get_next_directory_sector(-1) current_sector = -1
for sector in self.sectors: for sector in self.sectors:
sector.sector_num = num current_sector, next_sector = image.get_directory_sector_links(current_sector)
num = image.get_next_directory_sector(num) sector.sector_num = current_sector
t, s = image.header.track_from_sector(num) t, s = image.header.track_from_sector(next_sector)
sector.data[1] = t sector.data[1] = t
sector.data[2] = s sector.data[2] = s
log.debug("directory sector %d -> next = %d" % (sector.sector_num, next_sector))
current_sector = next_sector
class Dos33Dirent(object): class Dos33Dirent(object):
@ -483,16 +485,16 @@ class Dos33DiskImage(DiskImageBase):
segments.append(segment) segments.append(segment)
return segments return segments
def get_next_directory_sector(self, sector): def get_directory_sector_links(self, sector_num):
if sector == -1: if sector_num == -1:
sector = self.header.first_directory sector_num = self.header.first_directory
print "reading catalog sector", sector print "checking directory sector", sector_num
self.assert_valid_sector(sector) self.assert_valid_sector(sector_num)
raw, _, _ = self.get_raw_bytes(sector) raw, _, _ = self.get_raw_bytes(sector_num)
next_sector = self.header.sector_from_track(raw[1], raw[2]) next_sector = self.header.sector_from_track(raw[1], raw[2])
if next_sector == 0: if next_sector == 0:
raise NoSpaceInDirectory("No space left in catalog") raise NoSpaceInDirectory("No space left in catalog")
return next_sector return sector_num, next_sector
def get_file_segment(self, dirent): def get_file_segment(self, dirent):
byte_order = [] byte_order = []