Rip Projector ckid resources in a tree

This commit is contained in:
Elliot Nunn 2019-04-03 00:11:35 +08:00
parent f1bb5714ee
commit 14be93a21a
1 changed files with 78 additions and 0 deletions

78
NewestCKID.py Executable file
View File

@ -0,0 +1,78 @@
#!/usr/bin/env python3
# unsigned longint; /* checkSum */
# unsigned longint LOC = 1071985200; /* location identifier */
# integer version = 4; /* ckid version number */
# integer readOnly = 0; /* Check out state, if = 0 it is modifiable */
# Byte noBranch = 0; /* if modifiable & Byte != 0 then branch was made
# on check out */
# Byte clean = 0,
# MODIFIED = 1; /* did user execute "ModifyReadOnly" on this file? */
# unsigned longint UNUSED; /* not used */
# unsigned longint; /* date and time of checkout */
# unsigned longint; /* mod date of file */
# unsigned longint; /* PID.a */
# unsigned longint; /* PID.b */
# integer; /* user ID */
# integer; /* file ID */
# integer; /* rev ID */
# pstring; /* Project path */
# Byte = 0;
# pstring; /* User name */
# Byte = 0;
# pstring; /* Revision number */
# Byte = 0;
# pstring; /* File name */
# Byte = 0;
# pstring; /* task */
# Byte = 0;
# wstring; /* comment */
# Byte = 0;
import argparse
from macresources.do_what_i_mean import read
import os
from os import path
import struct
import datetime
def up_date(mac_date):
base = datetime.datetime(1904, 1, 1, 0, 0, 0)
base += datetime.timedelta(seconds=mac_date)
return base.strftime('%Y-%m-%d %H:%M:%S')
parser = argparse.ArgumentParser(description='''
Print the dates in every ckid (Projector) resource.
''')
parser.add_argument('src', action='store', help='Source file')
grp = parser.add_mutually_exclusive_group()
grp.add_argument('-c', action='store_const', dest='what', const='ckout', help='Show checkout date')
grp.add_argument('-m', action='store_const', dest='what', const='mod', help='Show mod date')
grp.add_argument('-p', action='store_const', dest='what', const='proj', help='Show project creation date')
args = parser.parse_args()
for base, dirs, files in os.walk(args.src):
dirs[:] = [d for d in dirs if not d.startswith('.')]
files[:] = [f for f in files if f.endswith('.rdump')]
for f in files:
resources = read(path.join(base, f))
for r in resources:
if r.type == b'ckid':
cksm, loc, ver, ro, nobr, mod, _, t_ckout, t_mod, t_proj, tc_proj, uid, fid, rid = struct.unpack_from('>IIHHBBIIIIIHHH', r.data)
if args.what == 'ckout':
print(up_date(t_ckout), end=' ')
elif args.what == 'mod':
print(up_date(t_mod), end=' ')
elif args.what == 'proj':
print(up_date(t_proj), end=' ')
print(path.join(base, f[:-6])) # cut rdump off end