mirror of
https://github.com/grp/Wii.py.git
synced 2025-06-19 07:15:49 -04:00
Added a class to deal with the setting.txt
This commit is contained in:
parent
336fa401e6
commit
913a5175a0
93
other.py
93
other.py
@ -10,7 +10,100 @@ from struct import *
|
|||||||
from common import *
|
from common import *
|
||||||
from title import *
|
from title import *
|
||||||
|
|
||||||
|
class CONF:
|
||||||
|
""" This class deal with setting.txt wich hold some wii info like game area and wii serial number """
|
||||||
|
|
||||||
|
def __init__(self, f):
|
||||||
|
self.conf = ''
|
||||||
|
self.keys = {}
|
||||||
|
self.keyNames = []
|
||||||
|
self.lastKeyOffset = 0
|
||||||
|
self.totalKeys = 0
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.fp = open(f, 'r+b')
|
||||||
|
except:
|
||||||
|
self.fp = open(f, 'w+b')
|
||||||
|
return
|
||||||
|
|
||||||
|
self.conf = self.fp.read(0x100)
|
||||||
|
self.conf = self.xorConf(self.conf)
|
||||||
|
self.fp.seek(0)
|
||||||
|
|
||||||
|
keys = self.conf.split('\r\n')
|
||||||
|
|
||||||
|
self.lastKeyOffset = self.conf.rfind('\r\n') + 2
|
||||||
|
self.totalKeys = len(keys) - 1
|
||||||
|
|
||||||
|
for x in range(self.totalKeys):
|
||||||
|
keyName = keys[x].split('=')[0]
|
||||||
|
keyVal = keys[x].split('=')[1]
|
||||||
|
|
||||||
|
self.keyNames.append(keyName)
|
||||||
|
self.keys[keyName] = keyVal
|
||||||
|
|
||||||
|
def getKeysCount(self):
|
||||||
|
return self.totalKeys
|
||||||
|
|
||||||
|
def getKeysName(self):
|
||||||
|
return self.keyNames
|
||||||
|
|
||||||
|
def getKeyValue(self, key):
|
||||||
|
try:
|
||||||
|
return self.keys[key.upper()]
|
||||||
|
except KeyError:
|
||||||
|
return 'Key not found'
|
||||||
|
|
||||||
|
def setKeyValue(self, key, value):
|
||||||
|
if self.getKeyValue(key.upper()) != 'Key not found':
|
||||||
|
self.keys[key.upper()] = value.upper()
|
||||||
|
|
||||||
|
self.conf = ''
|
||||||
|
|
||||||
|
for key in self.keys:
|
||||||
|
self.conf += key
|
||||||
|
self.conf += '='
|
||||||
|
self.conf += self.keys[key]
|
||||||
|
self.conf += '\r\n'
|
||||||
|
|
||||||
|
self.fp.seek(0)
|
||||||
|
self.fp.write(self.xorConf(self.conf))
|
||||||
|
self.fp.write('\x00' * (0x100 - len(self.conf)))
|
||||||
|
|
||||||
|
self.lastKeyOffset = self.conf.rfind('\r\n') + 2
|
||||||
|
|
||||||
|
def keyExist(self, key):
|
||||||
|
if self.getKeyValue(key.upper()) != 'Key not found':
|
||||||
|
return 0
|
||||||
|
else:
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def addKey(self, key, value):
|
||||||
|
if self.lastKeyOffset + len(key) + 1 + len(value) + 2 > 0x100:
|
||||||
|
return -1
|
||||||
|
if not self.keyExist(key):
|
||||||
|
return -2
|
||||||
|
|
||||||
|
self.keys[key.upper()] = value.upper()
|
||||||
|
self.keyNames.append(key.upper())
|
||||||
|
self.totalKeys +=1
|
||||||
|
|
||||||
|
self.conf = self.conf[:self.lastKeyOffset] + key.upper() + '=' + value.upper() + '\r\n'
|
||||||
|
|
||||||
|
self.lastKeyOffset += len(key) + 1 + len(value) + 2
|
||||||
|
|
||||||
|
self.fp.seek(0)
|
||||||
|
self.fp.write(self.xorConf(self.conf))
|
||||||
|
|
||||||
|
def xorConf(self, conf):
|
||||||
|
xorKey = 0x73B5DBFA
|
||||||
|
out = ''
|
||||||
|
for x in range(len(conf)):
|
||||||
|
out += chr(ord(conf[x]) ^ xorKey & 0xFF)
|
||||||
|
xorKey = (xorKey << 1) | (xorKey >> 31)
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
class iplsave:
|
class iplsave:
|
||||||
"""This class performs all iplsave.bin related things. It includes functions to add a title to the list, remove a title based upon position or title, and move a title from one position to another."""
|
"""This class performs all iplsave.bin related things. It includes functions to add a title to the list, remove a title based upon position or title, and move a title from one position to another."""
|
||||||
class IPLSAVE_Entry(Struct):
|
class IPLSAVE_Entry(Struct):
|
||||||
|
Loading…
Reference in New Issue
Block a user