Home | History | Annotate | Download | only in os2
      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 (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