annotate src/perl.c @ 4349:0c68d402f59f

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