summaryrefslogtreecommitdiff
path: root/dedicated/sys_linux.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /dedicated/sys_linux.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'dedicated/sys_linux.cpp')
-rw-r--r--dedicated/sys_linux.cpp298
1 files changed, 298 insertions, 0 deletions
diff --git a/dedicated/sys_linux.cpp b/dedicated/sys_linux.cpp
new file mode 100644
index 0000000..28e9b6c
--- /dev/null
+++ b/dedicated/sys_linux.cpp
@@ -0,0 +1,298 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+
+#include <unistd.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <malloc.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include "isys.h"
+#include "console/conproc.h"
+#include "dedicated.h"
+#include "engine_hlds_api.h"
+#include "checksum_md5.h"
+#include "idedicatedexports.h"
+#include "tier0/vcrmode.h"
+#include "tier0/dbg.h"
+#include "mathlib/mathlib.h"
+#include "interface.h"
+#include "tier1/strtools.h"
+#include "tier0/icommandline.h"
+#include "materialsystem/imaterialsystem.h"
+#include "istudiorender.h"
+#include "SoundEmitterSystem/isoundemittersystembase.h"
+#include "datacache/idatacache.h"
+#include "datacache/imdlcache.h"
+#include "vphysics_interface.h"
+#include "icvar.h"
+#include "filesystem/IQueuedLoader.h"
+#include "console/TextConsoleUnix.h"
+
+bool InitInstance( );
+
+char g_szEXEName[ MAX_PATH ];
+
+extern CTextConsoleUnix console;
+
+//-----------------------------------------------------------------------------
+// Purpose: Implements OS Specific layer ( loosely )
+//-----------------------------------------------------------------------------
+class CSys : public ISys
+{
+public:
+ virtual ~CSys();
+
+ virtual bool LoadModules( CDedicatedAppSystemGroup *pAppSystemGroup );
+
+ void Sleep( int msec );
+ bool GetExecutableName( char *out );
+ void ErrorMessage( int level, const char *msg );
+
+ void WriteStatusText( char *szText );
+ void UpdateStatus( int force );
+
+ long LoadLibrary( char *lib );
+ void FreeLibrary( long library );
+ void *GetProcAddress( long library, const char *name );
+
+ bool CreateConsoleWindow( void );
+ void DestroyConsoleWindow( void );
+
+ void ConsoleOutput ( char *string );
+ char *ConsoleInput ( int index, char *buf, int buflen );
+ void Printf( const char *fmt, ...);
+};
+
+static CSys g_Sys;
+ISys *sys = &g_Sys;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CSys::~CSys()
+{
+ sys = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : msec
+// Output :
+//-----------------------------------------------------------------------------
+void CSys::Sleep( int msec )
+{
+ usleep(msec * 1000);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : handle, function name-
+// Output : void *
+//-----------------------------------------------------------------------------
+void *CSys::GetProcAddress( long library, const char *name )
+{
+ return dlsym( library, name );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : *lib -
+// Output : long
+//-----------------------------------------------------------------------------
+long CSys::LoadLibrary( char *lib )
+{
+ void *hDll = NULL;
+
+ char cwd[1024];
+ char absolute_lib[1024];
+
+ if (!getcwd(cwd, sizeof(cwd)))
+ ErrorMessage(1, "Sys_LoadLibrary: Couldn't determine current directory.");
+
+ if (cwd[strlen(cwd)-1] == '/')
+ cwd[strlen(cwd)-1] = 0;
+
+ Q_snprintf(absolute_lib, sizeof( absolute_lib ), "%s/%s", cwd, lib);
+
+ hDll = dlopen( absolute_lib, RTLD_NOW );
+ if ( !hDll )
+ {
+ ErrorMessage( 1, dlerror() );
+ }
+ return (long)hDll;
+}
+
+void CSys::FreeLibrary( long library )
+{
+ if ( !library )
+ return;
+
+ dlclose( (void *)library );
+}
+
+bool CSys::GetExecutableName( char *out )
+{
+ char *name = strrchr(g_szEXEName, '/' );
+ if ( name )
+ {
+ strcpy( out, name + 1);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+/*
+==============
+ErrorMessage
+
+Engine is erroring out, display error in message box
+==============
+*/
+void CSys::ErrorMessage( int level, const char *msg )
+{
+ Error( "%s\n", msg );
+ exit( -1 );
+}
+
+void CSys::UpdateStatus( int force )
+{
+}
+
+/*
+================
+ConsoleOutput
+
+Print text to the dedicated console
+================
+*/
+void CSys::ConsoleOutput (char *string)
+{
+ console.Print(string);
+}
+
+/*
+==============
+Printf
+
+Engine is printing to console
+==============
+*/
+void CSys::Printf( const char *fmt, ...)
+{
+ // Dump text to debugging console.
+ va_list argptr;
+ char szText[1024];
+
+ va_start (argptr, fmt);
+ Q_vsnprintf (szText, sizeof( szText ), fmt, argptr);
+ va_end (argptr);
+
+ // Get Current text and append it.
+ ConsoleOutput( szText );
+}
+
+/*
+================
+ConsoleInput
+
+================
+*/
+char *CSys::ConsoleInput( int index, char *buf, int buflen )
+{
+ return console.GetLine( index, buf, buflen );
+}
+
+/*
+==============
+WriteStatusText
+
+==============
+*/
+void CSys::WriteStatusText( char *szText )
+{
+}
+
+/*
+==============
+CreateConsoleWindow
+
+Create console window ( overridable? )
+==============
+*/
+bool CSys::CreateConsoleWindow( void )
+{
+ return true;
+}
+
+/*
+==============
+DestroyConsoleWindow
+
+==============
+*/
+void CSys::DestroyConsoleWindow( void )
+{
+}
+
+/*
+================
+GameInit
+================
+*/
+bool CSys::LoadModules( CDedicatedAppSystemGroup *pAppSystemGroup )
+{
+ AppSystemInfo_t appSystems[] =
+ {
+ { "engine" DLL_EXT_STRING, CVAR_QUERY_INTERFACE_VERSION },
+ { "soundemittersystem" DLL_EXT_STRING, SOUNDEMITTERSYSTEM_INTERFACE_VERSION }, // loaded for backwards compatability, prevents crash on exit for old game dlls
+ { "materialsystem" DLL_EXT_STRING, MATERIAL_SYSTEM_INTERFACE_VERSION },
+ { "studiorender" DLL_EXT_STRING, STUDIO_RENDER_INTERFACE_VERSION },
+ { "vphysics" DLL_EXT_STRING, VPHYSICS_INTERFACE_VERSION },
+ { "datacache" DLL_EXT_STRING, DATACACHE_INTERFACE_VERSION },
+ { "datacache" DLL_EXT_STRING, MDLCACHE_INTERFACE_VERSION },
+ { "datacache" DLL_EXT_STRING, STUDIO_DATA_CACHE_INTERFACE_VERSION },
+ { "dedicated" DLL_EXT_STRING, QUEUEDLOADER_INTERFACE_VERSION },
+ { "engine" DLL_EXT_STRING, VENGINE_HLDS_API_VERSION },
+ { "", "" } // Required to terminate the list
+ };
+
+ if ( !pAppSystemGroup->AddSystems( appSystems ) )
+ return false;
+
+ engine = (IDedicatedServerAPI *)pAppSystemGroup->FindSystem( VENGINE_HLDS_API_VERSION );
+ // obsolete i think SetCVarIF( (ICvar*)pAppSystemGroup->FindSystem( VENGINE_CVAR_INTERFACE_VERSION ) );
+
+ IMaterialSystem* pMaterialSystem = (IMaterialSystem*)pAppSystemGroup->FindSystem( MATERIAL_SYSTEM_INTERFACE_VERSION );
+ pMaterialSystem->SetShaderAPI( "shaderapiempty" DLL_EXT_STRING );
+ return true;
+}
+
+bool NET_Init()
+{
+ return true;
+}
+
+void NET_Shutdown()
+{
+}
+
+extern int main(int argc, char *argv[]);
+DLL_EXPORT int DedicatedMain( int argc, char *argv[] );
+
+int DedicatedMain( int argc, char *argv[] )
+{
+ return main(argc,argv);
+}