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 */