-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlibrary_setup.py
More file actions
96 lines (72 loc) · 2.75 KB
/
Copy pathlibrary_setup.py
File metadata and controls
96 lines (72 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import os
import re
class Variable:
type = ""
name = ""
size = ""
def __init__(self, line):
parts = line.split(' ')
self.type = parts[0]
#if (parts[0] == "TexturePtr"):
# self.size = "[]"
if (parts[1][-1:] == ']'):
index = parts[1].index('[')
self.name = parts[1][0:index]
self.size += parts[1][index:]
else:
self.name = parts[1]
def __str__(self):
return f"{self.type} {self.name}{self.size}"
def as_standard(self):
return self.name[1:]
def as_pointer(self):
return f"p{self.as_standard()}"
def as_call(self):
return f"{self.as_standard()}_Register"
def as_register(self):
return f"void {self.as_call()}({self.type} (**pointer){variable.size})"
def as_macro(self):
return '_'.join(re.split('(?<=.)(?=[A-Z])', self.as_standard())).upper()
print("Make sure that example.c and interface_helper.h are in the example folder before pressing enter.")
input()
variables = []
HEADER_NAME = "__INTERFACE_HELPER__"
version = ""
with open("./mod.toml", "r") as mod_config:
for line in mod_config:
if line.startswith("version = "):
version = line[11:-2]
print("Updating library to v" + version + ".")
for entry in sorted(os.scandir("./src"), key=lambda f: f.name):
if (entry.name[-2:] == ".c") and (entry.name != "fixes.c"):
with open(entry, "r") as library:
for line in library:
if (line[0] != ' ') and ('=' in line):
variables.append(Variable(line))
library = "#include \"modding.h\"\n"
library += "#include \"global.h\""
header = "#ifndef " + HEADER_NAME + "\n"
header += "#define " + HEADER_NAME + "\n"
header += "\n"
header += "// Interface Helper header v" + version + "\n"
header += "\n"
header += library
for variable in variables:
library += "\n\n"
library += f"extern {variable};\n"
library += "\n"
library += f"RECOMP_EXPORT " + variable.as_register() + "\n"
library += "{\n"
library += f" *pointer = &{variable.name};\n"
library += "}"
header += "\n\n"
header += f"#define {variable.as_macro()}_DECLARE RECOMP_IMPORT(\"mm_recomp_interface_helper\", {variable.as_register()}); \\\n"
header += f"{variable.type} (*{variable.as_pointer()}){variable.size};\n"
header += "\n"
header += f"#define {variable.as_macro()}_REGISTER {variable.as_call()}(&{variable.as_pointer()});"
header += "\n\n#endif // " + HEADER_NAME
with open("./src/library.c", "w") as lib_file:
lib_file.write(library)
with open("./example/interface_helper.h", "w") as head_file:
head_file.write(header)
print("Header and library files updated.")