1
0
mirror of https://github.com/gryf/uc1541.git synced 2026-02-02 11:55:44 +01:00

2 Commits
v2.3 ... v2.5

Author SHA1 Message Date
1346a2fcf8 Fixed bug with filenames started with a '-' sign. 2012-10-16 15:50:05 +02:00
fa3efe5f9f Fixed endless loop bug in Python D64 implementation 2012-09-30 14:51:36 +02:00

37
uc1541
View File

@@ -50,6 +50,9 @@ of error cause if any.
UC1541_HIDE_DEL - if set, no DEL entries will be shown
Changelog:
2.5 Fixed bug with filenames started with a '-' sign.
2.4 Fixed endless loop bug for reading directory in Python implemented
directory reader.
2.3 Re added and missing method _correct_fname used for writing files
into d64 image.
2.2 Fixed bug(?) with unusual sector end (marked as sector 0, not 255),
@@ -68,8 +71,8 @@ Changelog:
1.0 Initial release
Author: Roman 'gryf' Dobosz <gryf73@gmail.com>
Date: 2012-09-24
Version: 2.3
Date: 2012-10-15
Version: 2.5
Licence: BSD
"""
@@ -156,6 +159,7 @@ class D64(object):
self.next_sector = 0
self.next_track = None
self._dir_contents = []
self._already_done = []
def _map_filename(self, string):
"""
@@ -172,6 +176,10 @@ class D64(object):
character = D64.CHAR_MAP.get(ord(chr_), '?')
filename.append(character)
# special cases
if filename[0] == "-":
filename[0] = "?"
LOG.debug("string: ``%s'' mapped to: ``%s''", string,
"".join(filename))
return "".join(filename)
@@ -182,7 +190,11 @@ class D64(object):
Return False if the chain ends, True otherwise
"""
if self.next_track == 0 and self.next_sector in (0, 255):
# Well, self.next_sector _should_ have value $FF, but apparently there
# are the cases where it is not, therefore checking for that will not
# be performed and value of $00 on the next track will end the
# directory
if self.next_track == 0:
LOG.debug("End of directory")
return False
@@ -198,6 +210,15 @@ class D64(object):
self.next_track = ord(self.current_sector_data[0])
self.next_sector = ord(self.current_sector_data[1])
if (self.next_track, self.next_sector) in self._already_done:
# Just a failsafe. Endless loop is not what is expected.
LOG.debug("Loop in track/sector pointer at %d,%d",
self.next_track, self.next_sector)
self._already_done = []
return False
self._already_done.append((self.next_track, self.next_sector))
LOG.debug("Next track: %s,%s", self.next_track, self.next_sector)
return True
@@ -418,9 +439,13 @@ class Uc1541(object):
if '/' in display_name:
display_name = display_name.replace('/', '|')
# workaround for space at the beggining of the filename
if display_name[0] == ' ':
display_name = '~' + display_name[1:]
# workaround for space and dash at the beggining of the
# filename
char_map = {' ': '~',
'-': '_'}
display_name = "".join([char_map.get(display_name[0],
display_name[0]),
display_name[1:]])
if ext == 'del':
perms = "----------"