1/* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2012 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@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 36void *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 49void *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 65void SDL_UnloadObject(void *handle) 66{ 67 if ( handle != NULL ) 68 DosFreeModule((HMODULE) handle); 69} 70 71#endif /* SDL_LOADSO_OS2 */ 72