Fixed #6: changed sparta dos dirent from stomping on 'filename' property of parent class

This commit is contained in:
Rob McMullen 2018-06-23 21:50:42 -07:00
parent 5680505f11
commit 800c01ccde

View File

@ -38,7 +38,7 @@ class SpartaDosDirent(AtariDosDirent):
deleted = "d" if self.deleted else "." deleted = "d" if self.deleted else "."
locked = "*" if self.locked else " " locked = "*" if self.locked else " "
flags = "%s%s%s%s%s %03d" % (output, subdir, in_use, deleted, locked, self.starting_sector) flags = "%s%s%s%s%s %03d" % (output, subdir, in_use, deleted, locked, self.starting_sector)
return "File #%-2d (%s) %-8s%-3s %8d %s" % (self.file_num, flags, self.filename, self.ext, self.length, self.str_timestamp) return "File #%-2d (%s) %-8s%-3s %8d %s" % (self.file_num, flags, self.basename.decode('utf-8'), self.ext.decode('utf-8'), self.length, self.str_timestamp)
@property @property
def verbose_info(self): def verbose_info(self):
@ -50,11 +50,11 @@ class SpartaDosDirent(AtariDosDirent):
if self.locked: flags.append("LOCK") if self.locked: flags.append("LOCK")
return "flags=[%s]" % ", ".join(flags) return "flags=[%s]" % ", ".join(flags)
def parse_raw_dirent(self, image, bytes): def parse_raw_dirent(self, image, data):
if bytes is None: if data is None:
return return
values = bytes.view(dtype=self.format)[0] values = data.view(dtype=self.format)[0]
flag = values['status'] flag = values[0]
self.flag = flag self.flag = flag
self.locked = (flag&0x1) > 0 self.locked = (flag&0x1) > 0
self.hidden = (flag&0x10) > 0 self.hidden = (flag&0x10) > 0
@ -63,15 +63,15 @@ class SpartaDosDirent(AtariDosDirent):
self.deleted = (flag&0b10000) > 0 self.deleted = (flag&0b10000) > 0
self.is_dir = (flag&0b100000) > 0 self.is_dir = (flag&0b100000) > 0
self.opened_output = (flag&0b10000000) > 0 self.opened_output = (flag&0b10000000) > 0
self.starting_sector = int(values['sector']) self.starting_sector = int(values[1])
self.filename = str(values['filename']).rstrip() self.basename = bytes(values[4]).rstrip()
if self.is_dir: if self.is_dir:
self.ext = "" self.ext = ""
else: else:
self.ext = str(values['ext']).rstrip() self.ext = bytes(values[5]).rstrip()
self.length = 256*256*values['len_h'] + values['len_l'] self.length = 256*256*values[3] + values[2]
self.date_array = tuple(bytes[17:20]) self.date_array = tuple(data[17:20])
self.time_array = tuple(bytes[20:23]) self.time_array = tuple(data[20:23])
self.is_sane = self.sanity_check(image) self.is_sane = self.sanity_check(image)
def sanity_check(self, image): def sanity_check(self, image):
@ -236,10 +236,10 @@ class SpartaDosDiskImage(AtariDosDiskImage):
else: else:
break break
if len(byte_order) > 0: if len(byte_order) > 0:
name = "%s %d@%d %s" % (dirent.get_filename(), dirent.length, dirent.starting_sector, dirent.str_timestamp) name = "%s %d@%d %s" % (dirent.filename, dirent.length, dirent.starting_sector, dirent.str_timestamp)
verbose_name = "%s (%d bytes, sector map@%d) %s %s" % (dirent.get_filename(), dirent.length, dirent.starting_sector, dirent.verbose_info, dirent.str_timestamp) verbose_name = "%s (%d bytes, sector map@%d) %s %s" % (dirent.filename, dirent.length, dirent.starting_sector, dirent.verbose_info, dirent.str_timestamp)
raw = self.rawdata.get_indexed(byte_order) raw = self.rawdata.get_indexed(byte_order)
segment = DefaultSegment(raw, name=name, verbose_name=verbose_name) segment = DefaultSegment(raw, name=name, verbose_name=verbose_name)
else: else:
segment = EmptySegment(self.rawdata, name=dirent.get_filename(), error=dirent.str_timestamp) segment = EmptySegment(self.rawdata, name=dirent.filename, error=dirent.str_timestamp)
return segment return segment