1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 14:14:48 +02:00

Added Perl handlers

This commit is contained in:
Sebastien Helleu
2003-11-16 23:46:48 +00:00
parent 62fabde373
commit fe4ca01615
16 changed files with 434 additions and 80 deletions
+25 -9
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: 0.0.2\n"
"Project-Id-Version: WeeChat 0.0.4-pre1\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2003-11-16 20:00+0100\n"
"POT-Creation-Date: 2003-11-16 21:36+0100\n"
"PO-Revision-Date: 2003-10-04 21:21+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1471,23 +1471,38 @@ msgid ""
"server!\n"
msgstr ""
"%s: tous les noms d'utilisateurs déclarés sont déjà en cours d'utilisation, "
"fermeture de la connexion avec server!\n"
"fermeture de la connexion avec le serveur !\n"
#: src/plugins/perl/wee-perl.c:73
#: src/plugins/perl/wee-perl.c:69
#, c-format
msgid "%s unable to load Perl script \"%s\"\n"
msgstr "%s impossible de charger le script Perl \"%s\"\n"
msgid "registered Perl script: \"%s\", version %s (%s)\n"
msgstr "script Perl enregistré: \"%s\", version %s (%s)\n"
#: src/plugins/perl/wee-perl.c:201
#: src/plugins/perl/wee-perl.c:74
#, c-format
msgid "%s unable to load Perl script \"%s\" (not enough memory)\n"
msgstr "%s impossible de charger le script Perl \"%s\" (mémoire insuffisante)\n"
#: src/plugins/perl/wee-perl.c:206
#, c-format
msgid "Perl error: %s\n"
msgstr "Erreur Perl: %s\n"
#: src/plugins/perl/wee-perl.c:210
#: src/plugins/perl/wee-perl.c:215
#, c-format
msgid "Perl error: too much values from \"%s\" (%d). Expected: 1.\n"
msgstr "Erreur Perl: trop de valeurs de \"%s\" (%d). Attendue: 1.\n"
#: src/plugins/perl/wee-perl.c:237
#, c-format
msgid "loading Perl script \"%s\"\n"
msgstr "chargement du script Perl \"%s\"\n"
#: src/plugins/perl/wee-perl.c:250
#, c-format
msgid "unloading Perl script \"%s\"\n"
msgstr "déchargement du script Perl \"%s\"\n"
#: src/gui/curses/gui-display.c:863
msgid "[not connected] "
msgstr "[non connecté] "
@@ -1819,7 +1834,8 @@ msgid ""
"Please rebuild WeeChat with \"--enable-perl\" option for ./configure script\n"
msgstr ""
"WeeChat a été construit sans le support Perl.\n"
"Merci de reconstruire WeeChat avec l'option \"--enable-perl\" pour le script ./configure\n"
"Merci de reconstruire WeeChat avec l'option \"--enable-perl\" pour le "
"script ./configure\n"
#: src/common/command.c:1062
msgid "Server: "
+20 -5
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2003-11-16 20:00+0100\n"
"POT-Creation-Date: 2003-11-16 21:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1375,21 +1375,36 @@ msgid ""
"server!\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:73
#: src/plugins/perl/wee-perl.c:69
#, c-format
msgid "registered Perl script \"%s\", version %s (%s)\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:74
#, c-format
msgid "%s unable to load Perl script \"%s\"\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:201
#: src/plugins/perl/wee-perl.c:206
#, c-format
msgid "Perl error: %s\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:210
#: src/plugins/perl/wee-perl.c:215
#, c-format
msgid "Perl error: too much values from \"%s\" (%d). Expected: 1.\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:237
#, c-format
msgid "loading Perl script \"%s\"\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:250
#, c-format
msgid "unloading Perl script \"%s\"\n"
msgstr ""
#: src/gui/curses/gui-display.c:863
msgid "[not connected] "
msgstr ""
@@ -1480,7 +1495,7 @@ msgstr ""
#: src/common/command.c:65
msgid ""
"filename: Perl script (file) to load/unload\n"
"filename: Perl script (file) to load\n"
"scriptname: name of script to unload\n"
"Without argument, /perl command lists all loaded Perl scripts."
msgstr ""
+1 -1
View File
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* config.c: WeeChat configuration */
/* weeconfig.c: WeeChat configuration */
#ifdef HAVE_CONFIG_H
+1 -1
View File
@@ -154,4 +154,4 @@ extern int config_read ();
extern int config_create_default ();
extern int config_write ();
#endif /* config.h */
#endif /* weeconfig.h */
+71 -22
View File
@@ -32,11 +32,14 @@
#include <XSUB.h>
#include "../../common/weechat.h"
#include "wee-perl.h"
#include "../plugins.h"
#include "../../gui/gui.h"
static PerlInterpreter *my_perl = NULL;
static t_perl_script *perl_scripts = NULL;
t_perl_script *perl_scripts = NULL;
t_perl_script *last_perl_script = NULL;
extern void boot_DynaLoader (pTHX_ CV* cv);
@@ -64,13 +67,22 @@ static XS (XS_IRC_register)
new_perl_script->version = strdup (version);
new_perl_script->shutdown_func = strdup (shutdown_func);
new_perl_script->description = strdup (description);
new_perl_script->next_script = perl_scripts;
perl_scripts = new_perl_script;
wee_log_printf (_("registered Perl script: \"%s\"\n"), name);
/* add new script to list */
new_perl_script->prev_script = last_perl_script;
new_perl_script->next_script = NULL;
if (perl_scripts)
last_perl_script->next_script = new_perl_script;
else
perl_scripts = new_perl_script;
last_perl_script = new_perl_script;
wee_log_printf (_("registered Perl script: \"%s\", version %s (%s)\n"),
name, version, description);
}
else
gui_printf (NULL,
_("%s unable to load Perl script \"%s\"\n"),
_("%s unable to load Perl script \"%s\" (not enough memory)\n"),
WEECHAT_ERROR, name);
XST_mPV (0, VERSION);
XSRETURN (1);
@@ -95,6 +107,22 @@ static XS (XS_IRC_print)
XSRETURN_EMPTY;
}
/*
* IRC::add_message_handler: add handler for messages (privmsg, ...)
*/
static XS (XS_IRC_add_message_handler)
{
char *name, *function;
int integer;
dXSARGS;
name = SvPV (ST (0), integer);
function = SvPV (ST (1), integer);
plugins_msg_handler_add (PLUGIN_PERL, name, function);
XSRETURN_EMPTY;
}
/*
* xs_init: initialize subroutines
*/
@@ -105,6 +133,7 @@ xs_init (pTHX)
newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
newXS ("IRC::register", XS_IRC_register, "IRC");
newXS ("IRC::print", XS_IRC_print, "IRC");
newXS ("IRC::add_message_handler", XS_IRC_add_message_handler, "IRC");
}
/*
@@ -237,6 +266,42 @@ wee_perl_load (char *filename)
return wee_perl_exec ("wee_perl_load_eval_file", filename);
}
/*
* wee_perl_script_free: free a Perl script
*/
void
wee_perl_script_free (t_perl_script *ptr_perl_script)
{
t_perl_script *new_perl_scripts;
/* remove script from list */
if (last_perl_script == ptr_perl_script)
last_perl_script = ptr_perl_script->prev_script;
if (ptr_perl_script->prev_script)
{
(ptr_perl_script->prev_script)->next_script = ptr_perl_script->next_script;
new_perl_scripts = perl_scripts;
}
else
new_perl_scripts = ptr_perl_script->next_script;
if (ptr_perl_script->next_script)
(ptr_perl_script->next_script)->prev_script = ptr_perl_script->prev_script;
/* free data */
if (ptr_perl_script->name)
free (ptr_perl_script->name);
if (ptr_perl_script->version)
free (ptr_perl_script->version);
if (ptr_perl_script->shutdown_func)
free (ptr_perl_script->shutdown_func);
if (ptr_perl_script->description)
free (ptr_perl_script->description);
free (ptr_perl_script);
perl_scripts = new_perl_scripts;
}
/*
* wee_perl_unload: unload a Perl script
*/
@@ -252,16 +317,7 @@ wee_perl_unload (t_perl_script *ptr_perl_script)
/* call shutdown callback function */
if (ptr_perl_script->shutdown_func[0])
wee_perl_exec (ptr_perl_script->shutdown_func, "");
/* free data */
if (ptr_perl_script->name)
free (ptr_perl_script->name);
if (ptr_perl_script->version)
free (ptr_perl_script->version);
if (ptr_perl_script->shutdown_func)
free (ptr_perl_script->shutdown_func);
if (ptr_perl_script->description)
free (ptr_perl_script->description);
wee_perl_script_free (ptr_perl_script);
}
}
@@ -272,15 +328,8 @@ wee_perl_unload (t_perl_script *ptr_perl_script)
void
wee_perl_unload_all ()
{
t_perl_script *ptr_perl_script;
while (perl_scripts)
{
wee_perl_unload (perl_scripts);
ptr_perl_script = perl_scripts->next_script;
free (perl_scripts);
perl_scripts = ptr_perl_script;
}
}
/*
+1
View File
@@ -31,6 +31,7 @@ struct t_perl_script
char *version; /* version of script */
char *shutdown_func; /* function when script ends */
char *description; /* description of script */
t_perl_script *prev_script; /* link to previous Perl script */
t_perl_script *next_script; /* link to next Perl script */
};
+83
View File
@@ -27,13 +27,22 @@
#endif
#include <stdlib.h>
#include <string.h>
#include "../common/weechat.h"
#include "plugins.h"
#include "../gui/gui.h"
#ifdef PLUGIN_PERL
#include "perl/wee-perl.h"
#endif
t_plugin_handler *plugins_msg_handlers = NULL;
t_plugin_handler *last_plugin_msg_handler = NULL;
t_plugin_handler *plugins_cmd_handlers = NULL;
t_plugin_handler *last_plugin_cmd_handler = NULL;
/*
* plugins_init: initialize all plugins
*/
@@ -92,6 +101,78 @@ plugins_unload (int plugin_type, char *scriptname)
}
}
/*
* plugins_msg_handler_add: add a message handler
*/
void
plugins_msg_handler_add (int plugin_type, char *message, char *function)
{
t_plugin_handler *new_plugin_handler;
new_plugin_handler = (t_plugin_handler *)malloc (sizeof (t_plugin_handler));
if (new_plugin_handler)
{
new_plugin_handler->plugin_type = plugin_type;
new_plugin_handler->name = strdup (message);
new_plugin_handler->function_name = strdup (function);
/* add new handler to list */
new_plugin_handler->prev_handler = last_plugin_msg_handler;
new_plugin_handler->next_handler = NULL;
if (plugins_msg_handlers)
last_plugin_msg_handler->next_handler = new_plugin_handler;
else
plugins_msg_handlers = new_plugin_handler;
last_plugin_msg_handler = new_plugin_handler;
}
else
gui_printf (NULL,
_("%s unable to add handler for \"%s\" message (not enough memory)\n"),
WEECHAT_ERROR, message);
}
/*
* plugins_msg_handler_free: free message handler
*/
void
plugins_msg_handler_free (t_plugin_handler *ptr_plugin_handler)
{
t_plugin_handler *new_plugins_msg_handlers;
/* remove handler from list */
if (last_plugin_msg_handler == ptr_plugin_handler)
last_plugin_msg_handler = ptr_plugin_handler->prev_handler;
if (ptr_plugin_handler->prev_handler)
{
(ptr_plugin_handler->prev_handler)->next_handler = ptr_plugin_handler->next_handler;
new_plugins_msg_handlers = plugins_msg_handlers;
}
else
new_plugins_msg_handlers = ptr_plugin_handler->next_handler;
if (ptr_plugin_handler->next_handler)
(ptr_plugin_handler->next_handler)->prev_handler = ptr_plugin_handler->prev_handler;
/* free data */
free (ptr_plugin_handler->name);
free (ptr_plugin_handler->function_name);
free (ptr_plugin_handler);
plugins_msg_handlers = new_plugins_msg_handlers;
}
/*
* plugins_remove_all_msg_handlers: remove all message handlers
*/
void
plugins_msg_handlers_free_all ()
{
while (plugins_msg_handlers)
plugins_msg_handler_free (plugins_msg_handlers);
}
/*
* plugins_end: shutdown plugin interface
*/
@@ -99,6 +180,8 @@ plugins_unload (int plugin_type, char *scriptname)
void
plugins_end ()
{
plugins_msg_handlers_free_all ();
#ifdef PLUGIN_PERL
wee_perl_end();
#endif
+15 -2
View File
@@ -20,17 +20,30 @@
*/
#ifndef __WEECHAT_PLUGIN_H
#define __WEECHAT_PLUGIN_H 1
#ifndef __WEECHAT_PLUGINS_H
#define __WEECHAT_PLUGINS_H 1
#define PLUGIN_UNKNOWN 0
#define PLUGIN_PERL 1
#define PLUGIN_PYTHON 2
#define PLUGIN_RUBY 3
typedef struct t_plugin_handler t_plugin_handler;
struct t_plugin_handler
{
int plugin_type; /* plugin type (Perl, Python, Ruby) */
char *name; /* name (message or command) */
char *function_name; /* name of function (handler) */
t_plugin_handler *prev_handler; /* link to previous handler */
t_plugin_handler *next_handler; /* link to next handler */
};
extern void plugins_init ();
extern void plugins_load (int, char *);
extern void plugins_unload (int, char *);
extern void plugins_msg_handler_add (int, char *, char *);
extern void plugins_end ();
#endif /* plugins.h */
+25 -9
View File
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: 0.0.2\n"
"Project-Id-Version: WeeChat 0.0.4-pre1\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2003-11-16 20:00+0100\n"
"POT-Creation-Date: 2003-11-16 21:36+0100\n"
"PO-Revision-Date: 2003-10-04 21:21+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1471,23 +1471,38 @@ msgid ""
"server!\n"
msgstr ""
"%s: tous les noms d'utilisateurs déclarés sont déjà en cours d'utilisation, "
"fermeture de la connexion avec server!\n"
"fermeture de la connexion avec le serveur !\n"
#: src/plugins/perl/wee-perl.c:73
#: src/plugins/perl/wee-perl.c:69
#, c-format
msgid "%s unable to load Perl script \"%s\"\n"
msgstr "%s impossible de charger le script Perl \"%s\"\n"
msgid "registered Perl script: \"%s\", version %s (%s)\n"
msgstr "script Perl enregistré: \"%s\", version %s (%s)\n"
#: src/plugins/perl/wee-perl.c:201
#: src/plugins/perl/wee-perl.c:74
#, c-format
msgid "%s unable to load Perl script \"%s\" (not enough memory)\n"
msgstr "%s impossible de charger le script Perl \"%s\" (mémoire insuffisante)\n"
#: src/plugins/perl/wee-perl.c:206
#, c-format
msgid "Perl error: %s\n"
msgstr "Erreur Perl: %s\n"
#: src/plugins/perl/wee-perl.c:210
#: src/plugins/perl/wee-perl.c:215
#, c-format
msgid "Perl error: too much values from \"%s\" (%d). Expected: 1.\n"
msgstr "Erreur Perl: trop de valeurs de \"%s\" (%d). Attendue: 1.\n"
#: src/plugins/perl/wee-perl.c:237
#, c-format
msgid "loading Perl script \"%s\"\n"
msgstr "chargement du script Perl \"%s\"\n"
#: src/plugins/perl/wee-perl.c:250
#, c-format
msgid "unloading Perl script \"%s\"\n"
msgstr "déchargement du script Perl \"%s\"\n"
#: src/gui/curses/gui-display.c:863
msgid "[not connected] "
msgstr "[non connecté] "
@@ -1819,7 +1834,8 @@ msgid ""
"Please rebuild WeeChat with \"--enable-perl\" option for ./configure script\n"
msgstr ""
"WeeChat a été construit sans le support Perl.\n"
"Merci de reconstruire WeeChat avec l'option \"--enable-perl\" pour le script ./configure\n"
"Merci de reconstruire WeeChat avec l'option \"--enable-perl\" pour le "
"script ./configure\n"
#: src/common/command.c:1062
msgid "Server: "
+20 -5
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2003-11-16 20:00+0100\n"
"POT-Creation-Date: 2003-11-16 21:36+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1375,21 +1375,36 @@ msgid ""
"server!\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:73
#: src/plugins/perl/wee-perl.c:69
#, c-format
msgid "registered Perl script \"%s\", version %s (%s)\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:74
#, c-format
msgid "%s unable to load Perl script \"%s\"\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:201
#: src/plugins/perl/wee-perl.c:206
#, c-format
msgid "Perl error: %s\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:210
#: src/plugins/perl/wee-perl.c:215
#, c-format
msgid "Perl error: too much values from \"%s\" (%d). Expected: 1.\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:237
#, c-format
msgid "loading Perl script \"%s\"\n"
msgstr ""
#: src/plugins/perl/wee-perl.c:250
#, c-format
msgid "unloading Perl script \"%s\"\n"
msgstr ""
#: src/gui/curses/gui-display.c:863
msgid "[not connected] "
msgstr ""
@@ -1480,7 +1495,7 @@ msgstr ""
#: src/common/command.c:65
msgid ""
"filename: Perl script (file) to load/unload\n"
"filename: Perl script (file) to load\n"
"scriptname: name of script to unload\n"
"Without argument, /perl command lists all loaded Perl scripts."
msgstr ""
+1 -1
View File
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* config.c: WeeChat configuration */
/* weeconfig.c: WeeChat configuration */
#ifdef HAVE_CONFIG_H
+1 -1
View File
@@ -154,4 +154,4 @@ extern int config_read ();
extern int config_create_default ();
extern int config_write ();
#endif /* config.h */
#endif /* weeconfig.h */
+71 -22
View File
@@ -32,11 +32,14 @@
#include <XSUB.h>
#include "../../common/weechat.h"
#include "wee-perl.h"
#include "../plugins.h"
#include "../../gui/gui.h"
static PerlInterpreter *my_perl = NULL;
static t_perl_script *perl_scripts = NULL;
t_perl_script *perl_scripts = NULL;
t_perl_script *last_perl_script = NULL;
extern void boot_DynaLoader (pTHX_ CV* cv);
@@ -64,13 +67,22 @@ static XS (XS_IRC_register)
new_perl_script->version = strdup (version);
new_perl_script->shutdown_func = strdup (shutdown_func);
new_perl_script->description = strdup (description);
new_perl_script->next_script = perl_scripts;
perl_scripts = new_perl_script;
wee_log_printf (_("registered Perl script: \"%s\"\n"), name);
/* add new script to list */
new_perl_script->prev_script = last_perl_script;
new_perl_script->next_script = NULL;
if (perl_scripts)
last_perl_script->next_script = new_perl_script;
else
perl_scripts = new_perl_script;
last_perl_script = new_perl_script;
wee_log_printf (_("registered Perl script: \"%s\", version %s (%s)\n"),
name, version, description);
}
else
gui_printf (NULL,
_("%s unable to load Perl script \"%s\"\n"),
_("%s unable to load Perl script \"%s\" (not enough memory)\n"),
WEECHAT_ERROR, name);
XST_mPV (0, VERSION);
XSRETURN (1);
@@ -95,6 +107,22 @@ static XS (XS_IRC_print)
XSRETURN_EMPTY;
}
/*
* IRC::add_message_handler: add handler for messages (privmsg, ...)
*/
static XS (XS_IRC_add_message_handler)
{
char *name, *function;
int integer;
dXSARGS;
name = SvPV (ST (0), integer);
function = SvPV (ST (1), integer);
plugins_msg_handler_add (PLUGIN_PERL, name, function);
XSRETURN_EMPTY;
}
/*
* xs_init: initialize subroutines
*/
@@ -105,6 +133,7 @@ xs_init (pTHX)
newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
newXS ("IRC::register", XS_IRC_register, "IRC");
newXS ("IRC::print", XS_IRC_print, "IRC");
newXS ("IRC::add_message_handler", XS_IRC_add_message_handler, "IRC");
}
/*
@@ -237,6 +266,42 @@ wee_perl_load (char *filename)
return wee_perl_exec ("wee_perl_load_eval_file", filename);
}
/*
* wee_perl_script_free: free a Perl script
*/
void
wee_perl_script_free (t_perl_script *ptr_perl_script)
{
t_perl_script *new_perl_scripts;
/* remove script from list */
if (last_perl_script == ptr_perl_script)
last_perl_script = ptr_perl_script->prev_script;
if (ptr_perl_script->prev_script)
{
(ptr_perl_script->prev_script)->next_script = ptr_perl_script->next_script;
new_perl_scripts = perl_scripts;
}
else
new_perl_scripts = ptr_perl_script->next_script;
if (ptr_perl_script->next_script)
(ptr_perl_script->next_script)->prev_script = ptr_perl_script->prev_script;
/* free data */
if (ptr_perl_script->name)
free (ptr_perl_script->name);
if (ptr_perl_script->version)
free (ptr_perl_script->version);
if (ptr_perl_script->shutdown_func)
free (ptr_perl_script->shutdown_func);
if (ptr_perl_script->description)
free (ptr_perl_script->description);
free (ptr_perl_script);
perl_scripts = new_perl_scripts;
}
/*
* wee_perl_unload: unload a Perl script
*/
@@ -252,16 +317,7 @@ wee_perl_unload (t_perl_script *ptr_perl_script)
/* call shutdown callback function */
if (ptr_perl_script->shutdown_func[0])
wee_perl_exec (ptr_perl_script->shutdown_func, "");
/* free data */
if (ptr_perl_script->name)
free (ptr_perl_script->name);
if (ptr_perl_script->version)
free (ptr_perl_script->version);
if (ptr_perl_script->shutdown_func)
free (ptr_perl_script->shutdown_func);
if (ptr_perl_script->description)
free (ptr_perl_script->description);
wee_perl_script_free (ptr_perl_script);
}
}
@@ -272,15 +328,8 @@ wee_perl_unload (t_perl_script *ptr_perl_script)
void
wee_perl_unload_all ()
{
t_perl_script *ptr_perl_script;
while (perl_scripts)
{
wee_perl_unload (perl_scripts);
ptr_perl_script = perl_scripts->next_script;
free (perl_scripts);
perl_scripts = ptr_perl_script;
}
}
/*
+1
View File
@@ -31,6 +31,7 @@ struct t_perl_script
char *version; /* version of script */
char *shutdown_func; /* function when script ends */
char *description; /* description of script */
t_perl_script *prev_script; /* link to previous Perl script */
t_perl_script *next_script; /* link to next Perl script */
};
+83
View File
@@ -27,13 +27,22 @@
#endif
#include <stdlib.h>
#include <string.h>
#include "../common/weechat.h"
#include "plugins.h"
#include "../gui/gui.h"
#ifdef PLUGIN_PERL
#include "perl/wee-perl.h"
#endif
t_plugin_handler *plugins_msg_handlers = NULL;
t_plugin_handler *last_plugin_msg_handler = NULL;
t_plugin_handler *plugins_cmd_handlers = NULL;
t_plugin_handler *last_plugin_cmd_handler = NULL;
/*
* plugins_init: initialize all plugins
*/
@@ -92,6 +101,78 @@ plugins_unload (int plugin_type, char *scriptname)
}
}
/*
* plugins_msg_handler_add: add a message handler
*/
void
plugins_msg_handler_add (int plugin_type, char *message, char *function)
{
t_plugin_handler *new_plugin_handler;
new_plugin_handler = (t_plugin_handler *)malloc (sizeof (t_plugin_handler));
if (new_plugin_handler)
{
new_plugin_handler->plugin_type = plugin_type;
new_plugin_handler->name = strdup (message);
new_plugin_handler->function_name = strdup (function);
/* add new handler to list */
new_plugin_handler->prev_handler = last_plugin_msg_handler;
new_plugin_handler->next_handler = NULL;
if (plugins_msg_handlers)
last_plugin_msg_handler->next_handler = new_plugin_handler;
else
plugins_msg_handlers = new_plugin_handler;
last_plugin_msg_handler = new_plugin_handler;
}
else
gui_printf (NULL,
_("%s unable to add handler for \"%s\" message (not enough memory)\n"),
WEECHAT_ERROR, message);
}
/*
* plugins_msg_handler_free: free message handler
*/
void
plugins_msg_handler_free (t_plugin_handler *ptr_plugin_handler)
{
t_plugin_handler *new_plugins_msg_handlers;
/* remove handler from list */
if (last_plugin_msg_handler == ptr_plugin_handler)
last_plugin_msg_handler = ptr_plugin_handler->prev_handler;
if (ptr_plugin_handler->prev_handler)
{
(ptr_plugin_handler->prev_handler)->next_handler = ptr_plugin_handler->next_handler;
new_plugins_msg_handlers = plugins_msg_handlers;
}
else
new_plugins_msg_handlers = ptr_plugin_handler->next_handler;
if (ptr_plugin_handler->next_handler)
(ptr_plugin_handler->next_handler)->prev_handler = ptr_plugin_handler->prev_handler;
/* free data */
free (ptr_plugin_handler->name);
free (ptr_plugin_handler->function_name);
free (ptr_plugin_handler);
plugins_msg_handlers = new_plugins_msg_handlers;
}
/*
* plugins_remove_all_msg_handlers: remove all message handlers
*/
void
plugins_msg_handlers_free_all ()
{
while (plugins_msg_handlers)
plugins_msg_handler_free (plugins_msg_handlers);
}
/*
* plugins_end: shutdown plugin interface
*/
@@ -99,6 +180,8 @@ plugins_unload (int plugin_type, char *scriptname)
void
plugins_end ()
{
plugins_msg_handlers_free_all ();
#ifdef PLUGIN_PERL
wee_perl_end();
#endif
+15 -2
View File
@@ -20,17 +20,30 @@
*/
#ifndef __WEECHAT_PLUGIN_H
#define __WEECHAT_PLUGIN_H 1
#ifndef __WEECHAT_PLUGINS_H
#define __WEECHAT_PLUGINS_H 1
#define PLUGIN_UNKNOWN 0
#define PLUGIN_PERL 1
#define PLUGIN_PYTHON 2
#define PLUGIN_RUBY 3
typedef struct t_plugin_handler t_plugin_handler;
struct t_plugin_handler
{
int plugin_type; /* plugin type (Perl, Python, Ruby) */
char *name; /* name (message or command) */
char *function_name; /* name of function (handler) */
t_plugin_handler *prev_handler; /* link to previous handler */
t_plugin_handler *next_handler; /* link to next handler */
};
extern void plugins_init ();
extern void plugins_load (int, char *);
extern void plugins_unload (int, char *);
extern void plugins_msg_handler_add (int, char *, char *);
extern void plugins_end ();
#endif /* plugins.h */