diff src/perl.c @ 573:9566a53cde23

[gaim-migrate @ 583] ctl-[bius] for inserting HTML, more perl mods, and props to X-Chat committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Tue, 01 Aug 2000 23:25:23 +0000
parents 7209b474bdc3
children aa9a8bcddd80
line wrap: on
line diff
--- a/src/perl.c	Tue Aug 01 22:59:00 2000 +0000
+++ b/src/perl.c	Tue Aug 01 23:25:23 2000 +0000
@@ -28,8 +28,7 @@
 #endif
 #undef PACKAGE
 
-/* #ifdef USE_PERL */
-#if 0
+#if 0 /* #ifdef USE_PERL */
 
 #include <EXTERN.h>
 #ifndef _SEM_SEMUN_UNDEFINED
@@ -51,7 +50,13 @@
 	char *shutdowncallback; /* bleh */
 };
 
+struct _perl_timeout_handlers {
+	char *handler_name;
+	gint iotag;
+};
+
 static GList *perl_list = NULL;
+static GList *perl_timeout_handlers = NULL;
 static PerlInterpreter *my_perl = NULL;
 
 XS (XS_AIM_register);			/* so far so good */
@@ -64,7 +69,7 @@
 /* XS (XS_AIM_send_raw);		/* this i can do for toc, but for oscar... ? */
 XS (XS_AIM_command);			/* this should be easier */
 /* XS (XS_AIM_command_with_server);	/* FIXME: this should probably be removed */
-XS (XS_AIM_channel_list);		/* probably return conversation list */
+XS (XS_AIM_channel_list);		/* probably return conversation list (online buddies?) */
 /* XS (XS_AIM_server_list);		/* huh? does this apply? */
 XS (XS_AIM_user_list);			/* return the buddy list */
 /* XS (XS_AIM_user_info);		/* we'll see.... */
@@ -175,6 +180,7 @@
 void perl_end()
 {
 	struct perlscript *scp;
+	struct _perl_timeout_handlers *thn;
 
 	while (perl_list) {
 		scp = perl_list->data;
@@ -187,6 +193,14 @@
 		g_free(scp);
 	}
 
+	while (perl_timeout_handlers) {
+		thn = perl_timeout_handlers->data;
+		perl_timeout_handlers = g_list_remove(perl_timeout_handlers, thn);
+		gtk_timeout_remove(thn->iotag);
+		g_free(thn->handler_name);
+		g_free(thn);
+	}
+
 	if (my_perl != NULL) {
 		perl_destruct(my_perl);
 		perl_free(my_perl);
@@ -221,8 +235,30 @@
 /* XS (XS_AIM_add_command_handler);	/* once again, um... */
 /* XS (XS_AIM_add_print_handler);	/* can i really do this? */
 
+static int perl_timeout(struct _perl_timeout_handlers *handler)
+{
+	execute_perl(handler->handler_name, "");
+	perl_timeout_handlers = g_list_remove(perl_timeout_handlers, handler);
+	g_free(handler->handler_name);
+	g_free(handler);
+
+	return 0; /* returning zero removes the timeout handler */
+}
+
 XS (XS_AIM_add_timeout_handler)
 {
+	int junk;
+	long timeout;
+	struct _perl_timeout_handlers *handler;
+	dXSARGS;
+	items = 0;
+
+	handler = g_new0(struct _perl_timeout_handlers, 1);
+	timeout = atol(SvPV(ST(0), junk));
+	handler->handler_name = g_strdup(SvPV(ST(1), junk));
+	perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler);
+	handler->iotag = gtk_timeout_add(timeout, (GtkFunction)perl_timeout, handler);
+	XSRETURN_EMPTY;
 }
 
 /* XS (XS_AIM_print);			/* how am i going to do this */
@@ -235,19 +271,19 @@
 
 /* XS (XS_AIM_command_with_server);	/* FIXME: this should probably be removed */
 
-XS (XS_AIM_channel_list)
+XS (XS_AIM_channel_list)		/* online buddies? */
 {
 }
 
 /* XS (XS_AIM_server_list);		/* huh? does this apply? */
 
-XS (XS_AIM_user_list)
+XS (XS_AIM_user_list)			/* buddy list */
 {
 }
 
 /* XS (XS_AIM_user_info);		/* we'll see.... */
 
-XS (XS_AIM_ignore_list)
+XS (XS_AIM_ignore_list)			/* deny list */
 {
 }