src/perl.c

Sat, 18 Jan 2003 09:19:16 +0000

author
Christian Hammond <chipx86@chipx86.com>
date
Sat, 18 Jan 2003 09:19:16 +0000
changeset 4339
c1f075815433
parent 4298
af01cbb94efe
child 4349
a65175463a31
permissions
-rw-r--r--

[gaim-migrate @ 4603]
The \n made it difficult to translate, so we're setting wrap on the label
now. It also caused the entire preferences dialog to be too wide for some
screens.

560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 * gaim
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 *
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 * (at your option) any later version.
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 *
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * GNU General Public License for more details.
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 *
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 *
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 * This was taken almost exactly from X-Chat. The power of the GPL.
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 * Translated from X-Chat to Gaim by Eric Warmenhoven.
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 * Originally by Erik Scrafford <eriks@chilisoft.com>.
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
23 * X-Chat Copyright (C) 1998 Peter Zelezny.
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 *
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 */
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27 #ifdef HAVE_CONFIG_H
2090
bab8b7e309db [gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2048
diff changeset
28 #include <config.h>
1896
3aba553a53ea [gaim-migrate @ 1906]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1850
diff changeset
29 #ifdef DEBUG
3aba553a53ea [gaim-migrate @ 1906]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1850
diff changeset
30 #undef DEBUG
3aba553a53ea [gaim-migrate @ 1906]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1850
diff changeset
31 #endif
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 #endif
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
33 #undef PACKAGE
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34
580
634f04b7c6d6 [gaim-migrate @ 590]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 579
diff changeset
35 #ifdef USE_PERL
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36
3395
d7defc24cfc6 [gaim-migrate @ 3414]
Timothy Lee
parents: 3280
diff changeset
37 #define group perl_group
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
38 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
39 /* This took me an age to figure out.. without this __declspec(dllimport)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
40 * will be ignored.
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
41 */
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
42 #define HASATTRIBUTE
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
43 #endif
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 #include <EXTERN.h>
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #ifndef _SEM_SEMUN_UNDEFINED
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #define HAS_UNION_SEMUN
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 #endif
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 #include <perl.h>
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49 #include <XSUB.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
50 #ifndef _WIN32
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51 #include <sys/mman.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
52 #endif
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 #include <sys/types.h>
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 #include <sys/stat.h>
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55 #include <fcntl.h>
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 #undef PACKAGE
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 #include <stdio.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
58 #ifndef _WIN32
800
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
59 #include <dirent.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
60 #else
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
61 /* We're using perl's win32 port of this */
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
62 #define dirent direct
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
63 #endif
1238
1349092b5478 [gaim-migrate @ 1248]
Neil Sanchala <nsanch@gmail.com>
parents: 1233
diff changeset
64 #include <string.h>
798
a52440353c35 [gaim-migrate @ 808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 797
diff changeset
65
3395
d7defc24cfc6 [gaim-migrate @ 3414]
Timothy Lee
parents: 3280
diff changeset
66 #undef group
590
a0fbe38abfef [gaim-migrate @ 600]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 581
diff changeset
67
a0fbe38abfef [gaim-migrate @ 600]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 581
diff changeset
68 /* perl module support */
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
69 #ifdef OLD_PERL
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
70 extern void boot_DynaLoader _((CV * cv));
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
71 #else
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
72 extern void boot_DynaLoader _((pTHX_ CV * cv)); /* perl is so wacky */
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
73 #endif
590
a0fbe38abfef [gaim-migrate @ 600]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 581
diff changeset
74
a0fbe38abfef [gaim-migrate @ 600]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 581
diff changeset
75 #undef _
1896
3aba553a53ea [gaim-migrate @ 1906]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1850
diff changeset
76 #ifdef DEBUG
3aba553a53ea [gaim-migrate @ 1906]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1850
diff changeset
77 #undef DEBUG
3aba553a53ea [gaim-migrate @ 1906]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1850
diff changeset
78 #endif
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
79 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
80 #undef pipe
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
81 #endif
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 #include "gaim.h"
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
83 #include "prpl.h"
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
85 struct perlscript {
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
86 char *name;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
87 char *version;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
88 char *shutdowncallback; /* bleh */
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
89 struct gaim_plugin *plug;
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
90 };
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
91
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
92 struct _perl_event_handlers {
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
93 char *event_type;
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
94 char *handler_name;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
95 struct gaim_plugin *plug;
781
000f5f6732d4 [gaim-migrate @ 791]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 780
diff changeset
96 };
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
97
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
98 struct _perl_timeout_handlers {
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
99 char *handler_name;
2512
d8e1508e9600 [gaim-migrate @ 2525]
Artem Litvinovich
parents: 2511
diff changeset
100 char *handler_args;
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
101 gint iotag;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
102 struct gaim_plugin *plug;
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
103 };
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
104
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
105 static GList *perl_list = NULL; /* should probably extern this at some point */
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
106 static GList *perl_timeout_handlers = NULL;
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
107 static GList *perl_event_handlers = NULL;
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 static PerlInterpreter *my_perl = NULL;
2329
beb74464e9dd [gaim-migrate @ 2339]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2261
diff changeset
109 static void perl_init();
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
111 /* dealing with gaim */
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
112 XS(XS_GAIM_register); /* set up hooks for script */
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
113 XS(XS_GAIM_get_info); /* version, last to attempt signon, protocol */
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
114 XS(XS_GAIM_print); /* lemme figure this one out... */
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
115 XS(XS_GAIM_write_to_conv); /* write into conversation window */
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
116
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
117 /* list stuff */
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
118 XS(XS_GAIM_buddy_list); /* all buddies */
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
119 XS(XS_GAIM_online_list); /* online buddies */
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
120
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
121 /* server stuff */
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
122 XS(XS_GAIM_command); /* send command to server */
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
123 XS(XS_GAIM_user_info); /* given name, return struct buddy members */
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
124 XS(XS_GAIM_print_to_conv); /* send message to someone */
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
125 XS(XS_GAIM_print_to_chat); /* send message to chat room */
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
126 XS(XS_GAIM_serv_send_im); /* send message to someone (but do not display) */
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
127
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
128 /* handler commands */
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
129 XS(XS_GAIM_add_event_handler); /* when servers talk */
3456
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
130 XS(XS_GAIM_remove_event_handler); /* remove a handler */
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
131 XS(XS_GAIM_add_timeout_handler); /* figure it out */
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
132
3280
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
133 /* play sound */
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
134 XS(XS_GAIM_play_sound); /*play a sound*/
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
135
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
136 static void
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
137 #ifdef OLD_PERL
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
138 xs_init()
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
139 #else
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
140 xs_init(pTHX)
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
141 #endif
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
142 {
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
143 char *file = __FILE__;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
144
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
145 /* This one allows dynamic loading of perl modules in perl
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
146 scripts by the 'use perlmod;' construction*/
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
147 newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
148
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
149 /* load up all the custom Gaim perl functions */
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
150 newXS ("GAIM::register", XS_GAIM_register, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
151 newXS ("GAIM::get_info", XS_GAIM_get_info, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
152 newXS ("GAIM::print", XS_GAIM_print, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
153 newXS ("GAIM::write_to_conv", XS_GAIM_write_to_conv, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
154
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
155 newXS ("GAIM::buddy_list", XS_GAIM_buddy_list, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
156 newXS ("GAIM::online_list", XS_GAIM_online_list, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
157
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
158 newXS ("GAIM::command", XS_GAIM_command, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
159 newXS ("GAIM::user_info", XS_GAIM_user_info, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
160 newXS ("GAIM::print_to_conv", XS_GAIM_print_to_conv, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
161 newXS ("GAIM::print_to_chat", XS_GAIM_print_to_chat, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
162 newXS ("GAIM::serv_send_im", XS_GAIM_serv_send_im, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
163
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
164 newXS ("GAIM::add_event_handler", XS_GAIM_add_event_handler, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
165 newXS ("GAIM::remove_event_handler", XS_GAIM_remove_event_handler, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
166 newXS ("GAIM::add_timeout_handler", XS_GAIM_add_timeout_handler, "GAIM");
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
167
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
168 newXS ("GAIM::play_sound", XS_GAIM_play_sound, "GAIM");
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
169 }
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
170
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
171 static char *escape_quotes(char *buf)
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
172 {
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
173 static char *tmp_buf = NULL;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
174 char *i, *j;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
175
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
176 if (tmp_buf)
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
177 g_free(tmp_buf);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
178 tmp_buf = g_malloc(strlen(buf) * 2 + 1);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
179 for (i = buf, j = tmp_buf; *i; i++, j++) {
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
180 if (*i == '\'' || *i == '\\')
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
181 *j++ = '\\';
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
182 *j = *i;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
183 }
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
184 *j = '\0';
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
185
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
186 return (tmp_buf);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
187 }
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
188
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
189 /*
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
190 2001/06/14: execute_perl replaced by Martin Persson <mep@passagen.se>
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
191 previous use of perl_eval leaked memory, replaced with
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
192 a version that uses perl_call instead
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
193 30/11/2002: execute_perl modified by Eric Timme <timothy@voidnet.com>
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
194 args changed to char** so that we can have preparsed
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
195 arguments again, and many headaches ensued! This essentially
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
196 means we replaced one hacked method with a messier hacked
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
197 method out of perceived necessity. Formerly execute_perl
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
198 required a single char_ptr, and it would insert it into an
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
199 array of character pointers and NULL terminate the new array.
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
200 Now we have to pass in pre-terminated character pointer arrays
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
201 to accomodate functions that want to pass in multiple arguments.
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
202
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
203 Previously arguments were preparsed because an argument list
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
204 was constructed in the form 'arg one','arg two' and was
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
205 executed via a call like &funcname(arglist) (see .59.x), so
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
206 the arglist was magically pre-parsed because of the method.
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
207 With Martin Persson's change to perl_call we now need to
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
208 use a null terminated list of character pointers for arguments
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
209 if we wish them to be parsed. Lacking a better way to allow
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
210 for both single arguments and many I created a NULL terminated
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
211 array in every function that called execute_perl and passed
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
212 that list into the function. In the former version a single
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
213 character pointer was passed in, and was placed into an array
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
214 of character pointers with two elements, with a NULL element
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
215 tacked onto the back, but this method no longer seemed prudent.
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
216
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
217 Enhancements in the future might be to get rid of pre-declaring
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
218 the array sizes? I am not comfortable enough with this
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
219 subject to attempt it myself and hope it to stand the test
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
220 of time.
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
221 */
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
222
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
223 static int
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
224 execute_perl(char *function, char **args)
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
225 {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
226 char buf[512];
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
227 int count, ret_value = 1;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
228 SV *sv;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
229
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
230 dSP;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
231 ENTER;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
232 SAVETMPS;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
233 PUSHMARK(sp);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
234 count = perl_call_argv(function, G_EVAL | G_SCALAR, args);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
235 SPAGAIN;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
236
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
237 sv = GvSV(gv_fetchpv("@", TRUE, SVt_PV));
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
238 if (SvTRUE(sv)) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
239 g_snprintf(buf, 512, "Perl error: %s\n", SvPV(sv, count));
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
240 debug_printf(buf);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
241 POPs;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
242 } else if (count != 1) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
243 g_snprintf(buf, 512, "Perl error: expected 1 value from %s, "
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
244 "got: %d\n", function, count);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
245 debug_printf(buf);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
246 } else {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
247 ret_value = POPi;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
248 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
249
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
250 PUTBACK;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
251 FREETMPS;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
252 LEAVE;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
253
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
254 return ret_value;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
255
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
256 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
257
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
258 void perl_unload_file(struct gaim_plugin *plug) {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
259 char *atmp[2] = { "", NULL }; /* see execute_perl --et */
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
260 struct perlscript *scp = NULL;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
261 struct _perl_timeout_handlers *thn;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
262 struct _perl_event_handlers *ehn;
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
263
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
264 GList *pl = perl_list;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
265
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
266 debug_printf("Unloading %s\n", plug->path);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
267 while (pl) {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
268 scp = pl->data;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
269 if (scp->plug == plug) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
270 perl_list = g_list_remove(perl_list, scp);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
271 if (scp->shutdowncallback[0])
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
272 execute_perl(scp->shutdowncallback, atmp);
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
273 g_free(scp->name);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
274 g_free(scp->version);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
275 g_free(scp->shutdowncallback);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
276 g_free(scp);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
277 break;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
278 }
4088
46aa52e36e9f [gaim-migrate @ 4303]
Mark Doliner <markdoliner@pidgin.im>
parents: 4050
diff changeset
279 pl = pl->next;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
280 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
281
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
282 pl = perl_timeout_handlers;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
283 while (pl) {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
284 thn = pl->data;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
285 if (thn && thn->plug == plug) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
286 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, thn);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
287 g_source_remove(thn->iotag);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
288 g_free(thn->handler_args);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
289 g_free(thn->handler_name);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
290 g_free(thn);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
291 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
292 pl = pl->next;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
293 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
294
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
295 pl = perl_event_handlers;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
296 while (pl) {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
297 ehn = pl->data;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
298 if (ehn && ehn->plug == plug) {
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
299 perl_event_handlers = g_list_remove(perl_event_handlers, ehn);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
300 g_free(ehn->event_type);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
301 g_free(ehn->handler_name);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
302 g_free(ehn);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
303 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
304 pl = pl->next;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
305 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
306
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
307 plug->handle=NULL;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
308 plugins = g_list_remove(plugins, plug);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
309 save_prefs();
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
310 }
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
311
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
312 int perl_load_file(char *script_name)
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
313 {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
314 char *atmp[2] = { script_name, NULL }; /* see execute_perl --et */
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
315 struct gaim_plugin *plug = NULL;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
316 GList *p = probed_plugins;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
317 GList *s;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
318 struct perlscript *scp;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
319 int ret;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
320
2329
beb74464e9dd [gaim-migrate @ 2339]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2261
diff changeset
321 if (my_perl == NULL)
beb74464e9dd [gaim-migrate @ 2339]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2261
diff changeset
322 perl_init();
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
323
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
324 while (p) {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
325 plug = (struct gaim_plugin *)p->data;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
326 if (!strcmp(script_name, plug->path))
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
327 break;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
328 p = p->next;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
329 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
330
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
331 if (!plug) {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
332 probe_perl(script_name);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
333 }
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
334
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
335 plug->handle = plug->path;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
336 plugins = g_list_append(plugins, plug);
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
338 ret = execute_perl("load_n_eval", atmp);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
339
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
340 s = perl_list;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
341 while (s) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
342 scp = s->data;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
343
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
344 if (!strcmp(scp->name, plug->desc.name) &&
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
345 !strcmp(scp->version, plug->desc.version))
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
346 break;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
347 s = s->next;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
348 }
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
349
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
350 if (!s) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
351 g_snprintf(plug->error, sizeof(plug->error), _("GAIM::register not called with proper arguments. Consult PERL-HOWTO."));
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
352 return 0;
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
353 }
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
354
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
355 plug->error[0] = '\0';
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
356 return ret;
800
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
357 }
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
358
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
359 struct gaim_plugin *probe_perl(char *filename) {
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
360
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
361 /* XXX This woulld be much faster if I didn't create a new
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
362 * PerlInterpreter every time I probed a plugin */
800
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
363
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
364 PerlInterpreter *prober = perl_alloc();
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
365 struct gaim_plugin * plug = NULL;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
366 char *argv[] = {"", filename};
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
367 int count;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
368 perl_construct(prober);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
369 perl_parse(prober, NULL, 2, argv, NULL);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
370
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
371 {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
372 dSP;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
373 ENTER;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
374 SAVETMPS;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
375 PUSHMARK(SP);
3556
328d8598a916 [gaim-migrate @ 3646]
Sean Egan <seanegan@pidgin.im>
parents: 3551
diff changeset
376
328d8598a916 [gaim-migrate @ 3646]
Sean Egan <seanegan@pidgin.im>
parents: 3551
diff changeset
377 count = perl_call_pv("description", G_NOARGS | G_ARRAY | G_EVAL);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
378 SPAGAIN;
3556
328d8598a916 [gaim-migrate @ 3646]
Sean Egan <seanegan@pidgin.im>
parents: 3551
diff changeset
379 if (count == (sizeof(struct gaim_plugin_description) - sizeof(int)) / sizeof(char*)) {
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
380 plug = g_new0(struct gaim_plugin, 1);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
381 plug->type = perl_script;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
382 g_snprintf(plug->path, sizeof(plug->path), filename);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
383 plug->desc.iconfile = g_strdup(POPp);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
384 plug->desc.url = g_strdup(POPp);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
385 plug->desc.authors = g_strdup(POPp);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
386 plug->desc.description = g_strdup(POPp);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
387 plug->desc.version = g_strdup(POPp);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
388 plug->desc.name = g_strdup(POPp);
800
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
389 }
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
390
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
391 PUTBACK;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
392 FREETMPS;
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
393 LEAVE;
800
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
394 }
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
395 perl_destruct(prober);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
396 perl_free(prober);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
397 return plug;
800
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
398 }
9cf57a0e8940 [gaim-migrate @ 810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 799
diff changeset
399
2329
beb74464e9dd [gaim-migrate @ 2339]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2261
diff changeset
400 static void perl_init()
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
401 { /*changed the name of the variable from load_file to
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
402 perl_definitions since now it does much more than defining
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
403 the load_file sub. Moreover, deplaced the initialisation to
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
404 the xs_init function. (TheHobbit)*/
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
405 char *perl_args[] = { "", "-e", "0", "-w" };
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
406 char perl_definitions[] =
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
407 {
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
408 /* We use to function one to load a file the other to
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
409 execute the string obtained from the first and holding
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
410 the file conents. This allows to have a realy local $/
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
411 without introducing temp variables to hold the old
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
412 value. Just a question of style:) */
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
413 "sub load_file{"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
414 "my $f_name=shift;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
415 "local $/=undef;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
416 "open FH,$f_name or return \"__FAILED__\";"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
417 "$_=<FH>;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
418 "close FH;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
419 "return $_;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
420 "}"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
421 "sub load_n_eval{"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
422 "my $f_name=shift;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
423 "my $strin=load_file($f_name);"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
424 "return 2 if($strin eq \"__FAILED__\");"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
425 "eval $strin;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
426 "if($@){"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
427 /*" #something went wrong\n"*/
4050
94e1fbe758f3 [gaim-migrate @ 4259]
Amiel Martin
parents: 4029
diff changeset
428 "GAIM::print(\"Errors loading file $f_name:\\n\",\"$@\");"
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
429 "return 1;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
430 "}"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
431 "return 0;"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
432 "}"
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
433 };
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
435 my_perl = perl_alloc();
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
436 perl_construct(my_perl);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
437 #ifdef DEBUG
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
438 perl_parse(my_perl, xs_init, 4, perl_args, NULL);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
439 #else
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
440 perl_parse(my_perl, xs_init, 3, perl_args, NULL);
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
441 #endif
4050
94e1fbe758f3 [gaim-migrate @ 4259]
Amiel Martin
parents: 4029
diff changeset
442 #ifdef HAVE_PERL_EVAL_PV
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
443 eval_pv(perl_definitions, TRUE);
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
444 #else
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
445 perl_eval_pv(perl_definitions, TRUE); /* deprecated */
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446 #endif
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
447
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
448
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
449 }
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
450
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451 void perl_end()
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
452 {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
453 char *atmp[2] = { "", NULL }; /* see execute_perl --et */
565
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
454 struct perlscript *scp;
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
455 struct _perl_timeout_handlers *thn;
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
456 struct _perl_event_handlers *ehn;
565
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
457
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
458 while (perl_list) {
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
459 scp = perl_list->data;
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
460 perl_list = g_list_remove(perl_list, scp);
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
461 if (scp->shutdowncallback[0])
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
462 execute_perl(scp->shutdowncallback, atmp);
565
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
463 g_free(scp->name);
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
464 g_free(scp->version);
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
465 g_free(scp->shutdowncallback);
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
466 g_free(scp);
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
467 }
ddf669b378cb [gaim-migrate @ 575]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 562
diff changeset
468
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
469 while (perl_timeout_handlers) {
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
470 thn = perl_timeout_handlers->data;
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
471 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, thn);
2370
722a3374b5cf [gaim-migrate @ 2383]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2355
diff changeset
472 g_source_remove(thn->iotag);
2512
d8e1508e9600 [gaim-migrate @ 2525]
Artem Litvinovich
parents: 2511
diff changeset
473 g_free(thn->handler_args);
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
474 g_free(thn->handler_name);
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
475 g_free(thn);
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
476 }
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
477
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
478 while (perl_event_handlers) {
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
479 ehn = perl_event_handlers->data;
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
480 perl_event_handlers = g_list_remove(perl_event_handlers, ehn);
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
481 g_free(ehn->event_type);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
482 debug_printf("handler_name: %s\n", ehn->handler_name);
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
483 g_free(ehn->handler_name);
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
484 g_free(ehn);
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
485 }
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
486
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
487 if (my_perl != NULL) {
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
488 perl_destruct(my_perl);
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
489 perl_free(my_perl);
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
490 my_perl = NULL;
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
491 }
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
492 }
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
493
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
494 XS (XS_GAIM_register)
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
495 {
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
496 char *name, *ver, *callback, *unused; /* exactly like X-Chat, eh? :) */
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
497 unsigned int junk;
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
498 struct perlscript *scp;
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
499 struct gaim_plugin *plug = NULL;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
500 GList *pl = plugins;
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
501
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
502 dXSARGS;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
503 items = 0;
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
504
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
505 name = SvPV (ST (0), junk);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
506 ver = SvPV (ST (1), junk);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
507 callback = SvPV (ST (2), junk);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
508 unused = SvPV (ST (3), junk);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
509
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
510 while (pl) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
511 plug = pl->data;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
512
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
513 if (!strcmp(name, plug->desc.name) &&
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
514 !strcmp(ver, plug->desc.version)) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
515 break;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
516 }
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
517 pl = pl->next;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
518 }
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
519
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
520 if (plug) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
521 scp = g_new0(struct perlscript, 1);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
522 scp->name = g_strdup(name);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
523 scp->version = g_strdup(ver);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
524 scp->shutdowncallback = g_strdup(callback);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
525 scp->plug = plug;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
526 perl_list = g_list_append(perl_list, scp);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
527 }
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
528 XST_mPV (0, plug->path);
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
529 XSRETURN (1);
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
530 }
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
531
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
532 XS (XS_GAIM_get_info)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
533 {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
534 int i = 0;
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
535 dXSARGS;
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
536 items = 0;
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
537
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
538 switch(SvIV(ST(0))) {
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
539 case 0:
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
540 XST_mPV(0, VERSION);
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
541 i = 1;
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
542 break;
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
543 case 1:
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
544 {
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
545 GSList *c = connections;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
546 struct gaim_connection *gc;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
547
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
548 while (c) {
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
549 gc = (struct gaim_connection *)c->data;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
550 XST_mIV(i++, (guint)gc);
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
551 c = c->next;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
552 }
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
553 }
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
554 break;
591
809e18bb0862 [gaim-migrate @ 601]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 590
diff changeset
555 case 2:
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
556 {
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
557 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
558 if (g_slist_find(connections, gc))
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
559 XST_mIV(i++, gc->protocol);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
560 else
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
561 XST_mIV(i++, -1);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
562 }
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
563 break;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
564 case 3:
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
565 {
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
566 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
567 if (g_slist_find(connections, gc))
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
568 XST_mPV(i++, gc->username);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
569 else
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
570 XST_mPV(i++, "");
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
571 }
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
572 break;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
573 case 4:
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
574 {
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
575 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
576 if (g_slist_find(connections, gc))
2397
432ccc0c7f18 [gaim-migrate @ 2410]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
577 XST_mIV(i++, g_slist_index(aim_users, gc->user));
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
578 else
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
579 XST_mIV(i++, -1);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
580 }
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
581 break;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
582 case 5:
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
583 {
2397
432ccc0c7f18 [gaim-migrate @ 2410]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
584 GSList *a = aim_users;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
585 while (a) {
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
586 struct aim_user *u = a->data;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
587 XST_mPV(i++, u->username);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
588 a = a->next;
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
589 }
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
590 }
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
591 break;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
592 case 6:
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
593 {
2397
432ccc0c7f18 [gaim-migrate @ 2410]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
594 GSList *a = aim_users;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
595 while (a) {
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
596 struct aim_user *u = a->data;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
597 XST_mIV(i++, u->protocol);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
598 a = a->next;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
599 }
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
600 }
591
809e18bb0862 [gaim-migrate @ 601]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 590
diff changeset
601 break;
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
602 case 7:
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
603 {
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
604 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
605 if (g_slist_find(connections, gc))
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3563
diff changeset
606 XST_mPV(i++, gc->prpl->name);
2355
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
607 else
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
608 XST_mPV(i++, "Unknown");
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
609 }
3bf7d403faa6 [gaim-migrate @ 2368]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2345
diff changeset
610 break;
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
611 default:
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
612 XST_mPV(0, "Error2");
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
613 i = 1;
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
614 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
615
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
616 XSRETURN(i);
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
617 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
618
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
619 XS (XS_GAIM_print)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
620 {
592
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
621 char *title;
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
622 char *message;
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
623 unsigned int junk;
592
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
624 dXSARGS;
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
625 items = 0;
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
626
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
627 title = SvPV(ST(0), junk);
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
628 message = SvPV(ST(1), junk);
3551
acce66c34dbd [gaim-migrate @ 3626]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
629 do_error_dialog(title, message, GAIM_INFO);
592
9cd04eefc8ca [gaim-migrate @ 602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 591
diff changeset
630 XSRETURN(0);
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
631 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
632
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
633 XS (XS_GAIM_buddy_list)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
634 {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
635 struct gaim_connection *gc;
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
636 struct buddy *buddy;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
637 struct group *g;
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
638 GSList *list = NULL;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
639 GSList *mem;
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
640 int i = 0;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
641 dXSARGS;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
642 items = 0;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
643
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
644 gc = (struct gaim_connection *)SvIV(ST(0));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
645 if (g_slist_find(connections, gc))
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
646 list = gc->groups;
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
647
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
648 while (list) {
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
649 g = (struct group *)list->data;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
650 mem = g->members;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
651 while (mem) {
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
652 buddy = (struct buddy *)mem->data;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
653 XST_mPV(i++, buddy->name);
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
654 mem = mem->next;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
655 }
940
b3985f53a6c0 [gaim-migrate @ 950]
kylev
parents: 905
diff changeset
656 list = g_slist_next(list);
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
657 }
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
658 XSRETURN(i);
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
659 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
660
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
661 XS (XS_GAIM_online_list)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
662 {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
663 struct gaim_connection *gc;
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
664 struct buddy *b;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
665 struct group *g;
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
666 GSList *list = NULL;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
667 GSList *mem;
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
668 int i = 0;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
669 dXSARGS;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
670 items = 0;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
671
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
672 gc = (struct gaim_connection *)SvIV(ST(0));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
673 if (g_slist_find(connections, gc))
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
674 list = gc->groups;
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
675
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
676 while (list) {
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
677 g = (struct group *)list->data;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
678 mem = g->members;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
679 while (mem) {
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
680 b = (struct buddy *)mem->data;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
681 if (b->present) XST_mPV(i++, b->name);
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
682 mem = mem->next;
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
683 }
940
b3985f53a6c0 [gaim-migrate @ 950]
kylev
parents: 905
diff changeset
684 list = g_slist_next(list);
581
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
685 }
36278dc06d8e [gaim-migrate @ 591]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 580
diff changeset
686 XSRETURN(i);
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
687 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
688
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
689 XS (XS_GAIM_command)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
690 {
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
691 unsigned int junk;
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
692 char *command = NULL;
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
693 dXSARGS;
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
694 items = 0;
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
695
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
696 command = SvPV(ST(0), junk);
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
697 if (!command) XSRETURN(0);
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
698 if (!strncasecmp(command, "signon", 6)) {
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
699 int index = SvIV(ST(1));
2397
432ccc0c7f18 [gaim-migrate @ 2410]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
700 if (g_slist_nth_data(aim_users, index))
432ccc0c7f18 [gaim-migrate @ 2410]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
701 serv_login(g_slist_nth_data(aim_users, index));
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
702 } else if (!strncasecmp(command, "signoff", 7)) {
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
703 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
704 if (g_slist_find(connections, gc)) signoff(gc);
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
705 else signoff_all(NULL, NULL);
1730
65ca747f15f9 [gaim-migrate @ 1740]
Sean Egan <seanegan@pidgin.im>
parents: 1250
diff changeset
706 } else if (!strncasecmp(command, "info", 4)) {
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
707 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
708 if (g_slist_find(connections, gc))
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
709 serv_set_info(gc, SvPV(ST(2), junk));
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
710 } else if (!strncasecmp(command, "away", 4)) {
630
6097b92591ff [gaim-migrate @ 640]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 628
diff changeset
711 char *message = SvPV(ST(1), junk);
1106
7f3041b0632a [gaim-migrate @ 1116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1101
diff changeset
712 static struct away_message a;
630
6097b92591ff [gaim-migrate @ 640]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 628
diff changeset
713 g_snprintf(a.message, sizeof(a.message), "%s", message);
6097b92591ff [gaim-migrate @ 640]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 628
diff changeset
714 do_away_message(NULL, &a);
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
715 } else if (!strncasecmp(command, "back", 4)) {
628
45db0dd25776 [gaim-migrate @ 638]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 603
diff changeset
716 do_im_back();
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
717 } else if (!strncasecmp(command, "idle", 4)) {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
718 GSList *c = connections;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
719 struct gaim_connection *gc;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
720
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
721 while (c) {
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
722 gc = (struct gaim_connection *)c->data;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
723 serv_set_idle(gc, SvIV(ST(1)));
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
724 c = c->next;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
725 }
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
726 } else if (!strncasecmp(command, "warn", 4)) {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
727 GSList *c = connections;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
728 struct gaim_connection *gc;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
729
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
730 while (c) {
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
731 gc = (struct gaim_connection *)c->data;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
732 serv_warn(gc, SvPV(ST(1), junk), SvIV(ST(2)));
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
733 c = c->next;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
734 }
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
735 }
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
736
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
737 XSRETURN(0);
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
738 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
739
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
740 XS (XS_GAIM_user_info)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
741 {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
742 struct gaim_connection *gc;
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
743 unsigned int junk;
1114
a1e5c60bd23d [gaim-migrate @ 1124]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1106
diff changeset
744 struct buddy *buddy = NULL;
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
745 dXSARGS;
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
746 items = 0;
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
747
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
748 gc = (struct gaim_connection *)SvIV(ST(0));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
749 if (g_slist_find(connections, gc))
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
750 buddy = find_buddy(gc, SvPV(ST(1), junk));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
751
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
752 if (!buddy)
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
753 XSRETURN(0);
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
754 XST_mPV(0, buddy->name);
4227
5f98b16ed21c [gaim-migrate @ 4471]
Nathan Walp <nwalp@pidgin.im>
parents: 4088
diff changeset
755 XST_mPV(1, get_buddy_alias(buddy));
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
756 XST_mPV(2, buddy->present ? "Online" : "Offline");
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
757 XST_mIV(3, buddy->evil);
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
758 XST_mIV(4, buddy->signon);
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
759 XST_mIV(5, buddy->idle);
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
760 XST_mIV(6, buddy->uc);
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
761 XST_mIV(7, buddy->caps);
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
762 XSRETURN(8);
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
763 }
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
764
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
765 XS (XS_GAIM_write_to_conv)
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
766 {
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
767 char *nick, *who, *what;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
768 struct conversation *c;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
769 int junk;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
770 int send, wflags;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
771 dXSARGS;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
772 items = 0;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
773
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
774 nick = SvPV(ST(0), junk);
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
775 send = SvIV(ST(1));
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
776 what = SvPV(ST(2), junk);
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
777 who = SvPV(ST(3), junk);
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
778
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
779 if (!*who) who=NULL;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
780
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
781 switch (send) {
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
782 case 0: wflags=WFLAG_SEND; break;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
783 case 1: wflags=WFLAG_RECV; break;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
784 case 2: wflags=WFLAG_SYSTEM; break;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
785 default: wflags=WFLAG_RECV;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
786 }
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
787
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
788 c = find_conversation(nick);
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
789 if (!c)
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
790 c = new_conversation(nick);
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
791
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2712
diff changeset
792 write_to_conv(c, what, wflags, who, time(NULL), -1);
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
793 XSRETURN(0);
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
794 }
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
795
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
796 XS (XS_GAIM_serv_send_im)
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
797 {
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
798 struct gaim_connection *gc;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
799 char *nick, *what;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
800 int isauto;
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
801 int junk;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
802 dXSARGS;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
803 items = 0;
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
804
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
805 gc = (struct gaim_connection *)SvIV(ST(0));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
806 nick = SvPV(ST(1), junk);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
807 what = SvPV(ST(2), junk);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
808 isauto = SvIV(ST(3));
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
809
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
810 if (!g_slist_find(connections, gc)) {
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
811 XSRETURN(0);
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
812 return;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
813 }
3033
1f078ab46e76 [gaim-migrate @ 3046]
Sean Egan <seanegan@pidgin.im>
parents: 2856
diff changeset
814 serv_send_im(gc, nick, what, -1, isauto);
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
815 XSRETURN(0);
2261
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
816 }
7c5c4c73ab8e [gaim-migrate @ 2271]
Stefan Weyergraf
parents: 2231
diff changeset
817
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
818 XS (XS_GAIM_print_to_conv)
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
819 {
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
820 struct gaim_connection *gc;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
821 char *nick, *what;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
822 int isauto;
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
823 struct conversation *c;
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
824 unsigned int junk;
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
825 dXSARGS;
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
826 items = 0;
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
827
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
828 gc = (struct gaim_connection *)SvIV(ST(0));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
829 nick = SvPV(ST(1), junk);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
830 what = SvPV(ST(2), junk);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
831 isauto = SvIV(ST(3));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
832 if (!g_slist_find(connections, gc)) {
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
833 XSRETURN(0);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
834 return;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
835 }
597
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
836 c = find_conversation(nick);
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
837 if (!c)
568c12ceaf7f [gaim-migrate @ 607]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 592
diff changeset
838 c = new_conversation(nick);
2488
7adade336cb0 [gaim-migrate @ 2501]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2397
diff changeset
839 set_convo_gc(c, gc);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2712
diff changeset
840 write_to_conv(c, what, WFLAG_SEND | (isauto ? WFLAG_AUTO : 0), NULL, time(NULL), -1);
3033
1f078ab46e76 [gaim-migrate @ 3046]
Sean Egan <seanegan@pidgin.im>
parents: 2856
diff changeset
841 serv_send_im(c->gc, nick, what, -1, isauto ? IM_FLAG_AWAY : 0);
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
842 XSRETURN(0);
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
843 }
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
844
3280
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
845
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
846
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
847 XS (XS_GAIM_print_to_chat)
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
848 {
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
849 struct gaim_connection *gc;
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
850 int id;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
851 char *what;
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
852 struct conversation *b = NULL;
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
853 GSList *bcs;
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
854 unsigned int junk;
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
855 dXSARGS;
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
856 items = 0;
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
857
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
858 gc = (struct gaim_connection *)SvIV(ST(0));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
859 id = SvIV(ST(1));
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
860 what = SvPV(ST(2), junk);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
861
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
862 if (!g_slist_find(connections, gc)) {
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
863 XSRETURN(0);
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
864 return;
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
865 }
2345
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
866 bcs = gc->buddy_chats;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
867 while (bcs) {
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
868 b = (struct conversation *)bcs->data;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
869 if (b->id == id)
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
870 break;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
871 bcs = bcs->next;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
872 b = NULL;
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
873 }
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
874 if (b)
2d59281e13fd [gaim-migrate @ 2358]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2329
diff changeset
875 serv_chat_send(gc, id, what);
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
876 XSRETURN(0);
603
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
877 }
58bf0003d8a4 [gaim-migrate @ 613]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 597
diff changeset
878
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3510
diff changeset
879 int perl_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5)
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
880 {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
881 /* changing buf to an array of char pointers so we get @_ back in
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
882 * order; basically scrapping legacy code in favor of blocky
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
883 * unimaginative code. Additionally, assigned values one at a time
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
884 * for the sake of clarity. --Eric Timme (30 November 2002) */
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
885
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
886 char *buf[5] = { NULL, NULL, NULL, NULL, NULL };
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
887 /* 5 for max 4 arguments =\ Note, if you change the above,
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
888 * change the two loops at the bottom that free up memory */
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
889
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
890 GList *handler;
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
891 struct _perl_event_handlers *data;
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
892 int handler_return;
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
893 int i=0; /* necessary counter variable? --et */
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
894
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
895 switch (event) {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
896 case event_signon:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
897 case event_signoff:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
898 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
899 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
900 case event_away:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
901 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
902 buf[1] = g_strdup_printf("%s",
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
903 ((struct gaim_connection *)arg1)->away ?
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
904 escape_quotes(((struct gaim_connection *)arg1)->away) : "");
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
905 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
906 case event_im_recv:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
907 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
908 char *tmp = *(char **)arg2 ? g_strdup(escape_quotes(*(char **)arg2)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
909 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
910 buf[1] = g_strdup_printf("%s", tmp);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
911 buf[2] = g_strdup_printf("%s",
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
912 *(char **)arg3 ? escape_quotes(*(char **)arg3) : "");
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
913 g_free(tmp);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
914 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
915 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
916 case event_im_send:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
917 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
918 char *tmp = arg2 ? g_strdup(escape_quotes(arg2)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
919 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
920 buf[1] = g_strdup_printf("%s", tmp);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
921 buf[2] = g_strdup_printf("%s",
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
922 *(char **)arg3 ? escape_quotes(*(char **)arg3) : "");
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
923 g_free(tmp);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
924 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
925 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
926 case event_buddy_signon:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
927 case event_buddy_signoff:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
928 case event_set_info:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
929 case event_buddy_away:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
930 case event_buddy_back:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
931 case event_buddy_idle:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
932 case event_buddy_unidle:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
933 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
934 buf[1] = g_strdup_printf("%s", escape_quotes(arg2));
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
935 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
936 case event_chat_invited:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
937 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
938 char *tmp2, *tmp3, *tmp4;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
939 tmp2 = g_strdup(escape_quotes(arg2));
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
940 tmp3 = g_strdup(escape_quotes(arg3));
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
941 tmp4 = arg4 ? g_strdup(escape_quotes(arg4)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
942 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
943 buf[1] = g_strdup_printf("%s", tmp2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
944 buf[2] = g_strdup_printf("%s", tmp3);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
945 buf[3] = g_strdup_printf("%s", tmp4);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
946 g_free(tmp2);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
947 g_free(tmp3);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
948 g_free(tmp4);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
949 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
950 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
951 case event_chat_join:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
952 case event_chat_buddy_join:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
953 case event_chat_buddy_leave:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
954 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
955 buf[1] = g_strdup_printf("%d", (int)arg2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
956 buf[2] = g_strdup_printf("%s", escape_quotes(arg3));
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
957 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
958 case event_chat_leave:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
959 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
960 buf[1] = g_strdup_printf("%d", (int)arg2);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
961 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
962 case event_chat_recv:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
963 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
964 char *t3, *t4;
3167
30c514c365e0 [gaim-migrate @ 3183]
Sean Egan <seanegan@pidgin.im>
parents: 3166
diff changeset
965 t3 = g_strdup(escape_quotes(*(char **)arg3));
30c514c365e0 [gaim-migrate @ 3183]
Sean Egan <seanegan@pidgin.im>
parents: 3166
diff changeset
966 t4 = *(char **)arg4 ? g_strdup(escape_quotes(*(char **)arg4)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
967 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
968 buf[1] = g_strdup_printf("%d", (int)arg2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
969 buf[2] = g_strdup_printf("%s", t3);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
970 buf[3] = g_strdup_printf("%s", t4);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
971 g_free(t3);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
972 g_free(t4);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
973 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
974 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
975 case event_chat_send_invite:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
976 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
977 char *t3, *t4;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
978 t3 = g_strdup(escape_quotes(arg3));
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
979 t4 = *(char **)arg4 ? g_strdup(escape_quotes(*(char **)arg4)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
980 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
981 buf[1] = g_strdup_printf("%d", (int)arg2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
982 buf[2] = g_strdup_printf("%s", t3);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
983 buf[3] = g_strdup_printf("%s", t4);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
984 g_free(t3);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
985 g_free(t4);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
986 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
987 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
988 case event_chat_send:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
989 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
990 buf[1] = g_strdup_printf("%d", (int)arg2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
991 buf[2] = g_strdup_printf("%s",
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
992 *(char **)arg3 ? escape_quotes(*(char **)arg3) : "");
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
993 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
994 case event_warned:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
995 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
996 buf[1] = g_strdup_printf("%s", arg2 ? escape_quotes(arg2) : "");
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
997 buf[2] = g_strdup_printf("%d", (int)arg3);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
998 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
999 case event_quit:
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3510
diff changeset
1000 case event_blist_update:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1001 buf[0] = g_malloc0(1);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1002 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1003 case event_new_conversation:
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents: 3456
diff changeset
1004 case event_del_conversation:
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1005 buf[0] = g_strdup_printf("%s", escape_quotes(arg1));
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1006 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1007 case event_im_displayed_sent:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1008 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1009 char *tmp2, *tmp3;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1010 tmp2 = g_strdup(escape_quotes(arg2));
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1011 tmp3 = *(char **)arg3 ? g_strdup(escape_quotes(*(char **)arg3)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1012 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1013 buf[1] = g_strdup_printf("%s", tmp2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1014 buf[2] = g_strdup_printf("%s", tmp3);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1015 g_free(tmp2);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1016 g_free(tmp3);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1017 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1018 break;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1019 case event_im_displayed_rcvd:
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1020 {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1021 char *tmp2, *tmp3;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1022 tmp2 = g_strdup(escape_quotes(arg2));
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1023 tmp3 = arg3 ? g_strdup(escape_quotes(arg3)) : g_malloc0(1);
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1024 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1025 buf[1] = g_strdup_printf("%s", tmp2);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1026 buf[2] = g_strdup_printf("%s", tmp3);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1027 g_free(tmp2);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1028 g_free(tmp3);
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1029 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1030 break;
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3510
diff changeset
1031 case event_draw_menu:
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3510
diff changeset
1032 /* we can't handle this usefully without gtk/perl bindings */
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3510
diff changeset
1033 return 0;
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1034 default:
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents: 3456
diff changeset
1035 debug_printf("someone forgot to handle %s in the perl binding\n", event_name(event));
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1036 return 0;
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1037 }
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1038
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1039 for (handler = perl_event_handlers; handler != NULL; handler = handler->next) {
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1040 data = handler->data;
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1041 if (!strcmp(event_name(event), data->event_type)) {
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1042 handler_return = execute_perl(data->handler_name, buf);
3573
1a8a5cba7944 [gaim-migrate @ 3671]
Sean Egan <seanegan@pidgin.im>
parents: 3572
diff changeset
1043 if (handler_return) {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1044 /* loop to try and free up memory from the
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1045 * char pointer array? --et */
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1046 for (i=0;i<5;i++)
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1047 if (buf[i])
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1048 g_free(buf[i]);
3573
1a8a5cba7944 [gaim-migrate @ 3671]
Sean Egan <seanegan@pidgin.im>
parents: 3572
diff changeset
1049 return handler_return;
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1050 }
1100
efc7d10c7826 [gaim-migrate @ 1110]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
1051 }
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1052 }
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1053
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1054 /* loop to try and free up memory from the
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1055 * char pointer array? --et */
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1056 for (i=0;i<5;i++)
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1057 if (buf[i])
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1058 g_free(buf[i]);
2511
cea8ce69dec0 [gaim-migrate @ 2524]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents: 2488
diff changeset
1059
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1060 return 0;
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1061 }
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1062
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
1063 XS (XS_GAIM_add_event_handler)
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1064 {
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
1065 unsigned int junk;
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1066 struct _perl_event_handlers *handler;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1067 char *handle;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1068 struct gaim_plugin *plug;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1069 GList *p = plugins;
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1070 dXSARGS;
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1071 items = 0;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1072
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1073 handle = SvPV(ST(0), junk);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1074 while (p) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1075 plug = p->data;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1076 if (!strcmp(handle, plug->path))
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1077 break;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1078 p = p->next;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1079 }
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1080
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1081 if (p) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1082 handler = g_new0(struct _perl_event_handlers, 1);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1083 handler->event_type = g_strdup(SvPV(ST(1), junk));
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1084 handler->handler_name = g_strdup(SvPV(ST(2), junk));
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1085 handler->plug = plug;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1086 perl_event_handlers = g_list_append(perl_event_handlers, handler);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1087 debug_printf("registered perl event handler for %s\n", handler->event_type);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1088 } else {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1089 debug_printf("Invalid handle (%s) registering perl event handler\n", handle);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1090 }
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1091
780
0513afaaf062 [gaim-migrate @ 790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
1092 XSRETURN_EMPTY;
579
aed77e39951d [gaim-migrate @ 589]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 577
diff changeset
1093 }
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
1094
3456
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1095 XS (XS_GAIM_remove_event_handler)
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1096 {
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1097 unsigned int junk;
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1098 struct _perl_event_handlers *ehn;
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1099 GList *cur = perl_event_handlers;
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1100 dXSARGS;
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
1101 items = 0;
3456
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1102
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1103 while (cur) {
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1104 GList *next = cur->next;
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1105 ehn = cur->data;
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1106
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1107 if (!strcmp(ehn->event_type, SvPV(ST(0), junk)) &&
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1108 !strcmp(ehn->handler_name, SvPV(ST(1), junk)))
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1109 {
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1110 perl_event_handlers = g_list_remove(perl_event_handlers, ehn);
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1111 g_free(ehn->event_type);
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1112 g_free(ehn->handler_name);
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1113 g_free(ehn);
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1114 }
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1115
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1116 cur = next;
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1117 }
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1118 }
915542b9877e [gaim-migrate @ 3503]
Brian
parents: 3427
diff changeset
1119
2370
722a3374b5cf [gaim-migrate @ 2383]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2355
diff changeset
1120 static int perl_timeout(gpointer data)
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1121 {
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1122 char *atmp[2] = { NULL, NULL }; /* see execute_perl --et */
2370
722a3374b5cf [gaim-migrate @ 2383]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2355
diff changeset
1123 struct _perl_timeout_handlers *handler = data;
4029
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1124
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1125 atmp[0] = escape_quotes(handler->handler_args);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1126 execute_perl(handler->handler_name, atmp);
d63bf59f8c3f [gaim-migrate @ 4233]
Eric Timme
parents: 3630
diff changeset
1127
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1128 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, handler);
2512
d8e1508e9600 [gaim-migrate @ 2525]
Artem Litvinovich
parents: 2511
diff changeset
1129 g_free(handler->handler_args);
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1130 g_free(handler->handler_name);
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1131 g_free(handler);
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1132
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1133 return 0; /* returning zero removes the timeout handler */
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1134 }
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1135
1101
d656fabb1d6c [gaim-migrate @ 1111]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1100
diff changeset
1136 XS (XS_GAIM_add_timeout_handler)
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
1137 {
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1949
diff changeset
1138 unsigned int junk;
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1139 long timeout;
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1140 struct _perl_timeout_handlers *handler;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1141 char *handle;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1142 struct gaim_plugin *plug;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1143 GList *p = plugins;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1144
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1145 dXSARGS;
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1146 items = 0;
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1147
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1148 handle = SvPV(ST(0), junk);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1149 while (p) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1150 plug = p->data;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1151 if (!strcmp(handle, plug->path))
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1152 break;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1153 p = p->next;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1154 }
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1155
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1156 if (p) {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1157 handler = g_new0(struct _perl_timeout_handlers, 1);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1158 timeout = 1000 * SvIV(ST(1));
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
1159 debug_printf("Adding timeout for %ld seconds.\n", timeout/1000);
3563
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1160 handler->plug = plug;
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1161 handler->handler_name = g_strdup(SvPV(ST(2), junk));
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1162 handler->handler_args = g_strdup(SvPV(ST(3), junk));
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1163 perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1164 handler->iotag = g_timeout_add(timeout, perl_timeout, handler);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1165 } else {
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1166 debug_printf("Invalid handle (%s) in adding perl timeout handler.", handle);
ea2789c8077c [gaim-migrate @ 3658]
Sean Egan <seanegan@pidgin.im>
parents: 3556
diff changeset
1167 }
573
a267d68a8240 [gaim-migrate @ 583]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 565
diff changeset
1168 XSRETURN_EMPTY;
561
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
1169 }
3fe0319bf21e [gaim-migrate @ 571]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 560
diff changeset
1170
3280
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1171 XS (XS_GAIM_play_sound)
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1172 {
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1173 int id;
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1174 dXSARGS;
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1175
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
1176 items = 0;
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4227
diff changeset
1177
3280
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1178 id = SvIV(ST(0));
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1179
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1180 play_sound(id);
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1181
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1182 XSRETURN_EMPTY;
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1183 }
8a7320232fae [gaim-migrate @ 3298]
Sean Egan <seanegan@pidgin.im>
parents: 3167
diff changeset
1184
2370
722a3374b5cf [gaim-migrate @ 2383]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2355
diff changeset
1185 extern void unload_perl_scripts()
798
a52440353c35 [gaim-migrate @ 808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 797
diff changeset
1186 {
a52440353c35 [gaim-migrate @ 808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 797
diff changeset
1187 perl_end();
a52440353c35 [gaim-migrate @ 808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 797
diff changeset
1188 perl_init();
a52440353c35 [gaim-migrate @ 808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 797
diff changeset
1189 }
a52440353c35 [gaim-migrate @ 808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 797
diff changeset
1190
799
930e2fad30dc [gaim-migrate @ 809]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 798
diff changeset
1191
560
dc54e8f1de2a [gaim-migrate @ 570]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1192 #endif /* USE_PERL */

mercurial