diff options
| author | itsme <itsme@xs4all.nl> | 2021-07-09 19:57:22 +0200 |
|---|---|---|
| committer | itsme <itsme@xs4all.nl> | 2021-07-09 19:57:22 +0200 |
| commit | ee3dba289edd77f87f4ef733fb8a9aff0ff4d212 (patch) | |
| tree | d5532f0eeb3405c5d45a876e660286f3f5a9ab82 | |
| parent | 52532242ef38937387fac2303e0371860a15caa3 (diff) | |
crodump: added part of CroSys decoder.
| -rw-r--r-- | crodump.py | 48 |
1 files changed, 47 insertions, 1 deletions
| @@ -55,6 +55,10 @@ class Datafile: | |||
| 55 | raise Exception("not a Crofile") | 55 | raise Exception("not a Crofile") |
| 56 | self.use64bit = self.version == b'01.03' | 56 | self.use64bit = self.version == b'01.03' |
| 57 | 57 | ||
| 58 | if self.version == b'01.11': | ||
| 59 | # only found in app: v5/CroSys.dat | ||
| 60 | raise Exception("v01.11 format is not yet supported") | ||
| 61 | |||
| 58 | # blocksize | 62 | # blocksize |
| 59 | # 0040 -> Bank | 63 | # 0040 -> Bank |
| 60 | # 0400 -> Index or Sys | 64 | # 0400 -> Index or Sys |
| @@ -264,7 +268,32 @@ def destruct_base_definition(args, data): | |||
| 264 | remaining = rd.readbytes() | 268 | remaining = rd.readbytes() |
| 265 | 269 | ||
| 266 | print("rem: %s" % tohex(remaining)) | 270 | print("rem: %s" % tohex(remaining)) |
| 267 | 271 | ||
| 272 | def destruct_sys3_def(rd): | ||
| 273 | pass | ||
| 274 | def destruct_sys4_def(rd): | ||
| 275 | n = rd.readdword() | ||
| 276 | for _ in range(n): | ||
| 277 | marker = rd.readdword() | ||
| 278 | description = rd.readlongstring() | ||
| 279 | path = rd.readlongstring() | ||
| 280 | marker2 = rd.readdword() | ||
| 281 | |||
| 282 | print("%08x;%08x: %-50s : %s" % (marker, marker2, path, description)) | ||
| 283 | |||
| 284 | def destruct_sys_definition(args, data): | ||
| 285 | """ | ||
| 286 | decode the 'sys' / dbindex definition | ||
| 287 | """ | ||
| 288 | rd = ByteReader(data) | ||
| 289 | |||
| 290 | systype = rd.readbyte() | ||
| 291 | if systype == 3: | ||
| 292 | return destruct_sys3_def(rd) | ||
| 293 | elif systype == 4: | ||
| 294 | return destruct_sys4_def(rd) | ||
| 295 | else: | ||
| 296 | raise Exception("unsupported sys record") | ||
| 268 | 297 | ||
| 269 | 298 | ||
| 270 | class Database: | 299 | class Database: |
| @@ -439,6 +468,13 @@ def stru_dump(args): | |||
| 439 | db = Database(args.dbdir) | 468 | db = Database(args.dbdir) |
| 440 | db.strudump(args) | 469 | db.strudump(args) |
| 441 | 470 | ||
| 471 | def sys_dump(args): | ||
| 472 | """ hexdump all CroSys records """ | ||
| 473 | |||
| 474 | db = Database(args.dbdir) | ||
| 475 | if db.sys: | ||
| 476 | db.sys.dump(args) | ||
| 477 | |||
| 442 | def bank_dump(args): | 478 | def bank_dump(args): |
| 443 | """ hexdump all records """ | 479 | """ hexdump all records """ |
| 444 | if args.maxrecs: | 480 | if args.maxrecs: |
| @@ -463,6 +499,8 @@ def destruct(args): | |||
| 463 | destruct_bank_definition(args, data) | 499 | destruct_bank_definition(args, data) |
| 464 | elif args.type==2: | 500 | elif args.type==2: |
| 465 | destruct_base_definition(args, data) | 501 | destruct_base_definition(args, data) |
| 502 | elif args.type==3: | ||
| 503 | destruct_sys_definition(args, data) | ||
| 466 | 504 | ||
| 467 | def main(): | 505 | def main(): |
| 468 | import argparse | 506 | import argparse |
| @@ -492,6 +530,14 @@ def main(): | |||
| 492 | p.add_argument('dbdir', type=str) | 530 | p.add_argument('dbdir', type=str) |
| 493 | p.set_defaults(handler=cro_dump) | 531 | p.set_defaults(handler=cro_dump) |
| 494 | 532 | ||
| 533 | p = subparsers.add_parser('sysdump', help='SYSdumper') | ||
| 534 | p.add_argument('--verbose', '-v', action='store_true') | ||
| 535 | p.add_argument('--ascdump', '-a', action='store_true') | ||
| 536 | p.add_argument('--nodecompress', action='store_false', dest='decompress', default='true') | ||
| 537 | p.add_argument('dbdir', type=str) | ||
| 538 | p.set_defaults(handler=sys_dump) | ||
| 539 | |||
| 540 | |||
| 495 | p = subparsers.add_parser('bankdump', help='BANKdumper') | 541 | p = subparsers.add_parser('bankdump', help='BANKdumper') |
| 496 | p.add_argument('--verbose', '-v', action='store_true') | 542 | p.add_argument('--verbose', '-v', action='store_true') |
| 497 | p.add_argument('--ascdump', '-a', action='store_true') | 543 | p.add_argument('--ascdump', '-a', action='store_true') |
