diff options
Diffstat (limited to 'crodump.py')
-rw-r--r-- | crodump.py | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -1,8 +1,9 @@ | |||
1 | import os.path | 1 | import os.path |
2 | import io | 2 | import io |
3 | import struct | 3 | import struct |
4 | import re | ||
4 | from binascii import b2a_hex | 5 | from binascii import b2a_hex |
5 | from hexdump import hexdump, asasc, tohex, unhex | 6 | from hexdump import hexdump, asasc, tohex, unhex, strescape |
6 | from koddecoder import kodecode | 7 | from koddecoder import kodecode |
7 | from readers import ByteReader | 8 | from readers import ByteReader |
8 | 9 | ||
@@ -150,11 +151,14 @@ def destruct_bank_definition(args, data): | |||
150 | 151 | ||
151 | index_or_length = rd.readdword() | 152 | index_or_length = rd.readdword() |
152 | if index_or_length >> 31: | 153 | if index_or_length >> 31: |
153 | d[keyname] = rd.readbytes(index_or_length & 0x7FFFFFFF) | 154 | value = d[keyname] = rd.readbytes(index_or_length & 0x7FFFFFFF) |
154 | print("%-20s - %s" % (keyname, toout(args, d[keyname]))) | 155 | if re.search(b'[^\x0d\x0a\x09\x20-\x7e\xc0-\xff]', value): |
156 | print("%-20s - %s" % (keyname, toout(args, d[keyname]))) | ||
157 | else: | ||
158 | print("%-20s - \"%s\"" % (keyname, strescape(d[keyname]))) | ||
155 | else: | 159 | else: |
156 | d[keyname] = index_or_length | 160 | d[keyname] = index_or_length |
157 | print("%-20s -> %s" % (keyname, d[keyname])) | 161 | print("%-20s -> #%s" % (keyname, d[keyname])) |
158 | return d | 162 | return d |
159 | 163 | ||
160 | def decode_field(data): | 164 | def decode_field(data): |
@@ -238,9 +242,9 @@ class Database: | |||
238 | if self.stru: | 242 | if self.stru: |
239 | print("stru") | 243 | print("stru") |
240 | self.stru.dump(args) | 244 | self.stru.dump(args) |
241 | if args.struonly: | 245 | if args.struonly: |
242 | self.dumptabledefs(args) | 246 | self.dumptabledefs(args) |
243 | return | 247 | return |
244 | if self.index: | 248 | if self.index: |
245 | print("index") | 249 | print("index") |
246 | self.index.dump(args) | 250 | self.index.dump(args) |
@@ -259,7 +263,11 @@ class Database: | |||
259 | idx = dbdef.get("Base%03d" % i) | 263 | idx = dbdef.get("Base%03d" % i) |
260 | if idx: | 264 | if idx: |
261 | print("== Base%03d ==" % i) | 265 | print("== Base%03d ==" % i) |
262 | tbinfo = self.stru.readrec(idx) | 266 | if type(idx)==int: |
267 | tbinfo = self.stru.readrec(idx) | ||
268 | else: | ||
269 | # the table def is in the value. | ||
270 | tbinfo = struct.pack("<B", 4) + idx | ||
263 | tbdef = destruct_base_definition(args, tbinfo) | 271 | tbdef = destruct_base_definition(args, tbinfo) |
264 | 272 | ||
265 | 273 | ||