summary refs log tree commit diff stats
path: root/plugins/doat/doat.c
diff options
context:
space:
mode:
authorBerke Viktor <berkeviktor@aol.com>2011-11-22 17:58:00 +0100
committerBerke Viktor <berkeviktor@aol.com>2011-11-22 17:58:00 +0100
commitcaa878bc93134a07be311c287dacae2168d97ebc (patch)
treee98cc11883dc40a91df4023ac3a6cac1ca2ced10 /plugins/doat/doat.c
parent99e015c3b3ce49ae13d213ce493504dc7332e19c (diff)
add doat plugin
Diffstat (limited to 'plugins/doat/doat.c')
-rw-r--r--plugins/doat/doat.c80
1 files changed, 80 insertions, 0 deletions
diff --git a/plugins/doat/doat.c b/plugins/doat/doat.c
new file mode 100644
index 00000000..e03507f1
--- /dev/null
+++ b/plugins/doat/doat.c
@@ -0,0 +1,80 @@
+/* This program is free software. It comes without any warranty, to
+ * the extent permitted by applicable law. You can redistribute it
+ * and/or modify it under the terms of the Do What The Fuck You Want
+ * To Public License, Version 2, as published by Sam Hocevar. See
+ * http://sam.zoy.org/wtfpl/COPYING or http://lwsitu.com/xchat/COPYING
+ * for more details. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "xchat-plugin.h"
+
+static xchat_plugin *ph;
+
+static int
+parse_command( char *word[], char *word_eol[], void *userdata ) {
+	char *channel = NULL, *server = NULL, *token = NULL;
+/*	char *save_ptr1 = NULL;*/
+	char *str1 = NULL;
+	char *delimiter = NULL;
+
+	xchat_context *ctx = NULL;
+
+	if( word[2] != NULL && word[3] != NULL ) {
+		for( str1 = word[2]; ; str1 = NULL ) {
+/*			token = strtok_r( str1, ",", &save_ptr1 );*/
+			token = strtok( str1, "," );
+/*			printf( "token: %s\n", token );*/
+
+			if( token == NULL ) {
+				break;
+			}
+
+			channel = malloc( strlen( token ) + 1 );
+			strcpy( channel, token );
+				
+			delimiter = strchr( channel, '/' );
+
+			server = NULL;
+			if( delimiter != NULL ) {
+				*delimiter = '\0';
+				server = delimiter + 1;
+			}
+
+/*			printf( "channel[%s] server[%s]\n", channel, server );*/
+
+			if( (ctx = xchat_find_context( ph, server, channel ) ) != NULL ) {
+				if( xchat_set_context( ph, ctx ) ) {
+					xchat_command( ph, word_eol[3] );
+				}
+			}
+
+			free( channel );
+		}
+	}
+	return XCHAT_EAT_XCHAT;
+}
+
+int
+xchat_plugin_init( xchat_plugin * plugin_handle, char **plugin_name,
+	char **plugin_desc, char **plugin_version, char *arg ) {
+
+	ph = plugin_handle;
+	*plugin_name = "Do At";
+	*plugin_version = "1.0";
+	*plugin_desc = "Perform an arbitrary command on multiple channels";
+
+	xchat_hook_command( ph, "doat", XCHAT_PRI_NORM, parse_command, "DOAT [channel,list,/network] [command], perform a command on multiple contexts", NULL );
+
+	xchat_print (ph, "Do At plugin loaded\n");
+
+	return 1;
+}
+
+int
+xchat_plugin_deinit (void)
+{
+	xchat_print (ph, "Do At plugin unloaded\n");
+	return 1;
+}