From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- dedicated/sys_common.cpp | 300 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 dedicated/sys_common.cpp (limited to 'dedicated/sys_common.cpp') diff --git a/dedicated/sys_common.cpp b/dedicated/sys_common.cpp new file mode 100644 index 0000000..5138bd3 --- /dev/null +++ b/dedicated/sys_common.cpp @@ -0,0 +1,300 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//===========================================================================// +#ifdef _WIN32 +#include +#elif POSIX +#include +#else +#error +#endif +#include +#include +#include "isys.h" +#include "dedicated.h" +#include "engine_hlds_api.h" +#include "filesystem.h" +#include "tier0/vcrmode.h" +#include "tier0/dbg.h" +#include "tier1/strtools.h" +#include "tier0/icommandline.h" +#include "idedicatedexports.h" +#include "vgui/vguihelpers.h" + +static long hDLLThirdParty = 0L; + +//----------------------------------------------------------------------------- +// Modules... +//----------------------------------------------------------------------------- +CSysModule *s_hMatSystemModule = NULL; +CSysModule *s_hEngineModule = NULL; +CSysModule *s_hSoundEmitterModule = NULL; + +CreateInterfaceFn s_MaterialSystemFactory; +CreateInterfaceFn s_EngineFactory; +CreateInterfaceFn s_SoundEmitterFactory; + +/* +============== +Load3rdParty + +Load support for third party .dlls ( gamehost ) +============== +*/ +void Load3rdParty( void ) +{ + // Only do this if the server operator wants the support. + // ( In case of malicious code, too ) + if ( CommandLine()->CheckParm( "-usegh" ) ) + { + hDLLThirdParty = sys->LoadLibrary( "ghostinj.dll" ); + } +} + +/* +============== +EF_VID_ForceUnlockedAndReturnState + +Dummy funcion called by engine +============== +*/ +int EF_VID_ForceUnlockedAndReturnState(void) +{ + return 0; +} + +/* +============== +EF_VID_ForceLockState + +Dummy funcion called by engine +============== +*/ +void EF_VID_ForceLockState(int) +{ +} + +/* +============== +InitInstance + +============== +*/ +bool InitInstance( ) +{ + Load3rdParty(); + + return true; +} + +/* +============== +ProcessConsoleInput + +============== +*/ +int ProcessConsoleInput(void) +{ + char *s; + int count = 0; + + if ( engine ) + { + do + { + char szBuf[ 256 ]; + s = sys->ConsoleInput( count++, szBuf, sizeof( szBuf ) ); + if (s && s[0] ) + { + V_strcat_safe( szBuf, "\n" ); + engine->AddConsoleText ( szBuf ); + } + } while (s); + } + + return count; +} + +void RunServer( void ); + +class CDedicatedExports : public CBaseAppSystem +{ +public: + virtual void Sys_Printf( char *text ) + { + if ( sys ) + { + sys->Printf( "%s", text ); + } + } + + virtual void RunServer() + { + void RunServer( void ); + ::RunServer(); + } +}; + +EXPOSE_SINGLE_INTERFACE( CDedicatedExports, IDedicatedExports, VENGINE_DEDICATEDEXPORTS_API_VERSION ); + +static const char *get_consolelog_filename() +{ + static bool s_bInited = false; + static char s_consolelog[ MAX_PATH ]; + + if ( !s_bInited ) + { + s_bInited = true; + + // Don't do the -consolelog thing if -consoledebug is present. + // CTextConsoleUnix::Print() looks for -consoledebug. + const char *filename = NULL; + if ( !CommandLine()->FindParm( "-consoledebug" ) && + CommandLine()->CheckParm( "-consolelog", &filename ) && + filename ) + { + V_strcpy_safe( s_consolelog, filename ); + } + } + + return s_consolelog; +} + +SpewRetval_t DedicatedSpewOutputFunc( SpewType_t spewType, char const *pMsg ) +{ + if ( sys ) + { + sys->Printf( "%s", pMsg ); + + // If they have specified -consolelog, log this message there. Otherwise these + // wind up being lost because Sys_InitGame hasn't been called yet, and + // Sys_SpewFunc is the thing that logs stuff to -consolelog, etc. + const char *filename = get_consolelog_filename(); + if ( filename[ 0 ] && pMsg[ 0 ] ) + { + FileHandle_t fh = g_pFullFileSystem->Open( filename, "a" ); + if ( fh != FILESYSTEM_INVALID_HANDLE ) + { + g_pFullFileSystem->Write( pMsg, V_strlen( pMsg ), fh ); + g_pFullFileSystem->Close( fh ); + } + } + } +#ifdef _WIN32 + Plat_DebugString( pMsg ); +#endif + + if (spewType == SPEW_ERROR) + { + // In Windows vgui mode, make a message box or they won't ever see the error. +#ifdef _WIN32 + extern bool g_bVGui; + if ( g_bVGui ) + { + MessageBox( NULL, pMsg, "Error", MB_OK | MB_TASKMODAL ); + } + TerminateProcess( GetCurrentProcess(), 1 ); +#elif POSIX + fflush(stdout); + _exit(1); +#else +#error "Implement me" +#endif + + return SPEW_ABORT; + } + if (spewType == SPEW_ASSERT) + { + if ( CommandLine()->FindParm( "-noassert" ) == 0 ) + return SPEW_DEBUGGER; + else + return SPEW_CONTINUE; + } + return SPEW_CONTINUE; +} + +int Sys_GetExecutableName( char *out ) +{ +#ifdef _WIN32 + if ( !::GetModuleFileName( ( HINSTANCE )GetModuleHandle( NULL ), out, 256 ) ) + { + return 0; + } +#else + strcpy( out, g_szEXEName ); +#endif + return 1; +} + +//----------------------------------------------------------------------------- +// Purpose: Return the directory where this .exe is running from +// Output : char +//----------------------------------------------------------------------------- +const char *UTIL_GetExecutableDir( ) +{ + static char exedir[ MAX_PATH ]; + + exedir[ 0 ] = 0; + if ( !Sys_GetExecutableName(exedir) ) + return NULL; + + char *pSlash; + char *pSlash2; + pSlash = strrchr( exedir,'\\' ); + pSlash2 = strrchr( exedir,'/' ); + if ( pSlash2 > pSlash ) + { + pSlash = pSlash2; + } + if (pSlash) + { + *pSlash = 0; + } + + // Return the bin directory as the executable dir if it's not in there + // because that's really where we're running from... + int exeLen = strlen(exedir); + if ( exedir[exeLen-4] != CORRECT_PATH_SEPARATOR || + exedir[exeLen-3] != 'b' || + exedir[exeLen-2] != 'i' || + exedir[exeLen-1] != 'n' ) + { + Q_strncat( exedir, "\\bin", sizeof( exedir ), COPY_ALL_CHARACTERS ); + Q_FixSlashes( exedir ); + } + + return exedir; +} + + +//----------------------------------------------------------------------------- +// Purpose: Return the directory where this .exe is running from +// Output : char +//----------------------------------------------------------------------------- +const char *UTIL_GetBaseDir( void ) +{ + static char basedir[ MAX_PATH ]; + + char const *pOverrideDir = CommandLine()->CheckParm( "-basedir" ); + if ( pOverrideDir ) + return pOverrideDir; + + basedir[ 0 ] = 0; + const char *pExeDir = UTIL_GetExecutableDir( ); + if ( pExeDir ) + { + strcpy( basedir, pExeDir ); + int dirlen = strlen( basedir ); + if ( basedir[ dirlen - 3 ] == 'b' && + basedir[ dirlen - 2 ] == 'i' && + basedir[ dirlen - 1 ] == 'n' ) + { + basedir[ dirlen - 4 ] = 0; + } + } + + return basedir; +} -- cgit v1.2.3