made the headers a bit more doxygen friendly

--HG--
extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40659
This commit is contained in:
David Anderson 2008-02-18 23:11:25 +00:00
parent f6075e8893
commit 2113dc8ad4
5 changed files with 228 additions and 202 deletions

View File

@ -1,4 +1,4 @@
/** /*
* vim: set ts=4 : * vim: set ts=4 :
* ====================================================== * ======================================================
* Metamod:Source * Metamod:Source
@ -60,6 +60,9 @@ namespace SourceMM
Pl_Running=0, Pl_Running=0,
}; };
/**
* @brief Programmatic management of the "loaded plugin" list.
*/
class ISmmPluginManager class ISmmPluginManager
{ {
public: public:
@ -68,51 +71,50 @@ namespace SourceMM
* then the plugin is considered to be "hot" - it might refuse its own load later! * then the plugin is considered to be "hot" - it might refuse its own load later!
* Also, a hot plugin might not have an error message. * Also, a hot plugin might not have an error message.
* *
* @param file String containing file name * @param file String containing file name.
* @param source Specifies who loaded the plugin * @param source Specifies who loaded the plugin.
* @param status Status of the plugin * @param already Whether or not the plugin was already loaded.
* @param ismm Pointer to Smm API * @param error String buffer for error messages.
* @param error String buffer for error messages * @param maxlen Maximum length of buffer.
* @param maxlen Maximum length of buffer * @return Id of plugin.
* @return Id of plugin
*/ */
virtual PluginId Load(const char *file, PluginId source, bool &already, char *error, size_t maxlen) =0; virtual PluginId Load(const char *file, PluginId source, bool &already, char *error, size_t maxlen) =0;
/** /**
* @brief Unloads a plugin * @brief Unloads a plugin.
* *
* @param id Id of plugin * @param id Id of plugin
* @param error String buffer for error messages * @param force True to forcefully unload, false to let plugin opt-out.
* @param maxlen Maximum length of buffer * @param error String buffer for error messages
* @return True on success, false otherwise * @param maxlen Maximum length of buffer
* @return True on success, false otherwise
*/ */
virtual bool Unload(PluginId id, bool force, char *error, size_t maxlen) =0; virtual bool Unload(PluginId id, bool force, char *error, size_t maxlen) =0;
/** /**
* @brief Pauses a plugin * @brief Pauses a plugin
* *
* @param id Id of plugin * @param id Id of plugin
* @param error String buffer for error messages * @param error String buffer for error messages
* @param maxlen Maximum length of buffer * @param maxlen Maximum length of buffer
* @return True on success, false otherwise * @return True on success, false otherwise
*/ */
virtual bool Pause(PluginId id, char *error, size_t maxlen) =0; virtual bool Pause(PluginId id, char *error, size_t maxlen) =0;
/** /**
* @brief Unpauses a plugin * @brief Unpauses a plugin
* *
* @param id Id of plugin * @param id Id of plugin
* @param force If true, forces the plugin to unload * @param error String buffer for error messages
* @param error String buffer for error messages * @param maxlen Maximum length of buffer
* @param maxlen Maximum length of buffer * @return True on success, false otherwise
* @return True on success, false otherwise
*/ */
virtual bool Unpause(PluginId id, char *error, size_t maxlen) =0; virtual bool Unpause(PluginId id, char *error, size_t maxlen) =0;
/** /**
* @brief Unloads all plugins forcefully * @brief Unloads all plugins forcefully
* *
* @return True on success, false otherwise * @return True on success, false otherwise
*/ */
virtual bool UnloadAll() =0; virtual bool UnloadAll() =0;
@ -132,7 +134,7 @@ namespace SourceMM
* *
* @param id Id of plugin * @param id Id of plugin
* @param error Message buffer * @param error Message buffer
* @param maxlen Size of error buffer * @param maxlength Size of error buffer
* @return Status value * @return Status value
*/ */
virtual bool QueryRunning(PluginId id, char *error, size_t maxlength) =0; virtual bool QueryRunning(PluginId id, char *error, size_t maxlength) =0;

View File

@ -1,4 +1,4 @@
/** /*
* vim: set ts=4 : * vim: set ts=4 :
* ====================================================== * ======================================================
* Metamod:Source * Metamod:Source
@ -29,7 +29,7 @@
#define _INCLUDE_ISMM_API_H #define _INCLUDE_ISMM_API_H
/** /**
* @brief External API interface * @brief Core API calls that are provided to plugins.
* @file ISmmAPI.h * @file ISmmAPI.h
*/ */
@ -57,6 +57,9 @@ namespace SourceMM
class ISmmPlugin; class ISmmPlugin;
class IMetamodListener; class IMetamodListener;
/**
* The core API that Metamod:Source provides to plugins.
*/
class ISmmAPI class ISmmAPI
{ {
public: public:
@ -196,6 +199,7 @@ namespace SourceMM
* @param maxlength Maximum length of iface buffer. Must be at least * @param maxlength Maximum length of iface buffer. Must be at least
* strlen(iface)+4 chars. * strlen(iface)+4 chars.
* @return The newly incremented iface version number. * @return The newly incremented iface version number.
* @deprecated Use InterfaceSearch() or VInterfaceMatch instead.
*/ */
virtual int FormatIface(char iface[], unsigned int maxlength) =0; virtual int FormatIface(char iface[], unsigned int maxlength) =0;
@ -324,6 +328,7 @@ namespace SourceMM
* @return Highest interface version of IServerPluginCallbacks. * @return Highest interface version of IServerPluginCallbacks.
* Returns 0 if SourceMM's VSP listener isn't * Returns 0 if SourceMM's VSP listener isn't
* currently enabled. * currently enabled.
* @deprecated Use GetVSPInfo() instead.
*/ */
virtual int GetVSPVersion() =0; virtual int GetVSPVersion() =0;
@ -343,7 +348,7 @@ namespace SourceMM
* This is useful for late-loading plugins which need to decide whether * This is useful for late-loading plugins which need to decide whether
* to add a listener or not (or need to get the pointer at all). * to add a listener or not (or need to get the pointer at all).
* *
* @param Optional pointer to store the VSP version. * @param pVersion Optional pointer to store the VSP version.
* @return IServerPluginCallbacks pointer, or NULL if an * @return IServerPluginCallbacks pointer, or NULL if an
* IMetamodListener event has yet to occur for * IMetamodListener event has yet to occur for
* EnableVSPListener(). * EnableVSPListener().
@ -366,21 +371,21 @@ namespace SourceMM
const char *format, const char *format,
...) =0; ...) =0;
/** /**
* @brief Formats a string. This is a platform safe wrapper around * @brief Formats a string. This is a platform safe wrapper around
* vsnprintf/_vsnprintf. * vsnprintf/_vsnprintf.
* *
* @param buffer Buffer to write to. * @param buffer Buffer to write to.
* @param maxlength Maximum length of the buffer. * @param maxlength Maximum length of the buffer.
* @param format Format specifiers. * @param format Format specifiers.
* @param ap Format argument list. * @param ap Format argument list.
* @return Number of bytes actually written, not including the * @return Number of bytes actually written, not including the
* null terminator. * null terminator.
*/ */
virtual size_t FormatArgs(char *buffer, virtual size_t FormatArgs(char *buffer,
size_t maxlength, size_t maxlength,
const char *format, const char *format,
va_list ap) =0; va_list ap) =0;
}; };
} }

