Esempio n. 1
0
class Section(cmodel.Struct):
    groupid = cmodel.LeS32 #if -1, contains exported symbols only
    name = cmodel.String("ascii")
    bank = cmodel.LeS32
    org = cmodel.LeS32
    numsymbols = cmodel.LeU32
    symbols = cmodel.Array(Symbol, "numsymbols")
    datasize = cmodel.LeU32
    data = cmodel.If(lambda self: self.groupid > 0 and self._CField__container._CField__container.groups[self.groupid].typeid == SectionGroup.GROUP_TEXT, SectionData)
    
    __order__ = ["groupid", "name", "bank", "org", "numsymbols", "symbols", "datasize", "data"]
Esempio n. 2
0
class BPSPatchStruct(cmodel.Struct):
    magic = cmodel.Magic(b"BPS1")
    srcSize = VarInt
    targetSize = VarInt
    metadataSize = VarInt
    metadata = cmodel.String(
        "utf-8")  #This is also XML, consider adding cmodel.XML?
    patchData = cmodel.Array(PatchEntry, 12, cmodel.ParseToEOF)
    srcChksum = cmodel.LeU32
    tgtChksum = cmodel.LeU32
    chksum = cmodel.LeU32
Esempio n. 3
0
class Rgb2Patch(cmodel.Struct):
    srcfile = cmodel.String("ascii")
    srcline = cmodel.LeU32
    patchoffset = cmodel.LeU32
    patchtype = cmodel.Enum(cmodel.U8, "BYTE", "LE16", "LE32", "BE16", "BE32")

    numpatchexprs = cmodel.LeU32
    patchexprs = cmodel.Array(Rgb2PatchExpr,
                              "numpatchexprs",
                              countType=cmodel.BytesCount)

    __order__ = [
        "srcfile", "srcline", "patchoffset", "patchtype", "numpatchexprs",
        "patchexprs"
    ]
Esempio n. 4
0
class Symbol(cmodel.Struct):
    name = cmodel.String("ascii")
    symtype = cmodel.Enum(cmodel.LeS32, "EXPORT", "IMPORT", "LOCAL", "LOCALEXPORT", "LOCALIMPORT", ("FLAT_WHAT", -1))
    value = cmodel.If("symtype", lambda x: x in [-1, 0, 2, 3], cmodel.LeS32)
    
    __order__ = ["name", "symtype", "value"]
Esempio n. 5
0
class SectionGroup(cmodel.Struct):
    name = cmodel.String("ascii")
    typeid = cmodel.Enum(cmodel.LeU32, "GROUP_TEXT", "GROUP_BSS")
    
    __order__ = ["name", "typeid"]
Esempio n. 6
0
class Rgb2Symbol(cmodel.Struct):
    name = cmodel.String("ascii")
    symtype = cmodel.Enum(cmodel.U8, "LOCAL", "IMPORT", "EXPORT")
    value = cmodel.If("symtype", lambda x: x in [0, 2], Rgb2SymValue)

    __order__ = ["name", "symtype", "value"]