[Scummvm-git-logs] scummvm master -> eaac8fe7fe78b4627327cbe1344eed486b80cdd2
sev-
noreply at scummvm.org
Mon Aug 29 20:10:28 UTC 2022
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e2cb16d8d0 DEVTOOLS: COMPANION: Catch errors if filename can't be decoded as MacJapanese; Remove unused function
eaac8fe7fe DEVTOOLS: COMPANION: Format using black
Commit: e2cb16d8d0e39b225901391be63eb2684fa625ce
https://github.com/scummvm/scummvm/commit/e2cb16d8d0e39b225901391be63eb2684fa625ce
Author: eientei (einstein95 at users.noreply.github.com)
Date: 2022-08-29T22:10:23+02:00
Commit Message:
DEVTOOLS: COMPANION: Catch errors if filename can't be decoded as MacJapanese; Remove unused function
Changed paths:
devtools/dumper-companion.py
diff --git a/devtools/dumper-companion.py b/devtools/dumper-companion.py
index 06db43d0895..943d97cd457 100755
--- a/devtools/dumper-companion.py
+++ b/devtools/dumper-companion.py
@@ -290,15 +290,6 @@ def encode_string(args: argparse.Namespace) -> int:
return 0
-def generate_punyencoded_path(destination_dir: Path, hpath: Tuple[str]) -> Path:
- """Convert a filepath to a punyencoded one"""
- upath = destination_dir
-
- for el in hpath:
- upath /= punyencode(el)
- return upath
-
-
def extract_volume(args: argparse.Namespace) -> int:
"""Extract an HFS volume"""
source_volume: Path = args.src
@@ -351,10 +342,14 @@ def extract_volume(args: argparse.Namespace) -> int:
if japanese:
el = decode_macjapanese(el.encode("mac_roman"))
else:
- if decode_macjapanese(el.encode("mac_roman")) != el and not isinstance(
- obj, machfs.Folder
- ):
- maybe_not_jp = True
+ try:
+ if decode_macjapanese(el.encode("mac_roman")) != el and not isinstance(
+ obj, machfs.Folder
+ ):
+ maybe_not_jp = True
+ except Exception:
+ # If we get an exception from trying to decode it as Mac-Japanese, it's probably not
+ pass
if not rawtext:
el = punyencode(el)
Commit: eaac8fe7fe78b4627327cbe1344eed486b80cdd2
https://github.com/scummvm/scummvm/commit/eaac8fe7fe78b4627327cbe1344eed486b80cdd2
Author: eientei (einstein95 at users.noreply.github.com)
Date: 2022-08-29T22:10:23+02:00
Commit Message:
DEVTOOLS: COMPANION: Format using black
Changed paths:
devtools/dumper-companion.py
diff --git a/devtools/dumper-companion.py b/devtools/dumper-companion.py
index 943d97cd457..51d4eb9c4fe 100755
--- a/devtools/dumper-companion.py
+++ b/devtools/dumper-companion.py
@@ -191,10 +191,11 @@ def file_to_macbin(f: machfs.File, name: ByteString) -> bytes:
return macbin
+
def macbin_get_datafork(f: bytes) -> bytes:
- datalen, = unpack(">I", f[0x53:0x57])
+ (datalen,) = unpack(">I", f[0x53:0x57])
print("Data len is:", datalen)
- return f[0x80:0x80 + datalen]
+ return f[0x80 : 0x80 + datalen]
def escape_string(s: str) -> str:
@@ -343,9 +344,9 @@ def extract_volume(args: argparse.Namespace) -> int:
el = decode_macjapanese(el.encode("mac_roman"))
else:
try:
- if decode_macjapanese(el.encode("mac_roman")) != el and not isinstance(
- obj, machfs.Folder
- ):
+ if decode_macjapanese(
+ el.encode("mac_roman")
+ ) != el and not isinstance(obj, machfs.Folder):
maybe_not_jp = True
except Exception:
# If we get an exception from trying to decode it as Mac-Japanese, it's probably not
@@ -555,7 +556,8 @@ def collect_forks(args: argparse.Namespace) -> int:
def block_copy(dest, dest_offset, src, src_offset, size):
if size == 0:
return
- dest[dest_offset:dest_offset+size] = src[src_offset:src_offset+size]
+ dest[dest_offset : dest_offset + size] = src[src_offset : src_offset + size]
+
# Inserts bytes into sliding window ring buffer, returns new window position
def insert_sl(sl, sl_pos, bytes_to_insert, insert_src_offset, size):
@@ -563,12 +565,15 @@ def insert_sl(sl, sl_pos, bytes_to_insert, insert_src_offset, size):
if available < size:
block_copy(sl, sl_pos, bytes_to_insert, insert_src_offset, available)
sl_pos = 0
- sl_pos = insert_sl(sl, sl_pos, bytes_to_insert, insert_src_offset + available, size - available)
+ sl_pos = insert_sl(
+ sl, sl_pos, bytes_to_insert, insert_src_offset + available, size - available
+ )
else:
block_copy(sl, sl_pos, bytes_to_insert, insert_src_offset, size)
sl_pos = sl_pos + size
return sl_pos
+
# Reads bytes from sliding window ring buffer
def read_sl(sl, sl_pos, out_buf, out_buf_pos, size):
available = 0x10000 - sl_pos
@@ -578,9 +583,10 @@ def read_sl(sl, sl_pos, out_buf, out_buf_pos, size):
else:
block_copy(out_buf, out_buf_pos, sl, sl_pos, size)
+
def read_lz(sl, sl_pos, out_buf, out_buf_pos, coded_offset, length):
actual_offset = coded_offset + 1
- read_pos = (sl_pos + 0x10000 - actual_offset) % 0x10000;
+ read_pos = (sl_pos + 0x10000 - actual_offset) % 0x10000
while actual_offset < length:
# Repeating sequence
read_sl(sl, read_pos, out_buf, out_buf_pos, actual_offset)
@@ -589,6 +595,7 @@ def read_lz(sl, sl_pos, out_buf, out_buf_pos, coded_offset, length):
# Copy
read_sl(sl, read_pos, out_buf, out_buf_pos, length)
+
def decompress(in_f, out_f, compressed_data_size):
sl = bytearray(0x10000)
lz_bytes = bytearray(128)
@@ -598,16 +605,16 @@ def decompress(in_f, out_f, compressed_data_size):
while compressed_data_size > 0:
code_byte_0 = in_f.read(1)[0]
compressed_data_size -= 1
- if (code_byte_0 & 0x80):
+ if code_byte_0 & 0x80:
# Literal
- chunk_size = (code_byte_0 & 0x7f) + 1
+ chunk_size = (code_byte_0 & 0x7F) + 1
output_data = in_f.read(chunk_size)
compressed_data_size -= chunk_size
- elif (code_byte_0 & 0x40):
+ elif code_byte_0 & 0x40:
# Large offset
code_bytes_12 = in_f.read(2)
compressed_data_size -= 2
- chunk_size = (code_byte_0 & 0x3f) + 4
+ chunk_size = (code_byte_0 & 0x3F) + 4
coded_offset = (code_bytes_12[0] << 8) + code_bytes_12[1]
read_lz(sl, sl_pos, lz_bytes, 0, coded_offset, chunk_size)
output_data = lz_bytes
@@ -615,31 +622,36 @@ def decompress(in_f, out_f, compressed_data_size):
# Small offset
code_byte_1 = in_f.read(1)[0]
compressed_data_size -= 1
- chunk_size = ((code_byte_0 & 0x3c) >> 2) + 3
+ chunk_size = ((code_byte_0 & 0x3C) >> 2) + 3
coded_offset = ((code_byte_0 & 0x3) << 8) + code_byte_1
read_lz(sl, sl_pos, lz_bytes, 0, coded_offset, chunk_size)
output_data = lz_bytes
out_f.write(output_data[0:chunk_size])
sl_pos = insert_sl(sl, sl_pos, output_data, 0, chunk_size)
+
def create_macfonts(args: argparse.Namespace) -> int:
"""
Downloads System 7 image, extracts fonts from it and packs them
int classicmacfonts.dat
"""
print("Downloading System 7.0.1 image...", end="")
- with urllib.request.urlopen("https://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Macintosh/System/Older_System/System_7.0.x/System_7.0.1.smi.bin") as file:
+ with urllib.request.urlopen(
+ "https://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Macintosh/System/Older_System/System_7.0.x/System_7.0.1.smi.bin"
+ ) as file:
output = file.read()
- print('done')
+ print("done")
datafork = BytesIO(macbin_get_datafork(output))
- print('Decompressing...', end="")
+ print("Decompressing...", end="")
datafork.seek(-0x200, 2)
alt_mdb_loc = datafork.tell()
datafork.seek(-(0x200 - 0x12), 2)
- num_allocation_blocks, allocation_block_size, first_allocation_block = unpack('>HI4xH', datafork.read(12))
+ num_allocation_blocks, allocation_block_size, first_allocation_block = unpack(
+ ">HI4xH", datafork.read(12)
+ )
compressed_data_start = first_allocation_block * allocation_block_size
- compressed_data_end = alt_mdb_loc # ???
+ compressed_data_end = alt_mdb_loc # ???
datafork.seek(0)
decdatafork = BytesIO()
decdatafork.write(datafork.read(compressed_data_start))
@@ -647,25 +659,32 @@ def create_macfonts(args: argparse.Namespace) -> int:
decompress(datafork, decdatafork, compressed_amount)
datafork.seek(alt_mdb_loc)
decdatafork.write(datafork.read(0x200))
- print('done')
+ print("done")
decdatafork.seek(0)
vol = machfs.Volume()
vol.read(decdatafork.read())
for hpath, obj in vol.iter_paths():
- if hpath == ('Fonts.image',):
+ if hpath == ("Fonts.image",):
fontsvol = obj.data[0x54:]
break
- print('Reading Fonts.image...')
+ print("Reading Fonts.image...")
vol = machfs.Volume()
vol.read(fontsvol)
- with zipfile.ZipFile('classicmacfonts.dat', mode='w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as fontzip:
+ with zipfile.ZipFile(
+ "classicmacfonts.dat",
+ mode="w",
+ compression=zipfile.ZIP_DEFLATED,
+ compresslevel=9,
+ ) as fontzip:
for hpath, obj in vol.iter_paths():
- print(f'Compressing {hpath[-1]}...')
- fontzip.writestr(f'{hpath[-1]}.bin', file_to_macbin(obj, hpath[-1].encode("mac_roman")))
+ print(f"Compressing {hpath[-1]}...")
+ fontzip.writestr(
+ f"{hpath[-1]}.bin", file_to_macbin(obj, hpath[-1].encode("mac_roman"))
+ )
- print('Done')
+ print("Done")
return 0
@@ -744,8 +763,7 @@ def generate_parser() -> argparse.ArgumentParser:
parser_macbinary.set_defaults(func=collect_forks)
parser_macfonts = subparsers.add_parser(
- "createmacfonts",
- help="Creates classicmacfonts.dat from Mac OS 7 system images"
+ "createmacfonts", help="Creates classicmacfonts.dat from Mac OS 7 system images"
)
parser_macfonts.set_defaults(func=create_macfonts)
More information about the Scummvm-git-logs
mailing list