papermario/tools/sjis.py
lshamis ae66312d8c
Add Python linter to github actions (#1100)
* Add Python linter to github actions

* wip

* Add back splat_ext

* Format files

* C++ -> C

* format 2 files

* split workflow into separate file, line length 120, fix excludes

* -l 120 in ci

* update black locally and apply formatting changes

* pyproject.toject

---------

Co-authored-by: Ethan Roseman <ethteck@gmail.com>
2023-07-30 02:03:17 +09:00

48 lines
1.1 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
def decode(data):
length = 0
is_dbl_char = False
for byte in data:
if byte == 0 and not is_dbl_char:
break
# ignore null terminator when reading double-byte char
is_dbl_char = False
if byte & 0xF0 == 0x80:
is_dbl_char = True
if byte & 0xF0 == 0x90:
is_dbl_char = True
if byte & 0xF0 == 0xE0:
is_dbl_char = True
if byte & 0xF0 == 0xF0:
is_dbl_char = True
length += 1
return data[:length].decode("shift-jis")
if __name__ == "__main__":
import sys
if len(sys.argv) <= 1:
print("usage: ./sjis.py <bytes...>")
print("decodes zero-terminated SJIS from arbitrary hex bytes.")
print("e.g.")
print(" ./sjis.py 80072F64 80072F90 80072FA8 00000000")
print(" エリア その1")
exit(1)
s = "".join(sys.argv[1:])
data = bytearray()
for i in range(0, len(s), 2):
byte = eval(f"0x{s[i]}{s[i + 1]}")
data.append(byte)
print(data)
print(decode(data))