71 lines
1.3 KiB
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;
|
|
}
|
|
|