From d71346377d0fe4db85174633460acc8e97f11d47 Mon Sep 17 00:00:00 2001 From: iceyrazor Date: Mon, 21 Sep 2026 01:40:32 -0500 Subject: init --- src/mod-injector.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/mod-injector.c (limited to 'src/mod-injector.c') diff --git a/src/mod-injector.c b/src/mod-injector.c new file mode 100644 index 0000000..849b9e6 --- /dev/null +++ b/src/mod-injector.c @@ -0,0 +1,81 @@ +/* + Copyright (C) 2026 iceyrazor + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . +*/ + +#include +#include +#include + +#define str_size 30000 + +void str_replace(char* str, char* replace, char* new) +{ + char* findstr = strstr(str, replace); + if (findstr) { + char right[str_size]; + strncpy(right, &findstr[strlen(replace)], str_size); + findstr[0] = '\0'; + strncat(str, new, str_size); + strncat(str, right, str_size); + } +} + +int main(int argc, char** argv) +{ + // open mod-loader.def.c + char buffer[str_size] = { 0 }; + FILE* mod_loader_file; + mod_loader_file = fopen("src/mod-loader.def.c", "r"); + fread(buffer, str_size, 1, mod_loader_file); + fclose(mod_loader_file); + buffer[str_size - 1] = '\0'; + + + //look for mods. + + DIR* dir; + struct dirent* ent; + char include_mods_str[str_size]; + char init_mods_str[str_size]; + if ((dir = opendir("src/mods")) != NULL) { + /* print all the files and directories within directory */ + while ((ent = readdir(dir)) != NULL) { + if( strcmp(ent->d_name,".") == 0 || strcmp(ent->d_name,"..") == 0 ) continue; + strncat(include_mods_str,"#include \"mods/",str_size); + strncat(include_mods_str,ent->d_name,str_size); + strncat(include_mods_str,"\"\n",str_size); + + char *name=&(ent->d_name[4]); + char *name_stripped=strstr(name,".c"); + name_stripped[0]='\0'; + strncat(init_mods_str,"init_",str_size); + strncat(init_mods_str,name,str_size); + strncat(init_mods_str,"();\n",str_size); + } + closedir(dir); + } else { + /* could not open directory */ + perror(""); + } + + str_replace(buffer, "//", include_mods_str); + str_replace(buffer, "//", init_mods_str); + + mod_loader_file=fopen("src/mod-loader.c","w"); + fwrite(buffer,sizeof(char),strlen(buffer),mod_loader_file); + fclose(mod_loader_file); + + return 0; +} -- cgit v1.3