X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fperl%2Fperl-fe.c;fp=apps%2Firssi%2Fsrc%2Fperl%2Fperl-fe.c;h=0000000000000000000000000000000000000000;hb=72c2de619079457f7a68100eb13385275a424a23;hp=7015cdf2a6b7b76bd83f601609e0434b00aa936d;hpb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;p=runtime.git diff --git a/apps/irssi/src/perl/perl-fe.c b/apps/irssi/src/perl/perl-fe.c deleted file mode 100644 index 7015cdf2..00000000 --- a/apps/irssi/src/perl/perl-fe.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - perl-core.c : irssi - - Copyright (C) 1999-2001 Timo Sirainen - - 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 "module-fe.h" -#include "modules.h" -#include "module-formats.h" -#include "signals.h" -#include "commands.h" -#include "levels.h" - -#include "printtext.h" -#include "completion.h" - -#include "perl-core.h" - -static void cmd_script(const char *data, SERVER_REC *server, void *item) -{ - if (*data == '\0') - data = "list"; - - command_runsub("script", data, server, item); -} - -static void cmd_script_exec(const char *data) -{ - PERL_SCRIPT_REC *script; - GHashTable *optlist; - char *code; - void *free_arg; - - if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | - PARAM_FLAG_GETREST, - "script exec", &optlist, &code)) - return; - - if (*code == '\0') - cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - - script = perl_script_load_data(code); - if (script != NULL && - g_hash_table_lookup(optlist, "permanent") == NULL) { - /* not a permanent script, unload immediately */ - perl_script_unload(script); - } - - - cmd_params_free(free_arg); -} - -static void cmd_script_load(const char *data) -{ - PERL_SCRIPT_REC *script; - char *fname, *path; - void *free_arg; - - if (!cmd_get_params(data, &free_arg, 1, &path)) - return; - - if (*path == '\0') - cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - - fname = perl_script_get_path(path); - if (fname == NULL) { - printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, - TXT_SCRIPT_NOT_FOUND, data); - } else { - script = perl_script_load_file(fname); - if (script != NULL) { - printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, - TXT_SCRIPT_LOADED, - script->name, script->path); - } - g_free(fname); - } - cmd_params_free(free_arg); -} - -static void cmd_script_unload(const char *data) -{ - PERL_SCRIPT_REC *script; - char *name; - void *free_arg; - - if (!cmd_get_params(data, &free_arg, 1, &name)) - return; - - if (*name == '\0') - cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - - script_fix_name(name); - script = perl_script_find(name); - if (script == NULL) { - printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, - TXT_SCRIPT_NOT_LOADED, name); - } else { - printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, - TXT_SCRIPT_UNLOADED, script->name); - perl_script_unload(script); - } - cmd_params_free(free_arg); -} - -static void cmd_script_reset(const char *data) -{ - perl_scripts_deinit(); - perl_scripts_init(); -} - -static void cmd_script_list(void) -{ - GSList *tmp; - GString *data; - - if (perl_scripts == NULL) { - printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, - TXT_NO_SCRIPTS_LOADED); - return; - } - - printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, - TXT_SCRIPT_LIST_HEADER); - - data = g_string_new(NULL); - for (tmp = perl_scripts; tmp != NULL; tmp = tmp->next) { - PERL_SCRIPT_REC *rec = tmp->data; - - if (rec->path != NULL) - g_string_assign(data, rec->path); - else { - g_string_assign(data, rec->data); - if (data->len > 50) { - g_string_truncate(data, 50); - g_string_append(data, " ..."); - } - } - - printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, - TXT_SCRIPT_LIST_LINE, rec->name, data->str); - } - g_string_free(data, TRUE); - - printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, - TXT_SCRIPT_LIST_FOOTER); -} - -static void cmd_load(const char *data, SERVER_REC *server, void *item) -{ - char *rootmodule, *submodule; - void *free_arg; - size_t len; - - if (!cmd_get_params(data, &free_arg, 2 , &rootmodule, &submodule)) - return; - - len = strlen(rootmodule); - if (len > 3 && strcmp(rootmodule + len - 3, ".pl") == 0) { - /* make /LOAD script.pl work as expected */ - signal_stop(); - cmd_script_load(data); - } - - cmd_params_free(free_arg); -} - -static void sig_script_error(PERL_SCRIPT_REC *script, const char *error) -{ - printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, - TXT_SCRIPT_ERROR, script == NULL ? "??" : script->name); - - printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "%[-s]%s", error); -} - -static void sig_complete_load(GList **list, WINDOW_REC *window, - const char *word, const char *line, - int *want_space) -{ - char *user_dir; - - if (*line != '\0') - return; - - /* completing filename parameter for /SCRIPT LOAD */ - user_dir = g_strdup_printf("%s/scripts", get_irssi_dir()); - *list = filename_complete(word, user_dir); - *list = g_list_concat(*list, filename_complete(word, SCRIPTDIR)); - g_free(user_dir); - - if (*list != NULL) { - *want_space = FALSE; - signal_stop(); - } -} - -static GList *script_complete(const char *name) -{ - GSList *tmp; - GList *list; - int len; - - list = NULL; - len = strlen(name); - for (tmp = perl_scripts; tmp != NULL; tmp = tmp->next) { - PERL_SCRIPT_REC *rec = tmp->data; - - if (strncmp(rec->name, name, len) == 0) - list = g_list_append(list, g_strdup(rec->name)); - } - - return list; -} - -static void sig_complete_unload(GList **list, WINDOW_REC *window, - const char *word, const char *line, - int *want_space) -{ - if (*line != '\0') - return; - - /* completing script parameter for /SCRIPT UNLOAD */ - *list = script_complete(word); - if (*list != NULL) - signal_stop(); -} - -void fe_perl_init(void) -{ - theme_register(feperl_formats); - - command_bind("script", NULL, (SIGNAL_FUNC) cmd_script); - command_bind("script exec", NULL, (SIGNAL_FUNC) cmd_script_exec); - command_bind("script load", NULL, (SIGNAL_FUNC) cmd_script_load); - command_bind("script unload", NULL, (SIGNAL_FUNC) cmd_script_unload); - command_bind("script reset", NULL, (SIGNAL_FUNC) cmd_script_reset); - command_bind("script list", NULL, (SIGNAL_FUNC) cmd_script_list); - command_bind("load", NULL, (SIGNAL_FUNC) cmd_load); - command_set_options("script exec", "permanent"); - - signal_add("script error", (SIGNAL_FUNC) sig_script_error); - signal_add("complete command script load", (SIGNAL_FUNC) sig_complete_load); - signal_add("complete command script unload", (SIGNAL_FUNC) sig_complete_unload); - - perl_core_print_script_error(FALSE); - module_register("perl", "fe"); -} - -void fe_perl_deinit(void) -{ - command_unbind("script", (SIGNAL_FUNC) cmd_script); - command_unbind("script exec", (SIGNAL_FUNC) cmd_script_exec); - command_unbind("script load", (SIGNAL_FUNC) cmd_script_load); - command_unbind("script unload", (SIGNAL_FUNC) cmd_script_unload); - command_unbind("script reset", (SIGNAL_FUNC) cmd_script_reset); - command_unbind("script list", (SIGNAL_FUNC) cmd_script_list); - command_unbind("load", (SIGNAL_FUNC) cmd_load); - - signal_remove("script error", (SIGNAL_FUNC) sig_script_error); - signal_remove("complete command script load", (SIGNAL_FUNC) sig_complete_load); - signal_remove("complete command script unload", (SIGNAL_FUNC) sig_complete_unload); - - perl_core_print_script_error(TRUE); -}