mirror of
https://github.com/zeldaret/ph
synced 2026-05-23 15:01:37 -04:00
Add m2ctx.py
This commit is contained in:
@@ -3,3 +3,4 @@ build/
|
||||
ph_*/
|
||||
*.nds
|
||||
*bios.bin
|
||||
/m2ctx
|
||||
|
||||
Executable
+90
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import pyperclip
|
||||
import subprocess
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
CXX_FLAGS = [
|
||||
'-Iinclude'
|
||||
]
|
||||
|
||||
script_dir = Path(os.path.dirname(os.path.realpath(__file__)))
|
||||
root_dir = script_dir / ".."
|
||||
|
||||
program = os.path.basename(sys.argv[0])
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
def print_usage():
|
||||
eprint(f"Usage: {program} INFILE [-f OUTFILE] [-c] [-e ENCODING] [-v]")
|
||||
eprint(" INFILE \tInput file to preprocess")
|
||||
eprint(" -f OUTFILE \tOutput context file")
|
||||
eprint(" -c \tCopy output to clipboard")
|
||||
eprint(" -e ENCODING\tInput file encoding (Default: Shift-JIS)")
|
||||
eprint(" -v \tVerbose error output")
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
print_usage()
|
||||
exit(1)
|
||||
|
||||
|
||||
in_file = None
|
||||
out_file = None
|
||||
clipboard = False
|
||||
encoding = "Shift-JIS"
|
||||
verbose = False
|
||||
i = 1
|
||||
while i < len(sys.argv):
|
||||
arg = sys.argv[i]
|
||||
if arg == "-f":
|
||||
i += 1
|
||||
if i >= len(sys.argv):
|
||||
eprint("Expected output file after -f")
|
||||
exit(1)
|
||||
out_file = sys.argv[i]
|
||||
elif arg == "-c":
|
||||
clipboard = True
|
||||
elif arg == "-e":
|
||||
i += 1
|
||||
if i >= len(sys.argv):
|
||||
eprint("Expected input file encoding after -e")
|
||||
exit(1)
|
||||
encoding = sys.argv[i]
|
||||
elif arg == "-v":
|
||||
verbose = True
|
||||
elif arg.startswith("-"):
|
||||
eprint(f"Unknown option '{arg}'")
|
||||
elif in_file is None:
|
||||
in_file = arg
|
||||
else:
|
||||
eprint(f"Duplicate input file '{arg}'")
|
||||
exit(1)
|
||||
i += 1
|
||||
|
||||
|
||||
try:
|
||||
ctx = subprocess.check_output(['gcc', '-E', '-P', '-undef', '-dD', *CXX_FLAGS, in_file], cwd=root_dir, encoding=encoding)
|
||||
except subprocess.CalledProcessError as e:
|
||||
eprint(f"Failed to preprocess '{in_file}'")
|
||||
if verbose: eprint(e)
|
||||
else: eprint("Use -v for more verbose error output")
|
||||
exit(1)
|
||||
|
||||
|
||||
if out_file:
|
||||
try:
|
||||
with open(out_file, "w") as file:
|
||||
file.write(ctx)
|
||||
except OSError as e:
|
||||
eprint(f"Failed to write file '{out_file}'")
|
||||
if verbose: eprint(e)
|
||||
else: eprint("Use -v for more verbose error output")
|
||||
exit(1)
|
||||
if clipboard:
|
||||
pyperclip.copy(ctx)
|
||||
eprint("Copied context to clipboard")
|
||||
if out_file is None and not clipboard:
|
||||
print(ctx)
|
||||
@@ -1 +1,2 @@
|
||||
requests
|
||||
pyperclip
|
||||
|
||||
Reference in New Issue
Block a user