1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2006 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 #include "SDL_config.h" 23 24 #ifdef SDL_LOADSO_OS2 25 26 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 27 /* System dependent library loading routines */ 28 29 #include <stdio.h> 30 #define INCL_DOSERRORS 31 #define INCL_DOSMODULEMGR 32 #include <os2.h> 33 34 #include "SDL_loadso.h" 35 36 void *SDL_LoadObject(const char *sofile) 37 { 38 HMODULE handle = NULL; 39 char buf[512]; 40 APIRET ulrc = DosLoadModule(buf, sizeof (buf), (char *) sofile, &handle); 41 42 /* Generate an error message if all loads failed */ 43 if ((ulrc != NO_ERROR) || (handle == NULL)) 44 SDL_SetError("Failed loading %s: %s", sofile, buf); 45 46 return((void *) handle); 47 } 48 49 void *SDL_LoadFunction(void *handle, const char *name) 50 { 51 const char *loaderror = "Unknown error"; 52 void *symbol = NULL; 53 APIRET ulrc = DosQueryProcAddr((HMODULE)handle, 0, (char *)name, &symbol); 54 if (ulrc == ERROR_INVALID_HANDLE) 55 loaderror = "Invalid module handle"; 56 else if (ulrc == ERROR_INVALID_NAME) 57 loaderror = "Symbol not found"; 58 59 if (symbol == NULL) 60 SDL_SetError("Failed loading %s: %s", name, loaderror); 61 62 return(symbol); 63 } 64 65 void SDL_UnloadObject(void *handle) 66 { 67 if ( handle != NULL ) 68 DosFreeModule((HMODULE) handle); 69 } 70 71 #endif /* SDL_LOADSO_OS2 */ 72