def parse_frame_script_list(blob):
    buf = SeqBuffer(blob)
    scripts = []
    while not buf.at_eof():
        [castlib_nr, member_nr, extra] = buf.unpack('>HHi')
        scripts.append(((castlib_nr, member_nr), extra))
    return scripts
def read_ILS_section_into(ils_data, entries_by_nr, dest):
    buf = SeqBuffer(ils_data)
    while not buf.at_eof():
        nr = buf.unpackVarint()
        section = entries_by_nr[nr]
        data = buf.readBytes(section.size)
        section.set_bytes(data)
def parse_score_entry_nr0(blob):
    buf = SeqBuffer(blob)
    [actualSize, c2, frameCount, c4, sprite_size, c6, v7] = buf.unpack('>3i4h')
    print "DB| Score root primary: header=%s" % [actualSize, c2, frameCount, c4, sprite_size, c6, v7]
    sprite_count = v7 + 6
    print "DB| Score root primary: extra=%s" % [c2, c4, c6, v7]
    #print "DB | Score root <primary: residue=<%s>" % (buf.buf[actualSize:],)
    buf = SeqBuffer(blob[buf.tell():actualSize])

    maxOffset = 0
    totItNr = 0
    deltas = []
    for frNr in range(1, frameCount+1):
        frNr += 1
        [frameDataLength] = buf.unpack('>H')
        frBuf = SeqBuffer(buf.readBytes(frameDataLength-2))
        #print "DB| Score root framedata raw=<%s>" % frBuf.buf

        delta_items = []
        itNr = 0
        while not frBuf.at_eof():
            itNr += 1; totItNr += 1
            [itemLength,offset] = frBuf.unpack('>HH')
            if offset > maxOffset: maxOffset = offset
            s = frBuf.readBytes(itemLength)
            delta_items.append(FrameDeltaItem(offset,s))
            #print "DB| Score framedata entry [%d][%d] (len %d): %d/0x%x, <%s>" % (frNr, itNr, itemLength, offset, offset, s)
        deltas.append(FrameDelta(delta_items))
    #print "DB| Score framedata = %s" % deltas
    #print "DB| Score framedata: maxOffset = %d (%d*48) chNr=%d totItNr=%d" % (maxOffset, maxOffset // 48, frNr, totItNr)
    return (sprite_count, sprite_size, deltas)
Exemple #4
0
def parse_score_entry_nr0(blob):
    buf = SeqBuffer(blob)
    [actualSize, c2, frameCount, c4, sprite_size, c6, v7] = buf.unpack('>3i4h')
    print("DB| Score root primary: header=%s" %
          [actualSize, c2, frameCount, c4, sprite_size, c6, v7])
    sprite_count = v7 + 6
    print("DB| Score root primary: extra=%s" % [c2, c4, c6, v7])
    #print "DB | Score root <primary: residue=<%s>" % (buf.buf[actualSize:],)
    buf = SeqBuffer(blob[buf.tell():actualSize])

    maxOffset = 0
    totItNr = 0
    deltas = []
    for frNr in range(1, frameCount + 1):
        frNr += 1
        [frameDataLength] = buf.unpack('>H')
        frBuf = SeqBuffer(buf.readBytes(frameDataLength - 2))
        #print "DB| Score root framedata raw=<%s>" % frBuf.buf

        delta_items = []
        itNr = 0
        while not frBuf.at_eof():
            itNr += 1
            totItNr += 1
            [itemLength, offset] = frBuf.unpack('>HH')
            if offset > maxOffset: maxOffset = offset
            s = frBuf.readBytes(itemLength)
            delta_items.append(FrameDeltaItem(offset, s))
            #print "DB| Score framedata entry [%d][%d] (len %d): %d/0x%x, <%s>" % (frNr, itNr, itemLength, offset, offset, s)
        deltas.append(FrameDelta(delta_items))
    #print "DB| Score framedata = %s" % deltas
    #print "DB| Score framedata: maxOffset = %d (%d*48) chNr=%d totItNr=%d" % (maxOffset, maxOffset // 48, frNr, totItNr)
    return (sprite_count, sprite_size, deltas)
Exemple #5
0
def parse_cast_table_section(blob, loader_context):
    buf = SeqBuffer(blob)
    res = []
    while not buf.at_eof():
        (item,) = buf.unpack('>i')
        res.append(item)
    return res
Exemple #6
0
def parse_frame_script_list(blob):
    buf = SeqBuffer(blob)
    scripts = []
    while not buf.at_eof():
        [castlib_nr, member_nr, extra] = buf.unpack('>HHi')
        scripts.append(((castlib_nr, member_nr), extra))
    return scripts
Exemple #7
0
def parse_cast_table_section(blob, loader_context):
    buf = SeqBuffer(blob)
    res = []
    while not buf.at_eof():
        (item, ) = buf.unpack('>i')
        res.append(item)
    return res
def read_ILS_section_into(ils_data, entries_by_nr, dest):
    buf = SeqBuffer(ils_data)
    while not buf.at_eof():
        nr = buf.unpackVarint()
        section = entries_by_nr[nr]
        data = buf.readBytes(section.size)
        section.set_bytes(data)
Exemple #9
0
 def __init__(self, snr, tag, blob):
     Media.__init__(self, snr, tag, blob)
     buf = SeqBuffer(blob)
     res = bytearray()
     while not buf.at_eof():
         [d] = buf.unpack('b')
         if d < 0:
             run_length = 1 - d
             v = buf.readBytes(1)
             res.extend(v * run_length)
         else:
             lit_length = 1 + d
             res.extend(buf.readBytes(lit_length))
     self.decoded = bytes(res)
Exemple #10
0
 def __init__(self, snr, tag, blob):
     Media.__init__(self, snr, tag, blob)
     buf = SeqBuffer(blob)
     [self.height, self.width] = buf.unpack('>II')
     to_read = self.height * self.width
     res = bytearray()
     while len(res) < to_read and not buf.at_eof():
         [d] = buf.unpack('b')
         if d < 0:
             run_length = 1 - d
             v = buf.readBytes(1)
             res.extend(v * run_length)
         else:
             lit_length = 1 + d
             res.extend(buf.readBytes(lit_length))
     self.decoded = bytes(res)