Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import struct
- import os
- import sys
- def readheader(f):
- magic = f.read(2)
- if magic == '':
- raise EOFError
- if magic != 'NF':
- raise ValueError, "not a valid knytt stories file"
- nextchar = f.read(1)
- name = []
- while nextchar != '\0':
- name.append(nextchar)
- nextchar = f.read(1)
- name = ''.join(name)
- sizedata = f.read(4)
- (size,) = struct.unpack('<L', sizedata)
- return name, size
- def extractfile(f, destdir='.'):
- try:
- name, size = readheader(f)
- except EOFError:
- return False
- outfilename = os.path.join(destdir, *name.split('\\'))
- print("Extracting %s (%s bytes).." % (name, size))
- outdir, dummy = os.path.split(outfilename)
- try:
- os.makedirs(outdir)
- except OSError:
- pass
- outfile = open(outfilename, 'wb')
- bytestowrite = size
- while bytestowrite > 0:
- data = f.read(min(bytestowrite, 4096))
- if data == '':
- raise EOFError, "file ended prematurely"
- outfile.write(data)
- bytestowrite -= len(data)
- return True
- def unknytt(f, worlddir='.'):
- try:
- name, dummy = readheader(f)
- except EOFError:
- raise ValueError, "not a valid knytt stories file"
- print("Creating %s\\" % name)
- destdir = os.path.join(worlddir, name)
- os.mkdir(destdir)
- while extractfile(f, destdir):
- pass
- print("Everything is ok.")
- if __name__ == '__main__':
- f = open(sys.argv[1], 'rb')
- unknytt(f)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement