-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwumpscript.py
79 lines (69 loc) · 2.59 KB
/
wumpscript.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from sys import argv
from os import system
from superdecompressor import Datapack
from utils import int2ints, str2byte, hexify
specials = {}
for line in open("specialcodes.txt"):
code, replacement = tuple(line.strip().split(' ', 1))
replacement = replacement.replace(r"\n", "\n")
specials[replacement] = code
if __name__ == "__main__":
if len(argv) < 4:
print "\n".join([
"python dumpscript.py <input file> <output file> <script>"])
exit(0)
else:
infile, outfile, script = tuple(argv[1:4])
system("cp %s %s" % (infile, outfile))
infile = open(infile, 'rb')
script = open(script)
d, messagegroup, messagenum, message = None, None, None, None
hold = ""
for line in script:
for replacement, code in specials.items():
line = line.replace(replacement, code)
line = hold + line
if line[-1] != "\n":
hold = line
assert line[-3:] == "01>"
continue
line = line.decode('utf-8').strip()
if not line and not hold:
continue
hold = ""
if line[:2] == "#<" and line[-1] == ">":
if (messagegroup is not None and messagenum is not None and
message is not None):
d.messageslist[messagegroup][messagenum-1] = message
messagegroup, messagenum = None, None
if line[:3] == "#<@":
if d is not None:
f = open(outfile, 'r+b')
try:
d.compile_and_write(f)
except AssertionError:
print "FAILURE %x" % d.baseaddr
f.close()
address = int(line[3:-1], 16)
d = Datapack(infile=infile, address=address)
elif (len(line) == 8 and line[3] == "."):
messagegroup, messagenum = tuple(map(int, line[2:-1].split('.')))
message = []
else:
if message:
message.extend(int2ints(str2byte["\n"], 2))
while line:
if line[0] == '$' and line[1] == '<' and line[6] == '>':
hexa = int2ints(int(line[2:6], 16), 2)
line = line[7:]
else:
hexa = int2ints(str2byte[line[0].encode('utf-8')], 2)
line = line[1:]
message.extend(hexa)
d.messageslist[messagegroup][messagenum-1] = message
f = open(outfile, 'r+b')
try:
d.compile_and_write(f)
except AssertionError:
print "FAILURE %x" % d.baseaddr
f.close()