From 9907050f5caab12898fed4225c496af618d38aab Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Tue, 22 Dec 2015 19:57:17 -0800 Subject: [PATCH] Added methods to allow overriding of segment type in subclasses * updated to version 1.3.0 --- atrcopy.py | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/atrcopy.py b/atrcopy.py index 6e509ca..5d2a5f7 100755 --- a/atrcopy.py +++ b/atrcopy.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -__version__ = "1.1.1" +__version__ = "1.3.0" import struct @@ -245,6 +245,13 @@ class AtariDosFile(object): def __str__(self): return "\n".join(str(s) for s in self.segments) + "\n" + def get_obj_segment(self, metadata_start, data_start, start_addr, end_addr, data, name=""): + """Subclass use: override this method to create a custom segment. + + By default uses an ObjSegment + """ + return ObjSegment(metadata_start, data_start, start_addr, end_addr, data, name) + def parse_segments(self): bytes = self.data pos = 0 @@ -259,15 +266,15 @@ class AtariDosFile(object): raise InvalidBinaryFile first = False if len(bytes[pos:pos + 4]) < 4: - self.segments.append(ObjSegment(0, 0, bytes[pos:pos + 4], "Short Segment Header")) + self.segments.append(self.get_obj_segment(0, 0, bytes[pos:pos + 4], "Short Segment Header")) break start, end = struct.unpack(" 0: - self.segments.append(ObjSegment(0, 0, 0, self.header.atr_header_offset, self.bytes[0:self.header.atr_header_offset], name="%s Header" % self.header.file_format)) - self.segments.append(RawSectorsSegment(1, self.header.max_sectors, self.header.size_in_bytes, self.bytes[self.header.atr_header_offset:], name="Raw disk sectors")) + self.segments.append(self.get_obj_segment(0, 0, 0, self.header.atr_header_offset, self.bytes[0:self.header.atr_header_offset], name="%s Header" % self.header.file_format)) + self.segments.append(self.get_raw_sectors_segment(1, self.header.max_sectors, self.header.size_in_bytes, self.bytes[self.header.atr_header_offset:], name="Raw disk sectors")) self.segments.extend(self.get_boot_segments()) self.segments.extend(self.get_vtoc_segments()) self.segments.extend(self.get_directory_segments())