def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.writeUInt8(self.version) num = len(self.data) writer.writeUInt8(num) sizeofs = writer.tell() writer.writeUInt16(0) writer.writeUInt16(8) writer.writeUInt16(0) # refofs for i in xrange(num): # TODO: Build PTree. Although it isn't actually used try: node = self.nodes[i] except: node = Node(0, 0, 0, 0) for j in xrange(4): writer.writeUInt8(node[j]) writer.writeAlign(4) namerel = writer.tell() refofs = namerel-start writer.writeUInt16(self.sizeunit) nameofsofs = writer.tell() writer.writeUInt16(0) for i in xrange(num): writer.write(self.data[i]) if len(self.data[i]) < self.sizeunit: writer.write('\x00'*(self.sizeunit-len(self.data[i]))) nameofs = writer.tell()-namerel with writer.seek(nameofsofs): writer.writeUInt16(nameofs) nameofs = writer.tell() for i in xrange(num): writer.write(self.names[i]) writer.writePadding(nameofs+i*16) size = writer.tell()-start with writer.seek(sizeofs): writer.writeUInt16(size) writer.writeUInt16(8) writer.writeUInt16(refofs) return writer
def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.writeUInt8(self.version) num = len(self.data) writer.writeUInt8(num) sizeofs = writer.tell() writer.writeUInt16(0) writer.writeUInt16(8) writer.writeUInt16(0) # refofs for i in xrange(num): # TODO: Build PTree. Although it isn't actually used try: node = self.nodes[i] except: node = Node(0, 0, 0, 0) for j in xrange(4): writer.writeUInt8(node[j]) writer.writeAlign(4) namerel = writer.tell() refofs = namerel - start writer.writeUInt16(self.sizeunit) nameofsofs = writer.tell() writer.writeUInt16(0) for i in xrange(num): writer.write(self.data[i]) if len(self.data[i]) < self.sizeunit: writer.write('\x00' * (self.sizeunit - len(self.data[i]))) nameofs = writer.tell() - namerel with writer.seek(nameofsofs): writer.writeUInt16(nameofs) nameofs = writer.tell() for i in xrange(num): writer.write(self.names[i]) writer.writePadding(nameofs + i * 16) size = writer.tell() - start with writer.seek(sizeofs): writer.writeUInt16(size) writer.writeUInt16(8) writer.writeUInt16(refofs) return writer
def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.write(self.magic) writer.writeUInt16(self.endian) writer.writeUInt16(self.version) sizeofs = writer.tell() writer.writeUInt32(0) headersizeofs = writer.tell() writer.writeUInt16(0) writer.writeUInt16(self.numblocks) size = writer.tell() - start with writer.seek(headersizeofs): writer.writeUInt16(size) writer.writeUInt32(writer.tell() + 4 - start) # block[0] ofs writer = self.tex.save(writer) size = writer.tell() - start with writer.seek(sizeofs): writer.writeUInt32(size) return writer
def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.write(self.magic) writer.writeUInt16(self.endian) writer.writeUInt16(self.version) sizeofs = writer.tell() writer.writeUInt32(0) headersizeofs = writer.tell() writer.writeUInt16(0) writer.writeUInt16(self.numblocks) size = writer.tell()-start with writer.seek(headersizeofs): writer.writeUInt16(size) writer.writeUInt32(writer.tell()+4-start) # block[0] ofs writer = self.tex.save(writer) size = writer.tell()-start with writer.seek(sizeofs): writer.writeUInt32(size) return writer
def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.write(self.magic) sizeofs = writer.tell() writer.writeUInt32(0) writer.writeUInt32(4) writer.writeUInt32(0x10000) size = writer.tell()-start with writer.seek(sizeofs): writer.writeUInt32(size) return writer
def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.write(self.magic) sizeofs = writer.tell() writer.writeUInt32(0) writer.writeUInt16(self.num) writer.writeUInt16(0) for entry in self.entries: writer.writeUInt32(entry.start) writer.writeUInt32(entry.stop) size = writer.tell()-start with writer.seek(sizeofs): writer.writeUInt32(size) return writer
def save(self, writer=None): if writer is None: writer = BinaryIO() start = writer.tell() writer.write(self.magic) sizeofs = writer.tell() writer.writeUInt32(0) data = [] for fdata, entry in zip(self.files, self.narc.fatb.entries): total = len(data) if entry.start > total: data += '\x00'*(entry.start-total) data[entry] = fdata writer.write(''.join(data)) size = writer.tell()-start with writer.seek(sizeofs): writer.writeUInt32(size) return writer