sdfps/core.c

71 lines
1.3 KiB
C

// core.c
#include <stdio.h>
#include <stdlib.h>
#define SDL_MAIN_HANDLED
#include <SDL2/SDL.h>
#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;
}