#include "sysconfig.h"
#include "sysdeps.h"
-
+#include "uae/api.h"
#include "uae/dlopen.h"
-#ifdef _WIN32
+#include "uae/log.h"
+#ifdef _WIN32
+#include "windows.h"
#else
#include <dlfcn.h>
#endif
+#ifdef WINUAE
+#include "od-win32/win32.h"
+#endif
UAE_DLHANDLE uae_dlopen(const TCHAR *path)
{
UAE_DLHANDLE result;
-#ifdef WINUAE
- result = uae_dlopen_plugin(path);
-#elif _WIN32
+ if (path == NULL || path[0] == _T('\0')) {
+ write_log(_T("DLOPEN: No path given\n"));
+ return NULL;
+ }
+#ifdef _WIN32
result = LoadLibrary(path);
#else
result = dlopen(path, RTLD_NOW);
const char *error = dlerror();
if (error != NULL) {
- write_log("uae_dlopen failed: %s\n", error);
+ write_log("DLOPEN: %s\n", error);
}
#endif
- if (result)
- uae_dlopen_patch_common(result);
+ if (result == NULL) {
+ write_log("DLOPEN: Failed to open %s\n", path);
+ }
return result;
}
#endif
}
-#include "uae/log.h"
+UAE_DLHANDLE uae_dlopen_plugin(const TCHAR *name)
+{
+#if defined(FSUAE)
+ const TCHAR *path = NULL;
+ if (plugin_lookup) {
+ path = plugin_lookup(name);
+ }
+ if (path == NULL or path[0] == _T('\0')) {
+ write_log(_T("DLOPEN: Could not find plugin \"%s\"\n"), name);
+ return NULL;
+ }
+ UAE_DLHANDLE handle = uae_dlopen(path);
+#else
+ TCHAR path[MAX_DPATH];
+ _tcscpy(path, name);
+#ifdef _WIN64
+ _tcscat(path, _T("_x64"));
+#endif
+ _tcscat(path, LT_MODULE_EXT);
+ UAE_DLHANDLE handle = uae_dlopen(path);
+#endif
+ if (handle) {
+ write_log(_T("DLOPEN: Loaded plugin %s\n"), path);
+ uae_dlopen_patch_common(handle);
+ }
+ return handle;
+}
void uae_dlopen_patch_common(UAE_DLHANDLE handle)
{
-
#include "sysconfig.h"
#include "sysdeps.h"
#ifdef CAPS
+#ifdef _WIN32
#include <shlobj.h>
+#endif
#include "caps_win32.h"
#include "zfile.h"
#include "gui.h"
-#include "win32.h"
#include "uae.h"
+#include "uae/dlopen.h"
-#include "ComType.h"
+#include "Comtype.h"
#include "CapsAPI.h"
#define CAPS_TRACKTIMING 1
static struct CapsVersionInfo cvi;
static bool oldlib, canseed;
-typedef SDWORD (__cdecl* CAPSINIT)(void);
+#ifdef _WIN32
+#define CAPSCALL __cdecl
+#else
+#define CAPSCALL
+#endif
+
+typedef SDWORD (CAPSCALL * CAPSINIT)(void);
static CAPSINIT pCAPSInit;
-typedef SDWORD (__cdecl* CAPSADDIMAGE)(void);
+typedef SDWORD (CAPSCALL * CAPSADDIMAGE)(void);
static CAPSADDIMAGE pCAPSAddImage;
-typedef SDWORD (__cdecl* CAPSLOCKIMAGEMEMORY)(SDWORD,PUBYTE,UDWORD,UDWORD);
+typedef SDWORD (CAPSCALL * CAPSLOCKIMAGEMEMORY)(SDWORD,PUBYTE,UDWORD,UDWORD);
static CAPSLOCKIMAGEMEMORY pCAPSLockImageMemory;
-typedef SDWORD (__cdecl* CAPSUNLOCKIMAGE)(SDWORD);
+typedef SDWORD (CAPSCALL * CAPSUNLOCKIMAGE)(SDWORD);
static CAPSUNLOCKIMAGE pCAPSUnlockImage;
-typedef SDWORD (__cdecl* CAPSLOADIMAGE)(SDWORD,UDWORD);
+typedef SDWORD (CAPSCALL * CAPSLOADIMAGE)(SDWORD,UDWORD);
static CAPSLOADIMAGE pCAPSLoadImage;
-typedef SDWORD (__cdecl* CAPSGETIMAGEINFO)(PCAPSIMAGEINFO,SDWORD);
+typedef SDWORD (CAPSCALL * CAPSGETIMAGEINFO)(PCAPSIMAGEINFO,SDWORD);
static CAPSGETIMAGEINFO pCAPSGetImageInfo;
-typedef SDWORD (__cdecl* CAPSLOCKTRACK)(PCAPSTRACKINFO,SDWORD,UDWORD,UDWORD,UDWORD);
+typedef SDWORD (CAPSCALL * CAPSLOCKTRACK)(PCAPSTRACKINFO,SDWORD,UDWORD,UDWORD,UDWORD);
static CAPSLOCKTRACK pCAPSLockTrack;
-typedef SDWORD (__cdecl* CAPSUNLOCKTRACK)(SDWORD,UDWORD);
+typedef SDWORD (CAPSCALL * CAPSUNLOCKTRACK)(SDWORD,UDWORD);
static CAPSUNLOCKTRACK pCAPSUnlockTrack;
-typedef SDWORD (__cdecl* CAPSUNLOCKALLTRACKS)(SDWORD);
+typedef SDWORD (CAPSCALL * CAPSUNLOCKALLTRACKS)(SDWORD);
static CAPSUNLOCKALLTRACKS pCAPSUnlockAllTracks;
-typedef SDWORD (__cdecl* CAPSGETVERSIONINFO)(PCAPSVERSIONINFO,UDWORD);
+typedef SDWORD (CAPSCALL * CAPSGETVERSIONINFO)(PCAPSVERSIONINFO,UDWORD);
static CAPSGETVERSIONINFO pCAPSGetVersionInfo;
-typedef SDWORD (__cdecl* CAPSGETINFO)(PVOID pinfo, SDWORD id, UDWORD cylinder, UDWORD head, UDWORD inftype, UDWORD infid);
+typedef SDWORD (CAPSCALL * CAPSGETINFO)(PVOID pinfo, SDWORD id, UDWORD cylinder, UDWORD head, UDWORD inftype, UDWORD infid);
static CAPSGETINFO pCAPSGetInfo;
-typedef SDWORD (__cdecl* CAPSSETREVOLUTION)(SDWORD id, UDWORD value);
+typedef SDWORD (CAPSCALL * CAPSSETREVOLUTION)(SDWORD id, UDWORD value);
static CAPSSETREVOLUTION pCAPSSetRevolution;
-typedef SDWORD (__cdecl* CAPSGETIMAGETYPEMEMORY)(PUBYTE buffer, UDWORD length);
+typedef SDWORD (CAPSCALL * CAPSGETIMAGETYPEMEMORY)(PUBYTE buffer, UDWORD length);
static CAPSGETIMAGETYPEMEMORY pCAPSGetImageTypeMemory;
int caps_init (void)
{
static int init, noticed;
int i;
- HMODULE h;
- TCHAR *dllname = _T("CAPSImg.dll");
if (init)
return 1;
- h = WIN32_LoadLibrary (dllname);
+ UAE_DLHANDLE h = uae_dlopen_plugin(_T("CAPSImg"));
if (!h) {
TCHAR tmp[MAX_DPATH];
if (SUCCEEDED (SHGetFolderPath (NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, tmp))) {
_tcscat (tmp, _T("\\Software Preservation Society\\"));
- _tcscat (tmp, dllname);
- h = LoadLibrary (tmp);
- if (!h) {
- if (noticed)
- return 0;
- notify_user (NUMSG_NOCAPS);
- noticed = 1;
- return 0;
- }
+ _tcscat (tmp, _T("CAPSImg.dll"));
+ h = uae_dlopen(tmp);
}
}
- if (GetProcAddress (h, "CAPSLockImageMemory") == 0 || GetProcAddress (h, "CAPSGetVersionInfo") == 0) {
+ if (!h) {
+ if (noticed)
+ return 0;
+ notify_user (NUMSG_NOCAPS);
+ noticed = 1;
+ return 0;
+ }
+
+ if (uae_dlsym(h, "CAPSLockImageMemory") == 0 || uae_dlsym(h, "CAPSGetVersionInfo") == 0) {
if (noticed)
return 0;
notify_user (NUMSG_OLDCAPS);
noticed = 1;
return 0;
}
- pCAPSInit = (CAPSINIT)GetProcAddress (h, "CAPSInit");
- pCAPSAddImage = (CAPSADDIMAGE)GetProcAddress (h, "CAPSAddImage");
- pCAPSLockImageMemory = (CAPSLOCKIMAGEMEMORY)GetProcAddress (h, "CAPSLockImageMemory");
- pCAPSUnlockImage = (CAPSUNLOCKIMAGE)GetProcAddress (h, "CAPSUnlockImage");
- pCAPSLoadImage = (CAPSLOADIMAGE)GetProcAddress (h, "CAPSLoadImage");
- pCAPSGetImageInfo = (CAPSGETIMAGEINFO)GetProcAddress (h, "CAPSGetImageInfo");
- pCAPSLockTrack = (CAPSLOCKTRACK)GetProcAddress (h, "CAPSLockTrack");
- pCAPSUnlockTrack = (CAPSUNLOCKTRACK)GetProcAddress (h, "CAPSUnlockTrack");
- pCAPSUnlockAllTracks = (CAPSUNLOCKALLTRACKS)GetProcAddress (h, "CAPSUnlockAllTracks");
- pCAPSGetVersionInfo = (CAPSGETVERSIONINFO)GetProcAddress (h, "CAPSGetVersionInfo");
- pCAPSGetInfo = (CAPSGETINFO)GetProcAddress (h, "CAPSGetInfo");
- pCAPSSetRevolution = (CAPSSETREVOLUTION)GetProcAddress(h, "CAPSSetRevolution");
- pCAPSGetImageTypeMemory = (CAPSGETIMAGETYPEMEMORY)GetProcAddress(h, "CAPSGetImageTypeMemory");
+
+ pCAPSInit = (CAPSINIT) uae_dlsym(h, "CAPSInit");
+ pCAPSAddImage = (CAPSADDIMAGE) uae_dlsym(h, "CAPSAddImage");
+ pCAPSLockImageMemory = (CAPSLOCKIMAGEMEMORY) uae_dlsym(h, "CAPSLockImageMemory");
+ pCAPSUnlockImage = (CAPSUNLOCKIMAGE) uae_dlsym(h, "CAPSUnlockImage");
+ pCAPSLoadImage = (CAPSLOADIMAGE) uae_dlsym(h, "CAPSLoadImage");
+ pCAPSGetImageInfo = (CAPSGETIMAGEINFO) uae_dlsym(h, "CAPSGetImageInfo");
+ pCAPSLockTrack = (CAPSLOCKTRACK) uae_dlsym(h, "CAPSLockTrack");
+ pCAPSUnlockTrack = (CAPSUNLOCKTRACK) uae_dlsym(h, "CAPSUnlockTrack");
+ pCAPSUnlockAllTracks = (CAPSUNLOCKALLTRACKS) uae_dlsym(h, "CAPSUnlockAllTracks");
+ pCAPSGetVersionInfo = (CAPSGETVERSIONINFO) uae_dlsym(h, "CAPSGetVersionInfo");
+ pCAPSGetInfo = (CAPSGETINFO) uae_dlsym(h, "CAPSGetInfo");
+ pCAPSSetRevolution = (CAPSSETREVOLUTION) uae_dlsym(h, "CAPSSetRevolution");
+ pCAPSGetImageTypeMemory = (CAPSGETIMAGETYPEMEMORY) uae_dlsym(h, "CAPSGetImageTypeMemory");
init = 1;
cvi.type = 1;
static int load (struct CapsTrackInfoT2 *ci, int drv, int track, bool seed, bool newtrack)
{
- int flags;
-
- flags = caps_flags;
+ int flags = caps_flags;
if (canseed) {
ci->type = 2;
if (seed) {
return 1;
}
-#endif
+#endif /* CAPS */