View File

@ -1,4 +1,4 @@
/** /*
* vim: set ts=4 : * vim: set ts=4 :
* ====================================================== * ======================================================
* Metamod:Source * Metamod:Source
@ -29,8 +29,9 @@
#define _INCLUDE_ISMM_PLUGIN_H #define _INCLUDE_ISMM_PLUGIN_H
/** /**
* @brief Plugin API interface * @brief Plugin API interface.
* @file ISmmPlugin.h * @file ISmmPlugin.h These are callbacks that plugins can implement without hooks.
* The pure-virtual ISmmPlugin callbacks must be implemented for the load to load.
*/ */
#include <interface.h> #include <interface.h>
@ -421,6 +422,15 @@ using namespace SourceMM;
#define PL_EXPOSURE CreateInterface #define PL_EXPOSURE CreateInterface
#define PL_EXPOSURE_C "CreateInterface" #define PL_EXPOSURE_C "CreateInterface"
/**
* @brief Exposes the plugin to the MM:S loader.
*
* @param name Deprecated - should be a variable name (like name).
* @param var Name of the variable that contains the singleton.
* This macro automatically takes the address of it, so
* you should not pass a pointer to your plugin's
* singleton.
*/
#define PLUGIN_EXPOSE(name, var) \ #define PLUGIN_EXPOSE(name, var) \
ISmmAPI *g_SMAPI = NULL; \ ISmmAPI *g_SMAPI = NULL; \
ISmmPlugin *g_PLAPI = NULL; \ ISmmPlugin *g_PLAPI = NULL; \
@ -433,12 +443,20 @@ using namespace SourceMM;
return NULL; \ return NULL; \
} }
/**
* @brief This should be in one of your header files, if you wish
* to use values like g_SHPtr in other files.
*/
#define PLUGIN_GLOBALVARS() \ #define PLUGIN_GLOBALVARS() \
extern SourceHook::ISourceHook *g_SHPtr; \ extern SourceHook::ISourceHook *g_SHPtr; \
extern ISmmAPI *g_SMAPI; \ extern ISmmAPI *g_SMAPI; \
extern ISmmPlugin *g_PLAPI; \ extern ISmmPlugin *g_PLAPI; \
extern PluginId g_PLID; extern PluginId g_PLID;
/**
* @brief This should be the first line in your Load callback.
*/
#define PLUGIN_SAVEVARS() \ #define PLUGIN_SAVEVARS() \
g_SMAPI = ismm; \ g_SMAPI = ismm; \
g_SHPtr = static_cast<SourceHook::ISourceHook *>(ismm->MetaFactory(MMIFACE_SOURCEHOOK, NULL, NULL)); \ g_SHPtr = static_cast<SourceHook::ISourceHook *>(ismm->MetaFactory(MMIFACE_SOURCEHOOK, NULL, NULL)); \

