mirror of
https://github.com/elliotnunn/macresources.git
synced 2025-01-20 15:30:13 +00:00
4dab2dfd14
Neaten up the command line interface, rip out some bad ideas, and push with some documentation.
73 lines
1.8 KiB
Python
Executable File
73 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
from os import path
|
|
import argparse
|
|
import macresources
|
|
from macresources import binhex
|
|
|
|
|
|
def do_file(the_path):
|
|
finfo = binhex.FInfo()
|
|
finfo.Flags = 0
|
|
|
|
try:
|
|
info = open(the_path + '.idump', 'rb').read(8)
|
|
assert len(info) == 8
|
|
finfo.Type = info[:4]
|
|
finfo.Creator = info[4:]
|
|
except:
|
|
pass
|
|
|
|
try:
|
|
data = open(the_path, 'rb').read()
|
|
if finfo.Type in [b'TEXT', b'ttro']:
|
|
data = data.replace(b'\n', b'\r').decode('utf-8').encode('mac_roman')
|
|
except:
|
|
data = b''
|
|
|
|
try:
|
|
rsrc = open(the_path + '.rdump', 'rb').read()
|
|
rsrc = macresources.make_file(macresources.parse_rez_code(rsrc))
|
|
except:
|
|
rsrc = b''
|
|
|
|
bh = binhex.BinHex((path.basename(the_path), finfo, len(data), len(rsrc)), the_path + '.hqx')
|
|
|
|
bh.write(data)
|
|
bh.write_rsrc(rsrc)
|
|
|
|
bh.close()
|
|
|
|
|
|
def is_valid_base(the_path):
|
|
name = path.basename(the_path)
|
|
base, ext = path.splitext(name)
|
|
if ext.lower() in ('.hqx', '.idump', '.rdump'): return False
|
|
return True
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='''
|
|
BinHex (BASE + BASE.rdump + BASE.idump) into (BASE.hqx)
|
|
''')
|
|
|
|
parser.add_argument('base', metavar='BASE', nargs='+', help='file or directory')
|
|
|
|
args = parser.parse_args()
|
|
|
|
for base in args.base:
|
|
if path.isdir(base):
|
|
for base, dirlist, filelist in os.walk(base):
|
|
dirlist[:] = [d for d in dirlist if not d.startswith('.')]; dirlist.sort()
|
|
filelist[:] = [f for f in filelist if not f.startswith('.')]; filelist.sort()
|
|
|
|
for f in filelist:
|
|
if is_valid_base(f):
|
|
do_file(path.join(base, f))
|
|
|
|
else:
|
|
if not is_valid_base(hqx):
|
|
exit('Base names cannot have a .hqx/.idump/.rdump extension')
|
|
|
|
do_file(base)
|