int weechat_tcl_load (const char *filename) { int i; Tcl_Interp *interp; struct stat buf; if (stat (filename, &buf) != 0) { weechat_printf (NULL, weechat_gettext ("%s%s: script \"%s\" not found"), weechat_prefix ("error"), TCL_PLUGIN_NAME, filename); return 0; } if ((weechat_tcl_plugin->debug >= 2) || !tcl_quiet) { weechat_printf (NULL, weechat_gettext ("%s: loading script \"%s\""), TCL_PLUGIN_NAME, filename); } tcl_current_script = NULL; tcl_registered_script = NULL; if (!(interp = Tcl_CreateInterp ())) { weechat_printf (NULL, weechat_gettext ("%s%s: unable to create new " "interpreter"), weechat_prefix ("error"), TCL_PLUGIN_NAME); return 0; } tcl_current_script_filename = filename; weechat_tcl_api_init (interp); if (Tcl_EvalFile (interp, filename) != TCL_OK) { weechat_printf (NULL, weechat_gettext ("%s%s: error occurred while " "parsing file \"%s\": %s"), weechat_prefix ("error"), TCL_PLUGIN_NAME, filename, Tcl_GetStringFromObj (Tcl_GetObjResult (interp), &i)); /* this OK, maybe "register" was called, so not return */ /* return 0; */ } if (!tcl_registered_script) { weechat_printf (NULL, weechat_gettext ("%s%s: function \"register\" not " "found (or failed) in file \"%s\""), weechat_prefix ("error"), TCL_PLUGIN_NAME, filename); Tcl_DeleteInterp (interp); return 0; } tcl_current_script = tcl_registered_script; /* * set input/close callbacks for buffers created by this script * (to restore callbacks after upgrade) */ plugin_script_set_buffer_callbacks (weechat_tcl_plugin, tcl_scripts, tcl_current_script, &weechat_tcl_api_buffer_input_data_cb, &weechat_tcl_api_buffer_close_cb); weechat_hook_signal_send ("tcl_script_loaded", WEECHAT_HOOK_SIGNAL_STRING, tcl_current_script->filename); return 1; }
struct t_plugin_script * weechat_tcl_load (const char *filename, const char *code) { int i; Tcl_Interp *interp; struct stat buf; /* make C compiler happy */ /* TODO: implement load of code in TCL */ (void) code; if (stat (filename, &buf) != 0) { weechat_printf (NULL, weechat_gettext ("%s%s: script \"%s\" not found"), weechat_prefix ("error"), TCL_PLUGIN_NAME, filename); return NULL; } if ((weechat_tcl_plugin->debug >= 2) || !tcl_quiet) { weechat_printf (NULL, weechat_gettext ("%s: loading script \"%s\""), TCL_PLUGIN_NAME, filename); } tcl_current_script = NULL; tcl_registered_script = NULL; if (!(interp = Tcl_CreateInterp ())) { weechat_printf (NULL, weechat_gettext ("%s%s: unable to create new " "interpreter"), weechat_prefix ("error"), TCL_PLUGIN_NAME); return NULL; } tcl_current_script_filename = filename; weechat_tcl_api_init (interp); if (Tcl_EvalFile (interp, filename) != TCL_OK) { weechat_printf (NULL, weechat_gettext ("%s%s: error occurred while " "parsing file \"%s\": %s"), weechat_prefix ("error"), TCL_PLUGIN_NAME, filename, Tcl_GetStringFromObj (Tcl_GetObjResult (interp), &i)); /* if script was registered, remove it from list */ if (tcl_current_script) { plugin_script_remove (weechat_tcl_plugin, &tcl_scripts, &last_tcl_script, tcl_current_script); tcl_current_script = NULL; } return NULL; } if (!tcl_registered_script) { weechat_printf (NULL, weechat_gettext ("%s%s: function \"register\" not " "found (or failed) in file \"%s\""), weechat_prefix ("error"), TCL_PLUGIN_NAME, filename); Tcl_DeleteInterp (interp); return NULL; } tcl_current_script = tcl_registered_script; /* * set input/close callbacks for buffers created by this script * (to restore callbacks after upgrade) */ plugin_script_set_buffer_callbacks (weechat_tcl_plugin, tcl_scripts, tcl_current_script, &weechat_tcl_api_buffer_input_data_cb, &weechat_tcl_api_buffer_close_cb); (void) weechat_hook_signal_send ("tcl_script_loaded", WEECHAT_HOOK_SIGNAL_STRING, tcl_current_script->filename); return tcl_current_script; }