2016-07-26 03:22:47 +03:00
|
|
|
#include "precompiled.h"
|
2016-07-04 09:07:29 +03:00
|
|
|
|
|
|
|
#ifdef _WIN32
|
2016-07-26 15:18:32 +03:00
|
|
|
//! Required DLL entry point
|
2016-07-04 09:07:29 +03:00
|
|
|
// The above SDK comment indicates this routine is required, but the MSDN
|
|
|
|
// documentation indicates it's actually optional. We keep it, though, for
|
2016-07-26 15:18:32 +03:00
|
|
|
// completeness.
|
|
|
|
BOOL WINAPI DllMain(HINSTANCE /* hinstDLL */, DWORD fdwReason, LPVOID /* lpvReserved */)
|
2016-07-04 09:07:29 +03:00
|
|
|
{
|
2016-07-26 19:31:47 +03:00
|
|
|
if (fdwReason == DLL_PROCESS_ATTACH)
|
|
|
|
{
|
2016-07-26 15:18:32 +03:00
|
|
|
/* nothing */
|
2016-07-04 09:07:29 +03:00
|
|
|
}
|
2016-07-26 19:31:47 +03:00
|
|
|
else if (fdwReason == DLL_PROCESS_DETACH)
|
|
|
|
{
|
2016-07-04 09:07:29 +03:00
|
|
|
/* nothing */
|
|
|
|
}
|
2016-07-26 03:22:47 +03:00
|
|
|
return TRUE;
|
2016-07-04 09:07:29 +03:00
|
|
|
}
|
2016-07-26 15:18:32 +03:00
|
|
|
#elif defined(linux) || defined(__APPLE__)
|
2016-07-04 09:07:29 +03:00
|
|
|
// Linux routines to correspond to ATTACH and DETACH cases above. These
|
|
|
|
// aren't required by linux, but are included here for completeness, and
|
|
|
|
// just in case we come across a need to do something at dll load or
|
|
|
|
// unload.
|
2016-07-26 15:18:32 +03:00
|
|
|
// NOTE: These aren't actually called. Needs investigation.
|
2016-07-26 19:31:47 +03:00
|
|
|
void _init()
|
|
|
|
{
|
|
|
|
// called before dlopen() returns
|
2016-07-04 09:07:29 +03:00
|
|
|
}
|
2016-07-26 19:31:47 +03:00
|
|
|
void _fini()
|
|
|
|
{
|
|
|
|
// called before dlclose() returns
|
2016-07-04 09:07:29 +03:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2016-07-26 15:18:32 +03:00
|
|
|
//! Holds engine functionality callbacks
|
2017-05-09 18:34:55 +03:00
|
|
|
enginefuncs_t g_engfuncs;
|
2016-07-26 15:18:32 +03:00
|
|
|
globalvars_t* gpGlobals;
|
|
|
|
engine_t g_engine;
|
2016-07-04 09:07:29 +03:00
|
|
|
|
|
|
|
// Receive engine function table from engine.
|
|
|
|
//
|
|
|
|
// This appears to be the _first_ DLL routine called by the engine, so this
|
|
|
|
// is where we hook to load all the other DLLs (game, plugins, etc), which
|
|
|
|
// is actually all done in meta_startup().
|
2016-07-26 19:31:47 +03:00
|
|
|
void WINAPI GiveFnptrsToDll(enginefuncs_t *pengfuncsFromEngine, globalvars_t *pGlobals)
|
2016-07-04 09:07:29 +03:00
|
|
|
{
|
|
|
|
gpGlobals = pGlobals;
|
2016-07-26 15:18:32 +03:00
|
|
|
g_engine.funcs = &g_engfuncs;
|
|
|
|
g_engine.globals = pGlobals;
|
2016-07-26 03:22:47 +03:00
|
|
|
|
2017-05-09 18:34:55 +03:00
|
|
|
g_engfuncs = *pengfuncsFromEngine;
|
|
|
|
flush_ALERT_buffer();
|
2016-07-26 15:18:32 +03:00
|
|
|
// NOTE! Have to call logging function _after_ initialising g_engfuncs, so
|
2016-07-04 09:07:29 +03:00
|
|
|
// that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
|
|
|
|
META_DEV("called: GiveFnptrsToDll");
|
2016-07-26 15:18:32 +03:00
|
|
|
|
2016-07-04 09:07:29 +03:00
|
|
|
// Load plugins, load game dll.
|
2016-07-26 15:18:32 +03:00
|
|
|
metamod_startup();
|
|
|
|
}
|