mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-01 15:26:01 +00:00
85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import re
|
||
|
from disassemble import get_z_name
|
||
|
|
||
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||
|
root_dir = script_dir + "/../"
|
||
|
data_dir = root_dir + "data/overlays"
|
||
|
asm_dir = root_dir + "asm/non_matchings/overlays"
|
||
|
|
||
|
|
||
|
def rename(old_name, new_name):
|
||
|
for root, dirs, files in os.walk(asm_dir):
|
||
|
for file in files:
|
||
|
file_path = os.path.join(root, file)
|
||
|
with open(file_path) as f:
|
||
|
file_text = f.read()
|
||
|
new_file_text = file_text.replace(old_name, new_name)
|
||
|
if file_text != new_file_text:
|
||
|
with open(file_path, "w", newline="\n") as f:
|
||
|
f.write(new_file_text)
|
||
|
|
||
|
|
||
|
def rename_l(old_name, new_name):
|
||
|
for root, dirs, files in os.walk(asm_dir):
|
||
|
for file in files:
|
||
|
file_path = os.path.join(root, file)
|
||
|
with open(file_path) as f:
|
||
|
file_text = f.read()
|
||
|
new_file_text = file_text.replace(old_name + ":", "glabel " + new_name)
|
||
|
new_file_text = new_file_text.replace(old_name, new_name)
|
||
|
if file_text != new_file_text:
|
||
|
with open(file_path, "w", newline="\n") as f:
|
||
|
f.write(new_file_text)
|
||
|
|
||
|
|
||
|
def handle_jtbl(match):
|
||
|
match = match.group()
|
||
|
split = match.replace(":", "").split(" ")
|
||
|
lbl_name = split[0]
|
||
|
new_lbl_name = "jtbl_" + lbl_name[2:]
|
||
|
rename(lbl_name, new_lbl_name)
|
||
|
ret = "glabel " + new_lbl_name + "\n.word .L"
|
||
|
return ret
|
||
|
|
||
|
|
||
|
def handle_data_line(match):
|
||
|
match = match.group()
|
||
|
ret = "glabel " + match[:-1] + "\n"
|
||
|
return ret
|
||
|
|
||
|
|
||
|
def handle_word_l(match):
|
||
|
match = match.group()
|
||
|
split = match.split(" ")
|
||
|
lbl_name = split[1]
|
||
|
new_lbl_name = split[1][1:]
|
||
|
rename_l(lbl_name, new_lbl_name)
|
||
|
ret = ".word " + new_lbl_name
|
||
|
return ret
|
||
|
|
||
|
|
||
|
def main():
|
||
|
preamble = ".include \"macro.inc\"\n\n # assembler directives\n .set noat # allow manual use of $at\n .set noreorder # don't insert nops after branches\n .set gp=64 # allow use of 64-bit general purposee registers\n\n"
|
||
|
|
||
|
for root, dirs, files in os.walk(data_dir):
|
||
|
for file in files:
|
||
|
file_path = os.path.join(root, file)
|
||
|
with open(file_path) as f:
|
||
|
file_text = f.read()
|
||
|
|
||
|
file_text = preamble + file_text
|
||
|
file_text = re.sub("D_.*: .word .L", handle_jtbl, file_text)
|
||
|
file_text = re.sub("D_.*:", handle_data_line, file_text)
|
||
|
file_text = re.sub(".word .L........", handle_word_l, file_text)
|
||
|
file_text = re.sub("\n\n ", "\n ", file_text)
|
||
|
|
||
|
with open(file_path, "w", newline="\n") as f:
|
||
|
f.write(file_text)
|
||
|
|
||
|
|
||
|
main()
|