| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | # greaseweazle/image/img.py## Written & released by Keir Fraser <keir.xen@gmail.com>## This is free and unencumbered software released into the public domain.# See the file COPYING for more details, or visit <http://unlicense.org>.from greaseweazle import errorfrom greaseweazle.codec.ibm import mfmfrom .image import Imageclass IMG(Image):    default_format = 'ibm.mfm'    def __init__(self):        self.to_track = dict()    @classmethod    def from_file(cls, name):        with open(name, "rb") as f:            dat = f.read()        img = cls()        nsec = 18        tsz = nsec * 512        ncyl = len(dat) // (tsz*2)        pos = 0        for cyl in range(ncyl):            for head in range(2):                track = mfm.IBM_MFM_1M44(cyl, head)                track.set_img_track(dat[pos:pos+tsz])                pos += tsz                img.to_track[cyl,head] = track        return img    def get_track(self, cyl, side):        if (cyl,side) not in self.to_track:            return None        return self.to_track[cyl,side].raw_track()    def emit_track(self, cyl, side, track):        self.to_track[cyl,side] = track    def get_image(self):        tdat = bytearray()        n_side = 2        n_cyl = max(self.to_track.keys(), default=(0), key=lambda x:x[0])[0]        n_cyl += 1        for cyl in range(n_cyl):            for head in range(n_side):                if (cyl,head) in self.to_track:                    tdat += self.to_track[cyl,head].get_img_track()        return tdat# Local variables:# python-indent: 4# End:
 |