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