X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=plugins%2Fvfspk3%2Fvfspk3.cpp;h=55b273ec0ad11ab29f8ddc74ebb5c158736c2f8d;hp=dad98feeba0aa4ad487fd41c57c473ccabcd31e0;hb=d347e813d359c2c4c9fc72aaa25aec2e078a8390;hpb=4189d27b34641ad3325d724f6cac012fa742b2ad diff --git a/plugins/vfspk3/vfspk3.cpp b/plugins/vfspk3/vfspk3.cpp index dad98fee..55b273ec 100644 --- a/plugins/vfspk3/vfspk3.cpp +++ b/plugins/vfspk3/vfspk3.cpp @@ -1,104 +1,76 @@ -/* -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. -*/ - -// -// Quake 3 Virtual FileSystem - reads files from different dirs and inside pak files -// -// Leonardo Zide (leo@lokigames.com) -// - -#ifdef _WIN32 -#include -#endif - -#include -#include "vfspk3.h" -#include "vfs.h" - -// ============================================================================= -// SYNAPSE - -_QERFuncTable_1 g_FuncTable; - -CSynapseServer* g_pSynapseServer = NULL; -CSynapseClientVFS g_SynapseClient; - -#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 - - 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() ); - - g_SynapseClient.AddAPI( VFS_MAJOR, "pk3", sizeof( _QERFileSystemTable ) ); - g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( _QERFuncTable_1 ), SYN_REQUIRE, &g_FuncTable ); - - return &g_SynapseClient; -} - -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; -} +/* + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. + + This file is part of GtkRadiant. + + 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. + + 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 "qerplugin.h" +#include "iarchive.h" +#include "ifilesystem.h" + +#include "modulesystem/singletonmodule.h" +#include "modulesystem/modulesmap.h" + +#include "vfs.h" + +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; +} +}; + +typedef SingletonModule FileSystemQ3Module; + +FileSystemQ3Module g_FileSystemQ3Module; + +ArchiveModules& FileSystemQ3API_getArchiveModules(){ + return g_FileSystemQ3Module.getDependencies().getArchiveModules(); +} + + + +extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){ + initialiseModule( server ); + + g_FileSystemQ3Module.selfRegister(); +}