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''
|
outputData = b''
|
||||||
|
|
||||||
with open(filename + ".MSP", 'rb') as f:
|
try:
|
||||||
versionString = f.read(4)
|
with open(filename + ".MSP", 'rb') as f:
|
||||||
if versionString == b'\x4c\x69\x6e\x53':
|
versionString = f.read(4)
|
||||||
version = 2
|
if versionString == b'\x4c\x69\x6e\x53':
|
||||||
elif versionString == b'\x44\x61\x6e\x4d':
|
version = 2
|
||||||
version = 1
|
elif versionString == b'\x44\x61\x6e\x4d':
|
||||||
else:
|
version = 1
|
||||||
print("The given file {0}.MSP is not a valid Microsoft Paint file!".format(filename))
|
else:
|
||||||
sys.exit(255)
|
print("The given file {0}.MSP is not a valid Microsoft Paint file!".format(filename))
|
||||||
|
sys.exit(255)
|
||||||
|
|
||||||
if version == 2:
|
if version == 2:
|
||||||
print("Version 2 Paint file detected...")
|
print("Version 2 Paint file detected...")
|
||||||
width = int.from_bytes(f.read(2), "little")
|
width = int.from_bytes(f.read(2), "little")
|
||||||
height = int.from_bytes(f.read(2), "little")
|
height = int.from_bytes(f.read(2), "little")
|
||||||
size = int((width * height) / 8)
|
size = int((width * height) / 8)
|
||||||
f.seek((height * 2) + 32) # seek to the start of image data
|
f.seek((height * 2) + 32) # seek to the start of image data
|
||||||
while(byte := f.read(1)):
|
while(byte := f.read(1)):
|
||||||
if(int.from_bytes(byte, "little") == 0): # RLL-encoded
|
if(int.from_bytes(byte, "little") == 0): # RLL-encoded
|
||||||
rllLen = int.from_bytes(f.read(1), "little")
|
rllLen = int.from_bytes(f.read(1), "little")
|
||||||
rllValue = f.read(1)
|
rllValue = f.read(1)
|
||||||
for i in range(0,rllLen):
|
for i in range(0,rllLen):
|
||||||
outputData += rllValue
|
outputData += rllValue
|
||||||
size -= 1
|
size -= 1
|
||||||
else:
|
else:
|
||||||
rllLen = int.from_bytes(byte, "little")
|
rllLen = int.from_bytes(byte, "little")
|
||||||
for i in range(0,rllLen):
|
for i in range(0,rllLen):
|
||||||
outputData += f.read(1)
|
outputData += f.read(1)
|
||||||
size -= 1
|
size -= 1
|
||||||
print("Remaining size: {0}".format(size))
|
print("Remaining size: {0}".format(size))
|
||||||
for i in range(0, size):
|
for i in range(0, size):
|
||||||
outputData += b'\xff'
|
outputData += b'\xff'
|
||||||
|
|
||||||
with open(filename + "_converted.xbm", 'w') as f:
|
with open(filename + "_converted.xbm", 'w') as f:
|
||||||
print("Writing output file...")
|
print("Writing output file...")
|
||||||
f.write(outputString.format(filename, width, height))
|
f.write(outputString.format(filename, width, height))
|
||||||
f.write(" {")
|
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
|
q = 0
|
||||||
for byte in outputData:
|
outputString = outputString.format(filename, width, height)
|
||||||
result = int('{:08b}'.format(byte)[::-1], 2)
|
outputString += " {\n"
|
||||||
f.write("0x" + '{:x}'.format(result) + ", ")
|
while(byte := f.read(1)):
|
||||||
|
result = int('{:08b}'.format(int.from_bytes(byte, "big"))[::-1], 2)
|
||||||
|
outputString += "0x" + '{:x}'.format(result) + ", "
|
||||||
q += 1
|
q += 1
|
||||||
if q >= 16:
|
if q >= 16:
|
||||||
f.write("\n")
|
outputString += "\n"
|
||||||
q = 0
|
q = 0
|
||||||
f.write(" };")
|
outputString += " };"
|
||||||
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 += " };"
|
|
||||||
|
|
||||||
with open(filename + "_converted.xbm", 'w') as f:
|
with open(filename + "_converted.xbm", 'w') as f:
|
||||||
print("Writing output file...")
|
print("Writing output file...")
|
||||||
f.write(outputString)
|
f.write(outputString)
|
||||||
print("Done!")
|
print("Done!")
|
||||||
sys.exit(0)
|
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