linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #06012
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3036: add a test plugin (it matches "ABC DEF" and makes it bold)
------------------------------------------------------------
revno: 3036
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Sat 2012-09-08 15:53:58 +0200
message:
add a test plugin (it matches "ABC DEF" and makes it bold)
added:
plugins/Test/
plugins/Test/Plugin.cpp
plugins/Test/Plugin.def
plugins/Test/Plugin.h
plugins/Test/SConscript
plugins/Test/Util.cpp
plugins/Test/Util.h
plugins/Test/main.cpp
plugins/Test/resource.h
plugins/Test/resource.rc
plugins/Test/stdafx.cpp
plugins/Test/stdafx.h
plugins/Test/version.h
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== added directory 'plugins/Test'
=== added file 'plugins/Test/Plugin.cpp'
--- plugins/Test/Plugin.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Test/Plugin.cpp 2012-09-08 13:53:58 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "stdafx.h"
+#include "Plugin.h"
+#include "Util.h"
+
+Plugin::Plugin() {
+}
+
+Plugin::~Plugin() {
+ for(auto& i: events)
+ hooks->release_hook(i.second);
+ events.clear();
+}
+
+Bool DCAPI Plugin::main(PluginState state, DCCorePtr core, dcptr_t) {
+ switch(state) {
+ case ON_INSTALL:
+ case ON_LOAD:
+ {
+ Bool res = True;
+ newInstance();
+ getInstance()->onLoad(core, (state == ON_INSTALL), res);
+ return res;
+ }
+
+ case ON_UNINSTALL:
+ case ON_UNLOAD:
+ {
+ deleteInstance();
+ return True;
+ }
+
+ default:
+ {
+ return False;
+ }
+ }
+}
+
+void Plugin::onLoad(DCCorePtr core, bool install, Bool& loadRes) {
+ dcpp = core;
+ hooks = reinterpret_cast<DCHooksPtr>(core->query_interface(DCINTF_HOOKS, DCINTF_HOOKS_VER));
+
+ auto utils = reinterpret_cast<DCUtilsPtr>(core->query_interface(DCINTF_DCPP_UTILS, DCINTF_DCPP_UTILS_VER));
+ auto config = reinterpret_cast<DCConfigPtr>(core->query_interface(DCINTF_CONFIG, DCINTF_CONFIG_VER));
+ auto logger = reinterpret_cast<DCLogPtr>(core->query_interface(DCINTF_LOGGING, DCINTF_LOGGING_VER));
+
+ tagger = reinterpret_cast<DCTaggerPtr>(core->query_interface(DCINTF_DCPP_TAGGER, DCINTF_DCPP_TAGGER_VER));
+
+ if(!utils || !config || !logger || !tagger) {
+ loadRes = False;
+ return;
+ }
+
+ Util::initialize(core->host_name(), utils, config, logger);
+
+ Util::logMessage("Test plugin loaded, watch out!");
+
+ /*if(install) {
+ // Default settings
+
+ Util::logMessage("Test plugin installed, please restart " + Util::appName + " to begin using the plugin.");
+ return;
+ }*/
+
+ events[HOOK_UI_CHAT_TAGS] = hooks->bind_hook(HOOK_UI_CHAT_TAGS, &uiChatTags, 0);
+}
+
+Bool Plugin::onUiChatTags(TagDataPtr tags) {
+ // look for the pattern and make it bold.
+ const string pattern = "ABC DEF";
+
+ string text(tags->text);
+ size_t start, end = 0;
+ while((start = text.find(pattern, end)) != string::npos) {
+ end = start + pattern.size();
+ tagger->add_tag(tags, start, end, "b", "");
+ }
+ return False;
+}
=== added file 'plugins/Test/Plugin.def'
--- plugins/Test/Plugin.def 1970-01-01 00:00:00 +0000
+++ plugins/Test/Plugin.def 2012-09-08 13:53:58 +0000
@@ -0,0 +1,2 @@
+EXPORTS
+ pluginInit = _pluginInit@4 @1
=== added file 'plugins/Test/Plugin.h'
--- plugins/Test/Plugin.h 1970-01-01 00:00:00 +0000
+++ plugins/Test/Plugin.h 2012-09-08 13:53:58 +0000
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLUGINS_DEV_PLUGIN_H
+#define PLUGINS_DEV_PLUGIN_H
+
+#include <Singleton.h>
+
+#include <map>
+
+using std::map;
+using std::string;
+
+class Plugin : public dcpp::Singleton<Plugin>
+{
+public:
+ static Bool DCAPI main(PluginState state, DCCorePtr core, dcptr_t);
+
+private:
+ friend class dcpp::Singleton<Plugin>;
+
+ Plugin();
+ ~Plugin();
+
+ void onLoad(DCCorePtr core, bool install, Bool& loadRes);
+ Bool onUiChatTags(TagDataPtr tags);
+
+ // Event wrappers
+ static Bool DCAPI uiChatTags(dcptr_t /*pObject*/, dcptr_t pData, dcptr_t, Bool* /*bBreak*/) {
+ return getInstance()->onUiChatTags(reinterpret_cast<TagDataPtr>(pData));
+ }
+
+ map<string, subsHandle> events;
+
+ DCCorePtr dcpp;
+ DCHooksPtr hooks;
+
+ DCTaggerPtr tagger;
+};
+
+#endif
=== added file 'plugins/Test/SConscript'
--- plugins/Test/SConscript 1970-01-01 00:00:00 +0000
+++ plugins/Test/SConscript 2012-09-08 13:53:58 +0000
@@ -0,0 +1,19 @@
+Import('dev source_path')
+
+if not dev.is_win32():
+ Return()
+
+env, target, sources = dev.prepare_build(source_path, 'TestPlugin', source_glob = '*.cpp', in_bin = False)
+
+env.Append(CPPPATH = ['#/dcpp'])
+
+res = env.RES(dev.get_sources(source_path, '*.rc'))
+env.Depends(res, 'resource.h')
+
+if 'g++' in env['LINK']:
+ env.Append(SHLINKFLAGS = '-Wl,--add-stdcall-alias')
+elif 'link' in env['LINK'] and env['arch'] == 'x86':
+ sources.append('Plugin.def')
+
+ret = dev.build_lib(env, target, [sources, res, dev.boost], shared = True)
+Return('ret')
=== added file 'plugins/Test/Util.cpp'
--- plugins/Test/Util.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Test/Util.cpp 2012-09-08 13:53:58 +0000
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "stdafx.h"
+#include "Util.h"
+
+#include "version.h"
+
+string Util::appName;
+
+DCUtilsPtr Util::utils = nullptr;
+DCConfigPtr Util::config = nullptr;
+DCLogPtr Util::logger = nullptr;
+
+void Util::setConfig(const char* name, const char* value) {
+ ConfigStr val;
+ memset(&val, 0, sizeof(ConfigStr));
+
+ val.type = CFG_TYPE_STRING;
+ val.value = value;
+ config->set_cfg(PLUGIN_GUID, name, (ConfigValuePtr)&val);
+}
+
+string Util::getConfig(const char *name) {
+ auto value = (ConfigStrPtr)config->get_cfg(PLUGIN_GUID, name, CFG_TYPE_STRING);
+ string str(value->value);
+ config->release((ConfigValuePtr)value);
+
+ return str;
+}
+
+bool Util::getBoolConfig(const char *name) {
+ auto value = (ConfigIntPtr)config->get_cfg(PLUGIN_GUID, name, CFG_TYPE_INT);
+ int32_t num = value->value;
+ config->release((ConfigValuePtr)value);
+
+ return (num != 0);
+}
+
+ConfigValuePtr Util::getCoreConfig(const char* name) {
+ return config->get_cfg("CoreSetup", name, CFG_TYPE_UNKNOWN);
+}
+
+string Util::fromT(const tstring& str) {
+ string res;
+ if(str.empty())
+ return res;
+ res.resize(str.size() + 1);
+ res.resize(utils->wcs_to_utf8(&res[0], &str[0], res.size()));
+ return res;
+}
+
+tstring Util::toT(const string& str) {
+ tstring res;
+ if(str.empty())
+ return res;
+ res.resize(str.size() + 1);
+ res.resize(utils->utf8_to_wcs(&res[0], &str[0], str.size()));
+ return res;
+}
=== added file 'plugins/Test/Util.h'
--- plugins/Test/Util.h 1970-01-01 00:00:00 +0000
+++ plugins/Test/Util.h 2012-09-08 13:53:58 +0000
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLUGINS_DEV_UTIL_H
+#define PLUGINS_DEV_UTIL_H
+
+#ifdef _WIN32
+# define PATH_SEPARATOR '\\'
+# define PATH_SEPARATOR_STR "\\"
+#else
+# define PATH_SEPARATOR '/'
+# define PATH_SEPARATOR_STR "/"
+# include <sys/stat.h>
+#endif
+
+#ifdef _WIN32
+# ifdef _MSC_VER
+# define snprintf _snprintf
+# define snwprintf _snwprintf
+# endif
+#elif __GNUC__
+# define stricmp strcasecmp
+# define strnicmp strncasecmp
+#else
+# error No supported compiler found
+#endif
+
+using std::string;
+
+class Util
+{
+public:
+ static void initialize(string coreName, DCUtilsPtr coreUtils, DCConfigPtr coreConfig, DCLogPtr coreLogger) {
+ appName = std::move(coreName);
+ utils = coreUtils;
+ config = coreConfig;
+ logger = coreLogger;
+ }
+
+ static string toString(uint16_t val) {
+ char buf[8];
+ snprintf(buf, sizeof(buf), "%u", (unsigned int)val);
+ return buf;
+ }
+
+ static string toString(int32_t val) {
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%d", val);
+ return buf;
+ }
+
+ static bool fileExists(const string& aFile) {
+#ifdef _WIN32
+ DWORD attr = GetFileAttributesA(aFile.c_str());
+ return (attr != 0xFFFFFFFF);
+#else
+ struct stat fi;
+ return (stat(aFile.c_str(), &fi) == 0);
+#endif
+ }
+
+ // API Stuff
+ static string getPath(PathType type) {
+ return config->get_path(type);
+ }
+
+ static void logMessage(const string& message) {
+ logger->log(message.c_str());
+ }
+
+ static void setConfig(const char* name, const char* value);
+ static void setConfig(const char* name, const string& value) { setConfig(name, value.c_str()); }
+ static void setConfig(const char* name, bool state) { setConfig(name, string(state ? "1" : "0")); }
+
+ static string getConfig(const char *name);
+ static bool getBoolConfig(const char* name);
+
+ static ConfigValuePtr getCoreConfig(const char* name);
+ static void freeCoreConfig(ConfigValuePtr val) { config->release(val); }
+
+ static string fromT(const tstring& str);
+ static tstring toT(const string& str);
+
+ static string appName;
+
+private:
+ static DCUtilsPtr utils;
+ static DCConfigPtr config;
+ static DCLogPtr logger;
+};
+
+#define SETTING(k) Util::getConfig(#k)
+#define BOOLSETTING(k) (Util::getBoolConfig(#k))
+
+#endif
=== added file 'plugins/Test/main.cpp'
--- plugins/Test/main.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Test/main.cpp 2012-09-08 13:53:58 +0000
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "stdafx.h"
+#include "Plugin.h"
+#include "version.h"
+
+extern "C" {
+
+// Plugin loader
+DCEXP DCMAIN DCAPI pluginInit(MetaDataPtr info) {
+ info->name = PLUGIN_NAME;
+ info->author = PLUGIN_AUTHOR;
+ info->description = PLUGIN_DESC;
+ info->web = PLUGIN_WEB;
+ info->version = PLUGIN_VERSION;
+ info->apiVersion = DCAPI_CORE_VER;
+ info->guid = PLUGIN_GUID;
+
+ return &Plugin::main;
+}
+
+#ifdef _WIN32
+BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD /*fdwReason*/, LPVOID /*lpvReserved*/) {
+ return TRUE;
+}
+#endif
+
+}
=== added file 'plugins/Test/resource.h'
--- plugins/Test/resource.h 1970-01-01 00:00:00 +0000
+++ plugins/Test/resource.h 2012-09-08 13:53:58 +0000
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by resource.rc
+//
+#define VERSION_INFO 1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1002
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
=== added file 'plugins/Test/resource.rc'
--- plugins/Test/resource.rc 1970-01-01 00:00:00 +0000
+++ plugins/Test/resource.rc 2012-09-08 13:53:58 +0000
@@ -0,0 +1,100 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (United States) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,0
+ PRODUCTVERSION 1,0,0,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "080004b0"
+ BEGIN
+ VALUE "Comments", "http://dcplusplus.sourceforge.net"
+ VALUE "FileDescription", "Test plugin for DC++"
+ VALUE "FileVersion", "1, 0, 0, 0"
+ VALUE "InternalName", "TestPlugin"
+ VALUE "LegalCopyright", "Copyright (C) 2012 Jacek Sieka"
+ VALUE "OriginalFilename", "TestPlugin.dll"
+ VALUE "ProductName", "Test plugin for DC++"
+ VALUE "ProductVersion", "1, 0, 0, 0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x800, 1200
+ END
+END
+
+#endif // English (United States) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
=== added file 'plugins/Test/stdafx.cpp'
--- plugins/Test/stdafx.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Test/stdafx.cpp 2012-09-08 13:53:58 +0000
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "stdafx.h"
=== added file 'plugins/Test/stdafx.h'
--- plugins/Test/stdafx.h 1970-01-01 00:00:00 +0000
+++ plugins/Test/stdafx.h 2012-09-08 13:53:58 +0000
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLUGINS_TEST_STDAFX_H
+#define PLUGINS_TEST_STDAFX_H
+
+#ifdef _WIN32
+
+#include <windows.h>
+#include <tchar.h>
+
+#else
+
+#include <unistd.h>
+
+#endif
+
+#include <cstdio>
+#include <cstdint>
+#include <string>
+
+#include <PluginDefs.h>
+
+#ifdef _UNICODE
+typedef std::wstring tstring;
+#else
+typedef std::string tstring;
+#endif
+
+#endif
=== added file 'plugins/Test/version.h'
--- plugins/Test/version.h 1970-01-01 00:00:00 +0000
+++ plugins/Test/version.h 2012-09-08 13:53:58 +0000
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2012 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLUGINS_DEV_VERSION_H
+#define PLUGINS_DEV_VERSION_H
+
+/* UUID/GUID for this plugin project */
+#define PLUGIN_GUID "{a6150201-b8f6-4ec7-b851-e9fb1b2807dc}"
+
+/* Name of the plugin */
+#define PLUGIN_NAME "Test plugin"
+
+/* Author of the plugin */
+#define PLUGIN_AUTHOR "DC++"
+
+/* Short description of the plugin */
+#define PLUGIN_DESC "Test plugin to play around with the plugin API"
+
+/* Version of the plugin (note: not API version) */
+#define PLUGIN_VERSION 1.0
+
+/* Plugin website, set to "N/A" if none */
+#define PLUGIN_WEB "http://dcplusplus.sourceforge.net/"
+
+#endif