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)
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)
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 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 __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)
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)