img.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # greaseweazle/image/img.py
  2. #
  3. # Written & released by Keir Fraser <keir.xen@gmail.com>
  4. #
  5. # This is free and unencumbered software released into the public domain.
  6. # See the file COPYING for more details, or visit <http://unlicense.org>.
  7. from greaseweazle import error
  8. from greaseweazle.codec.ibm import mfm
  9. from .image import Image
  10. class IMG(Image):
  11. default_format = 'ibm.mfm'
  12. def __init__(self):
  13. self.to_track = dict()
  14. @classmethod
  15. def from_file(cls, name):
  16. with open(name, "rb") as f:
  17. dat = f.read()
  18. img = cls()
  19. nsec = 18
  20. tsz = nsec * 512
  21. ncyl = len(dat) // (tsz*2)
  22. pos = 0
  23. for cyl in range(ncyl):
  24. for head in range(2):
  25. track = mfm.IBM_MFM_1M44(cyl, head)
  26. track.set_img_track(dat[pos:pos+tsz])
  27. pos += tsz
  28. img.to_track[cyl,head] = track
  29. return img
  30. def get_track(self, cyl, side):
  31. if (cyl,side) not in self.to_track:
  32. return None
  33. return self.to_track[cyl,side].raw_track()
  34. def emit_track(self, cyl, side, track):
  35. self.to_track[cyl,side] = track
  36. def get_image(self):
  37. tdat = bytearray()
  38. n_side = 2
  39. n_cyl = max(self.to_track.keys(), default=(0), key=lambda x:x[0])[0]
  40. n_cyl += 1
  41. for cyl in range(n_cyl):
  42. for head in range(n_side):
  43. if (cyl,head) in self.to_track:
  44. tdat += self.to_track[cyl,head].get_img_track()
  45. return tdat
  46. # Local variables:
  47. # python-indent: 4
  48. # End: