Quake 2 game code support for Linux.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2236 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
771828d5fb
commit
047500f9ad
2 changed files with 81 additions and 6 deletions
|
@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
#ifndef __CYGWIN__
|
#ifndef __CYGWIN__
|
||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
@ -347,13 +348,49 @@ double Sys_DoubleTime (void)
|
||||||
return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0;
|
return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sys_UnloadGame (void)
|
static void *game_library;
|
||||||
|
|
||||||
|
void Sys_UnloadGame(void)
|
||||||
{
|
{
|
||||||
|
if (game_library)
|
||||||
|
{
|
||||||
|
dlclose(game_library);
|
||||||
|
game_library = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void *Sys_GetGameAPI (void *parms)
|
void *Sys_GetGameAPI(void *parms)
|
||||||
{
|
{
|
||||||
return NULL;
|
void *(*GetGameAPI)(void *);
|
||||||
|
|
||||||
|
char name[MAX_OSPATH];
|
||||||
|
char curpath[MAX_OSPATH];
|
||||||
|
char *searchpath;
|
||||||
|
const char *gamename = "gamei386.so";
|
||||||
|
|
||||||
|
void *ret;
|
||||||
|
|
||||||
|
getcwd(curpath, sizeof(curpath));
|
||||||
|
|
||||||
|
searchpath = 0;
|
||||||
|
while((searchpath = COM_NextPath(searchpath)))
|
||||||
|
{
|
||||||
|
sprintf (name, "%s/%s/%s", curpath, path, gamename);
|
||||||
|
game_library = dlopen (name, RTLD_LAZY );
|
||||||
|
if (game_library)
|
||||||
|
{
|
||||||
|
GetGameAPI = (void *)dlsym (game_library, "GetGameAPI");
|
||||||
|
if (GetGameAPI && (ret = GetGameAPI(parms)))
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlclose(game_library);
|
||||||
|
game_library = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
|
|
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
#include "qwsvdef.h"
|
#include "qwsvdef.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -788,12 +789,49 @@ int Sys_EnumerateFiles (char *gpath, char *match, int (*func)(char *, int, void
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sys_UnloadGame (void)
|
static void *game_library;
|
||||||
|
|
||||||
|
void Sys_UnloadGame(void)
|
||||||
{
|
{
|
||||||
|
if (game_library)
|
||||||
|
{
|
||||||
|
dlclose(game_library);
|
||||||
|
game_library = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void *Sys_GetGameAPI (void *parms)
|
|
||||||
|
void *Sys_GetGameAPI(void *parms)
|
||||||
{
|
{
|
||||||
return NULL;
|
void *(*GetGameAPI)(void *);
|
||||||
|
|
||||||
|
char name[MAX_OSPATH];
|
||||||
|
char curpath[MAX_OSPATH];
|
||||||
|
char *searchpath;
|
||||||
|
const char *gamename = "gamei386.so";
|
||||||
|
|
||||||
|
void *ret;
|
||||||
|
|
||||||
|
getcwd(curpath, sizeof(curpath));
|
||||||
|
|
||||||
|
searchpath = 0;
|
||||||
|
while((searchpath = COM_NextPath(searchpath)))
|
||||||
|
{
|
||||||
|
sprintf (name, "%s/%s/%s", curpath, searchpath, gamename);
|
||||||
|
game_library = dlopen (name, RTLD_LAZY );
|
||||||
|
if (game_library)
|
||||||
|
{
|
||||||
|
GetGameAPI = (void *)dlsym (game_library, "GetGameAPI");
|
||||||
|
if (GetGameAPI && (ret = GetGameAPI(parms)))
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlclose(game_library);
|
||||||
|
game_library = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sys_ServerActivity(void)
|
void Sys_ServerActivity(void)
|
||||||
|
|
Loading…
Reference in a new issue