libpurple/plugins/tcl/tcl.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 22104
56970903b8e9
child 33575
a53317024f50
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1 /**
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
2 * @file tcl.c Purple Tcl plugin bindings
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
4 * purple
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
5 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
6 * Copyright (C) 2003 Ethan Blanton <eblanton@cs.purdue.edu>
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9775
diff changeset
7 *
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
12 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
17 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 17629
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
21 */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
22
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
23 #include "config.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
24
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
25 #include <tcl.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
26
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
27 #ifdef HAVE_TK
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28 #include <tk.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
29 #endif
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
30
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
31 #include <stdio.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
32 #include <sys/types.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33 #include <sys/stat.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
34 #include <unistd.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
35 #include <string.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
36
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
37 #include "tcl_glib.h"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
38 #include "tcl_purple.h"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
39
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
40 #include "internal.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
41 #include "connection.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
42 #include "plugin.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
43 #include "signals.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
44 #include "debug.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45 #include "util.h"
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9775
diff changeset
46 #include "version.h"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
47
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
48 struct tcl_plugin_data {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
49 PurplePlugin *plugin;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
50 Tcl_Interp *interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
51 };
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
52
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
53 PurpleStringref *PurpleTclRefAccount;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
54 PurpleStringref *PurpleTclRefConnection;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
55 PurpleStringref *PurpleTclRefConversation;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
56 PurpleStringref *PurpleTclRefPointer;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
57 PurpleStringref *PurpleTclRefPlugin;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
58 PurpleStringref *PurpleTclRefPresence;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
59 PurpleStringref *PurpleTclRefStatus;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
60 PurpleStringref *PurpleTclRefStatusAttr;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
61 PurpleStringref *PurpleTclRefStatusType;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
62 PurpleStringref *PurpleTclRefXfer;
20393
6280efb8c658 Another fabulous patch to our Tcl loader from venks on irc.freenode.net.
Ethan Blanton <elb@pidgin.im>
parents: 19859
diff changeset
63 PurpleStringref *PurpleTclRefHandle;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13456
diff changeset
64
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65 static GHashTable *tcl_plugins = NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
66
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
67 PurplePlugin *_tcl_plugin;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
68
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
69 static gboolean tcl_loaded = FALSE;
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
70
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
71 PurplePlugin *tcl_interp_get_plugin(Tcl_Interp *interp)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
72 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
73 struct tcl_plugin_data *data;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
74
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
75 if (tcl_plugins == NULL)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
76 return NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
77
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78 data = g_hash_table_lookup(tcl_plugins, (gpointer)interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
79 return data != NULL ? data->plugin : NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
80 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
82 static int tcl_init_interp(Tcl_Interp *interp)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
83 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
84 char *rcfile;
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9775
diff changeset
85 char init[] =
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
86 "namespace eval ::purple {\n"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
87 " namespace export account buddy connection conversation\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
88 " namespace export core debug notify prefs send_im\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
89 " namespace export signal unload\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90 " namespace eval _callback { }\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
91 "\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
92 " proc conv_send { account who text } {\n"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
93 " set gc [purple::account connection $account]\n"
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
94 " set convo [purple::conversation new $account $who]\n"
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
95 " set myalias [purple::account alias $account]\n"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
96 "\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
97 " if {![string length $myalias]} {\n"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
98 " set myalias [purple::account username $account]\n"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
99 " }\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
100 "\n"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
101 " purple::send_im $gc $who $text\n"
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
102 " purple::conversation write $convo send $myalias $text\n"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
103 " }\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
104 "}\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
105 "\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
106 "proc bgerror { message } {\n"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
107 " global errorInfo\n"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
108 " purple::notify -error \"Tcl Error\" \"Tcl Error: $message\" \"$errorInfo\"\n"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
109 "}\n";
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
110
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
111 if (Tcl_EvalEx(interp, init, -1, TCL_EVAL_GLOBAL) != TCL_OK) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
112 return 1;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
114
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
115 Tcl_SetVar(interp, "argc", "0", TCL_GLOBAL_ONLY);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
116 Tcl_SetVar(interp, "argv0", "purple", TCL_GLOBAL_ONLY);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
117 Tcl_SetVar(interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
118 rcfile = g_strdup_printf("%s" G_DIR_SEPARATOR_S "tclrc", purple_user_dir());
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
119 Tcl_SetVar(interp, "tcl_rcFileName", rcfile, TCL_GLOBAL_ONLY);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
120 g_free(rcfile);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
121
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
122 Tcl_SetVar(interp, "::purple::version", VERSION, TCL_GLOBAL_ONLY);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
123 Tcl_SetVar(interp, "::purple::user_dir", purple_user_dir(), TCL_GLOBAL_ONLY);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
124 #ifdef HAVE_TK
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
125 Tcl_SetVar(interp, "::purple::tk_available", "1", TCL_GLOBAL_ONLY);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
126 #else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
127 Tcl_SetVar(interp, "::purple::tk_available", "0", TCL_GLOBAL_ONLY);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
128 #endif /* HAVE_TK */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
129
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
130 Tcl_CreateObjCommand(interp, "::purple::account", tcl_cmd_account, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
131 Tcl_CreateObjCommand(interp, "::purple::buddy", tcl_cmd_buddy, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
132 Tcl_CreateObjCommand(interp, "::purple::cmd", tcl_cmd_cmd, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
133 Tcl_CreateObjCommand(interp, "::purple::connection", tcl_cmd_connection, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
134 Tcl_CreateObjCommand(interp, "::purple::conversation", tcl_cmd_conversation, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
135 Tcl_CreateObjCommand(interp, "::purple::core", tcl_cmd_core, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
136 Tcl_CreateObjCommand(interp, "::purple::debug", tcl_cmd_debug, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
137 Tcl_CreateObjCommand(interp, "::purple::notify", tcl_cmd_notify, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
138 Tcl_CreateObjCommand(interp, "::purple::plugins", tcl_cmd_plugins, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
139 Tcl_CreateObjCommand(interp, "::purple::prefs", tcl_cmd_prefs, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
140 Tcl_CreateObjCommand(interp, "::purple::presence", tcl_cmd_presence, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
141 Tcl_CreateObjCommand(interp, "::purple::send_im", tcl_cmd_send_im, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
142 Tcl_CreateObjCommand(interp, "::purple::savedstatus", tcl_cmd_savedstatus, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
143 Tcl_CreateObjCommand(interp, "::purple::signal", tcl_cmd_signal, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
144 Tcl_CreateObjCommand(interp, "::purple::status", tcl_cmd_status, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
145 Tcl_CreateObjCommand(interp, "::purple::status_attr", tcl_cmd_status_attr, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
146 Tcl_CreateObjCommand(interp, "::purple::status_type", tcl_cmd_status_type, (ClientData)NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
147 Tcl_CreateObjCommand(interp, "::purple::unload", tcl_cmd_unload, (ClientData)NULL, NULL);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
148
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
149 return 0;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
150 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
151
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 21389
diff changeset
152 static Tcl_Interp *tcl_create_interp(void)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
153 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
154 Tcl_Interp *interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
155
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
156 interp = Tcl_CreateInterp();
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
157 if (Tcl_Init(interp) == TCL_ERROR) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
158 Tcl_DeleteInterp(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
159 return NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
160 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
161
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
162 if (tcl_init_interp(interp)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
163 Tcl_DeleteInterp(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
164 return NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
165 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
166 Tcl_StaticPackage(interp, "purple", tcl_init_interp, NULL);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
167
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
168 return interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
169 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
170
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
171 static gboolean tcl_probe_plugin(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
172 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
173 PurplePluginInfo *info;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
174 Tcl_Interp *interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
175 Tcl_Parse parse;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
176 Tcl_Obj *result, **listitems;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
177 struct stat st;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
178 FILE *fp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
179 char *buf, *cur;
10344
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
180 const char *next;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
181 int len, found = 0, err = 0, nelems;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
182 gboolean status = FALSE;
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10454
diff changeset
183 if ((fp = g_fopen(plugin->path, "r")) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
184 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
185 if (fstat(fileno(fp), &st)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
186 fclose(fp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
187 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
188 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
189 len = st.st_size;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
190
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
191 buf = g_malloc(len + 1);
10344
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
192
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
193 cur = buf;
14008
9ee7a49bf619 [gaim-migrate @ 16486]
Ethan Blanton <elb@pidgin.im>
parents: 13847
diff changeset
194 while (fgets(cur, GPOINTER_TO_INT(buf) - (buf - cur), fp)) {
8989
7410046599fc [gaim-migrate @ 9764]
Daniel Atallah <datallah@pidgin.im>
parents: 8761
diff changeset
195 cur += strlen(cur);
10344
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
196 if (feof(fp))
8989
7410046599fc [gaim-migrate @ 9764]
Daniel Atallah <datallah@pidgin.im>
parents: 8761
diff changeset
197 break;
7410046599fc [gaim-migrate @ 9764]
Daniel Atallah <datallah@pidgin.im>
parents: 8761
diff changeset
198 }
7410046599fc [gaim-migrate @ 9764]
Daniel Atallah <datallah@pidgin.im>
parents: 8761
diff changeset
199
7410046599fc [gaim-migrate @ 9764]
Daniel Atallah <datallah@pidgin.im>
parents: 8761
diff changeset
200 if (ferror(fp)) {
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21106
diff changeset
201 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "error reading %s (%s)\n", plugin->path, g_strerror(errno));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
202 g_free(buf);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
203 fclose(fp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
204 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
205 }
8989
7410046599fc [gaim-migrate @ 9764]
Daniel Atallah <datallah@pidgin.im>
parents: 8761
diff changeset
206
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
207 fclose(fp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
208
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
209 if ((interp = tcl_create_interp()) == NULL) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
210 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
211 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
212
10344
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
213 next = buf;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
214 do {
10344
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
215 if (Tcl_ParseCommand(interp, next, len, 0, &parse) == TCL_ERROR) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
216 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "parse error in %s: %s\n", plugin->path,
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
217 Tcl_GetString(Tcl_GetObjResult(interp)));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
218 err = 1;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
219 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
220 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
221 if (parse.tokenPtr[0].type == TCL_TOKEN_SIMPLE_WORD
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
222 && !strncmp(parse.tokenPtr[0].start, "proc", parse.tokenPtr[0].size)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
223 if (!strncmp(parse.tokenPtr[2].start, "plugin_init", parse.tokenPtr[2].size)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
224 if (Tcl_EvalEx(interp, parse.commandStart, parse.commandSize, TCL_EVAL_GLOBAL) != TCL_OK) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
225 Tcl_FreeParse(&parse);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
226 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
227 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
228 found = 1;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
229 /* We'll continue parsing the file, just in case */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
230 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
231 }
10344
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
232 len -= (parse.commandStart + parse.commandSize) - next;
09d0502090b3 [gaim-migrate @ 11554]
Mark Doliner <markdoliner@pidgin.im>
parents: 10281
diff changeset
233 next = parse.commandStart + parse.commandSize;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
234 Tcl_FreeParse(&parse);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
235 } while (len);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
236
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
237 if (found && !err) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
238 if (Tcl_EvalEx(interp, "plugin_init", -1, TCL_EVAL_GLOBAL) == TCL_OK) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
239 result = Tcl_GetObjResult(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
240 if (Tcl_ListObjGetElements(interp, result, &nelems, &listitems) == TCL_OK) {
12987
b451eafc33bc [gaim-migrate @ 15340]
Etan Reisner <deryni@pidgin.im>
parents: 11256
diff changeset
241 if ((nelems == 6) || (nelems == 7)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
242 info = g_new0(PurplePluginInfo, 1);
8761
2d596fd60ba8 [gaim-migrate @ 9516]
Mark Doliner <markdoliner@pidgin.im>
parents: 8759
diff changeset
243
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
244 info->magic = PURPLE_PLUGIN_MAGIC;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
245 info->major_version = PURPLE_MAJOR_VERSION;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
246 info->minor_version = PURPLE_MINOR_VERSION;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
247 info->type = PURPLE_PLUGIN_STANDARD;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
248 info->dependencies = g_list_append(info->dependencies, "core-tcl");
8761
2d596fd60ba8 [gaim-migrate @ 9516]
Mark Doliner <markdoliner@pidgin.im>
parents: 8759
diff changeset
249
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
250 info->name = g_strdup(Tcl_GetString(listitems[0]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
251 info->version = g_strdup(Tcl_GetString(listitems[1]));
8117
0df7cb80c56c [gaim-migrate @ 8821]
Ethan Blanton <elb@pidgin.im>
parents: 7831
diff changeset
252 info->summary = g_strdup(Tcl_GetString(listitems[2]));
9775
e3a3555b0621 [gaim-migrate @ 10643]
Daniel Atallah <datallah@pidgin.im>
parents: 8993
diff changeset
253 info->description = g_strdup(Tcl_GetString(listitems[3]));
10454
48b2b0d6a957 [gaim-migrate @ 11722]
Balwinder S Dheeman <bsd@rubyforge.org>
parents: 10344
diff changeset
254 info->author = g_strdup(Tcl_GetString(listitems[4]));
8117
0df7cb80c56c [gaim-migrate @ 8821]
Ethan Blanton <elb@pidgin.im>
parents: 7831
diff changeset
255 info->homepage = g_strdup(Tcl_GetString(listitems[5]));
8761
2d596fd60ba8 [gaim-migrate @ 9516]
Mark Doliner <markdoliner@pidgin.im>
parents: 8759
diff changeset
256
12987
b451eafc33bc [gaim-migrate @ 15340]
Etan Reisner <deryni@pidgin.im>
parents: 11256
diff changeset
257 if (nelems == 6)
b451eafc33bc [gaim-migrate @ 15340]
Etan Reisner <deryni@pidgin.im>
parents: 11256
diff changeset
258 info->id = g_strdup_printf("tcl-%s", Tcl_GetString(listitems[0]));
b451eafc33bc [gaim-migrate @ 15340]
Etan Reisner <deryni@pidgin.im>
parents: 11256
diff changeset
259 else if (nelems == 7)
b451eafc33bc [gaim-migrate @ 15340]
Etan Reisner <deryni@pidgin.im>
parents: 11256
diff changeset
260 info->id = g_strdup_printf("tcl-%s", Tcl_GetString(listitems[6]));
b451eafc33bc [gaim-migrate @ 15340]
Etan Reisner <deryni@pidgin.im>
parents: 11256
diff changeset
261
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
262 plugin->info = info;
8761
2d596fd60ba8 [gaim-migrate @ 9516]
Mark Doliner <markdoliner@pidgin.im>
parents: 8759
diff changeset
263
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
264 if (purple_plugin_register(plugin))
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
265 status = TRUE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
266 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
267 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
268 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
269 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
270
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
271 Tcl_DeleteInterp(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
272 g_free(buf);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
273 return status;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
274 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
275
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
276 static gboolean tcl_load_plugin(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
277 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
278 struct tcl_plugin_data *data;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
279 Tcl_Interp *interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
280 Tcl_Obj *result;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
281
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
282 plugin->extra = NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
283
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
284 if ((interp = tcl_create_interp()) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
285 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "Could not initialize Tcl interpreter\n");
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
286 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
287 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
288
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
289 Tcl_SourceRCFile(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
290
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
291 if (Tcl_EvalFile(interp, plugin->path) != TCL_OK) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
292 result = Tcl_GetObjResult(interp);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
293 purple_debug(PURPLE_DEBUG_ERROR, "tcl",
13847
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13827
diff changeset
294 "Error evaluating %s: %s\n", plugin->path,
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13827
diff changeset
295 Tcl_GetString(result));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
296 Tcl_DeleteInterp(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
297 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
298 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
299
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
300 Tcl_Preserve((ClientData)interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
301
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
302 data = g_new0(struct tcl_plugin_data, 1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
303 data->plugin = plugin;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
304 data->interp = interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
305 plugin->extra = data;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
306
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
307 g_hash_table_insert(tcl_plugins, (gpointer)interp, (gpointer)data);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
308
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
309 return TRUE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
310 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
311
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
312 static gboolean tcl_unload_plugin(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
313 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
314 struct tcl_plugin_data *data;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
315
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
316 if (plugin == NULL)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
317 return TRUE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
318
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
319 data = plugin->extra;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
320
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
321 if (data != NULL) {
13439
1ef0c638a216 [gaim-migrate @ 15813]
Richard Laager <rlaager@pidgin.im>
parents: 13199
diff changeset
322 g_hash_table_remove(tcl_plugins, (gpointer)(data->interp));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
323 purple_signals_disconnect_by_handle(data->interp);
13847
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13827
diff changeset
324 tcl_cmd_cleanup(data->interp);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
325 tcl_signal_cleanup(data->interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
326 Tcl_Release((ClientData)data->interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
327 Tcl_DeleteInterp(data->interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
328 g_free(data);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
329 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
330
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
331 return TRUE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
332 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
333
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
334 static void tcl_destroy_plugin(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
335 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
336 if (plugin->info != NULL) {
13199
0c205ab9f4a7 [gaim-migrate @ 15561]
Etan Reisner <deryni@pidgin.im>
parents: 12987
diff changeset
337 g_free(plugin->info->id);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
338 g_free(plugin->info->name);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
339 g_free(plugin->info->version);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
340 g_free(plugin->info->description);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
341 g_free(plugin->info->author);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
342 g_free(plugin->info->homepage);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
343 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
344
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
345 return;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
346 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
347
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
348 static gboolean tcl_load(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
349 {
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
350 if(!tcl_loaded)
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
351 return FALSE;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
352 tcl_glib_init();
13847
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13827
diff changeset
353 tcl_cmd_init();
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
354 tcl_signal_init();
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
355 purple_tcl_ref_init();
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13456
diff changeset
356
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
357 PurpleTclRefAccount = purple_stringref_new("Account");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
358 PurpleTclRefConnection = purple_stringref_new("Connection");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
359 PurpleTclRefConversation = purple_stringref_new("Conversation");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
360 PurpleTclRefPointer = purple_stringref_new("Pointer");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
361 PurpleTclRefPlugin = purple_stringref_new("Plugin");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
362 PurpleTclRefPresence = purple_stringref_new("Presence");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
363 PurpleTclRefStatus = purple_stringref_new("Status");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
364 PurpleTclRefStatusAttr = purple_stringref_new("StatusAttr");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
365 PurpleTclRefStatusType = purple_stringref_new("StatusType");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
366 PurpleTclRefXfer = purple_stringref_new("Xfer");
20393
6280efb8c658 Another fabulous patch to our Tcl loader from venks on irc.freenode.net.
Ethan Blanton <elb@pidgin.im>
parents: 19859
diff changeset
367 PurpleTclRefHandle = purple_stringref_new("Handle");
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13456
diff changeset
368
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
369 tcl_plugins = g_hash_table_new(g_direct_hash, g_direct_equal);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
370
7828
b1fd61487270 [gaim-migrate @ 8480]
Ethan Blanton <elb@pidgin.im>
parents: 6735
diff changeset
371 #ifdef HAVE_TK
b1fd61487270 [gaim-migrate @ 8480]
Ethan Blanton <elb@pidgin.im>
parents: 6735
diff changeset
372 Tcl_StaticPackage(NULL, "Tk", Tk_Init, Tk_SafeInit);
b1fd61487270 [gaim-migrate @ 8480]
Ethan Blanton <elb@pidgin.im>
parents: 6735
diff changeset
373 #endif /* HAVE_TK */
b1fd61487270 [gaim-migrate @ 8480]
Ethan Blanton <elb@pidgin.im>
parents: 6735
diff changeset
374
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
375 return TRUE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
376 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
377
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
378 static gboolean tcl_unload(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
379 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
380 g_hash_table_destroy(tcl_plugins);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
381 tcl_plugins = NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
382
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
383 purple_stringref_unref(PurpleTclRefAccount);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
384 purple_stringref_unref(PurpleTclRefConnection);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
385 purple_stringref_unref(PurpleTclRefConversation);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
386 purple_stringref_unref(PurpleTclRefPointer);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
387 purple_stringref_unref(PurpleTclRefPlugin);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
388 purple_stringref_unref(PurpleTclRefPresence);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
389 purple_stringref_unref(PurpleTclRefStatus);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
390 purple_stringref_unref(PurpleTclRefStatusAttr);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
391 purple_stringref_unref(PurpleTclRefStatusType);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
392 purple_stringref_unref(PurpleTclRefXfer);
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13456
diff changeset
393
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
394 return TRUE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
395 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
396
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
397 static PurplePluginLoaderInfo tcl_loader_info =
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
398 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
399 NULL,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
400 tcl_probe_plugin,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
401 tcl_load_plugin,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
402 tcl_unload_plugin,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
403 tcl_destroy_plugin,
16750
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
404
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
405 /* pidgin */
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
406 NULL,
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
407 NULL,
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
408 NULL,
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
409 NULL
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
410 };
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
411
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
412 static PurplePluginInfo tcl_info =
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
413 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
414 PURPLE_PLUGIN_MAGIC,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
415 PURPLE_MAJOR_VERSION,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
416 PURPLE_MINOR_VERSION,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
417 PURPLE_PLUGIN_LOADER,
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
418 NULL,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
419 0,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
420 NULL,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
421 PURPLE_PRIORITY_DEFAULT,
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
422 "core-tcl",
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
423 N_("Tcl Plugin Loader"),
21106
b85fbef13eed Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 20393
diff changeset
424 DISPLAY_VERSION,
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
425 N_("Provides support for loading Tcl plugins"),
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
426 N_("Provides support for loading Tcl plugins"),
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
427 "Ethan Blanton <eblanton@cs.purdue.edu>",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
428 PURPLE_WEBSITE,
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
429 tcl_load,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
430 tcl_unload,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
431 NULL,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
432 NULL,
8993
41f67bceab41 [gaim-migrate @ 9768]
Luke Schierer <lschiere@pidgin.im>
parents: 8989
diff changeset
433 &tcl_loader_info,
41f67bceab41 [gaim-migrate @ 9768]
Luke Schierer <lschiere@pidgin.im>
parents: 8989
diff changeset
434 NULL,
16750
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
435 NULL,
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
436
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
437 /* padding */
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
438 NULL,
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
439 NULL,
a568944eee52 Updating the loaders since I missed them since I'm not building any of them right now
Gary Kramlich <grim@reaperworld.com>
parents: 15884
diff changeset
440 NULL,
8993
41f67bceab41 [gaim-migrate @ 9768]
Luke Schierer <lschiere@pidgin.im>
parents: 8989
diff changeset
441 NULL
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
442 };
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
443
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
444 #ifdef _WIN32
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
445 typedef Tcl_Interp* (CALLBACK* LPFNTCLCREATEINTERP)(void);
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
446 typedef void (CALLBACK* LPFNTKINIT)(Tcl_Interp*);
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
447
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
448 LPFNTCLCREATEINTERP wtcl_CreateInterp = NULL;
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
449 LPFNTKINIT wtk_Init = NULL;
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
450 #undef Tcl_CreateInterp
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
451 #define Tcl_CreateInterp wtcl_CreateInterp
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
452 #undef Tk_Init
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
453 #define Tk_Init wtk_Init
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
454
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
455 static gboolean tcl_win32_init() {
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
456 const char regkey[] = "SOFTWARE\\ActiveState\\ActiveTcl\\";
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
457 char *version = NULL;
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
458 gboolean retval = FALSE;
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
459
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
460 if ((version = wpurple_read_reg_string(HKEY_LOCAL_MACHINE, regkey, "CurrentVersion"))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
461 || (version = wpurple_read_reg_string(HKEY_CURRENT_USER, regkey, "CurrentVersion"))) {
17629
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
462 char *path = NULL;
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
463 char *regkey2;
17629
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
464 char **tokens;
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
465 int major = 0, minor = 0, micro = 0;
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
466
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
467 tokens = g_strsplit(version, ".", 0);
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
468 if (tokens[0] && tokens[1] && tokens[2]) {
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
469 major = atoi(tokens[0]);
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
470 minor = atoi(tokens[1]);
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
471 micro = atoi(tokens[2]);
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
472 }
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
473 g_strfreev(tokens);
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
474
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
475 regkey2 = g_strdup_printf("%s%s\\", regkey, version);
17629
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
476 if (!(major == 8 && minor == 4 && micro >= 5))
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
477 purple_debug(PURPLE_DEBUG_INFO, "tcl", "Unsupported ActiveTCL version %s found.\n", version);
877897645980 Don't load the tcl loader plugin on Windows unless ActiveTcl 8.4.5 or newer is present. Fixes #538.
Daniel Atallah <datallah@pidgin.im>
parents: 16750
diff changeset
478 else if ((path = wpurple_read_reg_string(HKEY_LOCAL_MACHINE, regkey2, NULL)) || (path = wpurple_read_reg_string(HKEY_CURRENT_USER, regkey2, NULL))) {
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
479 char *tclpath;
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
480 char *tkpath;
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
481
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
482 purple_debug(PURPLE_DEBUG_INFO, "tcl", "Loading ActiveTCL version %s from \"%s\"\n", version, path);
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
483
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
484 tclpath = g_build_filename(path, "bin", "tcl84.dll", NULL);
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
485 tkpath = g_build_filename(path, "bin", "tk84.dll", NULL);
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
486
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
487 if(!(wtcl_CreateInterp = (LPFNTCLCREATEINTERP) wpurple_find_and_loadproc(tclpath, "Tcl_CreateInterp"))) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
488 purple_debug(PURPLE_DEBUG_INFO, "tcl", "tcl_win32_init error loading Tcl_CreateInterp\n");
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
489 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
490 if(!(wtk_Init = (LPFNTKINIT) wpurple_find_and_loadproc(tkpath, "Tk_Init"))) {
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
491 HMODULE mod;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
492 purple_debug(PURPLE_DEBUG_INFO, "tcl", "tcl_win32_init error loading Tk_Init\n");
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
493 if((mod = GetModuleHandle("tcl84.dll")))
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
494 FreeLibrary(mod);
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
495 } else {
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
496 retval = TRUE;
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
497 }
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
498 }
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
499 g_free(tclpath);
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
500 g_free(tkpath);
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
501 }
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
502 g_free(path);
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
503 g_free(regkey2);
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
504 }
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
505
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
506 g_free(version);
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
507
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
508 if (!retval)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
509 purple_debug(PURPLE_DEBUG_INFO, "tcl", _("Unable to detect ActiveTCL installation. If you wish to use TCL plugins, install ActiveTCL from http://www.activestate.com\n"));
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
510
14913
d7070b12458a [gaim-migrate @ 17620]
Lee Roach <phroggster@gmail.com>
parents: 14254
diff changeset
511 return retval;
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
512 }
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
513
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
514 #endif /* _WIN32 */
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
515
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
516 static void tcl_init_plugin(PurplePlugin *plugin)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
517 {
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
518 #ifdef USE_TCL_STUBS
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
519 Tcl_Interp *interp = NULL;
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
520 #endif
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
521 _tcl_plugin = plugin;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
522
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
523 #ifdef USE_TCL_STUBS
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
524 #ifdef _WIN32
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
525 if(!tcl_win32_init())
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
526 return;
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
527 #endif
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
528 if(!(interp = Tcl_CreateInterp()))
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
529 return;
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
530
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
531 if(!Tcl_InitStubs(interp, TCL_VERSION, 0)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
532 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "Tcl_InitStubs: %s\n", interp->result);
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
533 return;
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
534 }
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
535 #endif
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
536
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
537 Tcl_FindExecutable("purple");
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
538
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
539 #if defined(USE_TK_STUBS) && defined(HAVE_TK)
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
540 Tk_Init(interp);
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
541
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
542 if(!Tk_InitStubs(interp, TK_VERSION, 0)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
543 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "Error Tk_InitStubs: %s\n", interp->result);
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
544 Tcl_DeleteInterp(interp);
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
545 return;
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
546 }
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
547 #endif
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
548 tcl_loaded = TRUE;
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
549 #ifdef USE_TCL_STUBS
13456
4949b0656a2b [gaim-migrate @ 15830]
Daniel Atallah <datallah@pidgin.im>
parents: 13439
diff changeset
550 Tcl_DeleteInterp(interp);
7831
54076c9af6ad [gaim-migrate @ 8483]
Herman Bloggs <herman@bluedigits.com>
parents: 7828
diff changeset
551 #endif
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
552 tcl_loader_info.exts = g_list_append(tcl_loader_info.exts, "tcl");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
553 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
554
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15759
diff changeset
555 PURPLE_INIT_PLUGIN(tcl, tcl_init_plugin, tcl_info)

mercurial