1 2 /* Test program to test dynamic loading with the loadso subsystem. 3 */ 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 #include "SDL.h" 9 10 typedef int (*fntype)(const char *); 11 12 int main(int argc, char *argv[]) 13 { 14 int retval = 0; 15 int hello = 0; 16 const char *libname = NULL; 17 const char *symname = NULL; 18 void *lib = NULL; 19 fntype fn = NULL; 20 21 if (argc != 3) { 22 const char *app = argv[0]; 23 fprintf(stderr, "USAGE: %s <library> <functionname>\n", app); 24 fprintf(stderr, " %s --hello <lib with puts()>\n", app); 25 return 1; 26 } 27 28 /* Initialize SDL */ 29 if ( SDL_Init(0) < 0 ) { 30 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); 31 return 2; 32 } 33 34 if (strcmp(argv[1], "--hello") == 0) { 35 hello = 1; 36 libname = argv[2]; 37 symname = "puts"; 38 } else { 39 libname = argv[1]; 40 symname = argv[2]; 41 } 42 43 lib = SDL_LoadObject(libname); 44 if (lib == NULL) { 45 fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n", 46 libname, SDL_GetError()); 47 retval = 3; 48 } else { 49 fn = (fntype) SDL_LoadFunction(lib, symname); 50 if (fn == NULL) { 51 fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n", 52 symname, SDL_GetError()); 53 retval = 4; 54 } else { 55 printf("Found %s in %s at %p\n", symname, libname, fn); 56 if (hello) { 57 printf("Calling function...\n"); 58 fflush(stdout); 59 fn(" HELLO, WORLD!\n"); 60 printf("...apparently, we survived. :)\n"); 61 printf("Unloading library...\n"); 62 fflush(stdout); 63 } 64 } 65 SDL_UnloadObject(lib); 66 } 67 SDL_Quit(); 68 return(0); 69 } 70 71 72