X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=plugins%2Fvfspk3%2Fvfspk3.cpp;h=478ce8f1a15cfef9ad265d2d2acc53add54548b8;hp=6d479191f35be66711840067ed309abaef87fc7f;hb=dac8329952745dbb494bad1c301e44bab05ec0db;hpb=830125fad042fad35dc029b6eb57c8156ad7e176;ds=sidebyside diff --git a/plugins/vfspk3/vfspk3.cpp b/plugins/vfspk3/vfspk3.cpp index 6d479191..478ce8f1 100644 --- a/plugins/vfspk3/vfspk3.cpp +++ b/plugins/vfspk3/vfspk3.cpp @@ -1,101 +1,78 @@ /* - Copyright (c) 2001, Loki software, inc. - All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - Neither the name of Loki software nor the names of its contributors may be used - to endorse or promote products derived from this software without specific prior - written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. + + This file is part of GtkRadiant. -// -// Quake 3 Virtual FileSystem - reads files from different dirs and inside pak files -// -// Leonardo Zide (leo@lokigames.com) -// + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -#ifdef _WIN32 -#include -#endif + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -#include #include "vfspk3.h" -#include "vfs.h" -// ============================================================================= -// SYNAPSE +#include "qerplugin.h" +#include "iarchive.h" +#include "ifilesystem.h" -_QERFuncTable_1 g_FuncTable; +#include "modulesystem/singletonmodule.h" +#include "modulesystem/modulesmap.h" -CSynapseServer* g_pSynapseServer = NULL; -CSynapseClientVFS g_SynapseClient; +#include "vfs.h" -#if __GNUC__ >= 4 -#pragma GCC visibility push(default) -#endif -extern "C" CSynapseClient * SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { -#if __GNUC__ >= 4 -#pragma GCC visibility pop -#endif +class FileSystemDependencies : public GlobalRadiantModuleRef +{ +ArchiveModulesRef m_archive_modules; +public: +FileSystemDependencies() : + m_archive_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "archivetypes" ) ){ +} +ArchiveModules& getArchiveModules(){ + return m_archive_modules.get(); +} +}; + +class FileSystemQ3API +{ +VirtualFileSystem* m_filesystemq3; +public: +typedef VirtualFileSystem Type; +STRING_CONSTANT( Name, "*" ); + +FileSystemQ3API(){ + FileSystem_Init(); + m_filesystemq3 = &GetFileSystem(); +} +~FileSystemQ3API(){ + FileSystem_Shutdown(); +} +VirtualFileSystem* getTable(){ + return m_filesystemq3; +} +}; - if ( strcmp( version, SYNAPSE_VERSION ) ) { - Syn_Printf( "ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version ); - return NULL; - } - g_pSynapseServer = pServer; - g_pSynapseServer->IncRef(); - Set_Syn_Printf( g_pSynapseServer->Get_Syn_Printf() ); +typedef SingletonModule FileSystemQ3Module; - g_SynapseClient.AddAPI( VFS_MAJOR, "pk3", sizeof( _QERFileSystemTable ) ); - g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( _QERFuncTable_1 ), SYN_REQUIRE, &g_FuncTable ); +FileSystemQ3Module g_FileSystemQ3Module; - return &g_SynapseClient; +ArchiveModules& FileSystemQ3API_getArchiveModules(){ + return g_FileSystemQ3Module.getDependencies().getArchiveModules(); } -bool CSynapseClientVFS::RequestAPI( APIDescriptor_t *pAPI ){ - if ( !strcmp( pAPI->major_name, VFS_MAJOR ) ) { - _QERFileSystemTable* pTable = static_cast<_QERFileSystemTable*>( pAPI->mpTable ); - pTable->m_pfnInitDirectory = &vfsInitDirectory; - pTable->m_pfnShutdown = &vfsShutdown; - pTable->m_pfnFreeFile = &vfsFreeFile; - pTable->m_pfnGetDirList = &vfsGetDirList; - pTable->m_pfnGetFileList = &vfsGetFileList; - pTable->m_pfnClearFileDirList = &vfsClearFileDirList; - pTable->m_pfnGetFileCount = &vfsGetFileCount; - pTable->m_pfnLoadFile = &vfsLoadFile; - pTable->m_pfnLoadFullPathFile = &vfsLoadFullPathFile; - pTable->m_pfnExtractRelativePath = &vfsExtractRelativePath; - pTable->m_pfnGetFullPath = &vfsGetFullPath; - pTable->m_pfnBasePromptPath = &vfsBasePromptPath; - return true; - } - - Syn_Printf( "ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo() ); - return false; -} -#include "version.h" -const char* CSynapseClientVFS::GetInfo(){ - return "PK3 VFS module built " __DATE__ " " RADIANT_VERSION; +extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){ + initialiseModule( server ); + + g_FileSystemQ3Module.selfRegister(); }