// core.c #include #include #define SDL_MAIN_HANDLED #include #define PROJECT_NAME "sdfps" #ifdef __WIN32__ # define SHARED_OBJECT PROJECT_NAME ".dll" # define SHARED_OBJECT_ACTIVE SHARED_OBJECT "-active.dll" #else # define SHARED_OBJECT "./" PROJECT_NAME ".so" # define SHARED_OBJECT_ACTIVE SHARED_OBJECT #endif #define SHARED_MAIN PROJECT_NAME "_main" #ifdef __WIN32__ /* * windows doesn't let us overwite a dll that's currently in use, but it * seems that macos/linux does */ int copy_shared_object() { if (system("copy " SHARED_OBJECT " " SHARED_OBJECT_ACTIVE " /Y")) { puts("failed copying to " SHARED_OBJECT_ACTIVE); // puts(SDL_GetError()); return 1; } return 0; } #else int copy_shared_object() { return 0; } #endif int main(int argc, char **argv) { void *u_data = NULL; puts("start."); SDL_Init(SDL_INIT_EVERYTHING); while (1) { if (copy_shared_object()) break; void *so = SDL_LoadObject(SHARED_OBJECT_ACTIVE); if (so == 0) { puts("failed load " SHARED_OBJECT_ACTIVE); puts(SDL_GetError()); break; } int(*shared_main)(int, char **, void **) = SDL_LoadFunction(so, SHARED_MAIN); if(shared_main(argc, argv, &u_data) != 0) break; SDL_UnloadObject(so); } quit: SDL_Quit(); puts("done."); return 0; }