- added IRC::get_info function for Perl scripts
- cleanup code in main() function of weechat.c - fixed bug when unloading all Perl scripts (now end and restart Perl interpreter)
This commit is contained in:
parent
c8c5ff3d68
commit
a1f09df80f
@ -60,14 +60,14 @@
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/* char *display_name; */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
char *weechat_home; /* WeeChat home dir. (example: /home/toto/.weechat) */
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log */
|
||||
|
||||
|
||||
/*
|
||||
* my_sigint: SIGINT handler, do nothing (just ignore this signal)
|
||||
* Prevents user for exiting with Ctrl-C
|
||||
*/
|
||||
|
||||
void
|
||||
@ -126,19 +126,6 @@ wee_parse_args (int argc, char *argv[])
|
||||
printf ("\n%s%s", WEE_LICENSE);
|
||||
exit (0);
|
||||
}
|
||||
/*else if ((strcmp (argv[i], "-d") == 0)
|
||||
|| (strcmp (argv[i], "--display") == 0))
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
fprintf (stderr,
|
||||
_("%s no display specified (parameter '%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
else
|
||||
{
|
||||
display_name = argv[i + 1];
|
||||
i++;
|
||||
}
|
||||
}*/
|
||||
else if ((strcmp (argv[i], "-v") == 0)
|
||||
|| (strcmp (argv[i], "--version") == 0))
|
||||
{
|
||||
@ -161,24 +148,25 @@ wee_parse_args (int argc, char *argv[])
|
||||
void
|
||||
wee_create_home_dir ()
|
||||
{
|
||||
char *weechat_home_dir;
|
||||
int return_code;
|
||||
|
||||
weechat_home_dir =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (weechat_home_dir, "%s/.weechat", getenv ("HOME"));
|
||||
return_code = mkdir (weechat_home_dir, 0755);
|
||||
/* TODO: rewrite this code for Windows version */
|
||||
weechat_home =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 10) * sizeof (char));
|
||||
sprintf (weechat_home, "%s/.weechat", getenv ("HOME"));
|
||||
|
||||
/* try to create home directory */
|
||||
return_code = mkdir (weechat_home, 0755);
|
||||
if (return_code < 0)
|
||||
{
|
||||
/* exit if error (except if directory already exists) */
|
||||
if (errno != EEXIST)
|
||||
{
|
||||
fprintf (stderr, _("%s cannot create directory \"%s\"\n"),
|
||||
WEECHAT_ERROR, weechat_home_dir);
|
||||
free (weechat_home_dir);
|
||||
WEECHAT_ERROR, weechat_home);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
free (weechat_home_dir);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -206,8 +194,8 @@ wee_init_log ()
|
||||
char *filename;
|
||||
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_LOG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_LOG_NAME, weechat_home);
|
||||
if ((log_file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
free (filename);
|
||||
@ -219,76 +207,12 @@ wee_init_log ()
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
* weechat_welcome_message: display WeeChat welcome message - yeah!
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
weechat_welcome_message ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
/* ignore SIGINT signal (for example Ctrl-C) */
|
||||
signal (SIGINT, my_sigint);
|
||||
|
||||
/* pre-initiliaze interface */
|
||||
gui_pre_init (&argc, &argv);
|
||||
|
||||
/* initialize variables */
|
||||
wee_init_vars ();
|
||||
|
||||
/* parse command line args */
|
||||
wee_parse_args (argc, argv);
|
||||
|
||||
/* create weechat home directory */
|
||||
wee_create_home_dir ();
|
||||
|
||||
/* init log file */
|
||||
wee_init_log ();
|
||||
|
||||
/* build commands index (sorted), for completion */
|
||||
index_command_build ();
|
||||
|
||||
/* read configuration */
|
||||
switch (config_read ())
|
||||
{
|
||||
case 0: /* success */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
config_create_default ();
|
||||
config_read ();
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* init gui */
|
||||
gui_init ();
|
||||
|
||||
/* init plugin interface(s) */
|
||||
plugin_init ();
|
||||
|
||||
/* Welcome message - yeah! */
|
||||
if (cfg_look_startup_logo)
|
||||
{
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
@ -320,34 +244,67 @@ main (int argc, char *argv[])
|
||||
cfg_look_startup_version)
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, ""); /* initialize gettext */
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
/* connect to all servers (with autoconnect flag) */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
signal (SIGINT, my_sigint); /* ignore SIGINT signal */
|
||||
gui_pre_init (&argc, &argv); /* pre-initiliaze interface */
|
||||
wee_init_vars (); /* initialize some variables */
|
||||
wee_parse_args (argc, argv); /* parse command line args */
|
||||
wee_create_home_dir (); /* create weechat home directory */
|
||||
wee_init_log (); /* init log file */
|
||||
index_command_build (); /* build commands index for completion */
|
||||
|
||||
switch (config_read ()) /* read configuration */
|
||||
{
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
gui_window_new (ptr_server, NULL);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
case 0: /* config file OK */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
config_create_default ();
|
||||
config_read ();
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* WeeChat main loop */
|
||||
gui_main_loop ();
|
||||
gui_init (); /* init WeeChat interface */
|
||||
plugin_init (); /* init plugin interface(s) */
|
||||
weechat_welcome_message (); /* display WeeChat welcome message */
|
||||
server_auto_connect (); /* auto-connect to servers */
|
||||
|
||||
/* end plugin interface(s) */
|
||||
plugin_end ();
|
||||
gui_main_loop (); /* WeeChat main loop */
|
||||
|
||||
/* disconnect from all servers */
|
||||
server_disconnect_all ();
|
||||
|
||||
/* save config file */
|
||||
config_write (NULL);
|
||||
plugin_end (); /* end plugin interface(s) */
|
||||
server_disconnect_all (); /* disconnect from all servers */
|
||||
config_write (NULL); /* save config file */
|
||||
wee_shutdown (); /* quit WeeChat (oh no, why?) */
|
||||
|
||||
/* program ending */
|
||||
wee_shutdown ();
|
||||
|
||||
/* make gcc happy (statement never executed) */
|
||||
return 0;
|
||||
return 0; /* make gcc happy (never executed) */
|
||||
}
|
||||
|
@ -86,16 +86,9 @@
|
||||
" -l, --license display WeeChat license\n" \
|
||||
" -v, --version display WeeChat version\n\n"
|
||||
|
||||
/* " -d, --display choose X display\n" \*/
|
||||
|
||||
|
||||
/*#define DEFAULT_DISPLAY ":0" */
|
||||
|
||||
|
||||
/*extern char *display_name; */
|
||||
int quit_weechat;
|
||||
|
||||
extern int quit_weechat;
|
||||
extern char *weechat_home;
|
||||
|
||||
extern void wee_log_printf (char *, ...);
|
||||
extern void wee_shutdown ();
|
||||
|
@ -721,8 +721,8 @@ config_read ()
|
||||
char line[1024], *ptr_line, *pos, *pos2;
|
||||
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_CONFIG_NAME, weechat_home);
|
||||
if ((file = fopen (filename, "rt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s config file \"%s\" not found.\n"),
|
||||
@ -937,8 +937,8 @@ config_create_default ()
|
||||
time_t current_time;
|
||||
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_CONFIG_NAME, weechat_home);
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
|
||||
@ -1069,8 +1069,8 @@ config_write (char *config_name)
|
||||
else
|
||||
{
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_CONFIG_NAME, weechat_home);
|
||||
}
|
||||
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
|
@ -268,8 +268,8 @@ t_irc_command irc_commands[] =
|
||||
{ "301", N_("away message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_301 },
|
||||
{ "302", N_("userhost"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_302 },
|
||||
{ "303", N_("ison"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_303 },
|
||||
{ "305", N_("unaway"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_reply },
|
||||
{ "306", N_("now away"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_reply },
|
||||
{ "305", N_("unaway"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_305 },
|
||||
{ "306", N_("now away"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_306 },
|
||||
{ "311", N_("whois (user)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_311 },
|
||||
{ "312", N_("whois (server)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_312 },
|
||||
{ "313", N_("whois (operator)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_313 },
|
||||
|
@ -1333,6 +1333,56 @@ irc_cmd_recv_303 (t_irc_server *server, char *host, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_305: '305' command (unaway)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_305 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
arguments = strchr (arguments, ' ');
|
||||
if (arguments)
|
||||
{
|
||||
while (arguments[0] == ' ')
|
||||
arguments++;
|
||||
if (arguments[0] == ':')
|
||||
arguments++;
|
||||
irc_display_prefix (server->window, PREFIX_SERVER);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, "%s\n", arguments);
|
||||
}
|
||||
server->is_away = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_306: '306' command (now away)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_306 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
arguments = strchr (arguments, ' ');
|
||||
if (arguments)
|
||||
{
|
||||
while (arguments[0] == ' ')
|
||||
arguments++;
|
||||
if (arguments[0] == ':')
|
||||
arguments++;
|
||||
irc_display_prefix (server->window, PREFIX_SERVER);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, "%s\n", arguments);
|
||||
}
|
||||
server->is_away = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_311: '311' command (whois, user)
|
||||
*/
|
||||
|
@ -467,7 +467,7 @@ server_recv (t_irc_server *server)
|
||||
}
|
||||
|
||||
/*
|
||||
* server_connect: connect to an irc server
|
||||
* server_connect: connect to an IRC server
|
||||
*/
|
||||
|
||||
int
|
||||
@ -571,6 +571,27 @@ server_connect (t_irc_server *server)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_auto_connect: auto-connect to servers (called at startup)
|
||||
*/
|
||||
|
||||
void
|
||||
server_auto_connect ()
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
gui_window_new (ptr_server, NULL);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_disconnect: disconnect from an irc server
|
||||
*/
|
||||
|
@ -32,7 +32,7 @@
|
||||
#define PREFIX_PART "<--"
|
||||
#define PREFIX_QUIT "<--"
|
||||
#define PREFIX_ERROR "=!="
|
||||
#define PREFIX_PLUGIN "=P="
|
||||
#define PREFIX_PLUGIN "-P-"
|
||||
|
||||
#define CHANNEL_PREFIX "#&+!"
|
||||
|
||||
@ -152,6 +152,7 @@ extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
extern int server_connect ();
|
||||
extern void server_auto_connect ();
|
||||
extern void server_disconnect (t_irc_server *);
|
||||
extern void server_disconnect_all ();
|
||||
extern t_irc_server *server_search (char *);
|
||||
@ -256,6 +257,8 @@ extern int irc_cmd_recv_004 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_301 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_302 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_303 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_305 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_306 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_311 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_312 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_313 (t_irc_server *, char *, char *);
|
||||
|
@ -57,6 +57,10 @@ static XS (XS_IRC_register)
|
||||
t_plugin_script *ptr_perl_script, *perl_script_found, *new_perl_script;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
version = SvPV (ST (1), integer);
|
||||
shutdown_func = SvPV (ST (2), integer);
|
||||
@ -127,6 +131,9 @@ static XS (XS_IRC_print)
|
||||
char *message;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
for (i = 0; i < items; i++)
|
||||
{
|
||||
message = SvPV (ST (i), integer);
|
||||
@ -144,13 +151,16 @@ static XS (XS_IRC_print)
|
||||
|
||||
static XS (XS_IRC_print_with_channel)
|
||||
{
|
||||
int i, integer;
|
||||
int integer;
|
||||
char *message, *channel, *server = NULL;
|
||||
t_gui_window *ptr_window;
|
||||
t_irc_server *ptr_server;
|
||||
t_irc_channel *ptr_channel;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
/* server specified */
|
||||
if (items > 2)
|
||||
{
|
||||
@ -204,6 +214,10 @@ static XS (XS_IRC_add_message_handler)
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
function = SvPV (ST (1), integer);
|
||||
plugin_handler_add (&plugin_msg_handlers, &last_plugin_msg_handler,
|
||||
@ -222,6 +236,10 @@ static XS (XS_IRC_add_command_handler)
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
function = SvPV (ST (1), integer);
|
||||
if (!index_command_search (name))
|
||||
@ -238,6 +256,62 @@ static XS (XS_IRC_add_command_handler)
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::get_info: get various infos
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_get_info)
|
||||
{
|
||||
char *arg, *info = NULL;
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
arg = SvPV (ST (0), integer);
|
||||
|
||||
if (arg)
|
||||
{
|
||||
|
||||
if ( (strcasecmp (arg, "0") == 0) || (strcasecmp (arg, "version") == 0) )
|
||||
{
|
||||
info = PACKAGE_STRING;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) )
|
||||
{
|
||||
info = current_irc_server->nick;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "2") == 0) || (strcasecmp (arg, "channel") == 0) )
|
||||
{
|
||||
if (WIN_IS_CHANNEL (gui_current_window))
|
||||
info = CHANNEL (gui_current_window)->name;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) )
|
||||
{
|
||||
info = current_irc_server->name;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "4") == 0) || (strcasecmp (arg, "weechatdir") == 0) )
|
||||
{
|
||||
info = weechat_home;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) )
|
||||
{
|
||||
XST_mIV (0, current_irc_server->is_away);
|
||||
XSRETURN (1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info)
|
||||
XST_mPV (0, info);
|
||||
else
|
||||
XST_mPV (0, "");
|
||||
}
|
||||
|
||||
XSRETURN (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* xs_init: initialize subroutines
|
||||
*/
|
||||
@ -251,6 +325,7 @@ xs_init (pTHX)
|
||||
newXS ("IRC::print_with_channel", XS_IRC_print_with_channel, "IRC");
|
||||
newXS ("IRC::add_message_handler", XS_IRC_add_message_handler, "IRC");
|
||||
newXS ("IRC::add_command_handler", XS_IRC_add_command_handler, "IRC");
|
||||
newXS ("IRC::get_info", XS_IRC_get_info, "IRC");
|
||||
}
|
||||
|
||||
/*
|
||||
@ -462,10 +537,19 @@ wee_perl_end ()
|
||||
/* unload all scripts */
|
||||
wee_perl_unload_all ();
|
||||
|
||||
/* free all handlers */
|
||||
plugin_handler_free_all_type (&plugin_msg_handlers,
|
||||
&last_plugin_msg_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
plugin_handler_free_all_type (&plugin_cmd_handlers,
|
||||
&last_plugin_cmd_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
|
||||
/* free Perl interpreter */
|
||||
if (my_perl)
|
||||
{
|
||||
perl_destruct (my_perl);
|
||||
perl_free (my_perl);
|
||||
my_perl = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -283,14 +283,9 @@ plugin_unload (int plugin_type, char *scriptname)
|
||||
{
|
||||
case PLUGIN_TYPE_PERL:
|
||||
#ifdef PLUGIN_PERL
|
||||
wee_perl_unload_all ();
|
||||
/* impossible to unload only one Perl script */
|
||||
plugin_handler_free_all_type (&plugin_msg_handlers,
|
||||
&last_plugin_msg_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
plugin_handler_free_all_type (&plugin_cmd_handlers,
|
||||
&last_plugin_cmd_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
/* unload one Perl script is not allowed */
|
||||
wee_perl_end ();
|
||||
wee_perl_init ();
|
||||
#endif
|
||||
break;
|
||||
case PLUGIN_TYPE_PYTHON:
|
||||
|
@ -66,7 +66,9 @@ extern void plugin_load (int, char *);
|
||||
extern void plugin_unload (int, char *);
|
||||
extern t_plugin_handler *plugin_handler_search (t_plugin_handler *, char *);
|
||||
extern void plugin_handler_add (t_plugin_handler **, t_plugin_handler **,
|
||||
int, char *, char *);
|
||||
int, char *, char *);
|
||||
extern void plugin_handler_free_all_type (t_plugin_handler **,
|
||||
t_plugin_handler **, int);
|
||||
extern void plugin_event_msg (char *, char *);
|
||||
extern int plugin_exec_command (char *, char *);
|
||||
extern void plugin_end ();
|
||||
|
@ -60,14 +60,14 @@
|
||||
#include "../plugins/plugins.h"
|
||||
|
||||
|
||||
/* char *display_name; */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log */
|
||||
int quit_weechat; /* = 1 if quit request from user... why ? :'( */
|
||||
char *weechat_home; /* WeeChat home dir. (example: /home/toto/.weechat) */
|
||||
FILE *log_file; /* WeeChat log file (~/.weechat/weechat.log */
|
||||
|
||||
|
||||
/*
|
||||
* my_sigint: SIGINT handler, do nothing (just ignore this signal)
|
||||
* Prevents user for exiting with Ctrl-C
|
||||
*/
|
||||
|
||||
void
|
||||
@ -126,19 +126,6 @@ wee_parse_args (int argc, char *argv[])
|
||||
printf ("\n%s%s", WEE_LICENSE);
|
||||
exit (0);
|
||||
}
|
||||
/*else if ((strcmp (argv[i], "-d") == 0)
|
||||
|| (strcmp (argv[i], "--display") == 0))
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
fprintf (stderr,
|
||||
_("%s no display specified (parameter '%s'), ignored\n"),
|
||||
WEECHAT_WARNING, argv[i]);
|
||||
else
|
||||
{
|
||||
display_name = argv[i + 1];
|
||||
i++;
|
||||
}
|
||||
}*/
|
||||
else if ((strcmp (argv[i], "-v") == 0)
|
||||
|| (strcmp (argv[i], "--version") == 0))
|
||||
{
|
||||
@ -161,24 +148,25 @@ wee_parse_args (int argc, char *argv[])
|
||||
void
|
||||
wee_create_home_dir ()
|
||||
{
|
||||
char *weechat_home_dir;
|
||||
int return_code;
|
||||
|
||||
weechat_home_dir =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (weechat_home_dir, "%s/.weechat", getenv ("HOME"));
|
||||
return_code = mkdir (weechat_home_dir, 0755);
|
||||
/* TODO: rewrite this code for Windows version */
|
||||
weechat_home =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 10) * sizeof (char));
|
||||
sprintf (weechat_home, "%s/.weechat", getenv ("HOME"));
|
||||
|
||||
/* try to create home directory */
|
||||
return_code = mkdir (weechat_home, 0755);
|
||||
if (return_code < 0)
|
||||
{
|
||||
/* exit if error (except if directory already exists) */
|
||||
if (errno != EEXIST)
|
||||
{
|
||||
fprintf (stderr, _("%s cannot create directory \"%s\"\n"),
|
||||
WEECHAT_ERROR, weechat_home_dir);
|
||||
free (weechat_home_dir);
|
||||
WEECHAT_ERROR, weechat_home);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
free (weechat_home_dir);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -206,8 +194,8 @@ wee_init_log ()
|
||||
char *filename;
|
||||
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_LOG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_LOG_NAME, weechat_home);
|
||||
if ((log_file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
free (filename);
|
||||
@ -219,76 +207,12 @@ wee_init_log ()
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
* weechat_welcome_message: display WeeChat welcome message - yeah!
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
weechat_welcome_message ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
/* ignore SIGINT signal (for example Ctrl-C) */
|
||||
signal (SIGINT, my_sigint);
|
||||
|
||||
/* pre-initiliaze interface */
|
||||
gui_pre_init (&argc, &argv);
|
||||
|
||||
/* initialize variables */
|
||||
wee_init_vars ();
|
||||
|
||||
/* parse command line args */
|
||||
wee_parse_args (argc, argv);
|
||||
|
||||
/* create weechat home directory */
|
||||
wee_create_home_dir ();
|
||||
|
||||
/* init log file */
|
||||
wee_init_log ();
|
||||
|
||||
/* build commands index (sorted), for completion */
|
||||
index_command_build ();
|
||||
|
||||
/* read configuration */
|
||||
switch (config_read ())
|
||||
{
|
||||
case 0: /* success */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
config_create_default ();
|
||||
config_read ();
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* init gui */
|
||||
gui_init ();
|
||||
|
||||
/* init plugin interface(s) */
|
||||
plugin_init ();
|
||||
|
||||
/* Welcome message - yeah! */
|
||||
if (cfg_look_startup_logo)
|
||||
{
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
@ -320,34 +244,67 @@ main (int argc, char *argv[])
|
||||
cfg_look_startup_version)
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* wee_shutdown: shutdown WeeChat
|
||||
*/
|
||||
|
||||
void
|
||||
wee_shutdown ()
|
||||
{
|
||||
server_free_all ();
|
||||
gui_end ();
|
||||
if (log_file)
|
||||
fclose (log_file);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* main: WeeChat startup
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale (LC_ALL, ""); /* initialize gettext */
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
#endif
|
||||
|
||||
/* connect to all servers (with autoconnect flag) */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
signal (SIGINT, my_sigint); /* ignore SIGINT signal */
|
||||
gui_pre_init (&argc, &argv); /* pre-initiliaze interface */
|
||||
wee_init_vars (); /* initialize some variables */
|
||||
wee_parse_args (argc, argv); /* parse command line args */
|
||||
wee_create_home_dir (); /* create weechat home directory */
|
||||
wee_init_log (); /* init log file */
|
||||
index_command_build (); /* build commands index for completion */
|
||||
|
||||
switch (config_read ()) /* read configuration */
|
||||
{
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
gui_window_new (ptr_server, NULL);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
case 0: /* config file OK */
|
||||
break;
|
||||
case -1: /* config file not found */
|
||||
config_create_default ();
|
||||
config_read ();
|
||||
break;
|
||||
default: /* other error (fatal) */
|
||||
server_free_all ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* WeeChat main loop */
|
||||
gui_main_loop ();
|
||||
gui_init (); /* init WeeChat interface */
|
||||
plugin_init (); /* init plugin interface(s) */
|
||||
weechat_welcome_message (); /* display WeeChat welcome message */
|
||||
server_auto_connect (); /* auto-connect to servers */
|
||||
|
||||
/* end plugin interface(s) */
|
||||
plugin_end ();
|
||||
gui_main_loop (); /* WeeChat main loop */
|
||||
|
||||
/* disconnect from all servers */
|
||||
server_disconnect_all ();
|
||||
|
||||
/* save config file */
|
||||
config_write (NULL);
|
||||
plugin_end (); /* end plugin interface(s) */
|
||||
server_disconnect_all (); /* disconnect from all servers */
|
||||
config_write (NULL); /* save config file */
|
||||
wee_shutdown (); /* quit WeeChat (oh no, why?) */
|
||||
|
||||
/* program ending */
|
||||
wee_shutdown ();
|
||||
|
||||
/* make gcc happy (statement never executed) */
|
||||
return 0;
|
||||
return 0; /* make gcc happy (never executed) */
|
||||
}
|
||||
|
@ -86,16 +86,9 @@
|
||||
" -l, --license display WeeChat license\n" \
|
||||
" -v, --version display WeeChat version\n\n"
|
||||
|
||||
/* " -d, --display choose X display\n" \*/
|
||||
|
||||
|
||||
/*#define DEFAULT_DISPLAY ":0" */
|
||||
|
||||
|
||||
/*extern char *display_name; */
|
||||
int quit_weechat;
|
||||
|
||||
extern int quit_weechat;
|
||||
extern char *weechat_home;
|
||||
|
||||
extern void wee_log_printf (char *, ...);
|
||||
extern void wee_shutdown ();
|
||||
|
@ -721,8 +721,8 @@ config_read ()
|
||||
char line[1024], *ptr_line, *pos, *pos2;
|
||||
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_CONFIG_NAME, weechat_home);
|
||||
if ((file = fopen (filename, "rt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s config file \"%s\" not found.\n"),
|
||||
@ -937,8 +937,8 @@ config_create_default ()
|
||||
time_t current_time;
|
||||
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_CONFIG_NAME, weechat_home);
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
{
|
||||
gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
|
||||
@ -1069,8 +1069,8 @@ config_write (char *config_name)
|
||||
else
|
||||
{
|
||||
filename =
|
||||
(char *) malloc ((strlen (getenv ("HOME")) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/.weechat/" WEECHAT_CONFIG_NAME, getenv ("HOME"));
|
||||
(char *) malloc ((strlen (weechat_home) + 64) * sizeof (char));
|
||||
sprintf (filename, "%s/" WEECHAT_CONFIG_NAME, weechat_home);
|
||||
}
|
||||
|
||||
if ((file = fopen (filename, "wt")) == NULL)
|
||||
|
@ -268,8 +268,8 @@ t_irc_command irc_commands[] =
|
||||
{ "301", N_("away message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_301 },
|
||||
{ "302", N_("userhost"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_302 },
|
||||
{ "303", N_("ison"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_303 },
|
||||
{ "305", N_("unaway"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_reply },
|
||||
{ "306", N_("now away"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_reply },
|
||||
{ "305", N_("unaway"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_305 },
|
||||
{ "306", N_("now away"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_306 },
|
||||
{ "311", N_("whois (user)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_311 },
|
||||
{ "312", N_("whois (server)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_312 },
|
||||
{ "313", N_("whois (operator)"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_313 },
|
||||
|
@ -1333,6 +1333,56 @@ irc_cmd_recv_303 (t_irc_server *server, char *host, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_305: '305' command (unaway)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_305 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
arguments = strchr (arguments, ' ');
|
||||
if (arguments)
|
||||
{
|
||||
while (arguments[0] == ' ')
|
||||
arguments++;
|
||||
if (arguments[0] == ':')
|
||||
arguments++;
|
||||
irc_display_prefix (server->window, PREFIX_SERVER);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, "%s\n", arguments);
|
||||
}
|
||||
server->is_away = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_306: '306' command (now away)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_306 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
arguments = strchr (arguments, ' ');
|
||||
if (arguments)
|
||||
{
|
||||
while (arguments[0] == ' ')
|
||||
arguments++;
|
||||
if (arguments[0] == ':')
|
||||
arguments++;
|
||||
irc_display_prefix (server->window, PREFIX_SERVER);
|
||||
gui_printf_color (server->window,
|
||||
COLOR_WIN_CHAT, "%s\n", arguments);
|
||||
}
|
||||
server->is_away = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_311: '311' command (whois, user)
|
||||
*/
|
||||
|
@ -467,7 +467,7 @@ server_recv (t_irc_server *server)
|
||||
}
|
||||
|
||||
/*
|
||||
* server_connect: connect to an irc server
|
||||
* server_connect: connect to an IRC server
|
||||
*/
|
||||
|
||||
int
|
||||
@ -571,6 +571,27 @@ server_connect (t_irc_server *server)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_auto_connect: auto-connect to servers (called at startup)
|
||||
*/
|
||||
|
||||
void
|
||||
server_auto_connect ()
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
gui_window_new (ptr_server, NULL);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_disconnect: disconnect from an irc server
|
||||
*/
|
||||
|
@ -32,7 +32,7 @@
|
||||
#define PREFIX_PART "<--"
|
||||
#define PREFIX_QUIT "<--"
|
||||
#define PREFIX_ERROR "=!="
|
||||
#define PREFIX_PLUGIN "=P="
|
||||
#define PREFIX_PLUGIN "-P-"
|
||||
|
||||
#define CHANNEL_PREFIX "#&+!"
|
||||
|
||||
@ -152,6 +152,7 @@ extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
extern int server_connect ();
|
||||
extern void server_auto_connect ();
|
||||
extern void server_disconnect (t_irc_server *);
|
||||
extern void server_disconnect_all ();
|
||||
extern t_irc_server *server_search (char *);
|
||||
@ -256,6 +257,8 @@ extern int irc_cmd_recv_004 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_301 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_302 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_303 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_305 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_306 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_311 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_312 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_313 (t_irc_server *, char *, char *);
|
||||
|
@ -57,6 +57,10 @@ static XS (XS_IRC_register)
|
||||
t_plugin_script *ptr_perl_script, *perl_script_found, *new_perl_script;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
version = SvPV (ST (1), integer);
|
||||
shutdown_func = SvPV (ST (2), integer);
|
||||
@ -127,6 +131,9 @@ static XS (XS_IRC_print)
|
||||
char *message;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
for (i = 0; i < items; i++)
|
||||
{
|
||||
message = SvPV (ST (i), integer);
|
||||
@ -144,13 +151,16 @@ static XS (XS_IRC_print)
|
||||
|
||||
static XS (XS_IRC_print_with_channel)
|
||||
{
|
||||
int i, integer;
|
||||
int integer;
|
||||
char *message, *channel, *server = NULL;
|
||||
t_gui_window *ptr_window;
|
||||
t_irc_server *ptr_server;
|
||||
t_irc_channel *ptr_channel;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
/* server specified */
|
||||
if (items > 2)
|
||||
{
|
||||
@ -204,6 +214,10 @@ static XS (XS_IRC_add_message_handler)
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
function = SvPV (ST (1), integer);
|
||||
plugin_handler_add (&plugin_msg_handlers, &last_plugin_msg_handler,
|
||||
@ -222,6 +236,10 @@ static XS (XS_IRC_add_command_handler)
|
||||
t_plugin_handler *ptr_plugin_handler;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
name = SvPV (ST (0), integer);
|
||||
function = SvPV (ST (1), integer);
|
||||
if (!index_command_search (name))
|
||||
@ -238,6 +256,62 @@ static XS (XS_IRC_add_command_handler)
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
|
||||
/*
|
||||
* IRC::get_info: get various infos
|
||||
*/
|
||||
|
||||
static XS (XS_IRC_get_info)
|
||||
{
|
||||
char *arg, *info = NULL;
|
||||
int integer;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) items;
|
||||
(void) cv;
|
||||
|
||||
arg = SvPV (ST (0), integer);
|
||||
|
||||
if (arg)
|
||||
{
|
||||
|
||||
if ( (strcasecmp (arg, "0") == 0) || (strcasecmp (arg, "version") == 0) )
|
||||
{
|
||||
info = PACKAGE_STRING;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) )
|
||||
{
|
||||
info = current_irc_server->nick;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "2") == 0) || (strcasecmp (arg, "channel") == 0) )
|
||||
{
|
||||
if (WIN_IS_CHANNEL (gui_current_window))
|
||||
info = CHANNEL (gui_current_window)->name;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) )
|
||||
{
|
||||
info = current_irc_server->name;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "4") == 0) || (strcasecmp (arg, "weechatdir") == 0) )
|
||||
{
|
||||
info = weechat_home;
|
||||
}
|
||||
else if ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) )
|
||||
{
|
||||
XST_mIV (0, current_irc_server->is_away);
|
||||
XSRETURN (1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info)
|
||||
XST_mPV (0, info);
|
||||
else
|
||||
XST_mPV (0, "");
|
||||
}
|
||||
|
||||
XSRETURN (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* xs_init: initialize subroutines
|
||||
*/
|
||||
@ -251,6 +325,7 @@ xs_init (pTHX)
|
||||
newXS ("IRC::print_with_channel", XS_IRC_print_with_channel, "IRC");
|
||||
newXS ("IRC::add_message_handler", XS_IRC_add_message_handler, "IRC");
|
||||
newXS ("IRC::add_command_handler", XS_IRC_add_command_handler, "IRC");
|
||||
newXS ("IRC::get_info", XS_IRC_get_info, "IRC");
|
||||
}
|
||||
|
||||
/*
|
||||
@ -462,10 +537,19 @@ wee_perl_end ()
|
||||
/* unload all scripts */
|
||||
wee_perl_unload_all ();
|
||||
|
||||
/* free all handlers */
|
||||
plugin_handler_free_all_type (&plugin_msg_handlers,
|
||||
&last_plugin_msg_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
plugin_handler_free_all_type (&plugin_cmd_handlers,
|
||||
&last_plugin_cmd_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
|
||||
/* free Perl interpreter */
|
||||
if (my_perl)
|
||||
{
|
||||
perl_destruct (my_perl);
|
||||
perl_free (my_perl);
|
||||
my_perl = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -283,14 +283,9 @@ plugin_unload (int plugin_type, char *scriptname)
|
||||
{
|
||||
case PLUGIN_TYPE_PERL:
|
||||
#ifdef PLUGIN_PERL
|
||||
wee_perl_unload_all ();
|
||||
/* impossible to unload only one Perl script */
|
||||
plugin_handler_free_all_type (&plugin_msg_handlers,
|
||||
&last_plugin_msg_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
plugin_handler_free_all_type (&plugin_cmd_handlers,
|
||||
&last_plugin_cmd_handler,
|
||||
PLUGIN_TYPE_PERL);
|
||||
/* unload one Perl script is not allowed */
|
||||
wee_perl_end ();
|
||||
wee_perl_init ();
|
||||
#endif
|
||||
break;
|
||||
case PLUGIN_TYPE_PYTHON:
|
||||
|
@ -66,7 +66,9 @@ extern void plugin_load (int, char *);
|
||||
extern void plugin_unload (int, char *);
|
||||
extern t_plugin_handler *plugin_handler_search (t_plugin_handler *, char *);
|
||||
extern void plugin_handler_add (t_plugin_handler **, t_plugin_handler **,
|
||||
int, char *, char *);
|
||||
int, char *, char *);
|
||||
extern void plugin_handler_free_all_type (t_plugin_handler **,
|
||||
t_plugin_handler **, int);
|
||||
extern void plugin_event_msg (char *, char *);
|
||||
extern int plugin_exec_command (char *, char *);
|
||||
extern void plugin_end ();
|
||||
|
Loading…
x
Reference in New Issue
Block a user