Mercurial > pidgin
comparison src/perl.c @ 579:7b501c39a6ee
[gaim-migrate @ 589]
perl.c is starting to get finalized. also, made the smiley dialog a little
prettier, and a bit less code.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 02 Aug 2000 04:53:00 +0000 |
parents | aa9a8bcddd80 |
children | 9a8b067eb368 |
comparison
equal
deleted
inserted
replaced
578:a0636d0d9ee2 | 579:7b501c39a6ee |
---|---|
26 #ifdef HAVE_CONFIG_H | 26 #ifdef HAVE_CONFIG_H |
27 #include "../config.h" | 27 #include "../config.h" |
28 #endif | 28 #endif |
29 #undef PACKAGE | 29 #undef PACKAGE |
30 | 30 |
31 /*#ifdef USE_PERL /**/ | 31 #ifdef USE_PERL /**/ |
32 #if 0 /**/ | 32 /*#if 0 /**/ |
33 | 33 |
34 #include <EXTERN.h> | 34 #include <EXTERN.h> |
35 #ifndef _SEM_SEMUN_UNDEFINED | 35 #ifndef _SEM_SEMUN_UNDEFINED |
36 #define HAS_UNION_SEMUN | 36 #define HAS_UNION_SEMUN |
37 #endif | 37 #endif |
58 | 58 |
59 static GList *perl_list = NULL; | 59 static GList *perl_list = NULL; |
60 static GList *perl_timeout_handlers = NULL; | 60 static GList *perl_timeout_handlers = NULL; |
61 static PerlInterpreter *my_perl = NULL; | 61 static PerlInterpreter *my_perl = NULL; |
62 | 62 |
63 XS (XS_AIM_register); /* so far so good */ | 63 /* dealing with gaim */ |
64 /* XS (XS_AIM_add_message_handler); /* um... */ | 64 XS(XS_AIM_register); |
65 /* XS (XS_AIM_add_command_handler); /* once again, um... */ | 65 XS(XS_AIM_get_info); |
66 /* XS (XS_AIM_add_print_handler); /* can i really do this? */ | 66 XS(XS_AIM_print); /* lemme figure this one out... */ |
67 XS (XS_AIM_add_timeout_handler); /* ok, this i can do */ | 67 |
68 /* XS (XS_AIM_print); /* how am i going to do this */ | 68 /* list stuff */ |
69 /* XS (XS_AIM_print_with_channel); /* print_to_conversation? */ | 69 XS(XS_AIM_buddy_list); |
70 /* XS (XS_AIM_send_raw); /* this i can do for toc, but for oscar... ? */ | 70 XS(XS_AIM_online_list); |
71 XS (XS_AIM_command); /* this should be easier */ | 71 XS(XS_AIM_deny_list); /* also returns permit list */ |
72 /* XS (XS_AIM_command_with_server); /* FIXME: this should probably be removed */ | 72 |
73 XS (XS_AIM_channel_list); /* probably return conversation list (online buddies?) */ | 73 /* server stuff */ |
74 /* XS (XS_AIM_server_list); /* huh? does this apply? */ | 74 XS(XS_AIM_command); |
75 XS (XS_AIM_user_list); /* return the buddy list */ | 75 XS(XS_AIM_user_info); /* given name, return struct buddy members */ |
76 /* XS (XS_AIM_user_info); /* we'll see.... */ | 76 |
77 XS (XS_AIM_ignore_list); /* deny list? */ | 77 /* handler commands */ |
78 /* XS (XS_AIM_dcc_list); /* wha? */ | 78 XS(XS_AIM_add_message_handler); |
79 XS (XS_AIM_get_info); /* this i can do too */ | 79 XS(XS_AIM_add_command_handler); |
80 XS(XS_AIM_add_timeout_handler); | |
81 | |
80 | 82 |
81 /* perl module support */ | 83 /* perl module support */ |
82 extern void xs_init _((void)); | 84 extern void xs_init _((void)); |
83 extern void boot_DynaLoader _((CV * cv)); /* perl is so wacky */ | 85 extern void boot_DynaLoader _((CV * cv)); /* perl is so wacky */ |
84 | 86 |
153 #else | 155 #else |
154 Perl_eval_pv(load_file, TRUE); | 156 Perl_eval_pv(load_file, TRUE); |
155 #endif | 157 #endif |
156 | 158 |
157 newXS ("AIM::register", XS_AIM_register, "AIM"); | 159 newXS ("AIM::register", XS_AIM_register, "AIM"); |
158 /* newXS ("AIM::add_message_handler", XS_AIM_add_message_handler, "AIM"); */ | 160 newXS ("AIM::get_info", XS_AIM_get_info, "AIM"); |
159 /* newXS ("AIM::add_command_handler", XS_AIM_add_command_handler, "AIM"); */ | 161 newXS ("AIM::print", XS_AIM_print, "AIM"); |
160 /* newXS ("AIM::add_print_handler", XS_AIM_add_print_handler, "AIM"); */ | 162 |
163 newXS ("AIM::buddy_list", XS_AIM_buddy_list, "AIM"); | |
164 newXS ("AIM::online_list", XS_AIM_online_list, "AIM"); | |
165 newXS ("AIM::deny_list", XS_AIM_deny_list, "AIM"); | |
166 | |
167 newXS ("AIM::command", XS_AIM_command, "AIM"); | |
168 newXS ("AIM::user_info", XS_AIM_user_info, "AIM"); | |
169 | |
170 newXS ("AIM::add_message_handler", XS_AIM_add_message_handler, "AIM"); | |
171 newXS ("AIM::add_command_handler", XS_AIM_add_command_handler, "AIM"); | |
161 newXS ("AIM::add_timeout_handler", XS_AIM_add_timeout_handler, "AIM"); | 172 newXS ("AIM::add_timeout_handler", XS_AIM_add_timeout_handler, "AIM"); |
162 /* newXS ("AIM::print", XS_AIM_print, "AIM"); */ | |
163 /* newXS ("AIM::print_with_channel", XS_AIM_print_with_channel, "AIM"); */ | |
164 /* newXS ("AIM::send_raw", XS_AIM_send_raw, "AIM"); */ | |
165 newXS ("AIM::command", XS_AIM_command, "AIM"); | |
166 /* newXS ("AIM::command_with_server", XS_AIM_command_with_server, "AIM"); */ | |
167 newXS ("AIM::channel_list", XS_AIM_channel_list, "AIM"); | |
168 /* newXS ("AIM::server_list", XS_AIM_server_list, "AIM"); */ | |
169 newXS ("AIM::user_list", XS_AIM_user_list, "AIM"); | |
170 /* newXS ("AIM::user_info", XS_AIM_user_info, "AIM"); */ | |
171 newXS ("AIM::ignore_list", XS_AIM_ignore_list, "AIM"); | |
172 /* newXS ("AIM::dcc_list", XS_AIM_dcc_list, "AIM"); */ | |
173 newXS ("AIM::get_info", XS_AIM_get_info, "AIM"); | |
174 | 173 |
175 /* FIXME */ | 174 /* FIXME */ |
176 if (autoload) { | 175 if (autoload) { |
177 /* for each *.pl in ~/.gaim/scripts (whatever), autoload file */ | 176 /* for each *.pl in ~/.gaim/scripts (whatever), autoload file */ |
178 } | 177 } |
230 | 229 |
231 XST_mPV (0, VERSION); | 230 XST_mPV (0, VERSION); |
232 XSRETURN (1); | 231 XSRETURN (1); |
233 } | 232 } |
234 | 233 |
235 /* XS (XS_AIM_add_message_handler); /* um... */ | |
236 /* XS (XS_AIM_add_command_handler); /* once again, um... */ | |
237 /* XS (XS_AIM_add_print_handler); /* can i really do this? */ | |
238 | |
239 static int perl_timeout(struct _perl_timeout_handlers *handler) | |
240 { | |
241 execute_perl(handler->handler_name, ""); | |
242 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, handler); | |
243 g_free(handler->handler_name); | |
244 g_free(handler); | |
245 | |
246 return 0; /* returning zero removes the timeout handler */ | |
247 } | |
248 | |
249 XS (XS_AIM_add_timeout_handler) | |
250 { | |
251 int junk; | |
252 long timeout; | |
253 struct _perl_timeout_handlers *handler; | |
254 dXSARGS; | |
255 items = 0; | |
256 | |
257 handler = g_new0(struct _perl_timeout_handlers, 1); | |
258 timeout = atol(SvPV(ST(0), junk)); | |
259 handler->handler_name = g_strdup(SvPV(ST(1), junk)); | |
260 perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler); | |
261 handler->iotag = gtk_timeout_add(timeout, (GtkFunction)perl_timeout, handler); | |
262 XSRETURN_EMPTY; | |
263 } | |
264 | |
265 /* XS (XS_AIM_print); /* how am i going to do this */ | |
266 /* XS (XS_AIM_print_with_channel); /* print_to_conversation? */ | |
267 /* XS (XS_AIM_send_raw); /* this i can do for toc, but for oscar... ? */ | |
268 | |
269 XS (XS_AIM_command) | |
270 { | |
271 } | |
272 | |
273 /* XS (XS_AIM_command_with_server); /* FIXME: this should probably be removed */ | |
274 | |
275 XS (XS_AIM_channel_list) /* online buddies? */ | |
276 { | |
277 } | |
278 | |
279 /* XS (XS_AIM_server_list); /* huh? does this apply? */ | |
280 | |
281 XS (XS_AIM_user_list) /* buddy list */ | |
282 { | |
283 } | |
284 | |
285 /* XS (XS_AIM_user_info); /* we'll see.... */ | |
286 | |
287 XS (XS_AIM_ignore_list) /* deny list */ | |
288 { | |
289 } | |
290 | |
291 /* XS (XS_AIM_dcc_list); /* wha? */ | |
292 | |
293 XS (XS_AIM_get_info) | 234 XS (XS_AIM_get_info) |
294 { | 235 { |
295 int junk; | 236 int junk; |
296 dXSARGS; | 237 dXSARGS; |
297 items = 0; | 238 items = 0; |
301 XST_mPV(0, VERSION); | 242 XST_mPV(0, VERSION); |
302 break; | 243 break; |
303 case 1: | 244 case 1: |
304 XST_mPV(0, current_user->username); | 245 XST_mPV(0, current_user->username); |
305 break; | 246 break; |
247 /* FIXME */ | |
306 default: | 248 default: |
307 XST_mPV(0, "Error2"); | 249 XST_mPV(0, "Error2"); |
308 } | 250 } |
309 | 251 |
310 XSRETURN(1); | 252 XSRETURN(1); |
311 } | 253 } |
312 | 254 |
255 XS (XS_AIM_print) | |
256 { | |
257 /* FIXME */ | |
258 } | |
259 | |
260 XS (XS_AIM_buddy_list) | |
261 { | |
262 /* FIXME */ | |
263 } | |
264 | |
265 XS (XS_AIM_online_list) | |
266 { | |
267 /* FIXME */ | |
268 } | |
269 | |
270 XS (XS_AIM_deny_list) | |
271 { | |
272 /* FIXME */ | |
273 } | |
274 | |
275 XS (XS_AIM_command) | |
276 { | |
277 /* FIXME */ | |
278 } | |
279 | |
280 XS (XS_AIM_user_info) | |
281 { | |
282 int junk; | |
283 struct buddy *buddy; | |
284 char *nick; | |
285 dXSARGS; | |
286 items = 0; | |
287 | |
288 nick = SvPV(ST(0), junk); | |
289 if (!nick[0]) | |
290 XSRETURN(0); | |
291 buddy = find_buddy(nick); | |
292 if (!buddy) | |
293 XSRETURN(0); | |
294 XST_mPV(0, buddy->name); | |
295 XST_mPV(1, buddy->present ? "Online" : "Offline"); | |
296 XST_mIV(2, buddy->evil); | |
297 XST_mIV(3, buddy->signon); | |
298 XST_mIV(4, buddy->idle); | |
299 XST_mIV(5, buddy->uc); | |
300 XST_mIV(6, buddy->caps); | |
301 XSRETURN(6); | |
302 } | |
303 | |
304 XS (XS_AIM_add_message_handler) | |
305 { | |
306 /* FIXME */ | |
307 } | |
308 | |
309 XS (XS_AIM_add_command_handler) | |
310 { | |
311 /* FIXME */ | |
312 } | |
313 | |
314 static int perl_timeout(struct _perl_timeout_handlers *handler) | |
315 { | |
316 execute_perl(handler->handler_name, ""); | |
317 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, handler); | |
318 g_free(handler->handler_name); | |
319 g_free(handler); | |
320 | |
321 return 0; /* returning zero removes the timeout handler */ | |
322 } | |
323 | |
324 XS (XS_AIM_add_timeout_handler) | |
325 { | |
326 int junk; | |
327 long timeout; | |
328 struct _perl_timeout_handlers *handler; | |
329 dXSARGS; | |
330 items = 0; | |
331 | |
332 handler = g_new0(struct _perl_timeout_handlers, 1); | |
333 timeout = atol(SvPV(ST(0), junk)); | |
334 handler->handler_name = g_strdup(SvPV(ST(1), junk)); | |
335 perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler); | |
336 handler->iotag = gtk_timeout_add(timeout, (GtkFunction)perl_timeout, handler); | |
337 XSRETURN_EMPTY; | |
338 } | |
339 | |
313 #endif /* USE_PERL */ | 340 #endif /* USE_PERL */ |