From a349c8da52436b4817dafe0a8a4146967faac467 Mon Sep 17 00:00:00 2001 From: _ <_> Date: Tue, 24 Apr 2018 21:19:44 -0700 Subject: [PATCH] Added pythonic PLDHeader object --- bindings/py3devil1.py | 51 +++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/bindings/py3devil1.py b/bindings/py3devil1.py index 82bb2a0..a3ed6d2 100755 --- a/bindings/py3devil1.py +++ b/bindings/py3devil1.py @@ -1,8 +1,8 @@ #!/usr/bin/python3 -import ctypes +import ctypes, sys #--------------------------------------+ -# Devil 1: PLD +# Devil 1: PLD Base #--------------------------------------+ class PldHeader(ctypes.Structure): @@ -12,12 +12,6 @@ class PldHeader(ctypes.Structure): ("offsets", ctypes.POINTER(ctypes.c_int)) ] - def getoffsets(self): - pyoffsets = [] - for i in range(0, self.numOffset): - pyoffsets.append(self.offsets[i]) - return pyoffsets - class Devil1PLD_FN(ctypes.Structure): _fields_ = [ ("getheader" , ctypes.CFUNCTYPE( @@ -33,7 +27,7 @@ class Devil1PLD_FN(ctypes.Structure): ] #--------------------------------------+ -# Devil 1: TEX +# Devil 1: TEX Base #--------------------------------------+ class TexturePack(ctypes.Structure): @@ -104,7 +98,7 @@ class Devil1TEX_FN(ctypes.Structure): ] #--------------------------------------+ -# Devil 1: GEO +# Devil 1: GEO Base #--------------------------------------+ class Header(ctypes.Structure): @@ -229,6 +223,35 @@ class Devil1GEO_FN(ctypes.Structure): ctypes.c_uint)) ] +#--------------------------------------+ +# Python Objs +#--------------------------------------+ + +sharedlib = './lib3ddevil1.so' +libc = ctypes.cdll.LoadLibrary(sharedlib) +if not libc: + print("Couldn't load %s" % sharedlib) + sys.exit() + +print("\nlib3ddevil1 loaded.") +devil1pld = Devil1PLD_FN.in_dll(libc, "DEVIL1PLD") +devil1tex = Devil1TEX_FN.in_dll(libc, "DEVIL1TEX") +devil1geo = Devil1GEO_FN.in_dll(libc, "DEVIL1GEO") + +class PLDHeader: + def __init__(self, filedata): + h = PldHeader() + devil1pld.getheader(ctypes.byref(h), filedata) + self.offsets = [] + for i in range(0, h.numOffset): + self.offsets.append(h.offsets[i]) + + def __str__(self): + output = "numOffset: %s" % str(len(self.offsets)) + for offset in self.offsets: + output += "\n\t" + str(hex(offset)) + return output + #--------------------------------------+ # Regular Python #--------------------------------------+ @@ -285,6 +308,12 @@ if __name__ == "__main__": geoh = Header() geotest(geofn, geoh) + def mainx(): + with open("pl01.pld", "rb") as f: + data = f.read() + pld = PLDHeader(data) + print(pld) #---------------------------------------+ - main() + # main() + mainx()