1
0
Fork 0

Optimizing now optimized, Linux accommodations

This commit is contained in:
JoshuaMKW 2020-11-07 02:41:27 -06:00
parent f185dc072e
commit d98bb4ff70
3 changed files with 26 additions and 17 deletions

View file

@ -71,7 +71,12 @@ class SettingsWindow(QtWidgets.QDialog):
def setup_ui(self): def setup_ui(self):
self.setObjectName("Dialog") self.setObjectName("Dialog")
self.setFixedSize(300, 210)
if sys.platform == "win32":
self.setFixedSize(300, 210)
else:
self.setFixedSize(370, 210)
self.setModal(True) self.setModal(True)
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(resource_path(os.path.join("bin", "icon.ico"))), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon.addPixmap(QtGui.QPixmap(resource_path(os.path.join("bin", "icon.ico"))), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@ -79,7 +84,12 @@ class SettingsWindow(QtWidgets.QDialog):
#Buttonbox #Buttonbox
self.buttonBox = QtWidgets.QDialogButtonBox(self) self.buttonBox = QtWidgets.QDialogButtonBox(self)
self.buttonBox.setFixedSize(280, 30)
if sys.platform == "win32":
self.buttonBox.setFixedSize(280, 30)
else:
self.buttonBox.setFixedSize(350, 30)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox") self.buttonBox.setObjectName("buttonBox")

View file

@ -1,7 +1,7 @@
from io import BytesIO from io import BytesIO
import tools import tools
from fileutils import * from fileutils import read_uint32, write_uint32, align_byte_size
class UnmappedAddressError(Exception): pass class UnmappedAddressError(Exception): pass
class SectionCountFullError(Exception): pass class SectionCountFullError(Exception): pass
@ -9,7 +9,7 @@ class AddressOutOfRangeError(Exception): pass
class DolFile(object): class DolFile(object):
class SectionType(): class SectionType:
Text = 0 Text = 0
Data = 1 Data = 1
@ -64,7 +64,7 @@ class DolFile(object):
return "Nintendo DOL format executable for the Wii and Gamecube" return "Nintendo DOL format executable for the Wii and Gamecube"
# Internal function for # Internal function for
def resolve_address(self, gcAddr) -> tuple: def resolve_address(self, gcAddr: int) -> tuple:
""" Returns the data of the section that houses the given address\n """ Returns the data of the section that houses the given address\n
UnmappedAddressError is raised when the address is unmapped """ UnmappedAddressError is raised when the address is unmapped """
@ -77,7 +77,7 @@ class DolFile(object):
raise UnmappedAddressError(f"Unmapped address: 0x{gcAddr:X}") raise UnmappedAddressError(f"Unmapped address: 0x{gcAddr:X}")
def seek_nearest_unmapped(self, gcAddr, buffer=0) -> int: def seek_nearest_unmapped(self, gcAddr: int, buffer=0) -> int:
'''Returns the nearest unmapped address (greater) if the given address is already taken by data''' '''Returns the nearest unmapped address (greater) if the given address is already taken by data'''
for _, address, size, _, _ in self.textSections: for _, address, size, _, _ in self.textSections:
@ -316,10 +316,7 @@ class DolFile(object):
self.seek(bAddr) self.seek(bAddr)
ppc = read_uint32(self) ppc = read_uint32(self)
conditional = False conditional = (ppc >> 24) & 0xFF < 0x48
if (ppc >> 24) & 0xFF < 0x48:
conditional = True
if conditional is True: if conditional is True:
if (ppc & 0x8000): if (ppc & 0x8000):

View file

@ -48,10 +48,9 @@ class GCT(object):
or codetype.startswith(b'\x18') or codetype.startswith(b'\x18')): or codetype.startswith(b'\x18') or codetype.startswith(b'\x18')):
return 0x16 return 0x16
elif (codetype.startswith(b'\xC2') or codetype.startswith(b'\xC4') elif (codetype.startswith(b'\xC0') or codetype.startswith(b'\xC2') or codetype.startswith(b'\xC4')
or codetype.startswith(b'\xC3') or codetype.startswith(b'\xC5') or codetype.startswith(b'\xC3') or codetype.startswith(b'\xC5') or codetype.startswith(b'\xD2')
or codetype.startswith(b'\xD2') or codetype.startswith(b'\xD4') or codetype.startswith(b'\xD4') or codetype.startswith(b'\xD3') or codetype.startswith(b'\xD5')):
or codetype.startswith(b'\xD3') or codetype.startswith(b'\xD5')):
return 0x8 + (int.from_bytes(info, byteorder='big', signed=False) << 3) return 0x8 + (int.from_bytes(info, byteorder='big', signed=False) << 3)
elif (codetype.startswith(b'\xF2') or codetype.startswith(b'\xF3') elif (codetype.startswith(b'\xF2') or codetype.startswith(b'\xF3')
@ -68,10 +67,13 @@ class GCT(object):
codelist = b'\x00\xD0\xC0\xDE'*2 codelist = b'\x00\xD0\xC0\xDE'*2
skipcodes = 0 skipcodes = 0
with open(os.path.join(os.path.expanduser("~"), "Desktop", "suss.gct"), "wb") as suss:
suss.write(self.codeList.getbuffer())
self.codeList.seek(8) self.codeList.seek(8)
while codetype := self.codeList.read(4): while codetype := self.codeList.read(4):
info = self.codeList.read(4) info = self.codeList.read(4)
address = 0x80000000 | (int.from_bytes(codetype, byteorder='big', signed=False) & 0x01FFFFFF) address = 0x80000000 | (int.from_bytes(codetype, byteorder='big', signed=False) & 0x1FFFFFF)
try: try:
if skipcodes <= 0: if skipcodes <= 0:
if (codetype.startswith(b'\x00') or codetype.startswith(b'\x01') if (codetype.startswith(b'\x00') or codetype.startswith(b'\x01')
@ -153,7 +155,7 @@ class GCT(object):
elif (codetype.startswith(b'\xC6') or codetype.startswith(b'\xC7') elif (codetype.startswith(b'\xC6') or codetype.startswith(b'\xC7')
or codetype.startswith(b'\xC6') or codetype.startswith(b'\xC7')): or codetype.startswith(b'\xC6') or codetype.startswith(b'\xC7')):
dolFile.seek(address) dolFile.seek(address)
dolFile.insert_branch(int.from_bytes(info, byteorder='big', signed=False), dolFile.tell()) dolFile.insert_branch(int.from_bytes(info, byteorder='big', signed=False), address)
continue continue
if codetype.hex().startswith('2') or codetype.hex().startswith('3'): if codetype.hex().startswith('2') or codetype.hex().startswith('3'):
@ -166,7 +168,7 @@ class GCT(object):
codelist += b'\xF0\x00\x00\x00\x00\x00\x00\x00' codelist += b'\xF0\x00\x00\x00\x00\x00\x00\x00'
break break
self.codeList.seek(-8, 1)*5 self.codeList.seek(-8, 1)
length = GCT.determine_codelength(codetype, info) length = GCT.determine_codelength(codetype, info)
while length > 0: while length > 0: