Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #1.1: Updates data.lst
- import os
- import struct
- def get_data(filename):
- totalbytes = os.path.getsize(filename)
- infile = open(filename, 'rb')
- totalfiledata = infile.read(totalbytes)
- infile.close()
- return totalfiledata
- def replacestr(origstr,replacestr,startpos,replacelen):
- #Returns a string with a replaced sub-string
- #origstr - the original string, replacestr = the string to replace
- #startpos - where the replacement string should go
- #replacelen - how many characters of the original string to replace
- return origstr[:startpos] + replacestr + origstr[startpos+replacelen:]
- def datalstupdate(filename,newsize):
- '''Updates data.lst'''
- filedata = get_data('data.lst')
- pos = 0x9020
- filename = filename + '\x00'*(8-len(filename))
- while True:
- pos = filedata.find(filename,pos+1)
- if pos == -1:
- print '{} not found in data.lst'.format(filename)
- elif filedata[pos+15] == '\x0d': #Indicates .arb file extension
- newsize = struct.pack('<I',newsize)
- filedata = replacestr(filedata,newsize,pos+8,4)
- with open('data.lst','wb') as f:
- f.write(filedata)
- break
- inputdata = []
- with open('arbdata.csv','rb') as f:
- for line in f:
- line = line.translate(None,"\r\n") #Trims newline characters
- line = line.split('\t')
- inputdata.append((line[0],int(line[1],16),line[3]))
- oldfile = ''
- firstpass = True
- for i,(filename,addr,newstring) in enumerate(inputdata):
- if filename != oldfile:
- if firstpass:
- firstpass = False
- else:
- outfile = open(os.getcwd() + '\\' + oldfile + '\\' + oldfile + '.arb','wb')
- outfile.write(filedata)
- outfile.close()
- datalstupdate(oldfile,len(filedata))
- filedata = get_data(os.getcwd() + '\\' + filename + '.orig')
- offset = 0
- addr = addr + offset
- oldsize = struct.unpack('<I',filedata[addr:addr+4])[0] + 4
- if filename != oldfile:
- newsize = len(newstring) + 6
- newstring = struct.pack('<I',len(newstring) + 2) + ' ' + newstring + '\x00'
- else:
- newsize = len(newstring) + 5
- newstring = struct.pack('<I',len(newstring) + 1) + newstring + '\x00'
- filedata = replacestr(filedata,newstring,addr,oldsize)
- offset = offset + newsize - oldsize
- oldfile = filename
- outfile = open(os.getcwd() + '\\' + filename + '\\' + filename + \
- '.arb','wb')
- outfile.write(filedata)
- outfile.close()
- datalstupdate(filename,len(filedata))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement