merged with xandark

This commit is contained in:
Charles Mangin 2015-08-16 07:48:52 -04:00
commit 0cc11c31ce
4 changed files with 53 additions and 30 deletions

BIN
.DS_Store vendored

Binary file not shown.

3
.gitignore vendored
View File

@ -1 +1,4 @@
.DS_Store
*/.DS_Store
.DS_Store

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

View File

@ -12,6 +12,8 @@
import os,sys # filesystem functions
import subprocess
try:
import png # PNG image library
@ -26,12 +28,25 @@ except:
print("\n\nUsage: python "+ sys.argv[0] +" [filename]\n\n [filename] should be a .DSK file of 143kb.\n")
sys.exit(1) # exit on exception - no file chosen
TEMPFILENAME = "DiskImageTEMP.png"
PNG = open(TEMPFILENAME, "wb") # open a PNG for writing
print("Checking " + INPUTFILE + "...\n")
# to do: check for 140k 5.25'' disks vs 400k/800k 3.5'' and adjust accordingly
if (os.path.getsize(INPUTFILE)) != 143360: # check file size. for 5.25'', it needs to be 143k
print("\n\nOops. Is " + INPUTFILE + " a DSK file of 143kb?\n\n")
sys.exit(1) # exit on exception - file is empty, etc
# The point: Make a PNG image from the data on a floppy disk image.
# 35 tracks, each with 16 sectors of 256 bytes each, for a total of 143,360 bytes
# 5.15'' disks have 35 tracks, each with 16 sectors of 256 bytes each, for a total of 143,360 bytes
# so 35 lines of 4096 px.
TRACKS = 35
SECTORS = 16
BYTESPERSECTOR = 256
TEMPFILENAME = "DiskImageTEMP.png"
PNG = open("DiskImageTEMP.png", "wb") # open a PNG for writing
# new, empty arrays
BYTES = []
@ -50,9 +65,9 @@ except:
print("\n Starting.\n")
for TRACK in range(0,35,1): # for each of the 35 tracks
for TRACK in range(0,TRACKS,1): # for each of the 35 tracks
LINE=[] # start a new line of pixels
for SECTOR in range(0,4096,1): # write the bytes for the sectors in that track to the line array
for SECTOR in range(0,SECTORS*BYTESPERSECTOR,1): # write the bytes for the sectors in that track to the line array
offset = (SECTOR * TRACK) + SECTOR
LINE.append(BYTES[(SECTOR * TRACK) + SECTOR])
@ -62,11 +77,11 @@ for TRACK in range(0,35,1): # for each of the 35 tracks
print("\n Done.\n")
# write to the PNG file
w = png.Writer(4096,35, greyscale=True, bitdepth=8)
w = png.Writer(SECTORS*BYTESPERSECTOR,TRACKS, greyscale=True, bitdepth=8)
w.write(PNG, PIXELS) # each number in the array becomes a pixel in the image. each array becomes a line.
print(" Writing to disk. Chunka-chunk-cka. Whirr...\n")
sys.stdout.write("\n\n\r Writing bytes to disk. Chunka-chunka-chunk. Whirr.\n\n")
sys.stdout.flush()
DSK.close() # done with these files. close them.
PNG.close()
@ -75,11 +90,16 @@ PNG.close()
OUTPUTFILE = os.path.join(INPUTFILE + ".png")
# set a destination file same as DSK, but with PNG extension
os.system('convert '+TEMPFILENAME+' -matte -virtual-pixel transparent -resize 1024x1024! -rotate 90 -distort Polar "512 110 512,512 -180,180" "'+OUTPUTFILE+'"')
# Using ImageMagick, convert the 4096x35px image to a square, rotate, then rotate around an axis.
# NOTE: Windows command line needs to have Polar coordinates enquoted with " not '
# NOTE: Windows has a native command called convert which does something very different
# from ImageMagick's convert command, so obviously this will fail if IM is not installed
try:
subprocess.call(['convert', 'DiskImageTEMP.png', '-matte', '-virtual-pixel', 'transparent', '-resize', '1024x1024!', '-rotate', '90', '-distort', 'Polar', '512 110 512,512 -180,180', OUTPUTFILE])
# convert the 4096x35px image to a square, rotate, then rotate around an axis.
except OSError:
print("\n\nOops. This script requires ImageMagick: http://www.imagemagick.org/")
sys.exit(1) # exit on exception - needs imagemagick installed
if 'win32' in sys.platform:
# Because the Windows "start" commandline command cannot take an enquoted file or pathname,