View File

@ -1,156 +1,157 @@
/** /*
* vim: set ts=4 : * vim: set ts=4 :
* ====================================================== * ======================================================
* Metamod:Source * Metamod:Source
* Copyright (C) 2004-2007 AlliedModders LLC and authors. * Copyright (C) 2004-2007 AlliedModders LLC and authors.
* All rights reserved. * All rights reserved.
* ====================================================== * ======================================================
* *
* This software is provided 'as-is', without any express or implied warranty. * This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from * In no event will the authors be held liable for any damages arising from
* the use of this software. * the use of this software.
* *
* Permission is granted to anyone to use this software for any purpose, * Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it * including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions: * freely, subject to the following restrictions:
* *
* 1. The origin of this software must not be misrepresented; you must not * 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software in a * claim that you wrote the original software. If you use this software in a
* product, an acknowledgment in the product documentation would be * product, an acknowledgment in the product documentation would be
* appreciated but is not required. * appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be * 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software. * misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution. * 3. This notice may not be removed or altered from any source distribution.
* *
* Version: $Id$ * Version: $Id$
*/ */
#ifndef _INCLUDE_METAMOD_SOURCE_PLUGIN_EXT_H_ #ifndef _INCLUDE_METAMOD_SOURCE_PLUGIN_EXT_H_
#define _INCLUDE_METAMOD_SOURCE_PLUGIN_EXT_H_ #define _INCLUDE_METAMOD_SOURCE_PLUGIN_EXT_H_
#include <stddef.h> #include <stddef.h>
/** /**
* @file ISmmPluginExt.h Definitions for extended plugin exposure syntax. * @file ISmmPluginExt.h Provides an alternate method for loading plugins,
* @brief Provides an alternate method for loading plugins, without needing to * without needing to include the default headers and all their Half-Life baggage.
* include the default headers and all their Half-Life baggage. *
*/ * @brief Definitions for extended plugin loading.
*/
#define SOURCE_ENGINE_UNKNOWN 0 /**< Could not determine the engine version */
#define SOURCE_ENGINE_ORIGINAL 1 /**< Original Source Engine (used by The Ship) */ #define SOURCE_ENGINE_UNKNOWN 0 /**< Could not determine the engine version */
#define SOURCE_ENGINE_EPISODEONE 2 /**< Episode 1 Source Engine (second major SDK) */ #define SOURCE_ENGINE_ORIGINAL 1 /**< Original Source Engine (used by The Ship) */
#define SOURCE_ENGINE_ORANGEBOX 3 /**< Orange Box Source Engine (third major SDK) */ #define SOURCE_ENGINE_EPISODEONE 2 /**< Episode 1 Source Engine (second major SDK) */
#define SOURCE_ENGINE_ORANGEBOX 3 /**< Orange Box Source Engine (third major SDK) */
#define METAMOD_PLAPI_VERSION 14 /**< Version of this header file */
#define METAMOD_PLAPI_NAME "ISmmPlugin" /**< Name of the plugin interface */ #define METAMOD_PLAPI_VERSION 14 /**< Version of this header file */
#define METAMOD_PLAPI_NAME "ISmmPlugin" /**< Name of the plugin interface */
namespace SourceMM
{ namespace SourceMM
class ISmmPlugin; {
class ISmmAPI; class ISmmPlugin;
class ISmmAPI;
/** /**
* @brief Used to uniquely identify plugins. * @brief Used to uniquely identify plugins.
*/ */
typedef int PluginId; typedef int PluginId;
#define METAMOD_FAIL_API_V1 7 /**< Minimum API version to detect for V1 */ #define METAMOD_FAIL_API_V1 7 /**< Minimum API version to detect for V1 */
#define METAMOD_FAIL_API_V2 14 /**< Minimum API version to detect for V2 */ #define METAMOD_FAIL_API_V2 14 /**< Minimum API version to detect for V2 */
/** /**
* Use this to instantiate a plugin that will always fail. * Use this to instantiate a plugin that will always fail.
* This class definition works against major API versions 1 and 2. * This class definition works against major API versions 1 and 2.
*/ */
class ISmmFailPlugin class ISmmFailPlugin
{ {
public: public:
/** /**
* @brief You must return METAMOD_FAIL_API_V1 or METAMOD_FAIL_API_V2 here, * @brief You must return METAMOD_FAIL_API_V1 or METAMOD_FAIL_API_V2 here,
* depending on which Metamod:Source version you detected. * depending on which Metamod:Source version you detected.
*/ */
virtual int GetApiVersion() = 0; virtual int GetApiVersion() = 0;
/** /**
* @brief Do not change. * @brief Do not change.
*/ */
virtual ~ISmmFailPlugin() virtual ~ISmmFailPlugin()
{ {
} }
/** /**
* @brief Return false here -- fill in the error buffer appropriately. * @brief Return false here -- fill in the error buffer appropriately.
* *
* Do not ever return true. If you do, MM:S will crash because the class layout is * Do not ever return true. If you do, MM:S will crash because the class layout is
* incomplete against ISmmPlugin. * incomplete against ISmmPlugin.
* *
* @param id Ignore. * @param id Ignore.
* @param ismm Ignore. * @param ismm Ignore.
* @param error Error buffer (must be filled). * @param error Error buffer (must be filled).
* @param maxlength Maximum size of error buffer. * @param maxlength Maximum size of error buffer.
* @param late Ignore. * @param late Ignore.
* @return Must return false. * @return Must return false.
*/ */
virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late) =0; virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late) =0;
}; };
} }
typedef SourceMM::ISmmPlugin METAMOD_PLUGIN; typedef SourceMM::ISmmPlugin METAMOD_PLUGIN;
/** /**
* @brief Contains version information. * @brief Contains version information.
*/ */
struct MetamodVersionInfo struct MetamodVersionInfo
{ {
int api_major; /**< ISmmAPI major version */ int api_major; /**< ISmmAPI major version */
int api_minor; /**< ISmmAPI minor version */ int api_minor; /**< ISmmAPI minor version */
int sh_iface; /**< SourceHook interface version */ int sh_iface; /**< SourceHook interface version */
int sh_impl; /**< SourceHook implementation version */ int sh_impl; /**< SourceHook implementation version */
int pl_min; /**< Plugin API minimum version */ int pl_min; /**< Plugin API minimum version */
int pl_max; /**< Plugin API maximum version */ int pl_max; /**< Plugin API maximum version */
int source_engine; /**< Source Engine version (SOURCE_* constants) */ int source_engine; /**< Source Engine version (SOURCE_* constants) */
}; };
/** /**
* @brief Contains information about loading a plugin. * @brief Contains information about loading a plugin.
*/ */
struct MetamodLoaderInfo struct MetamodLoaderInfo
{ {
const char *pl_file; /**< File path to the plugin being loaded. */ const char *pl_file; /**< File path to the plugin being loaded. */
const char *pl_path; /**< Folder path containing the plugin. */ const char *pl_path; /**< Folder path containing the plugin. */
}; };
/** /**
* @brief If a function of this type is exposed as "CreateInterface_MMS", then * @brief If a function of this type is exposed as "CreateInterface_MMS", then
* Metamod:Source will attempt to call this function before calling * Metamod:Source will attempt to call this function before calling
* CreateInterface. If this function returns a valid ISmmPlugin pointer, then * CreateInterface. If this function returns a valid ISmmPlugin pointer, then
* CreateInterface will not be called. * CreateInterface will not be called.
* *
* This is useful for implementing a mini-loader plugin for multiple versions. * This is useful for implementing a mini-loader plugin for multiple versions.
* *
* @param mvi MetamodVersionInfo structure. * @param mvi MetamodVersionInfo structure.
* @param mli MetamodLoaderInfo structure. * @param mli MetamodLoaderInfo structure.
* @return ISmmAPI pointer, or NULL if none. * @return ISmmAPI pointer, or NULL if none.
*/ */
typedef METAMOD_PLUGIN *(*METAMOD_FN_LOAD)(const MetamodVersionInfo *mvi, typedef METAMOD_PLUGIN *(*METAMOD_FN_LOAD)(const MetamodVersionInfo *mvi,
const MetamodLoaderInfo *mli); const MetamodLoaderInfo *mli);
/** /**
* @brief If a function of this type is exposed as "UnloadInterface_MMS", then * @brief If a function of this type is exposed as "UnloadInterface_MMS", then
* Metamod:Source will attempt to call this function after calling * Metamod:Source will attempt to call this function after calling
* ISmmAPI::Unload(), and before closing the library. This lets loader plugins * ISmmAPI::Unload(), and before closing the library. This lets loader plugins
* clean up before exiting. * clean up before exiting.
* *
* Note: This function will be ignored unless CreateInterfce_MMS was exposed. * Note: This function will be ignored unless CreateInterfce_MMS was exposed.
* It may be called even if ISmmAPI::Unload() could not be called. * It may be called even if ISmmAPI::Unload() could not be called.
*/ */
typedef void (*METAMOD_FN_UNLOAD)(); typedef void (*METAMOD_FN_UNLOAD)();
/** /**
* @brief Original type of load function. CreateInterfaceFn from Valve. * @brief Original type of load function. CreateInterfaceFn from Valve.
* *
* Plugins will expose this as "CreateInterface". * Plugins will expose this as "CreateInterface".
*/ */
typedef void *(*METAMOD_FN_ORIG_LOAD)(const char *, int *); typedef void *(*METAMOD_FN_ORIG_LOAD)(const char *, int *);
#endif //INCLUDE_METAMOD_SOURCE_PLUGIN_EXT_H_ #endif //INCLUDE_METAMOD_SOURCE_PLUGIN_EXT_H_

View File

@ -5,9 +5,9 @@
#define SVN_PRODUCT_VERSION "1.6.0" #define SVN_PRODUCT_VERSION "1.6.0"
#define SVN_REVISION 653 #define SVN_REVISION 655
#define SVN_REVISION_STRING "653" #define SVN_REVISION_STRING "655"
#define SVN_FILE_VERSION 1,6,0,653 #define SVN_FILE_VERSION 1,6,0,655
#define SVN_FILE_VERSION_STRING "1.6.0.653" #define SVN_FILE_VERSION_STRING "1.6.0.655"
#endif //_INCLUDE_SVN_VERSION_H_ #endif //_INCLUDE_SVN_VERSION_H_