src/module.c

changeset 3517
ef03be2348a5
parent 3510
eb451ec1bf1c
child 3551
acce66c34dbd
--- a/src/module.c	Mon Sep 16 07:04:55 2002 +0000
+++ b/src/module.c	Mon Sep 16 08:35:24 2002 +0000
@@ -376,144 +376,35 @@
 	return buf;
 }
 
-static void debug_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4)
-{
-	if (!opt_debug && !(misc_options & OPT_MISC_DEBUG))
-		return;
-
-	switch (event) {
-		case event_blist_update:
-			/* this happens *really* often */
-			if (opt_debug) {
-				debug_printf("%s\n", event_name(event));
-			}
-			break;
-	        case event_quit:
-			debug_printf("%s\n", event_name(event));
-			break;
-		case event_signon:
-		case event_signoff:
-			debug_printf("%s: %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username);
-			break;
-		case event_new_conversation:
-			debug_printf("%s: %s\n", event_name(event), (char *)arg1);
-			break;
-		case event_error:
-			debug_printf("%s: %d\n", event_name(event), (int)arg1);
-			break;
-		case event_buddy_signon:
-		case event_buddy_signoff:
-		case event_buddy_away:
-		case event_buddy_back:
-		case event_buddy_idle:
-	        case event_buddy_unidle:
-	        case event_set_info:
-	        case event_got_typing:
-			debug_printf("%s: %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username, (char *)arg2);
-			break;
-		case event_chat_leave:
-			debug_printf("%s: %s %d\n", event_name(event),
-					((struct gaim_connection *)arg1)->username, (int)arg2);
-			break;
-		case event_im_send:
-		case event_im_displayed_sent:
-			debug_printf("%s: %s %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(char *)arg2, *(char **)arg3 ? *(char **)arg3 : "");
-			break;
-		case event_chat_join:
-		case event_chat_buddy_join:
-		case event_chat_buddy_leave:
-			debug_printf("%s: %s %d %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(int)arg2, (char *)arg3);
-			break;
-		case event_chat_send:
-			debug_printf("%s: %s %d %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(int)arg2, *(char **)arg3 ? *(char **)arg3 : "");
-			break;
-		case event_away:
-			debug_printf("%s: %s %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(char *)arg2, (char *)arg3 ? (char *)arg3 : "");
-			break;
-		case event_warned:
-			debug_printf("%s: %s %s %d\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(char *)arg2 ? (char *)arg2 : "", (int)arg3);
-			break;
-		case event_im_recv:
-			debug_printf("%s: %s %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					*(char **)arg2 ? *(char **)arg2 : "",
-					*(char **)arg3 ? *(char **)arg3 : "");
-			break;
-		case event_im_displayed_rcvd:
-			debug_printf("%s: %s %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(char *)arg2 ? (char *)arg2 : "",
-					(char *)arg3 ? (char *)arg3 : "");
-			break;
-		case event_chat_recv:
-			debug_printf("%s: %s %d %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(int)arg2,
-					*(char **)arg3 ? *(char **)arg3 : "",
-					*(char **)arg4 ? *(char **)arg4 : "");
-			break;
-		case event_chat_send_invite:
-			debug_printf("%s: %s %d %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(int)arg2, (char *)arg3,
-					*(char **)arg4 ? *(char **)arg4 : "");
-			break;
-		case event_chat_invited:
-			debug_printf("%s: %s %s %s %s\n", event_name(event),
-					((struct gaim_connection *)arg1)->username,
-					(char *)arg2, (char *)arg3,
-					(char *)arg4 ? (char *)arg4 : "");
-			break;
-		case event_del_conversation:
-			debug_printf("%s: %s\n", event_name(event), (char *)arg1);
-			break;
-		case event_connecting:
-			debug_printf("%s: %s\n", event_name(event), ((struct aim_user *)arg1)->username);
-			break;
-		default:
-			debug_printf("%s: um, right. yeah.\n", event_name(event));
-			break;
-	}
-}
-
-int plugin_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4)
+int plugin_event(enum gaim_event event, ...)
 {
 #ifdef GAIM_PLUGINS
 	GList *c = callbacks;
 	struct gaim_callback *g;
+	va_list arrg;
+	void    *arg1 = NULL, 
+		*arg2 = NULL,
+		*arg3 = NULL, 
+		*arg4 = NULL,
+		*arg5 = NULL;
 #endif
 
-	debug_event(event, arg1, arg2, arg3, arg4);
+	debug_printf("%s\n", event_name(event));
 
 #ifdef GAIM_PLUGINS
 	while (c) {
-		void (*zero)(void *);
-		void (*one)(void *, void *);
-		void (*two)(void *, void *, void *);
-		void (*three)(void *, void *, void *, void *);
-		void (*four)(void *, void *, void *, void *, void *);
-
+		void (*cbfunc)(void *, ...);
+		
 		g = (struct gaim_callback *)c->data;
 		if (g->event == event && g->function != NULL) {
+			cbfunc=g->function;
+			va_start(arrg, event);
 			switch (event) {
 
 				/* no args */
 			case event_blist_update:
 			case event_quit:
-				zero = g->function;
-				zero(g->data);
+				cbfunc(g->data);
 				break;
 
 				/* one arg */
@@ -523,8 +414,8 @@
 			case event_del_conversation:
 			case event_error:
 			case event_connecting:
-				one = g->function;
-				one(arg1, g->data);
+				arg1 = va_arg(arrg, void *);
+				cbfunc(arg1, g->data);
 				break;
 
 				/* two args */
@@ -534,48 +425,101 @@
 			case event_buddy_back:
 			case event_buddy_idle:
 			case event_buddy_unidle:
-			case event_chat_leave:
 			case event_set_info:
 			case event_draw_menu:
 			case event_got_typing:
-				two = g->function;
-				two(arg1, arg2, g->data);
+				arg1 = va_arg(arrg, void *);
+				arg2 = va_arg(arrg, void *);
+				cbfunc(arg1, arg2, g->data);
 				break;
-
+			case event_chat_leave:
+				{
+					int id;
+					arg1 = va_arg(arrg, void*);
+					id = va_arg(arrg, int);
+					cbfunc(arg1, id, g->data);
+				}
+				break;
 				/* three args */
 			case event_im_send:
 			case event_im_displayed_sent:
-			case event_chat_join:
+			case event_away:
+				arg1 = va_arg(arrg, void *);
+				arg2 = va_arg(arrg, void *);
+				arg3 = va_arg(arrg, void *);
+				cbfunc(arg1, arg2, arg3, g->data);
+				break;
 			case event_chat_buddy_join:
 			case event_chat_buddy_leave:
 			case event_chat_send:
-			case event_away:
-			case event_back:
+			case event_chat_join:
+				{
+					int id;
+					arg1 = va_arg(arrg, void*);
+					id = va_arg(arrg, int);
+					arg3 = va_arg(arrg, void*);
+					cbfunc(arg1, id, arg3, g->data);
+				}
+				break;
 			case event_warned:
-				three = g->function;
-				three(arg1, arg2, arg3, g->data);
+				{
+					int id;
+					arg1 = va_arg(arrg, void*);
+					arg2 = va_arg(arrg, void*);
+					id = va_arg(arrg, int);
+					cbfunc(arg1, arg2, id, g->data);
+				}
 				break;
-
 				/* four args */
 			case event_im_recv:
+			case event_chat_invited:
+				arg1 = va_arg(arrg, void *);
+				arg2 = va_arg(arrg, void *);
+				arg3 = va_arg(arrg, void *);
+				arg4 = va_arg(arrg, void *);
+				cbfunc(arg1, arg2, arg3, arg4, g->data);
+				break;
 			case event_chat_recv:
-			case event_im_displayed_rcvd:
 			case event_chat_send_invite:
-			case event_chat_invited:
-				four = g->function;
-				four(arg1, arg2, arg3, arg4, g->data);
+				{
+					int id;
+					arg1 = va_arg(arrg, void *);
+					id = va_arg(arrg, int);
+
+					arg3 = va_arg(arrg, void *);
+					arg4 = va_arg(arrg, void *);
+					cbfunc(arg1, id, arg3, arg4, g->data);
+				}
 				break;
-
-			default:
+				/* five args */
+			case event_im_displayed_rcvd:
+				{
+					time_t time;
+					arg1 = va_arg(arrg, void *);
+					arg2 = va_arg(arrg, void *);
+					arg3 = va_arg(arrg, void *);
+					arg4 = va_arg(arrg, void *);
+					time = va_arg(arrg, time_t);
+					cbfunc(arg1, arg2, arg3, arg4, time, g->data);
+				}
+				break;
+				default:
 				debug_printf("unknown event %d\n", event);
 				break;
 			}
+			va_end(arrg);
 		}
 		c = c->next;
 	}
 #endif /* GAIM_PLUGINS */
 #ifdef USE_PERL
-	return perl_event(event, arg1, arg2, arg3, arg4);
+	va_start(arrg, event);
+	arg1 = va_arg(arrg, void *);
+	arg2 = va_arg(arrg, void *);
+	arg3 = va_arg(arrg, void *);
+	arg4 = va_arg(arrg, void *);
+	arg5 = va_arg(arrg, void *);
+	return perl_event(event, arg1, arg2, arg3, arg4, arg5);
 #else
 	return 0;
 #endif

mercurial