void exec_config_change_command_default_options (void *data, struct t_config_option *option) { /* make C compiler happy */ (void) data; (void) option; if (exec_config_cmd_options) dogechat_string_free_split (exec_config_cmd_options); exec_config_cmd_options = dogechat_string_split ( dogechat_config_string (exec_config_command_default_options), " ", 0, 0, &exec_config_cmd_num_options); }
int script_completion_tags_cb (void *data, const char *completion_item, struct t_gui_buffer *buffer, struct t_gui_completion *completion) { struct t_script_repo *ptr_script; char **list_tags; int num_tags, i; /* make C compiler happy */ (void) data; (void) completion_item; (void) buffer; for (ptr_script = scripts_repo; ptr_script; ptr_script = ptr_script->next_script) { if (ptr_script->tags) { list_tags = dogechat_string_split (ptr_script->tags, ",", 0, 0, &num_tags); if (list_tags) { for (i = 0; i < num_tags; i++) { dogechat_hook_completion_list_add (completion, list_tags[i], 0, DOGECHAT_LIST_POS_SORT); } dogechat_string_free_split (list_tags); } } } return DOGECHAT_RC_OK; }
int script_action_show_diff_process_cb (void *data, const char *command, int return_code, const char *out, const char *err) { char **lines, *filename; const char *color; int num_lines, i, diff_color; /* make C compiler happy */ (void) command; if (script_buffer && script_buffer_detail_script && ((return_code == DOGECHAT_HOOK_PROCESS_RUNNING) || (return_code >= 0))) { if (out) { lines = dogechat_string_split (out, "\n", 0, 0, &num_lines); if (lines) { diff_color = dogechat_config_boolean (script_config_look_diff_color); for (i = 0; i < num_lines; i++) { color = NULL; if (diff_color) { switch (lines[i][0]) { case '-': case '<': color = dogechat_color ("red"); break; case '+': case '>': color = dogechat_color ("green"); break; case '@': color = dogechat_color ("cyan"); break; } } dogechat_printf_y (script_buffer, script_buffer_detail_script_last_line++, "%s%s", (color) ? color : "", lines[i]); } dogechat_string_free_split (lines); } } else if (err) { lines = dogechat_string_split (err, "\n", 0, 0, &num_lines); if (lines) { for (i = 0; i < num_lines; i++) { dogechat_printf_y (script_buffer, script_buffer_detail_script_last_line++, "%s", lines[i]); } dogechat_string_free_split (lines); } } if (return_code >= 0) { dogechat_printf_y (script_buffer, script_buffer_detail_script_last_line++, "%s----------------------------------------" "----------------------------------------", dogechat_color ("magenta")); } } if ((return_code == DOGECHAT_HOOK_PROCESS_ERROR) || (return_code >= 0)) { /* last call to this callback: delete temporary file */ filename = (char *)data; unlink (filename); free (filename); } return DOGECHAT_RC_OK; }
int script_action_run () { char **actions, **argv, **argv_eol, *ptr_action; int num_actions, argc, i, j, quiet, script_found; struct t_script_repo *ptr_script; if (!script_actions) return 0; script_get_loaded_plugins (); actions = dogechat_string_split (script_actions, "\n", 0, 0, &num_actions); if (actions) { for (i = 0; i < num_actions; i++) { quiet = 0; ptr_action = actions[i]; if (ptr_action[0] == '-') { /* * if action starts with options (like "-q"), * read and skip them */ ptr_action++; while (ptr_action[0] && (ptr_action[0] != ' ')) { switch (ptr_action[0]) { case 'q': /* quiet */ quiet = 1; break; } ptr_action++; } while (ptr_action[0] == ' ') { ptr_action++; } } argv = dogechat_string_split (ptr_action, " ", 0, 0, &argc); argv_eol = dogechat_string_split (ptr_action, " ", 1, 0, &argc); if (argv && argv_eol) { if (dogechat_strcasecmp (argv[0], "buffer") == 0) { /* open buffer with list of scripts */ if (!script_buffer) { script_buffer_open (); script_buffer_refresh (1); } dogechat_buffer_set (script_buffer, "display", "1"); } else if (dogechat_strcasecmp (argv[0], "list") == 0) { if (argc > 1) { if (dogechat_strcasecmp (argv[1], "-i") == 0) script_action_list_input (0); else if (dogechat_strcasecmp (argv[1], "-o") == 0) script_action_list_input (1); else script_action_list (); } else script_action_list (); } else if (dogechat_strcasecmp (argv[0], "load") == 0) { for (j = 1; j < argc; j++) { script_action_load (argv[j], quiet); } } else if (dogechat_strcasecmp (argv[0], "unload") == 0) { for (j = 1; j < argc; j++) { script_action_unload (argv[j], quiet); } } else if (dogechat_strcasecmp (argv[0], "reload") == 0) { for (j = 1; j < argc; j++) { script_action_reload (argv[j], quiet); } } else if (dogechat_strcasecmp (argv[0], "autoload") == 0) { for (j = 1; j < argc; j++) { script_action_autoload (argv[j], quiet, 1); } } else if (dogechat_strcasecmp (argv[0], "noautoload") == 0) { for (j = 1; j < argc; j++) { script_action_autoload (argv[j], quiet, 0); } } else if (dogechat_strcasecmp (argv[0], "toggleautoload") == 0) { for (j = 1; j < argc; j++) { script_action_autoload (argv[j], quiet, -1); } } else if (dogechat_strcasecmp (argv[0], "install") == 0) { script_found = 0; for (j = 1; j < argc; j++) { ptr_script = script_repo_search_by_name_ext (argv[j]); if (ptr_script) { if (ptr_script->status & SCRIPT_STATUS_HELD) { dogechat_printf (NULL, _("%s: script \"%s\" is held"), SCRIPT_PLUGIN_NAME, argv[j]); } else if ((ptr_script->status & SCRIPT_STATUS_INSTALLED) && !(ptr_script->status & SCRIPT_STATUS_NEW_VERSION)) { dogechat_printf (NULL, _("%s: script \"%s\" is already " "installed and up-to-date"), SCRIPT_PLUGIN_NAME, argv[j]); } else { script_found++; ptr_script->install_order = script_found; } } else { dogechat_printf (NULL, _("%s: script \"%s\" not found"), SCRIPT_PLUGIN_NAME, argv[j]); } } if (script_found) script_action_install (quiet); } else if (dogechat_strcasecmp (argv[0], "remove") == 0) { for (j = 1; j < argc; j++) { script_action_remove (argv[j], quiet); } } else if (dogechat_strcasecmp (argv[0], "installremove") == 0) { script_found = 0; for (j = 1; j < argc; j++) { ptr_script = script_repo_search_by_name_ext (argv[j]); if (ptr_script) { if (ptr_script->status & SCRIPT_STATUS_HELD) { dogechat_printf (NULL, _("%s: script \"%s\" is held"), SCRIPT_PLUGIN_NAME, argv[j]); } else if (ptr_script->status & SCRIPT_STATUS_INSTALLED) { script_action_remove (argv[j], quiet); } else { script_found++; ptr_script->install_order = script_found; } } else { dogechat_printf (NULL, _("%s: script \"%s\" not found"), SCRIPT_PLUGIN_NAME, argv[j]); } } if (script_found) script_action_install (quiet); } else if (dogechat_strcasecmp (argv[0], "hold") == 0) { script_found = 0; for (j = 1; j < argc; j++) { if (script_action_hold (argv[j], quiet)) script_found = 1; } if (script_found) script_buffer_refresh (0); } else if (dogechat_strcasecmp (argv[0], "show") == 0) { if (!script_buffer) script_buffer_open (); script_action_show ((argc >= 2) ? argv[1] : NULL, quiet); dogechat_buffer_set (script_buffer, "display", "1"); } else if (dogechat_strcasecmp (argv[0], "showdiff") == 0) { script_action_showdiff (); } else if (dogechat_strcasecmp (argv[0], "upgrade") == 0) { script_found = 0; for (ptr_script = scripts_repo; ptr_script; ptr_script = ptr_script->next_script) { /* * if script is installed, with new version available, * and not held, then upgrade it */ if ((ptr_script->status & SCRIPT_STATUS_INSTALLED) && (ptr_script->status & SCRIPT_STATUS_NEW_VERSION) && !(ptr_script->status & SCRIPT_STATUS_HELD)) { script_found++; ptr_script->install_order = script_found; } } if (script_found) script_action_install (quiet); else { dogechat_printf (NULL, _("%s: all scripts are up-to-date"), SCRIPT_PLUGIN_NAME); } } } if (argv) dogechat_string_free_split (argv); if (argv_eol) dogechat_string_free_split (argv_eol); } dogechat_string_free_split (actions); } free (script_actions); script_actions = NULL; return 1; }
struct t_infolist * irc_info_infolist_irc_nick_cb (void *data, const char *infolist_name, void *pointer, const char *arguments) { struct t_infolist *ptr_infolist; struct t_irc_server *ptr_server; struct t_irc_channel *ptr_channel; struct t_irc_nick *ptr_nick; char **argv; int argc; /* make C compiler happy */ (void) data; (void) infolist_name; if (!arguments || !arguments[0]) return NULL; ptr_server = NULL; ptr_channel = NULL; argv = dogechat_string_split (arguments, ",", 0, 0, &argc); if (!argv) return NULL; if (argc >= 2) { ptr_server = irc_server_search (argv[0]); if (!ptr_server) { dogechat_string_free_split (argv); return NULL; } ptr_channel = irc_channel_search (ptr_server, argv[1]); if (!ptr_channel) { dogechat_string_free_split (argv); return NULL; } if (!pointer && (argc >= 3)) { pointer = irc_nick_search (ptr_server, ptr_channel, argv[2]); if (!pointer) { dogechat_string_free_split (argv); return NULL; } } } dogechat_string_free_split (argv); if (!ptr_server || !ptr_channel) return NULL; if (pointer && !irc_nick_valid (ptr_channel, pointer)) return NULL; ptr_infolist = dogechat_infolist_new (); if (!ptr_infolist) return NULL; if (pointer) { /* build list with only one nick */ if (!irc_nick_add_to_infolist (ptr_infolist, pointer)) { dogechat_infolist_free (ptr_infolist); return NULL; } return ptr_infolist; } else { /* build list with all nicks of channel */ for (ptr_nick = ptr_channel->nicks; ptr_nick; ptr_nick = ptr_nick->next_nick) { if (!irc_nick_add_to_infolist (ptr_infolist, ptr_nick)) { dogechat_infolist_free (ptr_infolist); return NULL; } } return ptr_infolist; } return NULL; }
char * alias_replace_args (const char *alias_args, const char *user_args) { char **argv, *res; const char *start, *pos; int n, m, argc, length_res, args_count, offset; argv = dogechat_string_split (user_args, " ", 0, 0, &argc); res = NULL; length_res = 0; args_count = 0; start = alias_args; pos = start; while (pos && pos[0]) { offset = 0; if ((pos[0] == '\\') && (pos[1] == '$')) { offset = 2; alias_string_add_word_range (&res, &length_res, start, pos); alias_string_add_word (&res, &length_res, "$"); } else { if (pos[0] == '$') { if (pos[1] == '*') { /* replace with all arguments */ args_count++; offset = 2; if (pos > start) alias_string_add_word_range (&res, &length_res, start, pos); alias_string_add_word (&res, &length_res, user_args); } else if (pos[1] == '~') { /* replace with last argument */ args_count++; offset = 2; if (pos > start) alias_string_add_word_range (&res, &length_res, start, pos); if (argc > 0) alias_string_add_word (&res, &length_res, argv[argc - 1]); } else if ((pos[1] == '-') && ALIAS_IS_ARG_NUMBER(pos[2])) { /* replace with arguments 1 to m */ args_count++; offset = 3; if (pos > start) alias_string_add_word_range (&res, &length_res, start, pos); if (pos[2] - '1' < argc) m = pos[2] - '1'; else m = argc - 1; alias_string_add_arguments (&res, &length_res, argv, 0, m); } else if (ALIAS_IS_ARG_NUMBER(pos[1])) { args_count++; n = pos[1] - '1'; if (pos > start) alias_string_add_word_range (&res, &length_res, start, pos); if (pos[2] != '-') { /* replace with argument n */ offset = 2; if (n < argc) alias_string_add_word (&res, &length_res, argv[n]); } else { if (ALIAS_IS_ARG_NUMBER(pos[3])) { /* replace with arguments n to m */ offset = 4; if (pos[3] - '1' < argc) m = pos[3] - '1'; else m = argc - 1; } else { /* replace with arguments n to last */ offset = 3; m = argc - 1; } if (n < argc) { alias_string_add_arguments (&res, &length_res, argv, n, m); } } } } } if (offset != 0) { pos += offset; start = pos; } else pos++; } if (pos > start) alias_string_add_word (&res, &length_res, start); if (argv) dogechat_string_free_split (argv); return res; }