From 842eeabbdeb0b93cf36d7815d5effd0ab91a0cb7 Mon Sep 17 00:00:00 2001 From: kotofyt Date: Sun, 28 Dec 2025 01:53:44 +0200 Subject: [PATCH] added forgotten files --- engine/cvar.cpp | 4 +- engine/engine.cpp | 6 +- public/tier0/platform.h | 7 +- public/tier1/interface.h | 4 +- public/tier2/ifilesystem.h | 24 +--- stdfilesystems/build.cpp | 0 {tier2 => stdfilesystems}/filesystem_libc.cpp | 8 +- tier0/build.cpp | 32 +++++ tier0/network.cpp | 3 - tier0/platform.cpp | 16 +-- tier1/__build.cpp | 9 +- tier1/build.cpp | 34 +++++ tier1/commandline.o | Bin 0 -> 38432 bytes tier1/interface.cpp | 18 ++- tier1/interface.o | Bin 0 -> 10808 bytes tier1/utlbuffer.o | Bin 0 -> 6728 bytes tier1/utlmap.o | Bin 0 -> 6728 bytes tier1/utlstring.o | Bin 0 -> 6728 bytes tier1/utlvector.o | Bin 0 -> 6728 bytes tier2/__build.cpp | 8 +- tier2/build.cpp | 32 +++++ tier2/fileformats/ini.cpp | 9 +- tier2/fileformats/ini.o | Bin 0 -> 114728 bytes tier2/filesystem.cpp | 119 +----------------- tier2/filesystem.o | Bin 0 -> 7208 bytes 25 files changed, 155 insertions(+), 178 deletions(-) create mode 100644 stdfilesystems/build.cpp rename {tier2 => stdfilesystems}/filesystem_libc.cpp (92%) create mode 100644 tier0/build.cpp create mode 100644 tier1/build.cpp create mode 100644 tier1/commandline.o create mode 100644 tier1/interface.o create mode 100644 tier1/utlbuffer.o create mode 100644 tier1/utlmap.o create mode 100644 tier1/utlstring.o create mode 100644 tier1/utlvector.o create mode 100644 tier2/build.cpp create mode 100644 tier2/fileformats/ini.o create mode 100644 tier2/filesystem.o diff --git a/engine/cvar.cpp b/engine/cvar.cpp index dada8ce..7290b50 100644 --- a/engine/cvar.cpp +++ b/engine/cvar.cpp @@ -327,8 +327,8 @@ void IConsole_Exec( int argc, char **argv) IFileHandle *f = filesystem->Open(argv[1], FILEMODE_READ); if (!f) return; - CUtlBuffer b(f->Size()+1); - f->Read(b, b.GetSize()); + CUtlBuffer b(filesystem->Size(f)+1); + filesystem->Read(f, b, b.GetSize()); b[b.GetSize()-1] = 0; Console()->AddCommand(b); Console()->AddCommand(";"); diff --git a/engine/engine.cpp b/engine/engine.cpp index 73e80ed..ec38140 100644 --- a/engine/engine.cpp +++ b/engine/engine.cpp @@ -11,10 +11,14 @@ extern "C" void FunnyMain( int argc, char **argv ) { CommandLine()->CreateCommandLine(argc, argv); + void *pFilesystem = Plat_LoadLibrary("libfilesystem.so"); + CreateInterfaceFn pFilesystemFactory = Sys_GetFactory(pFilesystem); + + filesystem = (IFileSystem*)pFilesystemFactory(FILESYSTEM_INTERFACE_VERSION, NULL); filesystem->Init(); gamewindow->Init(); - Materials()->Init(); + g_pMaterialSystem->Init(); ServerGameDLL()->Init(); diff --git a/public/tier0/platform.h b/public/tier0/platform.h index 07a12d0..e106cf6 100644 --- a/public/tier0/platform.h +++ b/public/tier0/platform.h @@ -25,7 +25,7 @@ #define DLL_CLASS_EXPORT __attribute__ ((visibility("default"))) #define DLL_CLASS_IMPORT -#define DLL_GLOBAL_EXPORT extern __attribute ((visibility("default"))) +#define DLL_GLOBAL_EXPORT __attribute ((visibility("default"))) #define DLL_GLOBAL_IMPORT extern #endif @@ -50,6 +50,11 @@ #endif +#if defined(__linux__) +#define POSIX +#endif + + #define abstract_class class PLATFORM_INTERFACE void Plat_FatalErrorFunc( const char *szFormat, ... ); diff --git a/public/tier1/interface.h b/public/tier1/interface.h index 9f7de00..e9e9e42 100644 --- a/public/tier1/interface.h +++ b/public/tier1/interface.h @@ -26,11 +26,11 @@ public: static CInterfaceRegistry __Create##interfaceName##_registry( functionName, versionName ); #define EXPOSE_INTERFACE_GLOBALVAR( className, interfaceName, versionName, globalVarName ) \ - static void *__Create##interfaceName##_interface() { return ( interfaceName* )( &globalVarName ); }; \ + static void *__Create##className##_interface() { return ( interfaceName* )( &globalVarName ); }; \ static CInterfaceRegistry __Create##interfaceName##_registry( __Create##className##_interface, versionName ); -void *CreateInterface( const char *szName, int *pReturnCode ); +DLL_EXPORT void *CreateInterface( const char *szName, int *pReturnCode ); CreateInterfaceFn Sys_GetFactory( void *pLibrary ); diff --git a/public/tier2/ifilesystem.h b/public/tier2/ifilesystem.h index 8b787f5..2ece1b2 100644 --- a/public/tier2/ifilesystem.h +++ b/public/tier2/ifilesystem.h @@ -25,15 +25,6 @@ class IFileHandle { public: IFileSystem *m_pFileSystem; - - size_t Write( const void *pData, size_t nDataSize ); - size_t Read( void *pData, size_t nDataSize ); - size_t Seek( ESeekMode eSeekMode, size_t nOffset ); - size_t Tell( void ); - size_t Size( void ); - void Close( void ); - - }; @@ -68,19 +59,8 @@ public: void RegisterFileSystem(); }; +#define FILESYSTEM_INTERFACE_VERSION "FileSystem001" + extern IFileSystem *filesystem; -extern IFileSystem *g_pFileSystems; - -typedef IFileSystem *( *InstantiateFileSystemFn )( void ); -class CFileSystemRegistry -{ -public: - CFileSystemRegistry( InstantiateFileSystemFn fn, const char *szFileSystem ); -}; - -#define EXPOSE_FILESYSTEM( className, filesystemName ) \ - static IFileSystem *__Create##className##_filesystem() { return ( IFileSystem* )( new className ); }; \ - static CFileSystemRegistry __Create##className##_registry( __Create##className##_filesystem, filesystemName ); - #endif diff --git a/stdfilesystems/build.cpp b/stdfilesystems/build.cpp new file mode 100644 index 0000000..e69de29 diff --git a/tier2/filesystem_libc.cpp b/stdfilesystems/filesystem_libc.cpp similarity index 92% rename from tier2/filesystem_libc.cpp rename to stdfilesystems/filesystem_libc.cpp index 83144b3..1abaf1d 100644 --- a/tier2/filesystem_libc.cpp +++ b/stdfilesystems/filesystem_libc.cpp @@ -47,9 +47,9 @@ public: pHandle = new CLIBCFileHandle; pHandle->m_pFileSystem = this; pHandle->m_pFile = pFile; - pHandle->Seek(SEEKMODE_RELATIVE_END, 0); - pHandle->m_nSize = pHandle->Tell(); - pHandle->Seek(SEEKMODE_RELATIVE_START, 0); + Seek(pHandle,SEEKMODE_RELATIVE_END, 0); + pHandle->m_nSize = Tell(pHandle); + Seek(pHandle, SEEKMODE_RELATIVE_START, 0); return pHandle; } virtual size_t Write( IFileHandle *pFile, const void *pData, size_t nDataSize ) override @@ -121,4 +121,4 @@ public: virtual const char *ReadString( IFileHandle *pFile ) override { return NULL; }; }; -EXPOSE_FILESYSTEM(CLIBCFileSystem, "sysfs"); +EXPOSE_INTERFACE(CLIBCFileSystem, IFileSystem, FILESYSTEM_INTERFACE_VERSION) diff --git a/tier0/build.cpp b/tier0/build.cpp new file mode 100644 index 0000000..8e842e6 --- /dev/null +++ b/tier0/build.cpp @@ -0,0 +1,32 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" +#include "tier1/commandline.h" + +CUtlVector tier0_CompiledFiles = { + "lib.cpp", + "mem.cpp", + "platform.cpp", + "network.cpp", +}; + +DECLARE_BUILD_STAGE(tier0) +{ + CProject_t compileProject = {}; + LinkProject_t ldProject = {}; + CUtlString szOutputProject = ""; + + compileProject.m_szName = "tier0"; + compileProject.files = tier0_CompiledFiles; + compileProject.includeDirectories = {"../public"}; + compileProject.bFPIC = true; + ldProject = ccompiler->Compile(&compileProject); + + ldProject.linkType = ELINK_DYNAMIC_LIBRARY; + szOutputProject = linker->Link(&ldProject); + + ADD_OUTPUT_LIBRARY(szOutputProject); + + return 0; +}; diff --git a/tier0/network.cpp b/tier0/network.cpp index 9808862..a07363e 100644 --- a/tier0/network.cpp +++ b/tier0/network.cpp @@ -1,7 +1,4 @@ #include "tier0/network.h" -#include "steam/isteamnetworkingsockets.h" -#include "steam/isteamnetworkingutils.h" -#include "steam/steamnetworkingtypes.h" #include "tier1/commandline.h" diff --git a/tier0/platform.cpp b/tier0/platform.cpp index fd0abf9..19e39cc 100644 --- a/tier0/platform.cpp +++ b/tier0/platform.cpp @@ -214,18 +214,20 @@ PLATFORM_INTERFACE const char *Plat_GetEnv( const char *szVar ) PLATFORM_INTERFACE void Plat_SetWorkingDir( const char *psz ) { - + chdir(psz); } - -PLATFORM_INTERFACE const char *Plat_GetWorkingDir( void ) -{ - -} - #ifndef MAX_PATH #define MAX_PATH 4096 #endif +PLATFORM_INTERFACE const char *Plat_GetWorkingDir( void ) +{ + static char szCwd[MAX_PATH]; + getcwd(szCwd, MAX_PATH); + return szCwd; +} + + static char s_szExecutablePath[MAX_PATH]; #ifdef __linux__ static ssize_t s_iExecutablePathSize = readlink("/proc/self/exe", s_szExecutablePath, MAX_PATH); diff --git a/tier1/__build.cpp b/tier1/__build.cpp index 14422e5..4cfb04e 100644 --- a/tier1/__build.cpp +++ b/tier1/__build.cpp @@ -13,7 +13,6 @@ CUtlVector tier1_CompiledFiles = { "tier1/utlstring.cpp", "tier1/utlvector.cpp", }; -CUtlString tier1_lib; DECLARE_BUILD_STAGE(tier1) { @@ -22,13 +21,15 @@ DECLARE_BUILD_STAGE(tier1) compileProject.m_szName = "tier1"; compileProject.files = tier1_CompiledFiles; - compileProject.includeDirectories = all_IncludeDirectories; + compileProject.includeDirectories = {"../public"}; compileProject.bFPIC = true; ldProject = ccompiler->Compile(&compileProject); ldProject.linkType = ELINK_STATIC_LIBRARY; - CUtlString outputProject = linker->Link(&ldProject); - tier1_lib = outputProject; + CUtlString szOutputDir = linker->Link(&ldProject); + + ADD_OUTPUT_LIBRARY(szOutputDir) + return 0; }; diff --git a/tier1/build.cpp b/tier1/build.cpp new file mode 100644 index 0000000..402b04b --- /dev/null +++ b/tier1/build.cpp @@ -0,0 +1,34 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" +#include "tier1/commandline.h" + +CUtlVector tier1_CompiledFiles = { + "interface.cpp", + "appinit.cpp", + "commandline.cpp", + "utlbuffer.cpp", + "utlmap.cpp", + "utlstring.cpp", + "utlvector.cpp", +}; + +DECLARE_BUILD_STAGE(tier1) +{ + CProject_t compileProject = {}; + LinkProject_t ldProject = {}; + + compileProject.m_szName = "tier1"; + compileProject.files = tier1_CompiledFiles; + compileProject.includeDirectories = {"../public"}; + compileProject.bFPIC = true; + ldProject = ccompiler->Compile(&compileProject); + ldProject.linkType = ELINK_STATIC_LIBRARY; + + CUtlString szOutputDir = linker->Link(&ldProject); + + ADD_OUTPUT_LIBRARY(szOutputDir) + + return 0; +}; diff --git a/tier1/commandline.o b/tier1/commandline.o new file mode 100644 index 0000000000000000000000000000000000000000..1604b9c8d4c69996072449c7f35e76b972174915 GIT binary patch literal 38432 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 @@ -30,5 +35,8 @@ void *CreateInterface( const char *szName, int *pReturnCode ) CreateInterfaceFn Sys_GetFactory( void *lib ) { +#ifdef POSIX + return CreateInterface; +#endif return (CreateInterfaceFn)Plat_GetProc(lib, "CreateInterface"); } diff --git a/tier1/interface.o b/tier1/interface.o new file mode 100644 index 0000000000000000000000000000000000000000..7ad5ef16efe84845013d78171b91030dd8d6c513 GIT binary patch literal 10808 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 A4gdfE literal 0 HcmV?d00001 diff --git a/tier1/utlmap.o b/tier1/utlmap.o new file mode 100644 index 0000000000000000000000000000000000000000..bcad1bcf14b8b230e954d84d7772f4afd1f67de6 GIT binary patch literal 6728 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 rh;WZjS1W6QbSV|VsA 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 literal 0 HcmV?d00001 diff --git a/tier2/__build.cpp b/tier2/__build.cpp index b13ac9e..bbb42ee 100644 --- a/tier2/__build.cpp +++ b/tier2/__build.cpp @@ -5,10 +5,10 @@ #include "tier1/commandline.h" CUtlVector tier2_CompiledFiles = { - "tier2/fileformats/ini.cpp", - "tier2/fileformats/json.cpp", - "tier2/filesystem.cpp", - "tier2/filesystem_libc.cpp", + "fileformats/ini.cpp", + "fileformats/json.cpp", + "filesystem.cpp", + "filesystem_libc.cpp", }; CUtlString tier2_lib; diff --git a/tier2/build.cpp b/tier2/build.cpp new file mode 100644 index 0000000..c047f96 --- /dev/null +++ b/tier2/build.cpp @@ -0,0 +1,32 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" +#include "tier1/commandline.h" + +CUtlVector tier2_CompiledFiles = { + "fileformats/ini.cpp", + "fileformats/json.cpp", + "filesystem.cpp", +}; + + +DECLARE_BUILD_STAGE(tier2) +{ + V_printf("%s\n", Plat_GetWorkingDir()); + CProject_t compileProject = {}; + LinkProject_t ldProject = {}; + + compileProject.m_szName = "tier2"; + compileProject.files = tier2_CompiledFiles; + compileProject.includeDirectories = {"../public"}; + compileProject.bFPIC = true; + ldProject = ccompiler->Compile(&compileProject); + ldProject.linkType = ELINK_STATIC_LIBRARY; + + CUtlString szOutputProject = linker->Link(&ldProject); + + ADD_OUTPUT_LIBRARY(szOutputProject) + + return 0; +}; diff --git a/tier2/fileformats/ini.cpp b/tier2/fileformats/ini.cpp index b7278b1..0c0416b 100644 --- a/tier2/fileformats/ini.cpp +++ b/tier2/fileformats/ini.cpp @@ -92,16 +92,15 @@ public: IINIFile *CINIManager::ReadFile( const char *psz ) { IFileHandle *pFile; - CUtlBuffer data; + const char *szData; pFile = filesystem->Open(psz, FILEMODE_READ); if (!pFile) return NULL; - data = CUtlBuffer(pFile->Size()+1); - uint32_t nSize = pFile->Read(data.GetMemory(), pFile->Size()); - pFile->Close(); + szData = filesystem->ReadString(pFile); + filesystem->Close(pFile); - return ReadString(data.GetMemory()); + return ReadString(szData); } IINIFile *CINIManager::ReadString( const char *psz ) diff --git a/tier2/fileformats/ini.o b/tier2/fileformats/ini.o new file mode 100644 index 0000000000000000000000000000000000000000..f2b00f0f8edf13184f8df6b9f19fc6d8bac1c1d5 GIT binary patch literal 114728 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 literal 0 HcmV?d00001 diff --git a/tier2/filesystem.cpp b/tier2/filesystem.cpp index e31c151..64c0e18 100644 --- a/tier2/filesystem.cpp +++ b/tier2/filesystem.cpp @@ -1,121 +1,4 @@ -#include "tier1/utlbuffer.h" #include "tier2/ifilesystem.h" -#include "tier1/interface.h" -#include "tier0/lib.h" -#include -size_t IFileHandle::Write( const void *pData, size_t nDataSize ) -{ - return m_pFileSystem->Write(this, pData, nDataSize); -} +IFileSystem *filesystem; -size_t IFileHandle::Read( void *pData, size_t nDataSize ) -{ - return m_pFileSystem->Read(this, pData, nDataSize); -} - -size_t IFileHandle::Seek( ESeekMode eSeekMode, size_t nOffset ) -{ - return m_pFileSystem->Seek(this, eSeekMode, nOffset); -} - -size_t IFileHandle::Tell( void ) -{ - return m_pFileSystem->Tell(this); -} - -size_t IFileHandle::Size( void ) -{ - return m_pFileSystem->Size(this); -} - -void IFileHandle::Close( void ) -{ - m_pFileSystem->Close(this); -} - - -class CFileSystem : public IFileSystem -{ -public: - virtual void Init() override { - }; - virtual void Shutdown() override { - - }; - - virtual IFileHandle *Open( const char *szFileName, int eOpCode ) override - { - IFileSystem *pFileSystem; - IFileHandle *pHandle = NULL; - - for ( pFileSystem = g_pFileSystems; pFileSystem; pFileSystem = pFileSystem->m_pNext ) - { - pHandle = pFileSystem->Open(szFileName, eOpCode); - if (pHandle) return pHandle; - } - - return NULL; - } - - virtual size_t Write( IFileHandle *pFile, const void *pData, size_t nDataSize ) override - { - return pFile->Write(pData, nDataSize); - } - - virtual size_t Read( IFileHandle *pFile, void *pData, size_t nDataSize ) override - { - return pFile->Read(pData, nDataSize); - } - - virtual size_t Seek( IFileHandle *pFile, ESeekMode eSeekMode, size_t nOffset ) override - { - return pFile->Seek(eSeekMode, nOffset); - } - - virtual size_t Tell( IFileHandle *pFile ) override - { - return pFile->Tell(); - } - virtual size_t Size( IFileHandle *pFile ) override - { - return pFile->Size(); - } - virtual void Close( IFileHandle *pFile ) override - { - - } - virtual CUtlBuffer Read( IFileHandle *pFile ) override - { - CUtlBuffer buffer; - buffer = CUtlBuffer(Size(pFile)); - - Read(pFile, buffer.GetMemory(), buffer.GetSize()); - - return buffer; - } - virtual const char *ReadString( IFileHandle *pFile ) override { - char *szString = (char*)V_malloc(Size(pFile)+1); - Read(pFile, szString, Size(pFile)); - szString[Size(pFile)] = 0; - return szString; - }; -}; - - -static CFileSystem s_fileSystem; -IFileSystem *filesystem = &s_fileSystem; - -IFileSystem *g_pFileSystems; - -CFileSystemRegistry::CFileSystemRegistry( InstantiateFileSystemFn fn, const char *szFileSystem ) -{ - IFileSystem *pFileSystem = fn(); - pFileSystem->RegisterFileSystem(); -} - -void IFileSystem::RegisterFileSystem() -{ - m_pNext = g_pFileSystems; - g_pFileSystems = this; -}; diff --git a/tier2/filesystem.o b/tier2/filesystem.o new file mode 100644 index 0000000000000000000000000000000000000000..059b69dad741f4c85824d1451e32d4a41b31671d GIT binary patch literal 7208 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 literal 0 HcmV?d00001