From 8607aacc15e9a2d304a18b1d311ba6eabc9b5236 Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 3 Dec 2020 10:49:40 +0000 Subject: [PATCH 1/2] Fix rewind() with bit_count > 1 --- wozardry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wozardry.py b/wozardry.py index 44c524d..de0c6de 100755 --- a/wozardry.py +++ b/wozardry.py @@ -170,8 +170,8 @@ class Track: n += b << bit_index yield n - def rewind(self, bit_count): - self.bit_index -= 1 + def rewind(self, bit_count=1): + self.bit_index -= bit_count if self.bit_index < 0: self.bit_index = self.bit_count - 1 self.revolutions -= 1 From e98c6937497c3262a94fd6502c33872dddc90e31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Champailler?= Date: Sun, 7 Aug 2022 21:10:36 +0200 Subject: [PATCH 2/2] seek() returns flux data if needed --- wozardry.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/wozardry.py b/wozardry.py index 1e72c4d..a675e1d 100755 --- a/wozardry.py +++ b/wozardry.py @@ -724,11 +724,27 @@ class WozDiskImage: i += 1 def seek(self, track_num): - """returns Track object for the given track, or None if the track is not part of this disk image. track_num can be 0..40 in 0.25 increments (0, 0.25, 0.5, 0.75, 1, &c.)""" + """returns Track object for the given track, or None if the + track is not part of this disk image. track_num can be 0..40 + in 0.25 increments (0, 0.25, 0.5, 0.75, 1, &c.)""" + half_phase = self.track_num_to_half_phase(track_num) trk_id = self.tmap[half_phase] - if trk_id == 0xFF: return None - return self.tracks[trk_id] + if trk_id != 0xFF: + return self.tracks[trk_id] + elif (self.info["version"] >= 3) and (self.flux): + # Empty track or flux track + trk_id = self.flux[half_phase] + if trk_id != 0xFF: + # Flux track + return self.tracks[trk_id] + else: + # Empty flux track AND empty track + # This should not happen + return None + else: + # Empty track + return None def from_json(self, json_string): j = json.loads(json_string)