Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
 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
Esempio n. 7
0
 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