mirror of
https://github.com/elliotnunn/newworld-rom.git
synced 2024-09-29 14:56:57 +00:00
62 lines
1.6 KiB
Python
Executable File
62 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
|
|
import binhex
|
|
import argparse
|
|
import os.path
|
|
|
|
|
|
def get_file(filename):
|
|
with open(filename, 'rb') as f:
|
|
return f.read()
|
|
|
|
|
|
def fourcc(s):
|
|
b = s.encode('ascii').ljust(4, b' ')
|
|
if len(b) != 4:
|
|
raise ValueError('wrong length')
|
|
return b
|
|
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description = """Blah."""
|
|
)
|
|
|
|
parser.add_argument('--data', action='store', metavar='FILE', help='Data fork')
|
|
parser.add_argument('--rsrc', action='store', metavar='FILE', help='Resource fork')
|
|
parser.add_argument('--type', action='store', metavar='FOURCC', type=fourcc, default=' ', help='(space-padded) type code')
|
|
parser.add_argument('--creator', action='store', metavar='FOURCC', type=fourcc, default=' ', help='(space-padded) creator code')
|
|
parser.add_argument('--name', action='store', metavar='FILENAME', default='', help='archived name (taken from DEST by default)')
|
|
parser.add_argument('--has-bundle', action='store_true', help='set Finder flag indicating BNDL resource present')
|
|
parser.add_argument('dest', metavar='DEST', help='HQX file')
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
# make an auto filename
|
|
if args.name:
|
|
name = args.name
|
|
else:
|
|
name = os.path.basename(args.dest)
|
|
|
|
base, ext = os.path.splitext(name)
|
|
if ext.lower() == '.hqx':
|
|
name = base
|
|
|
|
assert name
|
|
|
|
finfo = binhex.FInfo()
|
|
finfo.Creator = args.creator
|
|
finfo.Type = args.type
|
|
finfo.Flags = 0x2000 if args.has_bundle else 0
|
|
|
|
rsrc_fork, data_fork = (get_file(f) if f else b'' for f in [args.rsrc, args.data])
|
|
|
|
|
|
bh = binhex.BinHex((name, finfo, len(data_fork), len(rsrc_fork)), args.dest)
|
|
|
|
bh.write(data_fork)
|
|
bh.write_rsrc(rsrc_fork)
|
|
|
|
bh.close()
|