blob: b3614c7c2173986eb86a27affef75593b43d3beb [file] [log] [blame]
#!/usr/bin/python
from __future__ import division
import sys, os, struct
def getTreeStream(path):
data = open(path,'rb').read()
paths = { 0 : ''}
pos = 0
while pos<len(data):
id,tag = struct.unpack('II', data[pos:pos+8])
pos += 8
if tag&(1<<31):
child = tag ^ (1<<31)
paths[child] = paths[id]
else:
size = tag
paths[id] += data[pos:pos+size]
pos += size
if pos!=len(data):
raise IOError,'bad position'
return paths
def writeTreeStream(path, output):
paths = getTreeSTream(path)
print 'Writing %d paths'%len(paths)
for i,data in paths.items():
if i!=0:
f = open('%s%04d'%(output,i), 'wb')
f.write(data)
f.close()
def main(args):
from optparse import OptionParser
op = OptionParser("usage: %prog input outputPrefix")
opts,args = op.parse_args()
input,outputPrefix = args
f = open(input,'rb')
data = f.read()
f.close()
writeTreeStream(data, outputPrefix)
if __name__=='__main__':
main(sys.argv)