Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- #Constants taken from insani tools.
- LITTLE_ENDIAN = 1
- BIG_ENDIAN = -1
- BYTE_LENGTH = 1
- SHORT_LENGTH = 2
- INT_LENGTH = 4
- LONG_LENGTH = 8
- ERROR_NONE = 0
- ERROR_WARNING = 1
- ERROR_ABORT = 2
- def converttoint(bytes, size=INT_LENGTH, endian=LITTLE_ENDIAN):
- result = 0
- for i in xrange(size):
- temp=long(ord(bytes[i]))
- if endian == LITTLE_ENDIAN :
- result |= (temp << (8*i))
- elif endian == BIG_ENDIAN :
- result = (result << 8) | temp
- else :
- raise Exception('converttoint: Unknown endian specification')
- return result
- def convertfromint(value, size=INT_LENGTH, endian=LITTLE_ENDIAN):
- result = ""
- for i in xrange(size):
- if endian == LITTLE_ENDIAN :
- #result |= (temp << (8*i))
- temp = (value >> (8*i)) & 0x00FF
- elif endian == BIG_ENDIAN :
- #result = (result << 8) | temp
- temp = (value >> (8*(size-i-1))) & 0x00FF
- else :
- raise Exception('convertfromint: Unknown endian specification')
- result += chr(temp)
- return result
- #===========================================
- files = sys.argv[1:]
- for filename in files:
- crc = None
- if (not os.path.isdir(filename)):
- print filename, 'is not a directory.'
- continue
- entries = []
- indexsize = 4
- for (root, dirs, dirfiles) in os.walk(filename):
- #first = dirfiles.pop(0)
- #dirfiles.append(first)
- for name in dirfiles:
- entry = {}
- #fuck. someimes need dir.....
- entry['filename'] = os.path.join(root, name)
- #entry['name'] = name[4:] #If using forced order
- entry['name'] = entry['filename'][len(filename)+1:].replace('\\', '/')
- stat = os.stat(entry['filename'])
- entry['size'] = stat.st_size
- entries.append(entry)
- indexsize += 12 #namelen, start, size
- indexsize += len(entry['name']) + 1 #filename
- #filecount = convertfromint(len(entries))
- print 'size', indexsize
- outfile = open(filename + '.dat', 'wb')
- outfile.write(convertfromint(indexsize))
- filestart = indexsize
- for entry in entries:
- outfile.write(convertfromint(len(entry['name']) + 1))
- outfile.write(entry['name'])
- outfile.write('\0')
- filesize = entry['size']
- outfile.write(convertfromint(filesize))
- outfile.write(convertfromint(filestart))
- #write file data
- position = outfile.tell()
- outfile.seek(filestart)
- infile = open(entry['filename'], 'rb')
- data = infile.read()
- infile.close()
- outfile.write(data)
- #Go back to the index
- outfile.seek(position)
- print 'Adding', entry['name'], 'with size', entry['size'], 'to position', filestart
- #update filestart for the next file
- filestart += filesize
Advertisement
Add Comment
Please, Sign In to add comment