X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=plugins%2Fvfspk3%2Fvfspk3.cpp;h=6d479191f35be66711840067ed309abaef87fc7f;hb=830125fad042fad35dc029b6eb57c8156ad7e176;hp=e7fca37278878cefdc6d3b7bfa07718781f682b4;hpb=95ac019c0063b6e281fe5eeefb7fe19b9b7be9b0;p=xonotic%2Fnetradiant.git diff --git a/plugins/vfspk3/vfspk3.cpp b/plugins/vfspk3/vfspk3.cpp index e7fca372..6d479191 100644 --- a/plugins/vfspk3/vfspk3.cpp +++ b/plugins/vfspk3/vfspk3.cpp @@ -1,85 +1,101 @@ /* -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. + 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" -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. +// ============================================================================= +// SYNAPSE -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 -*/ +_QERFuncTable_1 g_FuncTable; -#include "vfspk3.h" +CSynapseServer* g_pSynapseServer = NULL; +CSynapseClientVFS g_SynapseClient; -#include "qerplugin.h" -#include "iarchive.h" -#include "ifilesystem.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 -#include "modulesystem/singletonmodule.h" -#include "modulesystem/modulesmap.h" + 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() ); -#include "vfs.h" + g_SynapseClient.AddAPI( VFS_MAJOR, "pk3", sizeof( _QERFileSystemTable ) ); + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( _QERFuncTable_1 ), SYN_REQUIRE, &g_FuncTable ); -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(); + 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" -extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server) -{ - initialiseModule(server); - - g_FileSystemQ3Module.selfRegister(); +const char* CSynapseClientVFS::GetInfo(){ + return "PK3 VFS module built " __DATE__ " " RADIANT_VERSION; }