Wrapped entire code block in try to catch exceptions
Added a few different exceptions that are likely to happen when trying to use this tool. It then offers useful feedback and quits.
This commit is contained in:
parent
48df386b7e
commit
487f6ffb46
1 changed files with 72 additions and 62 deletions
134
mspconvert.py
134
mspconvert.py
|
@ -23,72 +23,82 @@ static unsigned char {0}_bits [] =
|
|||
|
||||
outputData = b''
|
||||
|
||||
with open(filename + ".MSP", 'rb') as f:
|
||||
versionString = f.read(4)
|
||||
if versionString == b'\x4c\x69\x6e\x53':
|
||||
version = 2
|
||||
elif versionString == b'\x44\x61\x6e\x4d':
|
||||
version = 1
|
||||
else:
|
||||
print("The given file {0}.MSP is not a valid Microsoft Paint file!".format(filename))
|
||||
sys.exit(255)
|
||||
try:
|
||||
with open(filename + ".MSP", 'rb') as f:
|
||||
versionString = f.read(4)
|
||||
if versionString == b'\x4c\x69\x6e\x53':
|
||||
version = 2
|
||||
elif versionString == b'\x44\x61\x6e\x4d':
|
||||
version = 1
|
||||
else:
|
||||
print("The given file {0}.MSP is not a valid Microsoft Paint file!".format(filename))
|
||||
sys.exit(255)
|
||||
|
||||
if version == 2:
|
||||
print("Version 2 Paint file detected...")
|
||||
width = int.from_bytes(f.read(2), "little")
|
||||
height = int.from_bytes(f.read(2), "little")
|
||||
size = int((width * height) / 8)
|
||||
f.seek((height * 2) + 32) # seek to the start of image data
|
||||
while(byte := f.read(1)):
|
||||
if(int.from_bytes(byte, "little") == 0): # RLL-encoded
|
||||
rllLen = int.from_bytes(f.read(1), "little")
|
||||
rllValue = f.read(1)
|
||||
for i in range(0,rllLen):
|
||||
outputData += rllValue
|
||||
size -= 1
|
||||
else:
|
||||
rllLen = int.from_bytes(byte, "little")
|
||||
for i in range(0,rllLen):
|
||||
outputData += f.read(1)
|
||||
size -= 1
|
||||
print("Remaining size: {0}".format(size))
|
||||
for i in range(0, size):
|
||||
outputData += b'\xff'
|
||||
if version == 2:
|
||||
print("Version 2 Paint file detected...")
|
||||
width = int.from_bytes(f.read(2), "little")
|
||||
height = int.from_bytes(f.read(2), "little")
|
||||
size = int((width * height) / 8)
|
||||
f.seek((height * 2) + 32) # seek to the start of image data
|
||||
while(byte := f.read(1)):
|
||||
if(int.from_bytes(byte, "little") == 0): # RLL-encoded
|
||||
rllLen = int.from_bytes(f.read(1), "little")
|
||||
rllValue = f.read(1)
|
||||
for i in range(0,rllLen):
|
||||
outputData += rllValue
|
||||
size -= 1
|
||||
else:
|
||||
rllLen = int.from_bytes(byte, "little")
|
||||
for i in range(0,rllLen):
|
||||
outputData += f.read(1)
|
||||
size -= 1
|
||||
print("Remaining size: {0}".format(size))
|
||||
for i in range(0, size):
|
||||
outputData += b'\xff'
|
||||
|
||||
with open(filename + "_converted.xbm", 'w') as f:
|
||||
print("Writing output file...")
|
||||
f.write(outputString.format(filename, width, height))
|
||||
f.write(" {")
|
||||
with open(filename + "_converted.xbm", 'w') as f:
|
||||
print("Writing output file...")
|
||||
f.write(outputString.format(filename, width, height))
|
||||
f.write(" {")
|
||||
q = 0
|
||||
for byte in outputData:
|
||||
result = int('{:08b}'.format(byte)[::-1], 2)
|
||||
f.write("0x" + '{:x}'.format(result) + ", ")
|
||||
q += 1
|
||||
if q >= 16:
|
||||
f.write("\n")
|
||||
q = 0
|
||||
f.write(" };")
|
||||
print("Done!")
|
||||
sys.exit(0)
|
||||
elif version == 1:
|
||||
print("Version 1 Paint detected...")
|
||||
width = int.from_bytes(f.read(2), "little")
|
||||
height = int.from_bytes(f.read(2), "little")
|
||||
f.seek(28)
|
||||
q = 0
|
||||
for byte in outputData:
|
||||
result = int('{:08b}'.format(byte)[::-1], 2)
|
||||
f.write("0x" + '{:x}'.format(result) + ", ")
|
||||
outputString = outputString.format(filename, width, height)
|
||||
outputString += " {\n"
|
||||
while(byte := f.read(1)):
|
||||
result = int('{:08b}'.format(int.from_bytes(byte, "big"))[::-1], 2)
|
||||
outputString += "0x" + '{:x}'.format(result) + ", "
|
||||
q += 1
|
||||
if q >= 16:
|
||||
f.write("\n")
|
||||
outputString += "\n"
|
||||
q = 0
|
||||
f.write(" };")
|
||||
print("Done!")
|
||||
sys.exit(0)
|
||||
elif version == 1:
|
||||
print("Version 1 Paint detected...")
|
||||
width = int.from_bytes(f.read(2), "little")
|
||||
height = int.from_bytes(f.read(2), "little")
|
||||
f.seek(28)
|
||||
q = 0
|
||||
outputString = outputString.format(filename, width, height)
|
||||
outputString += " {\n"
|
||||
while(byte := f.read(1)):
|
||||
result = int('{:08b}'.format(int.from_bytes(byte, "big"))[::-1], 2)
|
||||
outputString += "0x" + '{:x}'.format(result) + ", "
|
||||
q += 1
|
||||
if q >= 16:
|
||||
outputString += "\n"
|
||||
q = 0
|
||||
outputString += " };"
|
||||
outputString += " };"
|
||||
|
||||
with open(filename + "_converted.xbm", 'w') as f:
|
||||
print("Writing output file...")
|
||||
f.write(outputString)
|
||||
print("Done!")
|
||||
sys.exit(0)
|
||||
with open(filename + "_converted.xbm", 'w') as f:
|
||||
print("Writing output file...")
|
||||
f.write(outputString)
|
||||
print("Done!")
|
||||
sys.exit(0)
|
||||
except FileNotFoundError:
|
||||
print("{0}.MSP does not exist! Quitting...".format(filename))
|
||||
sys.exit(255)
|
||||
except PermissionError:
|
||||
print("Unable to open {0}.MSP -- insufficient permissions! Quitting...".format(filename))
|
||||
sys.exit(255)
|
||||
except Exception:
|
||||
print("Something went wrong! Quitting...")
|
||||
sys.exit(255)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue