summary refs log tree commit diff stats
path: root/plugins
diff options
context:
space:
mode:
authorberkeviktor@aol.com <berkeviktor@aol.com>2011-02-24 04:13:14 +0100
committerberkeviktor@aol.com <berkeviktor@aol.com>2011-02-24 04:13:14 +0100
commitf16af8be941b596dedac3bf4e371ee2d21f4b598 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /plugins
parentc6a031659b54230099c863b7ccdc03de4a4c7a2d (diff)
nuke the repo
Diffstat (limited to 'plugins')
-rw-r--r--plugins/checksum/checksum.c351
-rw-r--r--plugins/checksum/makefile.mak18
-rw-r--r--plugins/ewc/COPYING502
-rw-r--r--plugins/ewc/ewc.c231
-rw-r--r--plugins/ewc/makefile.mak18
-rw-r--r--plugins/lua/lua.c1882
-rw-r--r--plugins/lua/makefile.mak20
-rw-r--r--plugins/makefile.mak66
-rw-r--r--plugins/mpcinfo/functions.c167
-rw-r--r--plugins/mpcinfo/makefile.mak18
-rw-r--r--plugins/mpcinfo/mp3Info.c361
-rw-r--r--plugins/mpcinfo/mpcInfo.c149
-rw-r--r--plugins/mpcinfo/oggInfo.c122
-rw-r--r--plugins/mpcinfo/theme.c136
-rw-r--r--plugins/perl/makefile-510.mak30
-rw-r--r--plugins/perl/makefile-512.mak30
-rw-r--r--plugins/python/makefile.mak25
-rw-r--r--plugins/tcl/makefile.mak22
-rw-r--r--plugins/upd/makefile.mak18
-rw-r--r--plugins/upd/upd.c111
-rw-r--r--plugins/winamp/makefile.mak18
-rw-r--r--plugins/winamp/winamp.c189
-rw-r--r--plugins/xdcc/makefile.mak18
-rw-r--r--plugins/xtray/bitmaps/sd.bmpbin32824 -> 0 bytes
-rw-r--r--plugins/xtray/callbacks.cpp734
-rw-r--r--plugins/xtray/callbacks.h37
-rw-r--r--plugins/xtray/icons/banned.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/chan_msg.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/disconnected.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/highlight-1-3.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/highlight.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/kicked.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/priv_msg-1-2-2.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/sd.icobin24358 -> 0 bytes
-rw-r--r--plugins/xtray/icons/server_notice.icobin1406 -> 0 bytes
-rw-r--r--plugins/xtray/icons/xchat.icobin25670 -> 0 bytes
-rw-r--r--plugins/xtray/makefile.mak37
-rw-r--r--plugins/xtray/plugin.h335
-rw-r--r--plugins/xtray/resource.h47
-rw-r--r--plugins/xtray/resource.rc309
-rw-r--r--plugins/xtray/sdAlerts.cpp109
-rw-r--r--plugins/xtray/sdAlerts.h26
-rw-r--r--plugins/xtray/sdTray.cpp207
-rw-r--r--plugins/xtray/sdTray.h39
-rw-r--r--plugins/xtray/utility.cpp563
-rw-r--r--plugins/xtray/utility.h52
-rw-r--r--plugins/xtray/xchat.cpp319
-rw-r--r--plugins/xtray/xchat.h32
-rw-r--r--plugins/xtray/xtray.cpp219
-rw-r--r--plugins/xtray/xtray.h77
50 files changed, 0 insertions, 7644 deletions
diff --git a/plugins/checksum/checksum.c b/plugins/checksum/checksum.c
deleted file mode 100644
index 170daa5b..00000000
--- a/plugins/checksum/checksum.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* XChat-WDK
- * Copyright (c) 2010-2011 Berke Viktor.
- *
- * Use of OpenSSL SHA256 interface: http://adamlamers.com/?p=5
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <malloc.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <openssl/sha.h>
-
-#include "xchat-plugin.h"
-
-#define BUFSIZE 32768
-#define DEFAULT_MAX_HASH_SIZE 268435456						/* default size is 256 MB */
-#define FILE_BUF_SIZE 512
-
-#ifndef snprintf
-#define snprintf _snprintf
-#endif
-#ifndef stat64
-#define stat64 _stat64
-#endif
-
-static xchat_plugin *ph;									/* plugin handle */
-static int config_fail;										/* variable for config availability */
-
-static void
-sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65])
-{
-	int i;
-	for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
-	{
-		sprintf (outputBuffer + (i * 2), "%02x", hash[i]);
-	}
-	outputBuffer[64] = 0;
-}
-
-static void
-sha256 (char *string, char outputBuffer[65])
-{
-	int i;
-	unsigned char hash[SHA256_DIGEST_LENGTH];
-	SHA256_CTX sha256;
-
-	SHA256_Init (&sha256);
-	SHA256_Update (&sha256, string, strlen (string));
-	SHA256_Final (hash, &sha256);
-
-	for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
-	{
-		sprintf (outputBuffer + (i * 2), "%02x", hash[i]);
-	}
-	outputBuffer[64] = 0;
-}
-
-static int
-sha256_file (char *path, char outputBuffer[65])
-{
-	int bytesRead;
-	unsigned char *buffer;
-	unsigned char hash[SHA256_DIGEST_LENGTH];
-	SHA256_CTX sha256;
-
-	FILE *file = fopen (path, "rb");
-	if (!file)
-	{
-		return -534;
-	}
-
-	SHA256_Init (&sha256);
-	buffer = malloc (BUFSIZE);
-	bytesRead = 0;
-
-	if (!buffer)
-	{
-		return ENOMEM;
-	}
-
-	while ((bytesRead = fread (buffer, 1, BUFSIZE, file)))
-	{
-		SHA256_Update (&sha256, buffer, bytesRead);
-	}
-
-	SHA256_Final (hash, &sha256);
-	sha256_hash_string (hash, outputBuffer);
-
-	fclose (file);
-	free (buffer);
-	return 0;
-}
-
-static void
-init ()
-{
-	/* check whether the config file exists, if it doesn't, try to create it */
-	FILE * file_in;
-	FILE * file_out;
-	char buffer[FILE_BUF_SIZE];
-
-	config_fail = 0;
-	snprintf (buffer, sizeof (buffer), "%s/checksum.conf", xchat_get_info (ph, "xchatdirfs"));
-
-	if ((file_in = fopen (buffer, "r")) == NULL)
-	{
-		if ((file_out = fopen (buffer, "w")) == NULL)
-		{
-			config_fail = 1;
-		} else
-		{
-			fprintf (file_out, "%llu\n", (unsigned long long) DEFAULT_MAX_HASH_SIZE);
-			fclose (file_out);
-		}
-	} else
-	{
-		fclose (file_in);
-	}
-
-	/* nasty easter egg: if FILE_BUF_SIZE is set to 1024 and you build for x86, you can do fclose ()
-	   at the end of init (), which is plain wrong as it will only work if fopen () != 0. */
-}
-
-static unsigned long long
-get_max_hash_size ()
-{
-	FILE * file_in;
-	char buffer[FILE_BUF_SIZE];
-	unsigned long long max_hash_size;
-
-	if (config_fail)
-	{
-		return (unsigned long long) DEFAULT_MAX_HASH_SIZE;
-	} else
-	{
-		snprintf (buffer, sizeof (buffer), "%s/checksum.conf", xchat_get_info (ph, "xchatdirfs"));
-		file_in = fopen (buffer, "r");
-		fscanf (file_in, "%llu", &max_hash_size);
-
-		fclose (file_in);
-		return max_hash_size;
-	}
-}
-
-static void
-print_size ()
-{
-	unsigned long long size;
-	char suffix[3];
-	
-	size = get_max_hash_size ();
-	
-	if (size >= 1073741824)
-	{
-		size /= 1073741824;
-		snprintf (suffix, sizeof (suffix), "GB");
-	} else if (size >= 1048576)
-	{
-		size /= 1048576;
-		snprintf (suffix, sizeof (suffix), "MB");
-	} else if (size >= 1024)
-	{
-		size /= 1024;
-		snprintf (suffix, sizeof (suffix), "kB");
-	} else
-	{
-		snprintf (suffix, sizeof (suffix), "B");
-	}
-	xchat_printf (ph, "File size limit for checksums: %llu %s\n", size, suffix);
-}
-
-static void
-increase_max_hash_size ()
-{
-	unsigned long long size;
-	FILE * file_out;
-	char buffer[FILE_BUF_SIZE];
-
-	if (config_fail)
-	{
-		xchat_printf (ph, "Config file is unavailable, falling back to the default value\n");
-		print_size ();
-	} else
-	{
-		size = get_max_hash_size ();
-		if (size <= ULLONG_MAX/2)
-		{
-			size *= 2;
-		}
-		
-		snprintf (buffer, sizeof (buffer), "%s/checksum.conf", xchat_get_info (ph, "xchatdirfs"));
-		file_out = fopen (buffer, "w");
-		fprintf (file_out, "%llu\n", size);
-		fclose (file_out);
-		print_size ();
-	}
-}
-
-static void
-decrease_max_hash_size ()
-{
-	unsigned long long size;
-	FILE * file_out;
-	char buffer[FILE_BUF_SIZE];
-
-	if (config_fail)
-	{
-		xchat_printf (ph, "Config file is unavailable, falling back to the default value\n");
-		print_size ();
-	} else
-	{
-		size = get_max_hash_size ();
-		if (size >= 2)
-		{
-			size /= 2;
-		}
-		
-		snprintf (buffer, sizeof (buffer), "%s/checksum.conf", xchat_get_info (ph, "xchatdirfs"));
-		file_out = fopen (buffer, "w");
-		fprintf (file_out, "%llu\n", size);
-		fclose (file_out);
-		print_size ();
-	}
-}
-
-static int
-dccrecv_cb (char *word[], void *userdata)
-{
-	int result;
-	struct stat64 buffer;									/* buffer for storing file info */
-	char sum[65];											/* buffer for checksum */
-
-	result = stat64 (word[2], &buffer);
-	if (result == 0)										/* stat returns 0 on success */
-	{
-		if (buffer.st_size <= get_max_hash_size ())
-		{
-			sha256_file (word[2], sum);						/* word[2] is the full filename */
-			/* try to print the checksum in the privmsg tab of the sender */
-			xchat_set_context (ph, xchat_find_context (ph, NULL, word[3]));
-			xchat_printf (ph, "SHA-256 checksum for %s (local):  %s\n", word[1], sum);
-		} else
-		{
-			xchat_set_context (ph, xchat_find_context (ph, NULL, word[3]));
-			xchat_printf (ph, "SHA-256 checksum for %s (local):  (size limit reached, no checksum calculated, you can increase it with /CHECKSUM INC)\n", word[1]);
-		}
-	} else
-	{
-		xchat_printf (ph, "File access error\n");
-	}
-
-	return XCHAT_EAT_NONE;
-}
-
-static int
-dccoffer_cb (char *word[], void *userdata)
-{
-	int result;
-	struct stat64 buffer;									/* buffer for storing file info */
-	char sum[65];											/* buffer for checksum */
-
-	result = stat64 (word[3], &buffer);
-	if (result == 0)										/* stat returns 0 on success */
-	{
-		if (buffer.st_size <= get_max_hash_size ())
-		{
-			sha256_file (word[3], sum);						/* word[3] is the full filename */
-			xchat_commandf (ph, "quote PRIVMSG %s :SHA-256 checksum for %s (remote): %s", word[2], word[1], sum);
-		} else
-		{
-			xchat_set_context (ph, xchat_find_context (ph, NULL, word[3]));
-			xchat_printf (ph, "quote PRIVMSG %s :SHA-256 checksum for %s (remote): (size limit reached, no checksum calculated)", word[2], word[1]);
-		}
-	} else
-	{
-		xchat_printf (ph, "File access error\n");
-	}
-
-	return XCHAT_EAT_NONE;
-}
-
-static void
-checksum (char *word[], void *userdata)
-{
-	if (!stricmp ("GET", word[2]))
-	{
-		print_size ();
-	} else if (!stricmp ("INC", word[2]))
-	{
-		increase_max_hash_size ();
-	} else if (!stricmp ("DEC", word[2]))
-	{
-		decrease_max_hash_size ();
-	} else
-	{
-		xchat_printf (ph, "Usage: /CHECKSUM GET|INC|DEC\n");
-		xchat_printf (ph, "  GET - print the maximum file size to be hashed\n");
-		xchat_printf (ph, "  INC - double the maximum file size to be hashed\n");
-		xchat_printf (ph, "  DEC - halve the maximum file size to be hashed\n");
-	}
-}
-
-int
-xchat_plugin_init (xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)
-{
-	ph = plugin_handle;
-
-	*plugin_name = "Checksum";
-	*plugin_desc = "Calculate checksum for DCC file transfers";
-	*plugin_version = "2.0";
-
-	init ();
-
-	xchat_hook_command (ph, "CHECKSUM", XCHAT_PRI_NORM, checksum, "Usage: /CHECKSUM GET|INC|DEC", 0);
-	xchat_hook_print (ph, "DCC RECV Complete", XCHAT_PRI_NORM, dccrecv_cb, NULL);
-	xchat_hook_print (ph, "DCC Offer", XCHAT_PRI_NORM, dccoffer_cb, NULL);
-
-	xchat_print (ph, "Checksum plugin loaded\n");
-	return 1;
-}
-
-int
-xchat_plugin_deinit (void)
-{
-	xchat_print (ph, "Checksum plugin unloaded\n");
-	return 1;
-}
diff --git a/plugins/checksum/makefile.mak b/plugins/checksum/makefile.mak
deleted file mode 100644
index ec8e0455..00000000
--- a/plugins/checksum/makefile.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-all: checksum.obj checksum.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xcchecksum.dll /def:checksum.def checksum.obj 

-

-checksum.def:

-	echo EXPORTS > checksum.def

-	echo xchat_plugin_init >> checksum.def

-	echo xchat_plugin_deinit >> checksum.def

-

-checksum.obj: checksum.c makefile.mak

-	cl $(CFLAGS) /I.. checksum.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/ewc/COPYING b/plugins/ewc/COPYING
deleted file mode 100644
index 4362b491..00000000
--- a/plugins/ewc/COPYING
+++ /dev/null
@@ -1,502 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/plugins/ewc/ewc.c b/plugins/ewc/ewc.c
deleted file mode 100644
index 78e7e9ac..00000000
--- a/plugins/ewc/ewc.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*

-EasyWinampControl - A Winamp "What's playing" plugin for Xchat

-Copyright (C) Yann HAMON & contributors

-

-This library is free software; you can redistribute it and/or

-modify it under the terms of the GNU Lesser General Public

-License as published by the Free Software Foundation; either

-version 2.1 of the License, or (at your option) any later version.

-

-This library is distributed in the hope that it will be useful,

-but WITHOUT ANY WARRANTY; without even the implied warranty of

-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

-Lesser General Public License for more details.

-

-You should have received a copy of the GNU Lesser General Public

-License along with this library; if not, write to the Free Software

-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

-*/

-

-#include "xchat-plugin.h"

-#include <windows.h>

-

-static xchat_plugin *ph;   /* plugin handle */

-static int enable = 1;

-

-// For example, circularstrstr("winamp", "pwi", 3) would return 5 (the index of p)

-int circularstrstr(char* a, char* b, int nb)

-{

-  int equal = 1;

-  int length;

-  int pos=-1;

-  int i, j;

-

-  length = strlen(a);

-

-  for (i=0; i<length && pos == -1; ++i) {

-    equal = 1;

-    for (j=0; j<nb;j++) {

-      if (a[(i+j)%length] != b[j])

-        equal = 0;

-    }

-    if (equal == 1)

-      pos = i;

-  }

-

-  return pos;

-}

-

-void GetCurrentSongsName(HWND hwndWinamp, char* title, int titlesize)

-{

-  int pos;

-  char *title2;

-  int i, j=0;

-  int length;

-  char *p;

-

-  GetWindowText(hwndWinamp, title, titlesize);

-  length = strlen(title);

-

-  if ((pos = circularstrstr(title, "- Winamp ***", 12)) != -1) {

-    // The option "scroll song title in taskbar" is on

-    title2 = (char*) malloc (titlesize*sizeof(char));

-

-    for (i=(pos+12)%length; i!=pos; i=(i+1)%length)

-      title2[j++] = title[i];

-

-    title2[j] = '\0';

-

-    p = title2;

-    while (p<title2+titlesize && *p != '.')

-      p++;

-    p+=2; // Delete the . and the following white space

-

-    strcpy(title, p);

-    free(title2);

-  }

-  else {

-    p = title;

-    while (p<title+titlesize && *p != '.')

-      p++;

-    p+=2; // Delete the . and the following white space

-    if (p<title+titlesize)

-      strncpy(title, p, titlesize-(p-title));

-

-    // Delete the trailing "- winamp"

-    p = title + titlesize - 1;

-    while (p>title && *p != '-') p--;

-    *p = '\0';

-  }

-}

-

-

-// Controlling winamp

-static int wcmd_cb(char *word[], char *word_eol[], void *userdata)

-{

-  // Everything's here : http://winamp.com/nsdn/winamp2x/dev/sdk/api.php

-  // The previous url seems dead, see http://forums.winamp.com/showthread.php?threadid=180297

-  HWND hwndWinamp = NULL;

-

-  if ((hwndWinamp = FindWindow("Winamp v1.x",NULL)) == NULL) {

-    xchat_print(ph, "Winamp's window not found - Is winamp really running?\n");

-  }

-  else {

-    if (strcmp(word[1], "") == 0)

-      xchat_print(ph, "Usage: wcmd [command]\n");

-    else if (strcmp(word[2], "next") == 0) {

-      xchat_print(ph, "Loading next song...\n");

-      SendMessage (hwndWinamp, WM_COMMAND, 40048, 0);

-    }

-    else if (strcmp(word[2], "prev") == 0) {

-      xchat_print(ph, "Loading previous song...\n");

-      SendMessage (hwndWinamp, WM_COMMAND, 40044, 0);

-    }

-    else if (strcmp(word[2], "play") == 0) {

-      xchat_print(ph, "Playin'...\n");

-      SendMessage (hwndWinamp, WM_COMMAND, 40045, 0);

-    }

-    else if (strcmp(word[2], "stop") == 0) {

-      xchat_print(ph, "Winamp stopped!...\n");

-      SendMessage (hwndWinamp, WM_COMMAND, 40047, 0);

-    }

-    else if (strcmp(word[2], "pause") == 0) {

-      SendMessage (hwndWinamp, WM_COMMAND, 40046, 0);

-    }

-  }

-

-  return XCHAT_EAT_ALL;

-}

-

-

-// Display current song

-static int wp_cb(char *word[], char *word_eol[], void *userdata)

-{

-  HWND hwndWinamp = NULL;

-  int bitrate, length, elapsed, minutes, seconds, eminutes, eseconds, samplerate, nbchannels;

-  char elapsedtime[7];

-  char totaltime[7];

-  char this_title[1024];

-

-  if ((hwndWinamp = FindWindow("Winamp v1.x",NULL)) == NULL)

-    xchat_print(ph, "Winamp's window not found - Is winamp really running?\n");

-  else {

-    //Winamp's running

-    // Seems buggy when winamp2's agent is running, and winamp not (or winamp3) -> crashes xchat.

-    SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)125);

-

-    if ((samplerate = SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)126)) == 0) {

-      xchat_print(ph, "Could not get current song's samplerate... !?\n");

-      return XCHAT_EAT_ALL;

-    }

-    if ((bitrate = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)126)) == 0) {

-      xchat_print(ph, "Could not get current song's bitrate... !?\n");

-      return XCHAT_EAT_ALL;

-    }

-    if ((nbchannels = SendMessage(hwndWinamp, WM_USER, (WPARAM)2, (LPARAM)126)) == 0) {

-      xchat_print(ph, "Could not get the number of channels... !?\n");

-      return XCHAT_EAT_ALL;

-    }

-    if ((length = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)105)) == 0) {

-      // Could be buggy when streaming audio or video, returned length is unexpected;

-      // How to detect is Winamp is streaming, and display ??:?? in that case?

-      xchat_print(ph, "Could not get current song's length... !?\n");

-      return XCHAT_EAT_ALL;

-    }

-    else {

-      minutes = length/60;

-      seconds = length%60;

-

-      if (seconds>9)

-        wsprintf(totaltime, "%d:%d", minutes, seconds);

-      else

-        wsprintf(totaltime, "%d:0%d", minutes, seconds);

-    }

-    if ((elapsed = SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)105)) == 0) {

-      xchat_print(ph, "Could not get current song's elapsed time... !?\n");

-      return XCHAT_EAT_ALL;

-    }

-    else {

-      eminutes = (elapsed/1000)/60;   /* kinda stupid sounding, but e is for elapsed */

-      eseconds = (elapsed/1000)%60;

-

-      if (eseconds>9)

-        wsprintf(elapsedtime, "%d:%d", eminutes, eseconds);

-      else

-        wsprintf(elapsedtime, "%d:0%d", eminutes, eseconds);

-    }

-

-    if ((bitrate = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)126)) == 0) {

-      xchat_print(ph, "Could not get current song's bitrate... !?\n");

-      return XCHAT_EAT_ALL;

-    }

-

-    GetCurrentSongsName(hwndWinamp, this_title, 1024);

-

-    xchat_commandf(ph, "dispcurrsong %d %d %d %s %s %s", samplerate, bitrate, nbchannels, elapsedtime, totaltime, this_title);

-  }

-

-  return XCHAT_EAT_ALL;   /* eat this command so xchat and other plugins can't process it */

-}

-

-

-

-int xchat_plugin_init(xchat_plugin *plugin_handle,

-                      char **plugin_name,

-                      char **plugin_desc,

-                      char **plugin_version,

-                      char *arg)

-{

-  /* we need to save this for use with any xchat_* functions */

-  ph = plugin_handle;

-

-  *plugin_name = "EasyWinampControl";

-  *plugin_desc = "Some commands to remotely control winamp";

-  *plugin_version = "1.2";

-

-  xchat_hook_command(ph, "wp", XCHAT_PRI_NORM, wp_cb,

-                    "Usage: wp", 0);

-

-  xchat_hook_command(ph, "wcmd", XCHAT_PRI_NORM, wcmd_cb,

-                    "Usage: wcmd [play|pause|stop|prev|next]", 0);

-

-  xchat_print(ph, "EasyWinampControl plugin loaded\n");

-

-  return 1;       /* return 1 for success */

-}

-

-int xchat_plugin_deinit(void)

-{

-  xchat_print(ph, "EasyWinampControl plugin unloaded\n");

-  return 1;

-}

diff --git a/plugins/ewc/makefile.mak b/plugins/ewc/makefile.mak
deleted file mode 100644
index 9b9f21c1..00000000
--- a/plugins/ewc/makefile.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-all: ewc.obj ewc.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xcewc.dll /def:ewc.def ewc.obj

-

-ewc.def:

-	echo EXPORTS > ewc.def

-	echo xchat_plugin_init >> ewc.def

-	echo xchat_plugin_deinit >> ewc.def

-

-ewc.obj: ewc.c makefile.mak

-	cl $(CFLAGS) ewc.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/lua/lua.c b/plugins/lua/lua.c
deleted file mode 100644
index 9574fd4d..00000000
--- a/plugins/lua/lua.c
+++ /dev/null
@@ -1,1882 +0,0 @@
-/* 
- * X-Chat 2.0 LUA Plugin
- *
- * Copyright (c) 2007 Hanno Hecker
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-/*
- *	$Id: lua.c 91 2007-06-09 18:44:03Z vetinari $
- *	$Revision: 91 $
- *	$Date: 2007-06-09 20:44:03 +0200 (Szo, 09 jún. 2007) $
- */
-/* 
- * TODO:
- *   * compile (was OK)/run on IRIX
- *   ? localize error msgs? ... maybe later
- *   ? make xchat.print() like print() which does an tostring() on 
- *     everything it gets?
- *   ? add /LUA -s <code>? ... add a new script from cmdline... this state
- *        is not removed after the pcall(), but prints a name, which may
- *        be used to unload this virtual script. ... no xchat_register(),
- *        xchat_init() should be needed
- *        ... don't disable xchat.hook_* for this
- *   ? timer name per state/script and not per plugin?
- */
-#define LXC_NAME "Lua"
-#define LXC_DESC "Lua scripting interface"
-#define LXC_VERSION "0.7 (r91)"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "../../src/common/dirent.h"
-#include <errno.h>
-#include <ctype.h>
-
-#ifdef _WIN32
-#include <direct.h>	/* for getcwd */
-#endif
-
-#if !( defined(_WIN32) || defined(LXC_XCHAT_GETTEXT) )
-#  include <libintl.h>
-#endif
-
-#ifndef PATH_MAX /* hurd */
-# define PATH_MAX 1024 
-#endif
-
-#include <lua.h>
-#include <lauxlib.h>
-#include <lualib.h>
-
-#define lua_pop(L,n)  lua_settop(L, -(n)-1)
-
-#include "xchat-plugin.h"
-
-static xchat_plugin *ph; /* plugin handle */
-
-#define LXC_STRIP_COLOR 1
-#define LXC_STRIP_ATTR  2
-#define LXC_STRIP_ALL   (LXC_STRIP_COLOR|LXC_STRIP_ATTR)
-
-/* registered hooks */
-struct lxc_hooks {
-	const char *name;
-	xchat_hook *hook;
-	struct lxc_hooks *next;
-};
-
-/* single linked list of all lua states^Wscripts ;-)  */
-struct lxc_States {
-	lua_State *state;          /* the lua state of the script  */
-	char file[PATH_MAX+1];     /* the file name of the script  */
-	struct lxc_hooks *hooks;   /* all hooks this script registered */
-	void *gui;				/* the gui entry in windows->plugins and scripts... */
-	struct lxc_States *next;
-};
-
-static struct lxc_States *lxc_states = NULL;
-
-/* user/script supplied data for a callback */
-struct lxc_userdata {
-	int idx;					/* table index */
-	int type;				/* lua type:                          */	
-	const char *string;  /* only strings, ...                  */
-	double num;          /* numbers and booleans are supported */
-	struct lxc_userdata *next;	
-};
-
-/* callback data */
-struct lxc_cbdata {
-	lua_State *state;
-	const char *func;
-	xchat_hook *hook; /* timer ... */
-	struct lxc_userdata *data;
-};
-
-static char lxc_event_name[1024] = "\0";
-
-static int lxc_run_hook(char *word[], char *word_eol[], void *data);
-static int lxc_run_print(char *word[], void *data);
-static int lxc_run_timer(void *data);
-
-static int lxc_hook_command(lua_State *L);
-static int lxc_hook_server(lua_State *L);
-static int lxc_hook_print(lua_State *L);
-static int lxc_event(lua_State *L);
-static int lxc_hook_timer(lua_State *L);
-static int lxc_unhook(lua_State *L);
-
-static int lxc_command(lua_State *L);
-static int lxc_print(lua_State *L);
-static int lxc_emit_print(lua_State *L);
-static int lxc_send_modes(lua_State *L);
-static int lxc_find_context(lua_State *L);
-static int lxc_get_context(lua_State *L);
-static int lxc_get_info(lua_State *L);
-static int lxc_get_prefs(lua_State *L);
-static int lxc_set_context(lua_State *L);
-static int lxc_nickcmp(lua_State *L);
-
-static int lxc_list_get(lua_State *L);
-static int lxc_list_fields(lua_State *L);
-static int lxc_gettext(lua_State *L);
-
-static int lxc_bits(lua_State *L);
-
-static luaL_reg lxc_functions[] = {
-	{"hook_command",		lxc_hook_command },
-/* TODO:
-	{"hook_fd",				lxc_hook_fd      },
-*/
-	{"hook_print",			lxc_hook_print   },
-	{"hook_server",		lxc_hook_server  },
-	{"hook_timer",			lxc_hook_timer  },
-	{"unhook",				lxc_unhook  },
-
-	{"event",				lxc_event   },
-
-	{"command",				lxc_command  	  },
-	{"print", 				lxc_print     	  },
-	{"emit_print",			lxc_emit_print },
-	{"send_modes",			lxc_send_modes },
-	{"find_context",		lxc_find_context },
-	{"get_context",		lxc_get_context },
-	{"get_info",			lxc_get_info },
-	{"get_prefs",			lxc_get_prefs },
-	{"set_context",		lxc_set_context },
-
-	{"nickcmp", 			lxc_nickcmp 	},
-
-	{"list_get",			lxc_list_get },
- 	{"list_fields",		lxc_list_fields }, 
-
-   {"gettext",				lxc_gettext},
-/* helper function for bit flags */
-	{"bits",					lxc_bits },
-	{NULL, NULL}
-};
-
-static struct {
-	const char *name;
-	long value;
-} lxc_consts[] = {
-	{"EAT_NONE", 	XCHAT_EAT_NONE},
-	{"EAT_XCHAT", 	XCHAT_EAT_XCHAT},
-	{"EAT_PLUGIN",	XCHAT_EAT_PLUGIN},
-	{"EAT_ALL",		XCHAT_EAT_ALL},
-
-/* unused until hook_fd is done 
-	{"FD_READ",			XCHAT_FD_READ},
-	{"FD_WRITE",		XCHAT_FD_WRITE},
-	{"FD_EXCEPTION",	XCHAT_FD_EXCEPTION},
-	{"FD_NOTSOCKET",	XCHAT_FD_NOTSOCKET},
-   */
-
-	{"PRI_HIGHEST", 	XCHAT_PRI_HIGHEST},
-	{"PRI_HIGH", 		XCHAT_PRI_HIGH},
-	{"PRI_NORM", 		XCHAT_PRI_NORM},
-	{"PRI_LOW", 		XCHAT_PRI_LOW},
-	{"PRI_LOWEST", 	XCHAT_PRI_LOWEST},
-
-	/* for: clean = xchat.strip(dirty, xchat.STRIP_ALL) */
-	{"STRIP_COLOR",	LXC_STRIP_COLOR},
-	{"STRIP_ATTR",    LXC_STRIP_ATTR},
-	{"STRIP_ALL",     LXC_STRIP_ALL},
-
-   /* for xchat.commandf("GUI COLOR %d", xchat.TAB_HILIGHT) */
-	{"TAB_DEFAULT",  0},
-	{"TAB_NEWDATA",  1},
-	{"TAB_NEWMSG",   2},
-	{"TAB_HILIGHT",  3},
-
-	{NULL,				0}
-};
-
-
-#ifdef DEBUG
-static void stackDump (lua_State *L, const char *msg) {
-	int i, t;
-	int top = lua_gettop(L);
-
-	fprintf(stderr, "%s\n", msg);
-	for (i = 1; i <= top; i++) {  /* repeat for each level */
-	 t = lua_type(L, i);
-	 switch (t) {
-
-		case LUA_TSTRING:  /* strings */
-		  fprintf(stderr, "`%s'", lua_tostring(L, i));
-		  break;
-
-		case LUA_TBOOLEAN:  /* booleans */
-		  fprintf(stderr, lua_toboolean(L, i) ? "true" : "false");
-		  break;
-
-		case LUA_TNUMBER:  /* numbers */
-		  fprintf(stderr, "%g", lua_tonumber(L, i));
-		  break;
-
-		default:  /* other values */
-		  fprintf(stderr, "%s", lua_typename(L, t));
-		  break;
-
-	 }
-	 fprintf(stderr, "  ");  /* put a separator */
-  }
-  fprintf(stderr, "\n");  /* end the listing */
-}
-#endif /* DEBUG */
-
-static int lxc__newindex(lua_State *L)
-{
-	int i;
-	const char *name = lua_tostring(L, 2);
-
-	luaL_getmetatable(L, "xchat"); /* 4 */
-
-	lua_pushnil(L);                /* 5 */
-	while (lua_next(L, 4) != 0) {
-		if ((lua_type(L, -2) == LUA_TSTRING) 
-					&& strcmp("__index", lua_tostring(L, -2)) == 0)
-				break; /* now __index is 5, table 6 */	
-		lua_pop(L, 1);
-	}
-
-	lua_pushnil(L);
-	while (lua_next(L, 6) != 0) {
-		if ((lua_type(L, -2) == LUA_TSTRING)
-				&& strcmp(name, lua_tostring(L, -2)) == 0) {
-			for (i=0; lxc_consts[i].name; i++) {
-				if (strcmp(name, lxc_consts[i].name) == 0) {
-					luaL_error(L, 
-						"`xchat.%s' is a readonly constant", lua_tostring(L, 2));
-					return 0;
-				}
-			}
-		}
-		lua_pop(L, 1);
-	}
-
-	lua_pushvalue(L, 2);
-	lua_pushvalue(L, 3);
-	lua_rawset(L, 6);
-
-	lua_settop(L, 1);
-	return 0;
-}
-
-static int luaopen_xchat(lua_State *L)
-{
-	int i;
-/* 
- * wrappers for xchat.printf() and xchat.commandf() 
- * ... xchat.strip 
- */
-#define LXC_WRAPPERS  "function xchat.printf(...)\n" \
-						 "    xchat.print(string.format(unpack(arg)))\n" \
-						 "end\n" \
-						 "function xchat.commandf(...)\n" \
-						 "    xchat.command(string.format(unpack(arg)))\n" \
-						 "end\n" \
-						 "function xchat.strip(str, flags)\n" \
-						 "    if flags == nil then\n" \
-						 "        flags = xchat.STRIP_ALL\n" \
-						 "    end\n" \
-						 "    local bits = xchat.bits(flags)\n" \
-						 "    if bits[1] then\n" \
-						 "        str = string.gsub(\n" \
-						 "            string.gsub(str, \"\\3%d%d?,%d%d?\", \"\"),\n" \
-						 "                \"\\3%d%d?\", \"\")\n" \
-						 "    end\n" \
-						 "    if bits[2] then\n" \
-						 "        -- bold, beep, reset, reverse, underline\n" \
-						 "        str = string.gsub(str,\n" \
-						 "            \"[\\2\\7\\15\\22\\31]\", \"\")\n" \
-						 "    end\n" \
-						 "    return str\n" \
-						 "end\n"
-
-#if defined(LUA_VERSION_NUM) && (LUA_VERSION_NUM >= 501)
-	luaL_register(L, "xchat", lxc_functions);
-	(void)luaL_dostring(L, LXC_WRAPPERS);
-#else
-	luaL_openlib(L, "xchat", lxc_functions, 0);
-	lua_dostring(L, LXC_WRAPPERS);
-#endif
-	
-	luaL_newmetatable(L, "xchat");
-
-	lua_pushliteral(L, "__index");
-	lua_newtable(L); 
-
-	lua_pushstring(L, "ARCH");
-#ifdef _WIN32
-	lua_pushstring(L, "Windows");
-#else
-	lua_pushstring(L, "Unix");
-#endif
-	lua_settable(L, -3); /* add to table __index */
-
-	for (i=0; lxc_consts[i].name; i++) {
-		lua_pushstring(L, lxc_consts[i].name);
-		lua_pushnumber(L, lxc_consts[i].value);
-		lua_settable(L, -3); /* add to table __index */
-	}
-	lua_settable(L, -3); /* add to metatable */
-
-	lua_pushliteral(L, "__newindex");   
-	lua_pushcfunction(L, lxc__newindex); 
-	lua_settable(L, -3);                
-/* 
-	lua_pushliteral(L, "__metatable");
-	lua_pushstring(L, "nothing to see here, move along");
-	lua_settable(L, -3);               
-*/
-	lua_setmetatable(L, -2);
-	lua_pop(L, 1);
-	return 1;
-}
-
-lua_State *lxc_new_state() 
-{
-#if defined(LUA_VERSION_NUM) && (LUA_VERSION_NUM >= 501)
-	lua_State *L = luaL_newstate();     /* opens Lua */
-	luaL_openlibs(L);
-#else
-	lua_State *L = lua_open();     /* opens Lua */
-	luaopen_base(L);    /* opens the basic library */
-	luaopen_table(L);   /* opens the table library */
-	luaopen_io(L);      /* opens the I/O library */
-	luaopen_string(L);  /* opens the string lib. */
-	luaopen_math(L);    /* opens the math lib. */
-#endif
-
-	luaopen_xchat(L);
-	return L;
-}
-
-static int
-lxc_load_file(const char *script)
-{
-	lua_State *L;
-	struct lxc_States *state;  /* pointer to lua states list */
-	struct lxc_States *st;  /* pointer to lua states list */
-
-	L = lxc_new_state();
-	state = malloc(sizeof(struct lxc_States));
-	if (state == NULL) {
-		xchat_printf(ph, "malloc() failed: %s\n", strerror(errno));
-		lua_close(L);
-		return 0;
-	}
-
-	state->state = L;
-	snprintf(state->file, PATH_MAX, script);
-	state->next  = NULL;
-	state->hooks = NULL;
-	state->gui   = NULL;
-
-	if (luaL_loadfile(L, script) || lua_pcall(L, 0, 0, 0)) {
-		xchat_printf(ph, "Lua plugin: error loading script %s", 	
-							lua_tostring(L, -1));
-		lua_close(L);
-		free(state);
-		return 0;
-	}
-
-	if (!lxc_states) 
-		lxc_states = state;
-	else {
-		st = lxc_states;
-		while (st->next)
-			st = st->next;
-		st->next = state;
-	}
-
-	return 1;
-}
-
-static void
-lxc_autoload_from_path(const char *path)
-{
-	DIR *dir;
-	struct dirent *ent;
-	char *file;
-	int len;
-	/* xchat_printf(ph, "loading from %s\n", path); */
-	dir = opendir(path);
-	if (dir) {
-		while ((ent = readdir(dir))) {
-			len = strlen(ent->d_name);
-			if (len > 4 && strcasecmp(".lua", ent->d_name + len - 4) == 0) {
-				file = malloc(len + strlen(path) + 2);
-				if (file == NULL) {
-					xchat_printf(ph, "lxc_autoload_from_path(): malloc failed: %s",
-						strerror(errno));
-					break;
-				}
-				sprintf(file, "%s/%s", path, ent->d_name);
-				(void)lxc_load_file((const char *)file);
-				free(file);
-			}
-		}
-		closedir(dir);
-	}
-}
-
-void lxc_unload_script(struct lxc_States *state)
-{
-	struct lxc_hooks *hooks, *h;
-	struct lxc_cbdata *cb;
-	struct lxc_userdata *ud, *u;
-	lua_State *L = state->state;
-
-	lua_pushstring(L, "xchat_unload");
-	lua_gettable(L, LUA_GLOBALSINDEX);
-	if (lua_type(L, -1) == LUA_TFUNCTION) {
-		if (lua_pcall(L, 0, 0, 0)) {
-			xchat_printf(ph, "Lua plugin: error while unloading script %s", 	
-								lua_tostring(L, -1));
-			lua_pop(L, 1);
-		}
-	}
-
-	if (state->gui)
-		xchat_plugingui_remove(ph, state->gui);
-	state->gui = NULL;
-
-	hooks = state->hooks;
-	while (hooks) {
-		h     = hooks;
-		hooks = hooks->next;
-
-		cb    = xchat_unhook(ph, h->hook);
-		if (cb) {
-			ud    = cb->data;
-			while (ud) {
-				u  = ud;
-				ud = ud->next;
-				free(u);
-			}
-			free(cb);
-		}
-
-		free(h);
-	}
-	lua_close(state->state);
-}
-
-
-static int lxc_cb_load(char *word[], char *word_eol[], void *userdata)
-{
-	int len;
-	struct lxc_States *state;
-	lua_State *L;
-	const char *name, *desc, *vers;
-	const char *xdir = "";
-	char  *buf;
-	char file[PATH_MAX+1];
-	struct stat *st;
-
-	if (word_eol[2][0] == 0)
-		return XCHAT_EAT_NONE;
-	
-	buf = malloc(PATH_MAX + 1);
-	if (!buf) {
-		xchat_printf(ph, "malloc() failed: %s\n", strerror(errno));
-		return XCHAT_EAT_NONE;
-	}
-
-	st = malloc(sizeof(struct stat));
-	if (!st) {
-		xchat_printf(ph, "malloc() failed: %s\n", strerror(errno));
-		free(buf);
-		return XCHAT_EAT_NONE;
-	}
-
- 	len = strlen(word[2]);
-	if (len > 4 && strcasecmp (".lua", word[2] + len - 4) == 0) {
-#ifdef WIN32
-		if (strrchr(word[2], '\\') != NULL)
-#else
-		if (strrchr(word[2], '/') != NULL)
-#endif
-			strncpy(file, word[2], PATH_MAX);
-		else {
-			if (stat(word[2], st) == 0)
-				xdir = getcwd(buf, PATH_MAX);
-			else {
-				xdir = xchat_get_info(ph, "xchatdirfs");
-				if (!xdir) /* xchatdirfs is new for 2.0.9, will fail on older */
-					xdir = xchat_get_info (ph, "xchatdir");
-			}
-			snprintf(file, PATH_MAX, "%s/%s", xdir, word[2]);
-		}
-
-		if (lxc_load_file((const char *)file) == 0) {
-			free(st);
-			free(buf);
-			return XCHAT_EAT_ALL;
-		}
-
-		state = lxc_states;
-		while (state) {
-			if (state->next == NULL) {
-				L = state->state;
-
-				lua_pushstring(L, "xchat_register");
-				lua_gettable(L, LUA_GLOBALSINDEX);
-				if (lua_pcall(L, 0, 3, 0)) {
-					xchat_printf(ph, "Lua plugin: error registering script %s", 	
-								lua_tostring(L, -1));
-					lua_pop(L, 1);
-					free(st);
-					free(buf);
-					return XCHAT_EAT_ALL;
-				}
-
-				name = lua_tostring(L, -3);
-				desc = lua_tostring(L, -2);
-				vers = lua_tostring(L, -1);
-				lua_pop(L, 4); /* func + 3 ret value */
-				state->gui = xchat_plugingui_add(ph, state->file, 
-																 name, desc, vers, NULL
-															);
-
-				lua_pushstring(L, "xchat_init");
-				lua_gettable(L, LUA_GLOBALSINDEX);
-				if (lua_type(L, -1) != LUA_TFUNCTION) 
-					lua_pop(L, 1);
-				else {
-					if (lua_pcall(L, 0, 0, 0)) {
-						xchat_printf(ph, 
-									"Lua plugin: error calling xchat_init() %s", 	
-									lua_tostring(L, -1));
-						lua_pop(L, 1);
-					}
-				}
-				free(st);
-				free(buf);
-				return XCHAT_EAT_ALL;
-			}
-			state = state->next;
-		}
-	}
-	free(st);
-	free(buf);
-	return XCHAT_EAT_NONE;
-}
-
-static int lxc_cb_unload(char *word[], char *word_eol[], void *userdata)
-{
-	int len;
-	struct lxc_States *state;
-	struct lxc_States *prev = NULL;
-	char *file;
-
-	if (word_eol[2][0] == 0)
-		return XCHAT_EAT_NONE;
-
-	len = strlen(word[2]);
-	if (len > 4 && strcasecmp(".lua", word[2] + len - 4) == 0) {
-		state = lxc_states;
-		while (state) {
-			/* 
-			 * state->file is the full or relative path, always with a '/' inside,
-			 * even if loaded via '/LOAD script.lua'. So strrchr() will never
-			 * be NULL.
-			 * ... we just inspect the script name w/o path to see if it's the 
-			 * right one to unload
-			 */
-			file = strrchr(state->file, '/') + 1; 
-			if ((strcmp(state->file, word[2]) == 0) 
-					|| (strcasecmp(file, word[2]) == 0)) {
-				lxc_unload_script(state);
-				if (prev) 
-					prev->next = state->next;
-				else
-					lxc_states = state->next;
-				xchat_printf(ph, "Lua script %s unloaded", file);
-				free(state);
-				return XCHAT_EAT_ALL;
-			}
-			prev  = state;
-			state = state->next;
-		}
-	}
-	return XCHAT_EAT_NONE;
-}
-
-static int lxc_cb_lua(char *word[], char *word_eol[], void *userdata)
-{
-	lua_State *L = lxc_new_state();
-	if (word[2][0] == '\0') {
-		xchat_printf(ph, "LUA: Usage: /LUA LUA_CODE... execute LUA_CODE");
-		return XCHAT_EAT_ALL;
-	}
-	if (luaL_loadbuffer(L, word_eol[2], strlen(word_eol[2]), "/LUA")) {
-		xchat_printf(ph, "LUA: error loading line %s", lua_tostring(L, -1));
-		lua_pop(L, 1);
-	}
-
-#define LXC_HOOK_DISABLE "xchat.hook_command = nil\n" \
-								 "xchat.hook_server  = nil\n" \
-								 "xchat.hook_print   = nil\n" \
-								 "xchat.hook_timer   = nil\n"
-
-#if defined(LUA_VERSION_NUM) && (LUA_VERSION_NUM >= 501)
-	(void)luaL_dostring(L, LXC_HOOK_DISABLE);
-#else
-	lua_dostring(L, LXC_HOOK_DISABLE);
-#endif
-
-	if (lua_pcall(L, 0, 0, 0)) {
-		xchat_printf(ph, "LUA: error executing line %s", lua_tostring(L, -1));
-		lua_pop(L, 1);
-	}
-
-	lua_close(L);
-	return XCHAT_EAT_ALL;
-}
-
-int xchat_plugin_init(xchat_plugin *plugin_handle,
-                      char **plugin_name,
-                      char **plugin_desc,
-                      char **plugin_version,
-                      char *arg)
-{
-	struct lxc_States	*state;	
-	lua_State *L;
-	const char *xdir;
-	const char *name, *desc, *vers;
-   /* we need to save this for use with any xchat_* functions */
-   ph = plugin_handle;
-
-   /* tell xchat our info */
-   *plugin_name = LXC_NAME;
-   *plugin_desc = LXC_DESC;
-   *plugin_version = LXC_VERSION;
-
-	xchat_hook_command(ph, "LOAD", XCHAT_PRI_NORM, lxc_cb_load, NULL, NULL);
-	xchat_hook_command(ph, "UNLOAD", XCHAT_PRI_NORM, lxc_cb_unload, NULL, NULL);
-	xchat_hook_command(ph, "LUA", XCHAT_PRI_NORM, lxc_cb_lua, "Usage: LUA <code>, executes <code> in a new lua state", NULL);
-
-	xdir = xchat_get_info(ph, "xchatdirfs");
-	if (!xdir) /* xchatdirfs is new for 2.0.9, will fail on older */
-		xdir = xchat_get_info (ph, "xchatdir");
-		
-	lxc_autoload_from_path(xdir);
-
-	if (!lxc_states) /* no scripts loaded */
-		return 1;
-	
-	state = lxc_states;
-	while (state) {
-		L = state->state;
-		lua_pushstring(L, "xchat_register");
-		lua_gettable(L, LUA_GLOBALSINDEX);
-		if (lua_pcall(L, 0, 3, 0)) {
-			xchat_printf(ph, "Lua plugin: error registering script %s", 	
-								lua_tostring(L, -1));
-			lua_pop(L, 1);
-			state = state->next;
-			continue;
-		}
-
-		name = lua_tostring(L, -3);
-		desc = lua_tostring(L, -2);
-		vers = lua_tostring(L, -1);
-		lua_pop(L, 4); /* func + 3 ret value */
-		state->gui = xchat_plugingui_add(ph, state->file, name, desc, vers, NULL);
-
-		lua_pushstring(L, "xchat_init");
-		lua_gettable(L, LUA_GLOBALSINDEX);
-		if (lua_type(L, -1) != LUA_TFUNCTION) 
-			lua_pop(L, 1);
-		else {
-			if (lua_pcall(L, 0, 0, 0)) {
-				xchat_printf(ph, "Lua plugin: error calling xchat_init() %s", 	
-								lua_tostring(L, -1));
-				lua_pop(L, 1);
-			}
-		}
-		state = state->next;
-	}
-	xchat_printf(ph, "Lua interface (v%s) loaded", LXC_VERSION);
-	return 1; 
-}
-
-int xchat_plugin_deinit(xchat_plugin *plug_handle) 
-{
-	struct lxc_States *state, *st;
-
-	state = lxc_states;
-	while (state) {
-		lxc_unload_script(state);
-		xchat_printf(ph, "Lua script %s unloaded", state->file);
-		st    = state;
-		state = state->next;
-		free(st);
-	}
-	xchat_printf(plug_handle, "Lua plugin v%s removed", LXC_VERSION);
-	return 1;
-}
-
-/*
- * lua:  func_name(word, word_eol, data)
- * desc: your previously hooked callback function for hook_command() and
- *       hook_server(), you must return one of the xchat.EAT_* constants
- * ret:  none
- * args: 
- *       * word (table): the incoming line split into words (max 32)
- *       * word_eol (table): 
- *         for both see 
- *          http://xchat.org/docs/plugin20.html#word
- *       * data (table): the data table you passed to the hook_command() /
- *         hook_server() as 5th arg
- */
-static int lxc_run_hook(char *word[], char *word_eol[], void *data)
-{
-	struct lxc_cbdata *cb   = data;
-	lua_State *L            = cb->state;
-	struct lxc_userdata *ud = cb->data;
-	struct lxc_userdata *u;
-	int i;
-	lua_pushstring(L, cb->func);
-	lua_gettable(L, LUA_GLOBALSINDEX);
-
-	strcpy(lxc_event_name, word[0]);
-	lua_newtable(L);
-	for (i=1; i<=31 && word[i][0]; i++) {
-		lua_pushnumber(L, i);
-		lua_pushstring(L, word[i]);
-		lua_settable(L, -3);
-	}
-
-	lua_newtable(L);
-	for (i=1; i<=31 && word_eol[i][0]; i++) {
-		lua_pushnumber(L, i);
-		lua_pushstring(L, word_eol[i]);
-		lua_settable(L, -3);
-	}
-
-	lua_newtable(L);
-	u = ud;
-	while (u) {
-		lua_pushnumber(L, u->idx);
-		switch (u->type) {
-			case LUA_TSTRING:
-				lua_pushstring(L, u->string);
-				break;
-			case LUA_TNUMBER:
-				lua_pushnumber(L, u->num);
-				break;
-			case LUA_TBOOLEAN:
-				lua_pushboolean(L, (((int)u->num == 0) ? 0 : 1));
-				break;
-			default: /* LUA_TNIL or others */
-				lua_pushnil(L);
-				break;
-		}
-		lua_settable(L, -3);
-		u = u->next;
-	}
-
-	if (lua_pcall(L, 3, 1, 0)) {
-		xchat_printf(ph, "failed to call callback for '%s': %s", 
-				word[1], lua_tostring(L, -1)
-			);
-		lua_pop(L, 1);
-		return XCHAT_EAT_NONE;
-	}
-
-	if (lua_type(L, -1) != LUA_TNUMBER) {
-		xchat_printf(ph, "callback for '%s' did not return number...", word[1]);
-		return XCHAT_EAT_NONE;
-	}
-
-	i = (int)lua_tonumber(L, -1);
-	lua_pop(L, 1);
-	return i;
-}
-
-static int lxc_get_userdata(int pos, struct lxc_cbdata *cb)
-{
-	struct lxc_userdata *ud, *u;
-	lua_State *L = cb->state;
-	int i, t;
-
-	t = lua_type(L, pos);
-	if (t == LUA_TNIL)
-		return 1;
-	if (t != LUA_TTABLE)
-		return 0;
-
-	i = 1;
-	while (1) {
-		lua_pushnumber(L, i);
-		lua_gettable(L, -2);
-
-		t = lua_type(L, -1);
-		if (t == LUA_TNIL) {
-			lua_pop(L, 1);
-			break;
-		}
-
-		ud = malloc(sizeof(struct lxc_userdata));
-		if (!ud) {
-			xchat_printf(ph, "lxc_get_userdata(): failed to malloc: %s", 
-																strerror(errno));
-			if (cb->data != NULL) {
-				ud = cb->data;
-				while (ud) {
-					u  = ud;
-					ud = ud->next;
-					free(u);
-				}
-			}
-			/* free(cb); NO! */
-			lua_pushnil(L);
-			return 0;
-		}
-		ud->idx = i;
-		ud->next = NULL;
-		switch (t) {
-			case LUA_TSTRING:
-				ud->string = lua_tostring(L, -1);
-				ud->type   = LUA_TSTRING;
-				break;
-			case LUA_TNUMBER:
-				ud->num    = lua_tonumber(L, -1);
-				ud->type   = LUA_TNUMBER;
-				break;
-			case LUA_TBOOLEAN:
-				ud->num    = (double)lua_toboolean(L, -1);
-				ud->type   = LUA_TBOOLEAN;
-				break;
-			default:
-				ud->type   = LUA_TNIL;
-				break;
-		}
-		lua_pop(L, 1);
-
-		if (cb->data == NULL)
-			cb->data = ud;
-		else {
-			u = cb->data;
-			while (u->next)
-				u = u->next;
-			u->next = ud;
-		}
-		i++;
-	} /* END while (1) */
-	return 1;
-}
-
-/* 
- * lua:  xchat.hook_command(name, func_name, prio, help_str, data)
- * desc: Adds a new /command. This allows your program to handle commands 
- *       entered at the input box. To capture text without a "/" at the start 
- *       (non-commands), you may hook a special name of "". i.e 
- *           xchat.hook_command( "", ...)
- * 		Starting from version 2.6.8, commands hooked that begin with a 
- * 		period ('.') will be hidden in /HELP and /HELP -l. 
- * ret:  true... or false if something went wrong while registering hook
- * args: 
- *       * name (string): the name of the new command
- *       * func_name (string): the lua function to be called when command is
- *          entered
- *       * prio (number): use one of the xchat.PRIO_*
- *       * help_str (string): help for the new command... use nil for no help
- *       * data (table): table with strings, numbers and booleans, which will
- *         be passed to func_name as last argument.
- */
-static int lxc_hook_command(lua_State *L)
-{
-	xchat_hook *hook;
-	const char *help, *command, *func;
-	double prio;
-	struct lxc_hooks *hooks, *h;
-	struct lxc_States *st;
-	struct lxc_cbdata *cb;
-
-
-	if (lua_gettop(L) < 5) /* expand to five args if necessary */
-		lua_settop(L, 5);
-
-	cb = malloc(sizeof(struct lxc_cbdata));
-	if (!cb) {
-		xchat_printf(ph, "lxc_hook_command(): failed to malloc: %s", 
-																	strerror(errno));
-		lua_pushboolean(L, 0);
-		return 1;
-	}
-
-	cb->state = L;
-	cb->data = NULL;
-
-	command 	= luaL_checkstring(L, 1);
-	func     = luaL_checkstring(L, 2);
-	cb->func = func;
-	cb->hook = NULL;
-
-	if (lua_type(L, 3) == LUA_TNIL)
-		prio = XCHAT_PRI_NORM;
-	else
-		prio = luaL_checknumber(L, 3);
-
-	if (lua_type(L, 4) == LUA_TSTRING) {
-		help = luaL_checkstring(L, 4);
-		if (strlen(help) == 0)
-			help = NULL;
-	}
-	else
-		help = NULL;
-	
-	if (lxc_get_userdata(5, cb) == 0) 
-		lua_pushboolean(L, 0);
-	else {
-		h = malloc(sizeof(struct lxc_hooks));
-		if (!h) {
-			xchat_printf(ph, "lxc_hook_command(): failed to malloc: %s", 
-																	strerror(errno));
-			lua_pushboolean(L, 0);
-			return 1;
-		}
-		hook    = xchat_hook_command(ph, command, prio, lxc_run_hook, help, cb);
-		h->hook = hook;
-		h->name = command;
-		h->next = NULL;
-		st      = lxc_states;
-		while (st) {
-			if (st->state == L) {
-				if (!st->hooks) 
-					st->hooks = h;
-				else {
-					hooks     = st->hooks;
-					while (hooks->next) 
-						hooks = hooks->next;
-					hooks->next = h;
-				}
-				break;
-			}
-			st = st->next;
-		}
-		lua_pushboolean(L, 1);
-	}
-	return 1;
-}
-
-/*
- * lua:  func_name(word, data)
- * desc: your previously hooked callback function for hook_print(), 
- *       you must return one of the xchat.EAT_* constants
- * ret:  none
- * args: 
- *       * word (table): the incoming line split into words (max 32)
- *         (see http://xchat.org/docs/plugin20.html#word)
- *       * data (table): the data table you passed to the hook_print() /
- *         as 4th arg
- */
-static int lxc_run_print(char *word[], void *data)
-{
-	struct lxc_cbdata *cb = data;
-	lua_State *L          = cb->state;
-	int i;
-
-	lua_pushstring(L, cb->func);
-	lua_gettable(L, LUA_GLOBALSINDEX);
-
-	strcpy(lxc_event_name, word[0]);
-	lua_newtable(L);
-	for (i=1; i<=31 && word[i][0]; i++) {
-		lua_pushnumber(L, i);
-		lua_pushstring(L, word[i]);
-		lua_settable(L, -3);
-	}
-
-	if (lua_pcall(L, 1, 1, 0)) {
-		xchat_printf(ph, "failed to call callback for '%s': %s", 
-			word[1], lua_tostring(L, -1));
-		lua_pop(L, 1);
-		return 0;
-	}
-
-	if (lua_type(L, -1) != LUA_TNUMBER) {
-		xchat_printf(ph, "callback for '%s' didn't return number...", word[1]);
-		return XCHAT_EAT_NONE;
-	}
-	i = (int)lua_tonumber(L, -1);
-	lua_pop(L, 1);
-	return i;
-}
-
-/* 
- * lua:  xchat.hook_print(name, func_name, prio, data)
- * desc: Registers a function to trap any print events. The event names may 
- *       be any available in the "Advanced > Text Events" window. There are 
- *       also some extra "special" events you may hook using this function,
- *       see: http://xchat.org/docs/plugin20.html#xchat_hook_print
- * ret:  true... or false if something went wrong while registering hook
- * args: 
- *       * name (string): the name of the new command
- *       * prio (number): use one of the xchat.PRIO_*
- *       * func_name (string): the lua function to be called when command is
- *         entered
- *       * data (table): table with strings, numbers and booleans, which will
- *         be passed to func_name as last argument.
- */
-static int lxc_hook_print(lua_State *L)
-{
-	xchat_hook *hook;
-	struct lxc_hooks *hooks, *h;
-	struct lxc_States *st;
-	struct lxc_cbdata *cb = malloc(sizeof(struct lxc_cbdata));
-	const char *name, *func;
-	double prio;
-
-	if (!cb) {
-		luaL_error(L, "lxc_hook_print(): failed to malloc: %s", strerror(errno));
-		return 0;
-	}
-
-	if (lua_gettop(L) < 4) /* expand to 4 args if necessary */
-		lua_settop(L, 4);
-
-	name = luaL_checkstring(L, 1);
-	func = luaL_checkstring(L, 2);
-	if (lua_type(L, 3) == LUA_TNIL)
-		prio = XCHAT_PRI_NORM;
-	else
-		prio = luaL_checknumber(L, 3);
-
-	cb->state = L;
-	cb->func  = func;
-	cb->data  = NULL;
-	cb->hook  = NULL;
-
-	if (lxc_get_userdata(4, cb) == 0) 
-		lua_pushboolean(L, 0);
-	else {
-		h = malloc(sizeof(struct lxc_hooks));
-		if (!h) {
-			xchat_printf(ph, "lxc_hook_print(): failed to malloc: %s", 
-																	strerror(errno));
-			lua_pushboolean(L, 0);
-			return 1;
-		}
-		hook 	  = xchat_hook_print(ph, name, prio, lxc_run_print, cb); 
-		h->hook = hook;
-		h->name = name;
-		h->next = NULL;
-		st      = lxc_states;
-		while (st) {
-			if (st->state == L) {
-				if (!st->hooks)
-					st->hooks = h;
-				else {
-					hooks     = st->hooks;
-					while (hooks->next) 
-						hooks = hooks->next;
-					hooks->next = h;
-				}
-				break;
-			}
-			st = st->next;
-		}
-		lua_pushboolean(L, 1);
-	}
-	return 1;
-}
-
-/*
- * lua:  xchat.hook_server(name, func_name, prio, data)
- * desc: Registers a function to be called when a certain server event 
- *       occurs. You can use this to trap PRIVMSG, NOTICE, PART, a server 
- *       numeric etc... If you want to hook every line that comes from the 
- *       IRC server, you may use the special name of "RAW LINE".
- * ret:  true... or false if something went wrong while registering
- * args: 
- *       * name (string): the event name / numeric (yes, also as a string)
- *       * prio (number): one of the xchat.PRIO_* constants
- *       * func_name (string): the function to be called, when the event
- *           happens
- *       * data (table)... see xchat.hook_command()
- */
-static int lxc_hook_server(lua_State *L)
-{
-	xchat_hook *hook;
-	struct lxc_hooks *hooks, *h;
-	struct lxc_States *st;
-	const char *name, *func;
-	double prio;
-
-	struct lxc_cbdata *cb = malloc(sizeof(struct lxc_cbdata));
-	if (!cb) {
-		xchat_printf(ph, "lxc_hook_server(): failed to malloc: %s", 
-																	 strerror(errno));
-		lua_pushnil(L);
-		return 1;
-	}
-
-	if (lua_gettop(L) < 4) /* expand to 4 args if necessary */
-		lua_settop(L, 4);
-
-	name = luaL_checkstring(L, 1);
-	func = luaL_checkstring(L, 2);
-	if (lua_type(L, 3) == LUA_TNIL)
-		prio = XCHAT_PRI_NORM;
-	else
-		prio = luaL_checknumber(L, 3);
-
-	cb->state = L;
-	cb->func = func;
-	cb->data = NULL;
-	cb->hook = NULL;
-
-	if (lxc_get_userdata(4, cb) == 0) 
-		lua_pushboolean(L, 0);
-	else {
-		h = malloc(sizeof(struct lxc_hooks));
-		if (!h) {
-			xchat_printf(ph, "lxc_hook_server(): failed to malloc: %s", 
-																	strerror(errno));
-			lua_pushboolean(L, 0);
-			return 1;
-		}
-		hook    = xchat_hook_server(ph, name, prio, lxc_run_hook, cb); 
-		h->hook = hook;
-		h->name = name;
-		h->next = NULL;
-		st      = lxc_states;
-		while (st) {
-			if (st->state == L) {
-				if (!st->hooks)
-					st->hooks = h;
-				else {
-					hooks     = st->hooks;
-					while (hooks->next) 
-						hooks = hooks->next;
-					hooks->next = h;
-				}
-				break;
-			}
-			st = st->next;
-		}
-		lua_pushboolean(L, 1);
-	}
-	return 1;
-}
-
-/* 
- * lua:  xchat.hook_timer(timeout, func_name, data)
- * desc: Registers a function to be called every "timeout" milliseconds.
- * ret:  true (or false on error while registering)
- * args: 
- *       * timeout (number): Timeout in milliseconds (1000 is 1 second). 
- *       * func_name (string): Callback function. This will be called 
- *           every "timeout" milliseconds. 
- *       * data (table): see xchat.hook_command()
- */
-
-static unsigned long long lxc_timer_count = 0;
-
-static int lxc_hook_timer(lua_State *L)
-{
-	xchat_hook *hook;
-	struct lxc_hooks *hooks, *h;
-	struct lxc_States *st;
-	double timeout;
-	const char *func;
-	char name[32];
-
-	struct lxc_cbdata *cb = malloc(sizeof(struct lxc_cbdata));
-	if (!cb) {
-		luaL_error(L, "lxc_hook_timer(): failed to malloc: %s", strerror(errno));
-		lua_pushnil(L);
-		return 1;
-	}
-
-	if (lua_gettop(L) < 3) /* expand to 3 args if necessary */
-		lua_settop(L, 3);
-
-	timeout = luaL_checknumber(L, 1);
-	func    = luaL_checkstring(L, 2);
-
-	cb->state = L;
-	cb->func  = func;
-	cb->data  = NULL;
-
-	if (lxc_get_userdata(3, cb) == 0) 
-		lua_pushnil(L);
-	else {
-		h = malloc(sizeof(struct lxc_hooks));
-		if (!h) {
-			luaL_error(L, "lxc_hook_timer(): failed to malloc: %s", 
-				strerror(errno));
-			return 0;
-		}
-		hook 	   = xchat_hook_timer(ph, timeout, lxc_run_timer, cb); 
-		cb->hook = hook;
-		h->hook  = hook;
-		h->next  = NULL;
-		snprintf(name, 31, "timer%llu", lxc_timer_count++);
-		h->name  = name;
-		lua_pushstring(L, name);
-
-		st       = lxc_states;
-		while (st) {
-			if (st->state == L) {
-				if (!st->hooks)
-					st->hooks = h;
-				else {
-					hooks     = st->hooks;
-					while (hooks->next)
-						hooks = hooks->next;
-					hooks->next = h;
-				}
-				break;
-			}
-			st = st->next;
-		}
-	}
-	return 1;
-}
-
-static void lxc_unhook_timer(lua_State *L, xchat_hook *hook)
-{
-	struct lxc_States *state;
-	struct lxc_hooks *hooks, *h, *prev_hook;
-	struct lxc_cbdata *cb;
-	struct lxc_userdata *ud, *u;
-
-	prev_hook = NULL;
-	state = lxc_states;
-	while (state) {
-		if (state->state == L) {
-			hooks = state->hooks;
-			while (hooks) {
-				if (hooks->hook == hook) {
-					h  = hooks;
-					if (prev_hook)
-						prev_hook->next = hooks->next;
-					else
-						state->hooks = hooks->next;
-
-					cb = xchat_unhook(ph, h->hook);
-					if (cb) {
-						 ud = cb->data;
-						 while (ud) {
-							 u  = ud;
-							 ud = ud->next;
-							 free(u);
-						 }
-						 free(cb);
-					}
-
-					free(h);
-					return;
-				}
-				prev_hook = hooks;
-				hooks = hooks->next;
-			}
-			break;
-		}
-		state = state->next;
-	}
-}
-
-/* 
- * lua:  func_name(data)
- * desc: the callback function for the registered timer hook, return
- *       true to keep this timer going, false to stop it
- * ret:  none
- * args: 
- *       * data (table): the table you gave the hook_timer() as last
- *           argument
- */
- static int lxc_run_timer(void *data)
-{
-	int ret;
-	struct lxc_cbdata *cb = data;
-	xchat_hook *hook      = cb->hook;
-	lua_State *L          = cb->state;
-
-	lua_pushstring(L, cb->func);
-	lua_gettable(L, LUA_GLOBALSINDEX);
-
-	if (lua_pcall(L, 0, 1, 0)) {
-		xchat_printf(ph, "failed to call timer callback for '%s': %s", 
-			cb->func, lua_tostring(L, -1));
-		lua_pop(L, 1);
-		lxc_unhook_timer(L, hook);
-		return 0;
-	}
-
-	if (lua_type(L, -1) != LUA_TBOOLEAN) {
-		xchat_printf(ph, 
-			"timer callback for '%s' didn't return a boolean", cb->func);
-		lua_pop(L, 1);
-		lxc_unhook_timer(L, hook);
-		return 0;
-	}
-
-	ret = (lua_toboolean(L, -1) == 0) ? 0 : 1;
-	lua_pop(L, 1);
-
-	if (ret == 0)
-		lxc_unhook_timer(L, hook);
-
-	return ret;
-}
-
-/*
- * lua:  xchat.unhook(name)
- * desc: unhooks a previously hooked hook 
- * ret:  true if the hook existed, else false..
- * args: 
- *       * name (string): name of a registered hook (e.g. with 
- *         xchat.hook_command("whois", ... ) you would unhook "whois"
- *         ... see timer warnings... there's currently just one "timer"
- *         to unhook
- */
-static int lxc_unhook(lua_State *L)
-{
-	struct lxc_States *state;
-	struct lxc_hooks *hooks, *h, *prev_hook;
-	struct lxc_cbdata *cb;
-	struct lxc_userdata *ud, *u;
-	int done = 0;
-	const char *name = luaL_checkstring(L, 1);
-
-	prev_hook = NULL;
-	state = lxc_states;
-	while (state) {
-		if (state->state == L) {
-			hooks = state->hooks;
-			while (hooks) {
-				if (strcasecmp(hooks->name, name) == 0) {
-					h  = hooks;
-					if (prev_hook)
-						prev_hook->next = hooks->next;
-					else
-						state->hooks = hooks->next;
-
-					cb = xchat_unhook(ph, h->hook);
-					if (cb) {
-						ud = cb->data;
-						while (ud) {
-							u  = ud;
-							ud = ud->next;
-							free(u);
-						}
-						free(cb);
-					}
-
-					free(h);
-					done = 1;
-					break;
-				}
-				prev_hook = hooks;
-				hooks = hooks->next;
-			}
-			break;
-		}
-		state = state->next;
-	}
-	lua_pushboolean(L, done);
-	return 1;
-}
-
-static int lxc_event(lua_State *L)
-{
-	lua_pushstring(L, lxc_event_name);
-	return 1;
-}
-
-/* 
- * lua:  xchat.command(command) 
- * desc: executes a command as if it were typed in xchat's input box. 
- * ret:  none
- * args: 
- *       * command (string): command to execute, without the forward slash "/". 
- */
-static int lxc_command(lua_State *L)
-{
-	const char *command = luaL_checkstring(L, 1);
-	xchat_command(ph, command);
-	return 0;
-}
-
-/* 
- * lua:  xchat.print(text)
- * desc: Prints some text to the current tab/window.
- * ret:  none
- * args: 
- *       * text (string): the text to print
- */
-static int lxc_print(lua_State *L)
-{
-	const char *txt = luaL_checkstring(L, 1);
-	// FIXME? const char *txt = lua_tostring(L, 1);
-	xchat_print(ph, txt);
-	return 0;
-}
-
-/*
- * lua: xchat.emit_print(event, text, [text2, ...])
- * desc: Generates a print event. This can be any event found in the 
- *       Preferences > Advanced > Text Events window. The vararg parameter 
- *       list MUST be no longer than four (4) parameters. 
- *       Special care should be taken when calling this function inside a 
- *       print callback (from xchat.hook_print()), as not to cause endless 
- *       recursion. 
- * ret:  true on success, false on error
- * args: 
- *       * event (string): the event name from the references > Advanced > 
- *         Text Events window
- *       * text (string)
- *         text2 (string)
- *         ... (string(s)):
- *           parameters for the given event
- */
-static int lxc_emit_print(lua_State *L)
-{
-
-	int n = lua_gettop(L);
-	const char *text[5];
-	const char *event;
-	int i = 2;
-
-	if (n > 6)
-		luaL_error(L, "too many arguments to xchat.emit_print()");
-
-	event = luaL_checkstring(L, 1);
-	while (i <= n) {
-		text[i-2] = luaL_checkstring(L, i);
-		i++;
-	}
-	switch (n-1) {
-		case 0:
-			i = xchat_emit_print(ph, event, NULL);
-			break;
-		case 1:
-			i = xchat_emit_print(ph, event, text[0], NULL);
-			break;
-		case 2:
-			i = xchat_emit_print(ph, event, text[0], text[1], NULL);
-			break;
-		case 3:
-			i = xchat_emit_print(ph, event, text[0], text[1], text[2], NULL);
-			break;
-		case 4:
-			i = xchat_emit_print(ph, event, text[0], text[1], text[2], text[3], NULL);
-			break;
-	}
-	lua_pushboolean(L, (i == 0) ? 0 : 1);
-	return 1;
-}
-
-/* 
- * lua:  xchat.send_modes(targets, sign, mode [, modes_per_line])
- * desc: Sends a number of channel mode changes to the current channel. 
- *       For example, you can Op a whole group of people in one go. It may 
- *       send multiple MODE lines if the request doesn't fit on one. Pass 0 
- *       for modes_per_line to use the current server's maximum possible. 
- *       This function should only be called while in a channel context. 
- * ret:  none
- * args: 
- *       * targets (table): list of names
- *       * sign (string): mode sign, i.e. "+" or "-", only the first char of
- *            this is used (currently unchecked if it's really "+" or "-")
- *       * mode (string): mode char, i.e. "o" for opping, only the first 
- *            char of this is used (currently unchecked, what char)
- *       * modes_per_line (number): [optional] number of modes per line
- */
-static int lxc_send_modes(lua_State *L)
-{
-	int i = 1;
-	const char *name, *mode, *sign;
-	const char *targets[4096];
-	int num = 0; /* modes per line */
-
-	if (!lua_istable(L, 1)) {
-		luaL_error(L, 
-			"xchat.send_modes(): first argument is not a table: %s", 
-			lua_typename(L, lua_type(L, 1)));
-		return 0;
-	}
-
-	while (1) {
-		lua_pushnumber(L, i); /* push index on stack */
-		lua_gettable(L, 1);   /* and get the element @ index */
-		if (lua_isnil(L, -1)) { /* end of table */
-			lua_pop(L, 1);
-			break;
-		}
-
-		if (lua_type(L, -1) != LUA_TSTRING) { /* oops, something wrong */
-			luaL_error(L, 
-				"lua: xchat.send_modes(): table element #%d not a string: %s",
-				i, lua_typename(L, lua_type(L, -1)));
-			lua_pop(L, 1);
-			return 0;
-		}
-
-		name = lua_tostring(L, -1);
-		if (name == NULL) { /* this should not happen, but... */
-			lua_pop(L, 1);
-			break;
-		}
-
-		targets[i-1] = name;
-		lua_pop(L, 1); /* take index from stack */
-		++i;
-	}
-
-	sign = luaL_checkstring(L, 2);
-	if (sign[0] == '\0' || sign[1] != '\0') {
-		luaL_error(L, "argument #2 (mode sign) does not have length 1");
-		return 0;
-	}
-	if ((sign[0] != '+') && (sign[0] != '-')) {
-		luaL_error(L, "argument #2 (mode sign) is not '+' or '-'");
-		return 0;
-	}
-
-	mode = luaL_checkstring(L, 3);
-	if (mode[0] == '\0' || mode[1] != '\0') {
-		luaL_error(L, "argument #3 (mode char) does not have length 1");
-		return 0;
-	}
-	if (!isalpha((int)mode[0]) || !isascii((int)mode[0])) {
-		luaL_error(L, "argument #3 is not a valid mode character");
-		return 0;
-	}
-
-	if (lua_gettop(L) == 4)
-		num = luaL_checknumber(L, 4);
-	
-	xchat_send_modes(ph, targets, i-1, num, sign[0], mode[0]);
-	return 0;
-}
-
-/*
- * lua:  xchat.find_context(srv, chan)
- * desc: Finds a context based on a channel and servername. If servname is nil,
- *       it finds any channel (or query) by the given name. If channel is nil, 
- *       it finds the front-most tab/window of the given servname. If nil is 
- *       given for both arguments, the currently focused tab/window will be 
- *       returned.
- *       Changed in 2.6.1. If servname is nil, it finds the channel (or query)
- *       by the given name in the same server group as the current context. 
- *       If that doesn't exists then find any by the given name. 
- * ret:  context number (DON'T modify)
- * args: 
- *       * srv (string or nil): server name
- *       * chan (string or nil): channel / query name
- */
-static int lxc_find_context(lua_State *L)
-{
-	const char *srv, *chan;
-	long ctx;
-	xchat_context *ptr;
-
-	if (lua_type(L, 1) == LUA_TSTRING) {
-		srv = lua_tostring(L, 1);
-		if (srv[0] == '\0')
-			srv = NULL;
-	}
-	else
-		srv = NULL;
-	
-	if (lua_type(L, 2) == LUA_TSTRING) {
-		chan = lua_tostring(L, 2);
-		if (chan[0] == '\0')
-			chan = NULL;
-	}
-	else
-		chan = NULL;
-	
-	ptr = xchat_find_context(ph, srv, chan);
-	ctx = (long)ptr;
-#ifdef DEBUG
-	fprintf(stderr, "find_context(): %#lx\n", (long)ptr);
-#endif
-	lua_pushnumber(L, (double)ctx);
-	return 1;
-}
-
-/* 
- * lua:  xchat.get_context()
- * desc: Returns the current context for your plugin. You can use this later 
- *       with xchat_set_context. 
- * ret:  context number ... DON'T modifiy
- * args: none
- */
-static int lxc_get_context(lua_State *L)
-{
-	long ptr;
-	xchat_context *ctx = xchat_get_context(ph);
-	ptr = (long)ctx;
-#ifdef DEBUG
-	fprintf(stderr, "get_context(): %#lx\n", ptr);
-#endif
-	lua_pushnumber(L, (double)ptr);
-	return 1;
-}
-
-/* 
- * lua:  xchat.get_info(id)
- * desc: Returns information based on your current context.
- * ret:  the requested string or nil on error
- * args: 
- *       * id (string): the wanted information
- */
-static int lxc_get_info(lua_State *L)
-{
-	const char *id    = luaL_checkstring(L, 1);
-	const char *value = xchat_get_info(ph, id);
-	if (value == NULL)
-		lua_pushnil(L);
-	else
-		lua_pushstring(L, value);
-	return 1;
-}
-
-/*
- * lua:  xchat.get_prefs(name)
- * desc: Provides xchat's setting information (that which is available 
- *       through the /set command). A few extra bits of information are 
- *       available that don't appear in the /set list, currently they are:
- *       * state_cursor: Current input-box cursor position (characters, 
- *                       not bytes). Since 2.4.2.
- *       *id:            Unique server id. Since 2.6.1.
- * ret:  returns the string/number/boolean for the given config var
- *       or nil on error
- * args:
- *       * name (string): the wanted setting's name
- */
-static int lxc_get_prefs(lua_State *L)
-{
-	int i;
-	const char *str;
-	const char *name = luaL_checkstring(L, 1);
-	/* 
-	 * luckily we can store anything in a lua var... this makes the 
-	 * xchat lua api more user friendly ;-) 
-	 */
-	switch (xchat_get_prefs(ph, name, &str, &i)) { 
-		case 0: /* request failed */
-			lua_pushnil(L);
-			break;
-		case 1: 
-			lua_pushstring(L, str);
-			break;
-		case 2:
-			lua_pushnumber(L, (double)i);
-			break;
-		case 3:
-			lua_pushboolean(L, i);
-			break;
-		default: /* doesn't happen if xchat's C-API doesn't change ;-) */
-			lua_pushnil(L);
-			break;
-	}
-	return 1;
-}
-
-/*
- * lua:  xchat.set_context(ctx)
- * desc: Changes your current context to the one given. 
- * ret:  true or false 
- * args: 
- *       * ctx (number): the context (e.g. from xchat.get_context())
- */
-static int lxc_set_context(lua_State *L)
-{
-	double ctx = luaL_checknumber(L, 1);
-#ifdef DEBUG
-	fprintf(stderr, "set_context(): %#lx\n", (long)ctx);
-#endif
-	xchat_context *xc = (void *)(long)ctx;
-	lua_pushboolean(L, xchat_set_context(ph, xc));
-	return 1;
-}
-
-/*
- * lua:  xchat.nickcmp(name1, name2)
- * desc: Performs a nick name comparision, based on the current server 
- *       connection. This might be a RFC1459 compliant string compare, or 
- *       plain ascii (in the case of DALNet). Use this to compare channels 
- *       and nicknames. The function works the same way as strcasecmp. 
- * ret:  number ess than, equal to, or greater than zero if name1 is found, 
- *       respectively, to be less than, to match, or be greater than name2. 
- * args:
- *       * name1 (string): nick or channel name
- *       * name2 (string): nick or channel name
- */
-static int lxc_nickcmp(lua_State *L)
-{
-	const char *n1 = luaL_checkstring(L, 1);
-	const char *n2 = luaL_checkstring(L, 2);
-	lua_pushnumber(L, (double)xchat_nickcmp(ph, n1, n2));
-	return 1;
-}
-
-/* 
- * lua:  xchat.list_get(name)
- * desc: http://xchat.org/docs/plugin20.html#lists :)
- *       time_t values are stored as number => e.g.
- *         os.date("%Y-%m-%d, %H:%M:%S", time_t_value)
- *       pointers (channel -> context) as number... untested if this works
- * ret:  table with tables with all keys=Name, value=(Type)... or nil on error
- * args: 
- *       * name (string): the wanted list
- */
-static int lxc_list_get(lua_State *L)
-{
-	const char *name          = luaL_checkstring(L, 1); 
-	int i; /* item index */
-	int l; /* list index */
-	const char *str;
-	double      num;
-	time_t     date;
-	long        ptr;
-	const char *const *fields = xchat_list_fields(ph, name);
-	xchat_list *list          = xchat_list_get(ph, name);
-
-	if (!list) {
-		lua_pushnil(L);
-		return 1;
-	}
-	lua_newtable(L);
-	/* this is like the perl plugin does it ;-) */
-	l = 1;
-	while (xchat_list_next(ph, list)) {
-		i = 0;
-		lua_pushnumber(L, l);
-		lua_newtable(L);
-		while (fields[i] != NULL) {
-			switch (fields[i][0]) {
-				case 's':
-					str = xchat_list_str(ph, list, fields [i] + 1);
-					lua_pushstring(L, fields[i]+1);
-					if (str != NULL)
-						lua_pushstring(L, str);
-					else 
-						lua_pushnil(L);
-					lua_settable(L, -3);
-					break;
-				case 'p':
-					ptr = (long)xchat_list_str(ph, list, fields [i] + 1);
-					num = (double)ptr;
-					lua_pushstring(L, fields[i]+1);
-					lua_pushnumber(L, num);
-					lua_settable(L, -3);
-					break;
-				case 'i':
-					num = (double)xchat_list_int(ph, list, fields[i] + 1);
-					lua_pushstring(L, fields[i]+1);
-					lua_pushnumber(L, num);
-					lua_settable(L, -3);
-					break;
-				case 't':
-					date = xchat_list_time(ph, list, fields[i] + 1);
-					lua_pushstring(L, fields[i]+1);
-					lua_pushnumber(L, (double)date);
-					lua_settable(L, -3);
-					break;
-			}
-			i++;
-		}
-		lua_settable(L, -3);
-		l++;
-	}
-	xchat_list_free(ph, list);
-	return 1;
-}
-
-/*
- * lua:  xchat.list_fields(name)
- * desc: returns the possible keys for name as table
- * ret:  table ;->
- * args: 
- *       * name (string): name of the wanted list ("channels", "dcc", 
- *            "ignore", "notify", "users")
- */
-static int lxc_list_fields(lua_State *L)
-{
-	const char *name = luaL_checkstring(L, 1);
-	const char *const *fields = xchat_list_fields(ph, name);
-	int i;
-
-	lua_newtable(L);
-	i = 0;
-	while (fields[i] != NULL) {
-		 lua_pushnumber(L, i);
-		 /* first char is the type ... */
-		 lua_pushstring(L, fields[i]+1);
-		 lua_settable(L, -3);
-	}
-	return 1;
-}
-
-/*
- * lua:  xchat.gettext(str)
- * desc: 
- */
-static int lxc_gettext(lua_State *L)
-{
-#if defined(_WIN32) || defined(LXC_XCHAT_GETTEXT)
-	lua_pushstring(L, xchat_gettext(ph, luaL_checkstring(L, 1)));
-#else
-	const char *dom;
-	const char *msgid = luaL_checkstring(L, 1);
-	if (lua_type(L,2) == LUA_TSTRING)
-			dom = lua_tostring(L, 2);
-	else
-			dom = "xchat";
-	lua_pushstring(L, dgettext(dom, msgid));
-#endif
-	return 1;
-}
-
-/*
- * lua:  xchat.bits(flags)
- * desc: returns a table of booleans if the bit at index (err... index-1) is
- *       set
- * ret:  table of booleans
- * args: 
- *       * flags (number)
-  */
-static int lxc_bits(lua_State *L)
-{
-	int flags = luaL_checknumber(L, 1);
-	int i;
-	lua_pop(L, 1);
-	lua_newtable(L);
-	for (i=0; i<16; i++) { /* at time of writing, the highest index was 9 ... */
-		lua_pushnumber(L, i+1);
-		lua_pushboolean(L, ((1<<i) & flags) == 0 ? 0 : 1);
-		lua_settable(L, -3);
-	}
-	return 1;
-}
-/* 
- * vim: ts=3 noexpandtab
- */
diff --git a/plugins/lua/makefile.mak b/plugins/lua/makefile.mak
deleted file mode 100644
index fbc94072..00000000
--- a/plugins/lua/makefile.mak
+++ /dev/null
@@ -1,20 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-DIRENTLIB = ..\..\src\common\dirent.lib

-

-all: lua.obj lua.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xclua.dll $(LUALIB).lib $(DIRENTLIB) /def:lua.def lua.obj 

-

-lua.def:

-	echo EXPORTS > lua.def

-	echo xchat_plugin_init >> lua.def

-	echo xchat_plugin_deinit >> lua.def

-

-lua.obj: lua.c makefile.mak

-	cl $(CFLAGS) /I.. /Dsnprintf=g_snprintf lua.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/makefile.mak b/plugins/makefile.mak
deleted file mode 100644
index d15c7f84..00000000
--- a/plugins/makefile.mak
+++ /dev/null
@@ -1,66 +0,0 @@
-all:
-	@cd checksum
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\lua
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\mpcinfo
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\python
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\tcl
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\upd
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-#	@cd ..\xdcc
-#	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\xtray
-	@-$(MAKE) /nologo /s /f makefile.mak $@
-	@cd ..\winamp
-	@-$(MAKE) /nologo /s /f makefile.mak $@	
-
-clean:
-	@del checksum\*.def
-	@del checksum\*.dll
-	@del checksum\*.exp
-	@del checksum\*.lib
-	@del checksum\*.obj
-	@del lua\*.def
-	@del lua\*.dll
-	@del lua\*.exp
-	@del lua\*.lib
-	@del lua\*.obj
-	@del mpcinfo\*.def
-	@del mpcinfo\*.dll
-	@del mpcinfo\*.exp
-	@del mpcinfo\*.lib
-	@del mpcinfo\*.obj
-	@del python\*.def
-	@del python\*.dll
-	@del python\*.exp
-	@del python\*.lib
-	@del python\*.obj
-	@del tcl\*.def
-	@del tcl\*.dll
-	@del tcl\*.exp
-	@del tcl\*.lib
-	@del tcl\*.obj
-	@del upd\*.def
-	@del upd\*.dll
-	@del upd\*.exp
-	@del upd\*.lib
-	@del upd\*.obj
-#	@del xdcc\*.def
-#	@del xdcc\*.dll
-#	@del xdcc\*.exp
-#	@del xdcc\*.lib
-#	@del xdcc\*.obj
-	@del xtray\*.def
-	@del xtray\*.dll
-	@del xtray\*.exp
-	@del xtray\*.lib
-	@del xtray\*.obj
-	@del winamp\*.def
-	@del winamp\*.dll
-	@del winamp\*.exp
-	@del winamp\*.lib
-	@del winamp\*.obj	
diff --git a/plugins/mpcinfo/functions.c b/plugins/mpcinfo/functions.c
deleted file mode 100644
index ed0632d4..00000000
--- a/plugins/mpcinfo/functions.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-typedef int (*MYPROC)(HWND,HWND,char*,char*,BOOL,BOOL); 
-
-int dllProc(char *name, char *data){
-    HINSTANCE hinstLib; 
-    hinstLib = LoadLibrary("mpcinfo");
-    //MYPROC proc;
-    int res;
-    if (hinstLib != NULL){
-       //proc = ;
-       if ((MYPROC) GetProcAddress(hinstLib, name)!=NULL){
-          res=(MYPROC)(NULL,NULL,data,NULL,TRUE,TRUE);
-       }
-       else{fprintf(stderr,"can't get proc: %s\n",name);res=-2;}
-    }
-    else{fprintf(stderr,"can't access dll\n");return -1;}
-    FreeLibrary(hinstLib);
-    return res;
-}
-*/
-
-/*
-int dllProc(char *name, char *data)
-{
-	static HMODULE lib = NULL;
-	if (!lib)
-	{
-		lib = LoadLibraryA ("mpcinfo");
-		if (!lib)
-		{
-			return FALSE;
-		}
-		FreeLibrary (lib);
-	}
-
-	return TRUE;
-}
-*/
-
-char *split(char *text, char seperator){
-     //if (DEBUG==1) putlog("splitting");
-     int i;int pos=-1;
-     for (i=0;i<strlen(text);i++){
-         if (text[i]==seperator){pos=i;i=strlen(text)+1;}
-     }
-     if (pos==-1) return text;
-     text[pos]=0;
-     return &(text[pos+1]);
-}
-
-int endsWith(char *text, char *suffix){
-    char *tmp=strstr(text,suffix);
-    if (tmp==NULL) return 0;
-    if (strlen(tmp)==strlen(suffix)) return 1;
-    return 0;
-}
-
-int inStr(char *s1, int sl1, char *s2){
-    //if (DEBUG==1) putlog("checking instr");
-	int i;int j;
-	for(i=0;i<sl1-strlen(s2);i++){
-		for (j=0;j<strlen(s2);j++){
-			if (s1[i+j]!=s2[j]) j=strlen(s2)+2;
-		}
-		if (j==strlen(s2)) return i;
-	}
-	return -1;
-}
-
-static char *subString(char *text, int first, int length, int spcKill){
-//if (DEBUG==1) putlog("creating substring");
-	char *ret=(char*) calloc (length+1,sizeof(char)); //malloc(sizeof(char)*(length+1));
-	int i;
-	ret[length]=0;
-	for (i=0;i<length;i++){
-		ret[i]=text[i+first];
-		//if (ret[i]==0) ret[i]='0';
-	}
-	if (spcKill==1){
-	   for (i=length-1;i>=0;i--){
-           if (ret[i]==32) ret[i]=0;
-           else i=-1;
-       }
-    }
-    //if (DEBUG==1) putlog("substring created");
-	return ret;
-}
-
-static char *substring(char *text, int first, int length){return subString(text,first,length,0);}
-
-
-char *readLine(FILE *f){
-     //if (DEBUG==1) putlog("reading line from file");
-     char *buffer=(char*)calloc(1024,sizeof(char)); //malloc(sizeof(char)*1024);
-     int pos=0;
-     int cc=0;
-     while((cc!=EOF)&&(pos<1024)&&(cc!=10)){
-          cc=fgetc(f);
-          if ((cc!=10)&&(cc!=13)){
-             if (cc==EOF) buffer[pos]=0;
-             else buffer[pos]=(char)cc;pos++;
-          }
-     }
-     if (buffer[pos]==EOF) xchat_printf(ph,"EOF: %i\n",pos);
-     return buffer;
-}
-
-char *toUpper(char *text){
-     //if (DEBUG==1) putlog("converting text to upper case");
-     char *ret=(char*) calloc(strlen(text)+1,sizeof(char));
-     int i;
-     for (i=0;i<strlen(text);i++) ret[i]=toupper(text[i]);
-     ret[strlen(text)]=0;
-     //if (DEBUG==1) putlog("uc done");
-     return ret;
-}
-
-static char *str3cat(char *s1, char *s2, char *s3){
-       //if (DEBUG==1) putlog("cating 3 strings");
-       char *ret=(char*)calloc(strlen(s1)+strlen(s2)+strlen(s3)+1,sizeof(char));
-       strcpy(ret,s1);strcat(ret,s2);strcat(ret,s3);
-       ret[strlen(s1)+strlen(s2)+strlen(s3)]=0;
-       //if (DEBUG==1) putlog("strings cated");
-       return ret;
-}
-
-char *replace(char *text, char *from, char *to){
-     //if (DEBUG==1) putlog("replacing");
-     char *ret=(char*)calloc( strlen(text)+(strlen(to)-strlen(from)),sizeof(char));
-     char *left;
-     char *right;
-     int pos=inStr(text,strlen(text),from);
-     if (pos!=-1){
-           left=substring(text,0,pos);
-           right=substring(text,pos+strlen(from),strlen(text)-(pos+strlen(from)));          
-           ret=str3cat(left,to,right);
-           return replace(ret,from,to);
-     }
-     //if (DEBUG==1) putlog("replaced");
-     return text;
-}
-
-char *intReplaceF(char *text, char *from, int to, char *form){
-     //if (DEBUG==1) putlog("replaceF");
-     char *buffer=(char*) calloc(16,sizeof(char));
-     sprintf(buffer,form,to);
-     //if (DEBUG==1) putlog("replaceF done");
-     return replace(text,from,buffer);
-}
-
-char *intReplace(char *text, char *from, int to){return intReplaceF(text,from,to,"%i");}
diff --git a/plugins/mpcinfo/makefile.mak b/plugins/mpcinfo/makefile.mak
deleted file mode 100644
index 4a8a2763..00000000
--- a/plugins/mpcinfo/makefile.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-all: mpcinfo.obj mpcinfo.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xcmpcinfo.dll /def:mpcinfo.def mpcinfo.obj

-

-mpcinfo.def:

-	echo EXPORTS > mpcinfo.def

-	echo xchat_plugin_init >> mpcinfo.def

-	echo xchat_plugin_deinit >> mpcinfo.def

-

-mpcinfo.obj: mpcinfo.c makefile.mak

-	cl $(CFLAGS) $(GLIB) /I.. mpcinfo.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/mpcinfo/mp3Info.c b/plugins/mpcinfo/mp3Info.c
deleted file mode 100644
index f75ba9c4..00000000
--- a/plugins/mpcinfo/mp3Info.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-//#include <stdio.h>
-#include <sys/stat.h>
-//#include "functions.c"
-
-struct tagInfo{
-	int mode;
-	int cbr;
-	int bitrate;
-	unsigned int freq;
-	char *artist;
-	char *title;
-	char *album;
-	char *comment;
-	char *genre;
-	//int genre;
-	//int track;
-};
-
-static int RATES[2][3][15]={
-				{//mpeg2
-                    {-1,8,16,24,32,64,80,56,64,128,160,112,128,256,320},//layer3 (V2)    
-					{-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384},//layer2 (V2)
-					{-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448},//layer1 (V2)
-                },
-                {//mpeg1
-					{-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320},//layer3 (V1)
-					{-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384},//layer2 (V1)
-                    {-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448},//layer1 (V1)
-        }};
-static int FREQS[2][4]={{22050,24000,16000,-1},{44100,48000,32000,-1}};
-//static double FRATES[]={38.5,32.5,27.8,0.0};
-
-static char GENRES[][50]={"Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge","Hip-Hop","Jazz","Metal",
-"New Age","Oldies","Other","Pop","R&B","Rap","Reggae","Rock","Techno","Industrial",
-"Alternative","Ska","Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient","Trip-Hop","Vocal","Jazz+Funk",
-"Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound Clip","Gospel","Noise",
-"AlternRock","Bass","Soul","Punk","Space","Meditative","Instrumental Pop","Instrumental Rock","Ethnic","Gothic",
-"Darkwave","Techno-Industrial","Electronic","Pop-Folk","Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta",
-"Top 40","Christian Rap","Pop/Funk","Jungle","Native American","Cabaret","New Wave","Psychadelic","Rave","Showtunes",
-"Trailer","Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro","Musical","Rock & Roll","Hard Rock",
-
-//################## END OF OFFICIAL ID3 TAGS, WINAMP TAGS BELOW ########################################
-
-"Folk","Folk/Rock","National Folk","Swing","Fast Fusion","Bebob","Latin","Revival","Celtic","Bluegrass",
-"Avantgarde","Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band","Chorus","Easy Listening","Acoustic",
-"Humour","Speech","Chanson","Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus","Porn Groove",
-"Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Poweer Ballad","Rhytmic Soul","Freestyle",
-"Duet","Punk Rock","Drum Solo","A Capela","Euro-House","Dance Hall",
-
-//################## FOUND AT http://en.wikipedia.org/wiki/ID3 ###########################################
-
-"Goa","Drum & Bass","Club-House","Hardcore",
-"Terror","Indie","BritPop","Negerpunk","Polsk Punk","Beat","Christian Gangsta Rap","Heavy Metal","Black Metal","Crossover",
-"Contemporary Christian","Christian Rock","Merengue","Salsa","Thrash Metal","Anime","JPop","Synthpop"
-
-};
-
-static char MODES [][13]={"Stereo","Joint-Stereo","Dual-Channel","Mono"};
-
-int iPow(int x, int y){return (int)(pow((double)x,(double) y));}
-
-int str2int(char *text){
-    //if (DEBUG==1) putlog("converting string to int");
-    int i;
-    int ret=0;
-    for (i=1;i<=strlen(text);i++){
-        if ((text[strlen(text)-i]>57)||(text[strlen(text)-i]<48)){
-           xchat_printf(ph,"invalid char in string: %i",text[strlen(text)-i]);
-           return 255;
-        }
-        ret+=((int)text[strlen(text)-i]-48)*iPow(10,i-1);
-    }
-    //xchat_printf(ph, "str2int(%s)=%i",text,ret);
-    //if (DEBUG==1) putlog("int converted");
-    return ret;
-}
-/*
-static int getSize(char *file){
-    //if (DEBUG==1) putlog("reading filesize");
-	struct stat info;
-	if (stat(file,&info)!=0) return -1;
-	return info.st_size;
-}*/
-/*
-int inStr(char *s1, int sl1, char *s2){
-    //if (DEBUG==1) putlog("checking instr");
-	int i;int j;
-	for(i=0;i<sl1-strlen(s2);i++){
-		for (j=0;j<strlen(s2);j++){
-			if (s1[i+j]!=s2[j]) j=strlen(s2)+2;
-		}
-		if (j==strlen(s2)) return i;
-	}
-	return -1;
-}
-
-static char *subString(char *text, int first, int length, int spcKill){
-//if (DEBUG==1) putlog("creating substring");
-	char *ret=(char*) calloc (length+1,sizeof(char)); //malloc(sizeof(char)*(length+1));
-	ret[length]=0;int i;
-	for (i=0;i<length;i++){
-		ret[i]=text[i+first];
-		//if (ret[i]==0) ret[i]='0';
-	}
-	if (spcKill==1){
-	   for (i=length-1;i>=0;i--){
-           if (ret[i]==32) ret[i]=0;
-           else i=-1;
-       }
-    }
-    //if (DEBUG==1) putlog("substring created");
-	return ret;
-}
-
-static char *substring(char *text, int first, int length){return subString(text,first,length,0);} //1
-*/
-
-static char *tagExtract(char *tag, int tagLen, char* info){
-//if (DEBUG==1) putlog("extracting tag");
-	int pos, len, i;
-	pos=inStr(tag,tagLen,info);
-//xchat_printf(ph,"pos=%i",pos);
-	if (pos==-1) return "";//NULL;
-	//printf("position of %s = %i\n",info,pos);
-	len=0;
-	//for (i=pos;i<pos+10;i++)printf("tag[%i]=%i \n",i,tag[i]);
-	for (i=0;i<4;i++) {
-		len+=tag[pos+strlen(info)+i]*iPow(255,3-i);
-	}
-	//printf("Tag-Length: %i\n",len);
-	if (strcmp("COMM",info)!=0) return substring(tag,pos+7+strlen(info),len-1);//11
-	return substring(tag,pos+7+strlen(info),len-1);//11
-	//char *ct=substring(tag,pos+7+strlen(info),len-1);//11
-	//return substring(ct,strlen(ct)+1,len-1-strlen(ct)); //<-- do not understand, what i did here :(
-	
-}
-
-struct tagInfo readID3V1(char *file){
-//if (DEBUG==1) putlog("reading ID3V1");
-	FILE *f;
-	struct tagInfo ret;
-	int res, i, c, val;
-	char *tag;
-	char *id;
-	char *tmp;
-	tag = (char*) malloc(sizeof(char)*129);
-	ret.artist=NULL;
-	f=fopen(file,"rb");
-	if (f==NULL){
-       xchat_print(ph,"file not found while trying to read id3v1");
-       //if (DEBUG==1) putlog("file not found while trying to read id3v1");
-       return ret;
-    }
-	//int offset=getSize(file)-128;
-	res=fseek(f,-128,SEEK_END);
-	if (res!=0) {printf("seek failed\n");fclose(f);return ret;}
-	//long int pos=ftell(f);
-	//printf("position= %li\n",pos);
-	for (i=0;i<128;i++) {
-		c=fgetc(f);
-		if (c==EOF) {xchat_printf(ph,"read ID3V1 failed\n");fclose(f);return ret;}
-		tag[i]=(char)c;
-	}
-	fclose(f);
-	//printf("tag readed: \n");
-	id=substring(tag,0,3);
-	//printf("header: %s\n",id);
-	if (strcmp(id,"TAG")!=0){xchat_printf(ph,"no id3 v1 found\n");return ret;}
-	ret.title=subString(tag,3,30,1);
-	ret.artist=subString(tag,33,30,1);
-	ret.album=subString(tag,63,30,1);
-	ret.comment=subString(tag,97,30,1);
-	tmp=substring(tag,127,1);
-	//ret.genre=substring(tag,127,1);
-	
-	val=(int)tmp[0];
-	if (val<0)val+=256;
-	//xchat_printf(ph, "tmp[0]=%i (%i)",val,tmp[0]);
-	if ((val<148)&&(val>=0)) 
-       ret.genre=GENRES[val];//#############changed
-	else {
-         ret.genre="unknown";
-         //xchat_printf(ph, "tmp[0]=%i (%i)",val,tmp[0]);
-    }
-	//xchat_printf(ph, "tmp: \"%s\" -> %i",tmp,tmp[0]);
-	//xchat_printf(ph,"genre \"%s\"",ret.genre);
-	//if (DEBUG==1) putlog("id3v1 extracted");
-	return ret;
-}
-
-char *extractID3Genre(char *tag){
-     //if (DEBUG==1) putlog("extracting id3 genre");
-     if (tag[strlen(tag)-1]==')'){
-        tag[strlen(tag)-1]=0;
-        tag=&tag[1];
-        return GENRES[str2int(tag)];
-        //return tag;
-     }
-     else{
-          int i;
-          //xchat_print(ph, "Using 2 criteria");
-          for (i=0;i<strlen(tag);i++){
-              if (tag[i]==')'){ tag=&tag[i]+1;return tag;}
-          //return tag;
-          }
-     }
-     return "[152] failed";
-}
-
-struct tagInfo readID3V2(char *file){
-//if (DEBUG==1) putlog("reading id3v2");
-	FILE *f;
-	int i, c, len;
-	char header[10];
-	char *tag;
-	struct tagInfo ret;
-
-	f = fopen(file,"rb");
-	//xchat_printf(ph,"file :%s",file);
-	if (f==NULL)
-	{
-       xchat_print(ph,"file not found whilt trying to read ID3V2");
-       //if (DEBUG==1)putlog("file not found while trying to read ID3V2");
-       return ret;
-    }
-
-	ret.artist=NULL;
-	for (i=0;i<10;i++){
-        c=fgetc(f);
-        if (c==EOF){
-           //putlog("found eof while reading id3v2");
-           return ret;
-        }
-        header[i]=(char)c;
-    }
-	if (strstr(header,"ID3")==header){
-		//xchat_printf(ph,"found id3v2\n");
-		len=0;
-		for (i=6;i<10;i++) len+=(int)header[i]*iPow(256,9-i);
-		
-		//char *tag=(char*)malloc(sizeof(char)*len);
-		tag=(char*) calloc(len,sizeof(char)); //malloc(sizeof(char)*len);
-		for (i=0;i<len;i++){c=fgetc(f);tag[i]=(char)c;}
-//xchat_printf(ph,"tag length: %i\n",len);
-//xchat_printf(ph,"tag: %s\n",tag);
-		fclose(f);
-		ret.comment=tagExtract(tag,len,"COMM");
-//xchat_printf(ph,"Comment: %s\n",ret.comment);
-		ret.genre=tagExtract(tag,len,"TCON");
-		//if (strcmp(ret.genre,"(127)")==0) ret.genre="unknown";
-//xchat_printf(ph, "ret.genre = %s",ret.genre);
-		if ((ret.genre!=NULL)&&(ret.genre[0]=='(')) ret.genre=extractID3Genre(ret.genre);
-//xchat_printf(ph,"genre: %s\n",ret.genre);
-		ret.title=tagExtract(tag,len,"TIT2");
-//xchat_printf(ph,"Title: %s\n",ret.title);
-		ret.album=tagExtract(tag,len,"TALB");
-//xchat_printf(ph,"Album: %s\n",ret.album);
-		ret.artist=tagExtract(tag,len,"TPE1");
-//xchat_printf(ph,"Artist: %s\n",ret.artist);
-	}
-	else{fclose(f);printf("no id3v2 tag found\n"); return ret;}
-	//printf("id2v2 done\n");
-	//if (DEBUG==1) putlog("id3v2 readed");
-	return ret;
-}
-
-struct tagInfo readHeader(char *file){
-//if (DEBUG==1) putlog("reading header");
-	FILE *f;
-	//int buffer[5120];
-	int versionB, layerB, bitrateB, freqB, modeB;
-	int header[4];
-	int count=0;
-	int cc=0;
-	struct tagInfo info;
-	info.artist=NULL;
-
-	f = fopen(file,"rb");
-	if (f==NULL)
-	{
-       xchat_print(ph,"file not found while trying to read mp3 header");
-       //if (DEBUG==1) putlog("file not found while trying to read mp3 header");
-       return info;
-    }
-	//struct tagInfo tagv2
-	
-	info=readID3V2(file);
-	//struct tagInfo tagv1;//=readID3V1(file);
-	//if 	(tagv2.artist!=NULL){info=tagv2;}
-	//else {
-	if (info.artist==NULL){
-		//printf("searching for id3v1\n");
-		//tagv1=readID3V1(file);
-		info=readID3V1(file); //#####################
-	}
-	/*
-	if (tagv1.artist!=NULL){
-		//printf("Artist: %s\nTitle: %s\nAlbum: %s\nComment: %s\nGenre: %s\n",tagv1.artist,tagv1.title,tagv1.album,tagv1.comment,tagv1.genre);
-		info=tagv1;
-	}
-	*/
-	while ((count<5120)&&(cc!=EOF)&&(cc!=255)) {cc=fgetc(f);count++;}
-	if ((cc==EOF)||(count==5119)) printf("no header found\n");
-	else {
-		//printf("located header at %i\n",count);
-		header[0]=255;
-		for (count=1;count<4;count++){
-			header[count]=fgetc(f);
-			//printf("header[%i]=%i\n",count,header[count]);
-		}
-		versionB=(header[1]&8)>>3;
-		layerB=(header[1]&6)>>1;
-		bitrateB=(header[2]&240)>>4; //4
-		freqB=(header[2]&12)>>2;//2
-		modeB=(header[3]&192)>>6;//6
-		//printf("Mpeg: %i\nLayer: %i\nBitrate: %i\nFreq: %i\nMode: %i\n",versionB, layerB, bitrateB, freqB, modeB);
-		//int Bitrate=RATES[versionB][layerB-1][bitrateB];
-		//int Freq=FREQS[versionB][freqB];
-		info.bitrate=RATES[versionB][layerB-1][bitrateB];
-		info.freq=FREQS[versionB][freqB];
-		info.mode=modeB;	
-	}
-	fclose(f);
-	//if (DEBUG==1) putlog("header readed");
-	return info;
-}
-/*
-static void printMp3Info(char *file){
-	//printf("\nScanning Mp3-File for Informations: %s\n",file);
-	//printf("size:\t%10d byte\n",getSize(file));
-	struct tagInfo info =readHeader(file);
-	printf("%s | %10d",file,getSize(file));
-	if  (info.bitrate>0){
-		//printf("Bitrate: %i\nFreq: %i\nMode: %s\n",info.bitrate,info.freq,MODES[info.mode]);
-		printf(" | %i kbps | %i kHz | %s",info.bitrate,info.freq,MODES[info.mode]);
-		//if (info.artist!=NULL) printf("\nArtist: %s\nTitle: %s\nAlbum: %s\nComment: %s\nGenre: %s\n",info.artist,info.title,info.album,info.comment,info.genre);
-		if (info.artist!=NULL) {
-			printf("| %s | %s | %s | %s | %s",info.artist,info.title,info.album,info.comment,info.genre);
-			//printf("| %s ",info.title);//,info.title,info.album,info.comment,info.genre
-		}
-	}
-	printf("\n");
-	
-}
-*/
diff --git a/plugins/mpcinfo/mpcInfo.c b/plugins/mpcinfo/mpcInfo.c
deleted file mode 100644
index e467e516..00000000
--- a/plugins/mpcinfo/mpcInfo.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-//static int DEBUG=0;
-static char *VERSION="0.0.6";
-
-#include <windows.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <math.h>
-#include "xchat-plugin.h"
-static xchat_plugin *ph;
-
-#include "functions.c"
-#include "mp3Info.c"
-#include "oggInfo.c"
-#include "theme.c"
-
-static int print_themes (char *word[], char *word_eol[], void *userdata){
-       printThemes();
-       return XCHAT_EAT_ALL;
-}
-
-static int mpc_themeReload(char *word[], char *word_eol[], void *userdata){
-   themeInit();
-   loadThemes();
-   return XCHAT_EAT_ALL;
-}
-
-static int mpc_tell(char *word[], char *word_eol[], void *userdata){
-       char *tTitle, *zero, *oggLine, *line;
-	   struct tagInfo info;
-	   HWND hwnd = FindWindow("MediaPlayerClassicW",NULL);
-       if (hwnd==0) {xchat_command(ph, randomLine(notRunTheme));return XCHAT_EAT_ALL;}
-       
-       tTitle=(char*)malloc(sizeof(char)*1024);
-       GetWindowText(hwnd, tTitle, 1024);
-       zero=strstr(tTitle," - Media Player Classic");
-       if (zero!=NULL) zero[0]=0;
-       else xchat_print(ph,"pattern not found");
-       
-       if ((tTitle[1]==':')&&(tTitle[2]=='\\')){
-          //xchat_print(ph,"seams to be full path");
-          if (endsWith(tTitle,".mp3")==1){
-             //xchat_print(ph,"seams to be a mp3 file");
-             info = readHeader(tTitle);
-             
-             if ((info.artist!=NULL)&&(strcmp(info.artist,"")!=0)){
-                char *mode=MODES[info.mode];
-                //xchat_printf(ph,"mode: %s\n",mode);
-                char *mp3Line=randomLine(mp3Theme);
-                mp3Line=replace(mp3Line,"%art",info.artist);
-                mp3Line=replace(mp3Line,"%tit",info.title);
-                mp3Line=replace(mp3Line,"%alb",info.album);
-                mp3Line=replace(mp3Line,"%com",info.comment);
-                mp3Line=replace(mp3Line,"%gen",info.genre);
-                //mp3Line=replace(mp3Line,"%time",pos);
-                //mp3Line=replace(mp3Line,"%length",len);
-                //mp3Line=replace(mp3Line,"%ver",waVers);
-                //mp3Line=intReplace(mp3Line,"%br",br);
-                //mp3Line=intReplace(mp3Line,"%frq",frq);
-                
-                mp3Line=intReplace(mp3Line,"%br",info.bitrate);
-                mp3Line=intReplace(mp3Line,"%frq",info.freq);
-                mp3Line=replace(mp3Line,"%mode",mode);
-                //mp3Line=replace(mp3Line,"%size",size);
-                //mp3Line=intReplace(mp3Line,"%perc",perc);
-                //mp3Line=replace(mp3Line,"%plTitle",title);
-                mp3Line=replace(mp3Line,"%file",tTitle);
-                xchat_command(ph, mp3Line);
-                return XCHAT_EAT_ALL;
-             }
-          }
-          if (endsWith(tTitle,".ogg")==1){
-             xchat_printf(ph,"Ogg detected\n");
-             info = getOggHeader(tTitle);
-             if (info.artist!=NULL){
-                char *cbr;
-                if (info.cbr==1) cbr="CBR"; else cbr="VBR";
-                oggLine=randomLine(oggTheme);
-                //if (cue==1) oggLine=cueLine;
-                //xchat_printf(ph,"ogg-line: %s\n",oggLine);
-                oggLine=replace(oggLine,"%art",info.artist);
-                oggLine=replace(oggLine,"%tit",info.title);
-                oggLine=replace(oggLine,"%alb",info.album);
-                oggLine=replace(oggLine,"%com",info.comment);
-                oggLine=replace(oggLine,"%gen",info.genre);
-                //oggLine=replace(oggLine,"%time",pos);
-                //oggLine=replace(oggLine,"%length",len);
-                //oggLine=replace(oggLine,"%ver",waVers);
-                oggLine=intReplace(oggLine,"%chan",info.mode);
-                oggLine=replace(oggLine,"%cbr",cbr);
-                oggLine=intReplace(oggLine,"%br",info.bitrate/1000);//br);
-                oggLine=intReplace(oggLine,"%frq",info.freq);
-                //oggLine=replace(oggLine,"%size",size);
-                //oggLine=intReplace(oggLine,"%perc",perc);
-                //oggLine=replace(oggLine,"%plTitle",title);
-                oggLine=replace(oggLine,"%file",tTitle);
-                xchat_command(ph, oggLine);
-                return XCHAT_EAT_ALL;
-             }
-          }
-       }
-       line=randomLine(titleTheme);
-       line=replace(line,"%title", tTitle);
-       xchat_command(ph,line); 
-       return XCHAT_EAT_ALL;
-}
-
-int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg){
-	ph = plugin_handle;
-	*plugin_name = "mpcInfo";
-	*plugin_desc = "Information-Script for Media Player Classic"; 
-	*plugin_version=VERSION;
-
-	xchat_hook_command(ph, "mpc", XCHAT_PRI_NORM, mpc_tell,"no help text", 0);
-	xchat_hook_command(ph, "mpc_themes", XCHAT_PRI_NORM, print_themes,"no help text", 0);
-	xchat_hook_command(ph, "mpc_reloadthemes", XCHAT_PRI_NORM, mpc_themeReload,"no help text", 0);
-	xchat_command (ph, "MENU -ietc\\music.png ADD \"Window/Display Current Song (MPC)\" \"MPC\"");
-
-	themeInit();
-	loadThemes();
-	xchat_printf(ph, "%s %s plugin loaded\n",*plugin_name, VERSION);
-
-	return 1;
-}
-
-int
-xchat_plugin_deinit (void)
-{
-	xchat_command (ph, "MENU DEL \"Window/Display Current Song (MPC)\"");
-	xchat_print (ph, "mpcInfo plugin unloaded\n");
-	return 1;
-}
diff --git a/plugins/mpcinfo/oggInfo.c b/plugins/mpcinfo/oggInfo.c
deleted file mode 100644
index 83c2beb5..00000000
--- a/plugins/mpcinfo/oggInfo.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-static int getOggInt(char *buff, int beg, int bytes){
-//if (DEBUG==1) putlog("getOggInt");
-	int ret=0;
-	int i;
-	for (i=0;i<bytes;i++){
-		if (buff[i+beg]>=0) ret+=buff[i+beg]*iPow(256,i);else ret+=(256+buff[i+beg])*iPow(256,i);
-		//printf("[%i]=%i\n",i,buff[i+beg]);
-	}
-	return ret;
-}
-
-static char *upperStr(char *text){
-//if (DEBUG==1) putlog("converting text to uc");
-    //printf("upperStr(%s)\n",text);
-	int i;
-	char *ret=(char*) malloc(sizeof(char)*(strlen(text)+1));
-	ret[strlen(text)]=0;
-	for (i=0;i<strlen(text);i++) ret[i]=toupper(text[i]);
-	//printf("Result: %s\n",ret);
-	return ret;
-}
-
-struct tagInfo getOggHeader(char *file){
-//if (DEBUG==1) putlog("reading ogg header");
-	char header[4096];
-	int i, c;
-	int h1pos, h3pos, maxBr, nomBr, minBr, pos, count, tagLen;
-	char *sub;
-	char *name;
-	char *val;
-	char *HEADLOC1, *HEADLOC3, *HEADLOC5;
-	FILE *f;
-	struct tagInfo info;
-
-	info.artist=NULL;
-	f = fopen(file,"rb");
-	if (f==NULL){
-       xchat_print(ph,"file not found while trying to read ogg header");
-       //if (DEBUG==1) putlog("file not found while trying to read ogg header");
-       return info;
-    }
-
-	for (i=0;i<4095;i++) {c=fgetc(f);header[i]=(char)c;}
-	fclose(f);
-	HEADLOC1="_vorbis";
-	HEADLOC1[0]=1;
-	HEADLOC3="_vorbis";
-	HEADLOC3[0]=3;
-	HEADLOC5="_vorbis";
-	HEADLOC5[0]=5;
-	h1pos=inStr(header,4096,HEADLOC1);
-	h3pos=inStr(header,4096,HEADLOC3);
-	//int h5pos=inStr(header,4096,HEADLOC5); //not needed
-	
-	//printf("loc1: %i\n",h1pos);printf("loc3: %i\n",h3pos);printf("loc5: %i\n",h5pos);
-	maxBr=getOggInt(header,h1pos+7+9,4);
-	nomBr=getOggInt(header,h1pos+7+13,4);
-	minBr=getOggInt(header,h1pos+7+17,4);
-	info.freq=getOggInt(header,h1pos+7+5,4);
-	info.mode=header[h1pos+7+4];
-	info.bitrate=nomBr;
-	if (((maxBr==nomBr)&&(nomBr=minBr))||((minBr==0)&&(maxBr==0))||((minBr=-1)&&(maxBr=-1)) )info.cbr=1;else info.cbr=0;
-	printf("bitrates: %i|%i|%i\n",maxBr,nomBr,minBr);
-	printf("freq: %i\n",info.freq);
-	pos=h3pos+7;
-	pos+=getOggInt(header,pos,4)+4;
-	count=getOggInt(header,pos,4);
-	//printf("tags: %i\n",count);
-	pos+=4;
-
-	info.artist=NULL;info.title=NULL;info.album=NULL;info.comment=NULL;info.genre=NULL;
-	for (i=0;i<count;i++){
-		tagLen=getOggInt(header,pos,4);
-		//printf("taglength: %i\n",tagLen);
-		sub=substring(header,pos+4,tagLen);
-		name=upperStr(substring(sub,0,inStr(sub,tagLen,"=")));
-		val=substring(sub,inStr(sub,tagLen,"=")+1,tagLen-inStr(sub,tagLen,"=")-1);
-		//printf("Tag: %s\n",sub);
-		//printf("Name: %s\n",name);
-		//printf("value: %s\n",val);
-		if (strcmp(name,"ARTIST")==0) info.artist=val;
-		if (strcmp(name,"TITLE")==0) info.title=val;
-		if (strcmp(name,"ALBUM")==0) info.album=val;
-		if (strcmp(name,"GENRE")==0) info.genre=val;
-		if (strcmp(name,"COMMENT")==0) info.comment=val;
-		pos+=4+tagLen;
-	}
-	if (info.artist==NULL) info.artist="";
-	if (info.album==NULL) info.album ="";
-	if (info.title==NULL) info.title="";
-	if (info.genre==NULL) info.genre="";
-	if (info.comment==NULL) info.comment="";
-	
-	printf("Artist: %s\nTitle: %s\nAlbum: %s\n",info.artist,info.title, info.album);
-	printf("Genre: %s\nComment: %s\nMode: %i\nCBR: %i\n",info.genre,info.comment,info.mode,info.cbr);
-	//if (DEBUG==1) putlog("ogg header readed");
-	return info;
-}
-
-/*
-void printOggInfo(char *file){
-	printf("Scanning Ogg-File for Informations: %s\n",file);
-	printf("size:\t%10d byte\n",getSize(file));
-	struct tagInfo info = getOggHeader(file);
-}
-*/
diff --git a/plugins/mpcinfo/theme.c b/plugins/mpcinfo/theme.c
deleted file mode 100644
index 000c00b1..00000000
--- a/plugins/mpcinfo/theme.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <time.h>
-
-struct theme{
-       int size;
-       char **line;
-};
-
-static struct theme notRunTheme;
-static struct theme titleTheme;
-static struct theme mp3Theme;
-static struct theme oggTheme;
-
-
-void themeInit(){
-     //if (DEBUG==1) putlog("init theme");
-     /*mp3Theme.size=0;oggTheme.size=0;cueTheme.size=0;streamTheme.size=0;etcTheme.size=0;
-     stopTheme.size=0;pauseTheme.size=0;*/
-     
-     notRunTheme.size=0;titleTheme.size=0;
-     srand((unsigned int)time((time_t *)NULL));
-     //if (DEBUG==1) putlog("theme init done");
-}
-
-void printTheme(struct theme data){
-     int i;
-     for (i=0;i<data.size;i++) xchat_printf(ph,"line[%i]=%s\n",i,data.line[i]);
-}
-
-void printThemes(){
-     xchat_printf(ph,"\nNotRun-Theme:\n");printTheme(notRunTheme);
-     xchat_printf(ph,"\nMP3-Theme:\n");printTheme(mp3Theme);
-     xchat_printf(ph,"\nOGG-Theme:\n");printTheme(oggTheme);
-     xchat_printf(ph,"\nTitle-Theme:\n");printTheme(titleTheme);
-}
-
-void cbFix(char *line){
-     //if (DEBUG==1) putlog("cbfix");
-     int i, j;
-     for (i=0;i<strlen(line);i++){
-         if (line[i]=='%'){
-            if ((line[i+1]=='C')||(line[i+1]=='B')||(line[i+1]=='U')||(line[i+1]=='O')||(line[i+1]=='R')){
-               if(line[i+1]=='C') line[i]=3;
-               if(line[i+1]=='B') line[i]=2;
-               if(line[i+1]=='U') line[i]=37;
-               if(line[i+1]=='O') line[i]=17;
-               if(line[i+1]=='R') line[i]=26;
-
-               for (j=i+1;j<strlen(line)-1;j++) line[j]=line[j+1];
-               line[strlen(line)-1]=0;
-            }
-         }
-     }
-     //if (DEBUG==1) putlog("cbfix done");
-}
-
-struct theme themeAdd(struct theme data, char *info){
-       //if (DEBUG==1) putlog("adding theme");
-       struct theme ret;
-       char **newLine=(char **)calloc(data.size+1,sizeof(char*));
-       int i;
-       for (i=0;i<data.size;i++) newLine[i]=data.line[i];
-       cbFix(info);
-       newLine[data.size]=info;
-       ret.line=newLine;ret.size=data.size+1;
-       //if (DEBUG==1) putlog("theme added");
-       return ret;
-}
-
-void loadThemes(){
-    char *hDir, *hFile, *line, *val;
-	FILE *f;
-	xchat_print(ph,"loading themes\n");
-    hDir=(char*)calloc(1024,sizeof(char));
-    strcpy(hDir,xchat_get_info(ph,"xchatdirfs"));
-    hFile=str3cat(hDir,"\\","mpcInfo.theme.txt");
-    f = fopen(hFile,"r");
-    if(f==NULL)
-	{
-		xchat_print(ph,"no theme in homedir, checking global theme");
-		f=fopen("mpcInfo.theme.txt","r");
-    }
-	//xchat_printf(ph,"file_desc: %p\n",f);
-	if (f==NULL) xchat_print(ph, "no theme found, using hardcoded\n");
-	else {
-		if (f > 0)
-		{
-			line=" ";
-		} else
-		{
-			line="\0";
-		}
-
-		while (line[0]!=0)
-		{
-			line=readLine(f);
-			val=split(line,'=');
-			printf("line: %s\n",line);
-			printf("val: %s\n",val);
-			if (strcmp(toUpper(line),"OFF_LINE")==0) notRunTheme=themeAdd(notRunTheme,val);
-			if (strcmp(toUpper(line),"TITLE_LINE")==0) titleTheme=themeAdd(titleTheme,val);
-			if (strcmp(toUpper(line),"MP3_LINE")==0) mp3Theme=themeAdd(mp3Theme,val);
-			if (strcmp(toUpper(line),"OGG_LINE")==0) mp3Theme=themeAdd(oggTheme,val);
-		}
-		fclose(f);
-		xchat_print(ph, "theme loaded successfull\n");
-	}
-	if (notRunTheme.size==0) notRunTheme=themeAdd(notRunTheme,"say Media Player Classic not running");
-	if (titleTheme.size==0) titleTheme=themeAdd(titleTheme,"say Playing %title in Media Player Classic");
-	if (mp3Theme.size==0) mp3Theme=themeAdd(mp3Theme,"me listens to %art with %tit from %alb [%gen|%br kbps|%frq kHz|%mode] in Media Player Classic ");
-	if (oggTheme.size==0) oggTheme=themeAdd(oggTheme,"me listens to %art with %tit from %alb [%gen|%br kbps|%frq kHz|%chan channels] in Media Player Classic ");
-	//mp3Theme=themeAdd(mp3Theme,"me listens to %art with %tit from %alb [%time|%length|%perc%|%br kbps|%frq kHz|%mode] in Media Player Classic ");
-}
-
-int rnd(int max){
-    return rand()%max;
-}
-
-char *randomLine(struct theme data){
-     return data.line[rnd(data.size)];
-}
diff --git a/plugins/perl/makefile-510.mak b/plugins/perl/makefile-510.mak
deleted file mode 100644
index 60f6b2dc..00000000
--- a/plugins/perl/makefile-510.mak
+++ /dev/null
@@ -1,30 +0,0 @@
-include "..\..\src\makeinc.mak"
-
-DIRENTLIB = ..\..\src\common\dirent.lib
-TARGET = $(PERL510OUTPUT)
-
-all: $(TARGET)
-
-perl.def:
-	echo EXPORTS > perl.def
-	echo xchat_plugin_init >> perl.def
-	echo xchat_plugin_deinit >> perl.def
-	echo xchat_plugin_get_info >> perl.def
-
-perl.obj: perl.c
-	$(CC) $(CFLAGS) perl.c $(GLIB) /I$(PERL510PATH) /I.. /DPERL_DLL=\"$(PERL510LIB).dll\"
-
-perl.c: xchat.pm.h
-
-xchat.pm.h: lib/Xchat.pm lib/IRC.pm
-	perl.exe generate_header
-
-$(TARGET): perl.obj perl.def
-	$(LINK) /DLL /out:$(TARGET) perl.obj $(LDFLAGS) $(PERL510LIB).lib /libpath:$(PERL510PATH) /DELAYLOAD:$(PERL510LIB).dll $(DIRENTLIB) DELAYIMP.LIB user32.lib shell32.lib advapi32.lib /def:perl.def
-
-clean:
-	@del $(TARGET)
-	@del *.obj
-	@del perl.def
-	@del *.lib
-	@del *.exp
diff --git a/plugins/perl/makefile-512.mak b/plugins/perl/makefile-512.mak
deleted file mode 100644
index e4887ff9..00000000
--- a/plugins/perl/makefile-512.mak
+++ /dev/null
@@ -1,30 +0,0 @@
-include "..\..\src\makeinc.mak"
-
-DIRENTLIB = ..\..\src\common\dirent.lib
-TARGET = $(PERL512OUTPUT)
-
-all: $(TARGET)
-
-perl.def:
-	echo EXPORTS > perl.def
-	echo xchat_plugin_init >> perl.def
-	echo xchat_plugin_deinit >> perl.def
-	echo xchat_plugin_get_info >> perl.def
-
-perl.obj: perl.c
-	$(CC) $(CFLAGS) perl.c $(GLIB) /I$(PERL512PATH) /I.. /DPERL_DLL=\"$(PERL512LIB).dll\"
-
-perl.c: xchat.pm.h
-
-xchat.pm.h: lib/Xchat.pm lib/IRC.pm
-	perl.exe generate_header
-
-$(TARGET): perl.obj perl.def
-	$(LINK) /DLL /out:$(TARGET) perl.obj $(LDFLAGS) $(PERL512LIB).lib /libpath:$(PERL512PATH) /DELAYLOAD:$(PERL512LIB).dll $(DIRENTLIB) DELAYIMP.LIB user32.lib shell32.lib advapi32.lib /def:perl.def
-
-clean:
-	@del $(TARGET)
-	@del *.obj
-	@del perl.def
-	@del *.lib
-	@del *.exp
diff --git a/plugins/python/makefile.mak b/plugins/python/makefile.mak
deleted file mode 100644
index 8cbba3f5..00000000
--- a/plugins/python/makefile.mak
+++ /dev/null
@@ -1,25 +0,0 @@
-include "..\..\src\makeinc.mak"
-
-DIRENTLIB = ..\..\src\common\dirent.lib
-TARGET = $(PYTHONOUTPUT)
-
-all: $(TARGET)
-
-python.def:
-	echo EXPORTS > python.def
-	echo xchat_plugin_init >> python.def
-	echo xchat_plugin_deinit >> python.def
-	echo xchat_plugin_get_info >> python.def
-
-python.obj: python.c
-	$(CC) $(CFLAGS) /I.. /Dusleep=_sleep /DPATH_MAX=255 python.c $(GLIB) /I$(PYTHONPATH)\include /DPYTHON_DLL=\"$(PYTHONLIB).dll\"
-
-$(TARGET): python.obj python.def
-	$(LINK) /dll /out:$(TARGET) $(LDFLAGS) python.obj /libpath:$(PYTHONPATH)\libs $(PYTHONLIB).lib $(DIRENTLIB) $(LIBS) /def:python.def
-
-clean:
-	del $(TARGET)
-	del *.obj
-	del python.def
-	del *.lib
-	del *.exp
diff --git a/plugins/tcl/makefile.mak b/plugins/tcl/makefile.mak
deleted file mode 100644
index c88f5c4f..00000000
--- a/plugins/tcl/makefile.mak
+++ /dev/null
@@ -1,22 +0,0 @@
-include "..\..\src\makeinc.mak"
-
-TARGET = $(TCLOUTPUT)
-
-all: $(TARGET)
-
-tcl.def:
-	echo EXPORTS > tcl.def
-	echo xchat_plugin_init >> tcl.def
-	echo xchat_plugin_deinit >> tcl.def
-	echo xchat_plugin_get_info >> tcl.def
-
-tclplugin.obj: tclplugin.c
-	$(CC) $(CFLAGS) /I.. tclplugin.c /I$(TCLPATH)\include /DTCL_DLL=\"$(TCLLIB).dll\"
-
-$(TARGET): tclplugin.obj tcl.def
-	$(LINK) /dll /out:$(TARGET) $(LDFLAGS) tclplugin.obj /libpath:$(TCLPATH)\lib $(TCLLIB).lib /delayload:$(TCLLIB).dll delayimp.lib /def:tcl.def
-
-clean:
-	del $(TARGET)
-	del *.obj
-	del tcl.def
diff --git a/plugins/upd/makefile.mak b/plugins/upd/makefile.mak
deleted file mode 100644
index 34b54cb8..00000000
--- a/plugins/upd/makefile.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-all: upd.obj upd.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xcupd.dll /def:upd.def upd.obj

-

-upd.def:

-	echo EXPORTS > upd.def

-	echo xchat_plugin_init >> upd.def

-	echo xchat_plugin_deinit >> upd.def

-

-upd.obj: upd.c makefile.mak

-	cl $(CFLAGS) $(GLIB) /I.. upd.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/upd/upd.c b/plugins/upd/upd.c
deleted file mode 100644
index 001cd9d2..00000000
--- a/plugins/upd/upd.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* XChat-WDK
- * Copyright (c) 2010-2011 Berke Viktor.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <windows.h>
-#include <wininet.h>
-
-#include "xchat-plugin.h"
-
-static xchat_plugin *ph;   /* plugin handle */
-
-static char*
-check_version ()
-{
-	HINTERNET hINet, hFile;
-	hINet = InternetOpen ("Update Checker", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
-	
-	if (!hINet)
-	{
-		return "Unknown";
-	}
-
-	hFile = InternetOpenUrl (hINet, "http://xchat-wdk.googlecode.com/hg/version.txt", NULL, 0, 0, 0);
-	
-	if (hFile)
-	{
-		static char buffer[1024];
-		DWORD dwRead;
-		while (InternetReadFile (hFile, buffer, 1023, &dwRead))
-		{
-			if (dwRead == 0)
-			{
-				break;
-			}
-			buffer[dwRead] = 0;
-		}
-
-		InternetCloseHandle (hFile);
-		return buffer;
-	}
-	
-	InternetCloseHandle (hINet);
-	return "Unknown";
-}
-
-static void
-print_version ()
-{
-	char *version = check_version ();
-
-	if (strcmp (version, xchat_get_info (ph, "wdk_version")) == 0)
-	{
-		xchat_printf (ph, "You have the latest version of XChat-WDK installed!\n");
-	}
-	else if (strcmp (version, "Unknown") == 0)
-	{
-		xchat_printf (ph, "Unable to check for XChat-WDK updates!\n");
-	}
-	else
-	{
-		xchat_printf (ph, "An XChat-WDK update is available! You can download it from here:\nhttp://xchat-wdk.googlecode.com/files/XChat-WDK%%20%s.exe\n", version);
-	}
-}
-
-int
-xchat_plugin_init (xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)
-{
-	ph = plugin_handle;
-
-	*plugin_name = "Update Checker";
-	*plugin_desc = "Plugin for checking for XChat-WDK updates";
-	*plugin_version = "1.2";
-
-	xchat_hook_command (ph, "UPDCHK", XCHAT_PRI_NORM, print_version, 0, 0);
-	xchat_command (ph, "MENU -ietc\\download.png ADD \"Help/Check for Updates\" \"UPDCHK\"");
-
-	xchat_print (ph, "Update Checker plugin loaded\n");
-	print_version ();
-
-	return 1;       /* return 1 for success */
-}
-
-int
-xchat_plugin_deinit (void)
-{
-	xchat_command (ph, "MENU DEL \"Help/Check for updates\"");
-	xchat_print (ph, "Update Checker plugin unloaded\n");
-	return 1;
-}
diff --git a/plugins/winamp/makefile.mak b/plugins/winamp/makefile.mak
deleted file mode 100644
index 79adf87e..00000000
--- a/plugins/winamp/makefile.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-all: winamp.obj winamp.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xcwinamp.dll /def:winamp.def winamp.obj

-

-winamp.def:

-	echo EXPORTS > winamp.def

-	echo xchat_plugin_init >> winamp.def

-	echo xchat_plugin_deinit >> winamp.def

-

-winamp.obj: winamp.c makefile.mak

-	cl $(CFLAGS) /I.. winamp.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/winamp/winamp.c b/plugins/winamp/winamp.c
deleted file mode 100644
index 7201a875..00000000
--- a/plugins/winamp/winamp.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/********************* Winamp Plugin 0.3******************************
- *
- *   Distribution: GPL
- *
- *   Originally written by: Leo - leo.nard@free.fr
- *   Modified by: SilvereX - SilvereX@karklas.mif.vu.lt
- *   Modified again by: Derek Buitenhuis - daemon404@gmail.com
- *   Modified yet again by: Berke Viktor - berkeviktor@aol.com
- *********************************************************************/
-
-#include "windows.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "xchat-plugin.h"
-
-#define PLAYING 1
-#define PAUSED 3
-
-static xchat_plugin *ph;   /* plugin handle */
-
-BOOL winamp_found = FALSE;
-
-int status = 0;
-
-/* Slightly modified from X-Chat's log_escape_strcpy */
-static char *
-song_strcpy (char *dest, char *src)
-{
-	while (*src)
-	{
-		*dest = *src;
-		dest++;
-		src++;
-
-		if (*src == '%')
-		{
-			dest[0] = '%';
-			dest++;
-		}
-	}
-
-	dest[0] = 0;
-	return dest - 1;
-}
-
-static int
-winamp(char *word[], char *word_eol[], void *userdata)
-{
-
-char current_play[2048], *p;
-char p_esc[2048];
-char cur_esc[2048];
-char truc[2048];
-HWND hwndWinamp = FindWindow("Winamp v1.x",NULL);
-
-    if (hwndWinamp)
-	{
-	    {
-	        if (!stricmp("PAUSE", word[2]))
-			{
-			   if (SendMessage(hwndWinamp,WM_USER, 0, 104))
-				{
-			   	   SendMessage(hwndWinamp, WM_COMMAND, 40046, 0);
-			
-			       if (SendMessage(hwndWinamp, WM_USER, 0, 104) == PLAYING)
-			   	       xchat_printf(ph, "Winamp: playing");
-			       else
-                       xchat_printf(ph, "Winamp: paused");
-				}
-            }
-			else
-		        if (!stricmp("STOP", word[2]))
-			    {
-			       SendMessage(hwndWinamp, WM_COMMAND, 40047, 0);
-			       xchat_printf(ph, "Winamp: stopped");
-			    }
-			else
-			    if (!stricmp("PLAY", word[2]))
-			    {
-			         SendMessage(hwndWinamp, WM_COMMAND, 40045, 0);
-			         xchat_printf(ph, "Winamp: playing");
-			    }
-        	else
-
-			    if (!stricmp("NEXT", word[2]))
-			    {
-			         SendMessage(hwndWinamp, WM_COMMAND, 40048, 0);
-			         xchat_printf(ph, "Winamp: next playlist entry");
-			    }
-			else
-
-                if (!stricmp("PREV", word[2]))
-			    {
-			         SendMessage(hwndWinamp, WM_COMMAND, 40044, 0);
-			         xchat_printf(ph, "Winamp: previous playlist entry");
-			    }
-		    else
-
-                if (!stricmp("START", word[2]))
-			    {
-			         SendMessage(hwndWinamp, WM_COMMAND, 40154, 0);
-			         xchat_printf(ph, "Winamp: playlist start");
-			    }
-
-		    else
-
-                if (!word_eol[2][0])
-			    {
-					GetWindowText(hwndWinamp, current_play, sizeof(current_play));
-
-					if (strchr(current_play, '-'))
-					{
-	
-					p = current_play + strlen(current_play) - 8;
-					while (p >= current_play)
-					{
-						if (!strnicmp(p, "- Winamp", 8)) break;
-							p--;
-					}
-
-					if (p >= current_play) p--;
-	
-					while (p >= current_play && *p == ' ') p--;
-						*++p=0;
-	
-	
-					p = strchr(current_play, '.') + 1;
-
- 					song_strcpy(p_esc, p);
- 					song_strcpy(cur_esc, current_play);
-	
-					if (p)
-					{
-						sprintf(truc, "me is now playing:%s", p_esc);
-					}
-					else
-					{
-						sprintf(truc, "me is now playing:%s", cur_esc);
-					}
-	
-	   				xchat_commandf(ph, truc);
-	
-				}
-				else xchat_print(ph, "Winamp: Nothing being played.");
-			}
-		    else
-                xchat_printf(ph, "Usage: /WINAMP [PAUSE|PLAY|STOP|NEXT|PREV|START]\n");
-         }
-
-	}
-	else
-	{
-       xchat_print(ph, "Winamp not found.\n");
-	}
-	return XCHAT_EAT_ALL;
-}
-
-int
-xchat_plugin_init(xchat_plugin *plugin_handle,
-                      char **plugin_name,
-                      char **plugin_desc,
-                      char **plugin_version,
-                      char *arg)
-{
-	/* we need to save this for use with any xchat_* functions */
-	ph = plugin_handle;
-
-	*plugin_name = "Winamp";
-	*plugin_desc = "Winamp plugin for XChat";
-	*plugin_version = "0.5";
-
-	xchat_hook_command (ph, "WINAMP", XCHAT_PRI_NORM, winamp, "Usage: /WINAMP [PAUSE|PLAY|STOP|NEXT|PREV|START] - control Winamp or show what's currently playing", 0);
-   	xchat_command (ph, "MENU -ietc\\music.png ADD \"Window/Display Current Song (Winamp)\" \"WINAMP\"");
-
-	xchat_print (ph, "Winamp plugin loaded\n");
-
-	return 1;       /* return 1 for success */
-}
-
-int
-xchat_plugin_deinit(void)
-{
-	xchat_command (ph, "MENU DEL \"Window/Display Current Song (Winamp)\"");
-	xchat_print (ph, "Winamp plugin unloaded\n");
-	return 1;
-}
diff --git a/plugins/xdcc/makefile.mak b/plugins/xdcc/makefile.mak
deleted file mode 100644
index 0a12347e..00000000
--- a/plugins/xdcc/makefile.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-include "..\..\src\makeinc.mak"

-

-all: xdcc.obj xdcc.def

-	link $(LDFLAGS) $(LIBS) /dll /out:xcxdcc.dll /def:xdcc.def xdcc.obj

-

-xdcc.def:

-	echo EXPORTS > xdcc.def

-	echo xchat_plugin_init >> xdcc.def

-	echo xchat_plugin_deinit >> xdcc.def

-

-xdcc.obj: xdcc.c makefile.mak

-	cl $(CFLAGS) $(GLIB) /I.. xdcc.c

-

-clean:

-	del *.obj

-	del *.dll

-	del *.exp

-	del *.lib

diff --git a/plugins/xtray/bitmaps/sd.bmp b/plugins/xtray/bitmaps/sd.bmp
deleted file mode 100644
index 9d6b7f95..00000000
--- a/plugins/xtray/bitmaps/sd.bmp
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/callbacks.cpp b/plugins/xtray/callbacks.cpp
deleted file mode 100644
index 636c114e..00000000
--- a/plugins/xtray/callbacks.cpp
+++ /dev/null
@@ -1,734 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#define _WIN32_IE 0x0601

-

-#include <windows.h>

-#include <stdio.h>

-#include <commctrl.h>

-#include <tchar.h>

-#include "utility.h"

-#include "plugin.h"

-#include "xtray.h"

-#include "xchat.h"

-#include "callbacks.h"

-#include "resource.h"

-#include "sdTray.h"

-#include "sdAlerts.h"

-

-HWND	g_hPrefTabEvents;

-HWND	g_hPrefTabSettings;

-HWND	g_hPrefTabAlerts;

-HWND	g_hPrefTabAbout;

-bool	g_bCanQuit;

-int		g_iIsActive = 1;

-

-

-BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)

-{

-	TCHAR szTitle[10];

-	GetWindowText(hWnd, szTitle, 9);

-

-	if(_tcsstr(szTitle, _T("XChat [")))

-	{

-		g_hXchatWnd = hWnd;

-		return false;

-	}

-	

-	return true;

-}

-

-/***********************************************************************************************/

-/******* our xchat event call back, get the name and info for each event and save it ***********/

-/******* for our alerts later														***********/

-/***********************************************************************************************/

-int event_cb(char *word[], void *userdata)

-{

-	int iEvent = (int)userdata;

-

-	if(iEvent > 10 && iEvent != 21)

-		return XCHAT_EAT_NONE;

-

-	/***************************************************************************************/

-	/***** if the window is minimized or if we're allowed to show alerts when its not	 **/

-	/***** and if the option to show the specified alert is true and if we're even		**/

-	/***** allowed to show alerts at all then we show them (a bit confusing but it works) **/

-	/***************************************************************************************/

-	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)) && (g_dwPrefs & (1<<iEvent)))

-	{	

-		/*********************************/

-		/*********** Our Buffers *********/

-		/*********************************/

-		char			szInfo[512];

-		char			szName[64];

-		DWORD			dwInfoFlags;

-		int iTime		= g_iTime*1000;

-		char *szTemp	= NULL;

-

-		if(g_dwPrefs & (1<<PREF_KAOI))

-		{

-			iTime = 0;

-		}

-

-		switch(iEvent)

-		{

-		case CHAN_HILIGHT:

-			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);

-			_snprintf(szName, 64, "Hilight");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case CHAN_MESSAGE:

-			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);

-			_snprintf(szName, 64, "Channel Message");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case CHAN_TOPIC_CHANGE:

-			_snprintf(szInfo, 512, "%s has changed the topic to %s", word[1], word[2]);

-			_snprintf(szName, 64, "Topic Change: %s", word[3]);

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case CHAN_INVITE:

-			_snprintf(szInfo, 512, "%s has invited you into %s", word[1], word[2]);

-			_snprintf(szName, 64, "Invite");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case CHAN_KICKED:

-			_snprintf(szInfo, 512, "Kicked from %s by %s:\r\n%s", word[2], word[3], word[4]);

-			_snprintf(szName, 64, "Kick");

-			dwInfoFlags = NIIF_WARNING;

-			break;

-		case CHAN_BANNED:

-			_snprintf(szInfo, 512, "Cannot join #%s You are banned.", word[1]);

-			_snprintf(szName, 64, "Banned");

-			dwInfoFlags = NIIF_WARNING;

-			break;

-		case CTCP_GENERIC:

-			_snprintf(szInfo, 512, "%s:\r\nCTCP %s", word[2], word[1]);

-			_snprintf(szName, 64, "CTCP");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case PMSG_RECEIVE:

-			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);

-			_snprintf(szName, 64, "Private Message");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case SERV_DISCONNECT:

-			_snprintf(szInfo, 512, "Disconnected\r\nError: %s", word[1]);

-			_snprintf(szName, 64, "Disconnect");

-			dwInfoFlags = NIIF_ERROR;

-			break;

-		case SERV_KILLED:

-			_snprintf(szInfo, 512, "Killed(%s(%s))", word[1], word[2]);

-			_snprintf(szName, 64, "Server Admin has killed you");

-			dwInfoFlags = NIIF_ERROR;

-			break;

-		case SERV_NOTICE:

-			_snprintf(szInfo, 512, "Notice:\r\n%s: %s", word[1], word[2]);

-			_snprintf(szName, 64, "Notice");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		case 11:

-			_snprintf(szInfo, 512, ":\r\n%s: %s", word[1], word[2]);

-			_snprintf(szName, 64, "Notice");

-			dwInfoFlags = NIIF_INFO;

-			break;

-		}

-

-		/**************************************************************************************/

-		/***** Use windows instead of balloons, and if its a window should we keep it open ****/

-		/***** indefinately?															   ****/

-		/**************************************************************************************/

-		szTemp = xchat_strip_color(szInfo);

-

-		if(g_dwPrefs & (1<<PREF_UWIOB))

-		{

-			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, szName, iTime);

-		}

-		else

-		{

-			ShowBalloon(g_hXchatWnd, 1, szTemp, szName, iTime, dwInfoFlags);

-		}

-

-		free(szTemp);

-	}

-

-	if(g_dwPrefs & (1<<PREF_BLINK))

-	{

-		BlinkIcon(g_hXchatWnd, 1, g_hIcons[0], g_hIcons[(iEvent+1)], 700, 5);

-		

-	}

-

-	/***********************************/

-	/***** pass the events to xchat ****/

-	/***********************************/

-	return XCHAT_EAT_NONE;

-}

-

-int command_cb(char *word[], char *word_eol[], void *userdata)

-{

-	char szInfo[512];

-	char *szTemp	= NULL;

-	int iTime		= g_iTime*1000;

-

-	_snprintf(szInfo, 512, word_eol[2]);

-	szTemp = xchat_strip_color(szInfo);

-

-	if(g_dwPrefs & (1<<PREF_KAOI))

-	{

-		iTime = 0;

-	}

-

-	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)))

-	{

-		if(g_dwPrefs & (1<<PREF_UWIOB))

-		{

-			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, "Alert", iTime);

-		}

-		else

-		{

-			ShowBalloon(g_hXchatWnd, 1, szTemp, "Alert", iTime, NIIF_INFO);

-		}

-	}

-

-	free(szTemp);

-

-	return XCHAT_EAT_ALL;

-}

-

-LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	switch(msg)

-	{

-	case WM_CLOSE:

-		{

-			if((g_dwPrefs & (1<<PREF_MIOC)) && (g_bCanQuit == false))

-			{

-				/*******************************************/

-				/**** to autoaway or not to autoaway...  ***/

-				/*******************************************/

-				if(g_dwPrefs & (1<<PREF_AOM))

-				{

-					xchat_globally_away(g_szAway);

-				}

-

-				/**************************************************/

-				/**** Win32 API call to hide the window and	     **/

-				/**** save the fact that its minimized for later **/

-				/**************************************************/

-				g_iIsActive = 0;

-				ShowWindow(hWnd, SW_HIDE);

-

-				return 0;

-			}

-			else

-			{

-				if(g_hPrefDlg != NULL)

-				{

-					DestroyWindow(g_hPrefDlg);

-				}

-

-				StopBlink(hWnd, 1, g_hIcons[0]);

-				

-				if(sdAlertNum())

-				{

-					sdCloseAlerts();

-					HoldClose();

-					return 0;

-				}

-			}

-		}

-		break;

-	case WM_SIZE:

-		{

-			/******************************************/

-			/***** User wants to minimize xChat, ******/

-			/***** are we allowed to go to tray? ******/

-			/******************************************/

-			if((g_dwPrefs & (1<<PREF_TOT)) && (wparam == SIZE_MINIMIZED))

-			{

-				/*******************************************/

-				/**** to autoaway or not to autoaway...  ***/

-				/*******************************************/

-				if(g_dwPrefs & (1<<PREF_AOM))

-				{

-					xchat_globally_away(g_szAway);

-				}

-

-				/**************************************************/

-				/**** Win32 API call to hide the window and	     **/

-				/**** save the fact that its minimized for later **/

-				/**************************************************/

-				g_iIsActive = 0;

-				ShowWindow(hWnd, SW_HIDE);

-			}

-		}

-		break;

-	/**********************************/

-	/*** user clicked the tray icon ***/

-	/**********************************/

-	case WM_TRAYMSG:

-		{

-			switch(lparam)

-			{

-			case WM_LBUTTONDOWN:

-				{

-					if(!g_iIsActive)

-					{

-						/*********************************************************/

-						/*** 0: its hiden, restore it and show it, if autoaway ***/

-						/*** is on, set us as back							 ***/

-						/*********************************************************/

-						SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);

-						SetForegroundWindow(hWnd);

-						g_iIsActive = 1;

-

-						if(g_dwPrefs & (1<<PREF_AOM))

-						{

-							xchat_globally_back();

-						}

-					}

-					else

-					{

-						SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);

-					}

-				}

-				break;

-			case WM_RBUTTONDOWN:

-				{

-					/******************************************/

-					/*** user wants to see the menu find out **/

-					/*** where the mouse is and show it	  **/

-					/******************************************/

-					POINT pt;

-					int iRet;

-

-					GetCursorPos(&pt);

-					SetForegroundWindow(hWnd);

-

-					ModifyMenu(g_hTrayMenu, 2, (MF_POPUP | MF_BYPOSITION), (UINT)setServerMenu(), _T("Away"));

-

-					Sleep(175);

-

-					iRet = TrackPopupMenuEx(g_hTrayMenu, (TPM_RETURNCMD | TPM_LEFTALIGN), pt.x, pt.y, hWnd, NULL);

-

-					/***********************************/

-					/*** nRet is the users selection, **/

-					/*** process it				   **/

-					/***********************************/

-					sdTrayProc(hWnd, iRet);

-				}

-				break;

-			}

-		}

-		break;

-	default:

-		{

-			/*****************************************************/

-			/*** the taskbar has been restarted, re-add our icon */

-			/*****************************************************/

-			if(msg == RegisterWindowMessage(_T("TaskbarCreated")))

-			{

-				char szVersion[64];

-				_snprintf(szVersion, 64, "XChat-WDK [%s]", xchat_get_info(ph, "version"));

-				AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG);

-			}

-		}

-		break;

-	}

-

-	return CallWindowProc(g_hOldProc, hWnd, msg, wparam, lparam);

-}

-

-/****************************************************/

-/*** process messages from the tray menu ************/

-/****************************************************/

-LRESULT CALLBACK sdTrayProc(HWND hWnd, int msg)

-{

-	switch(msg)

-	{

-	case ACT_EXIT:

-		{

-			g_bCanQuit = true;

-			PostMessage(hWnd, WM_CLOSE, 0, 0);

-		}

-		break;

-	case ACT_RESTORE:

-		{

-			/***********************************************/

-			/** user wants us to restore the xchat window **/

-			/** and of autoaway is on, set as back		**/

-			/***********************************************/

-			SendMessage(g_hXchatWnd, WM_SYSCOMMAND, SC_RESTORE, 0);

-			SetForegroundWindow(hWnd);

-			

-			if((!g_iIsActive) && (g_dwPrefs & (1<<PREF_AOM)))

-			{

-				xchat_globally_back();

-				g_iIsActive = 1;

-			}

-		}

-		break;

-	case ACT_SETTINGS:

-		{

-			ShowWindow(g_hPrefDlg, SW_SHOW);

-		}

-		break;

-	case ACT_AWAY:

-		{

-			xchat_globally_away(g_szAway);

-		}

-		break;

-	case ACT_BACK:

-		{

-			xchat_globally_back();

-		}

-		break;

-	default:

-		{

-			if(msg > 0)

-			{

-				xchat_set_context(ph, xchat_find_server(msg-1));

-

-				if(!xchat_get_info(ph, "away"))

-				{

-					xchat_away(g_szAway);

-				}

-				else

-				{

-					xchat_back();

-				}

-			}

-		}

-		break;

-	}

-

-	return 1;

-}

-

-int CALLBACK PrefProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	switch(msg)

-	{

-	case WM_INITDIALOG:

-		{

-			TCITEM tci1;

-			TCITEM tci2;

-			TCITEM tci3;

-			TCITEM tci4;

-

-			tci1.mask		= TCIF_TEXT;

-			tci1.pszText	= _T("Settings");

-			tci1.cchTextMax	= strlen("Settings");

-			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 0, (LPARAM)&tci1);

-

-			tci2.mask		= TCIF_TEXT;

-			tci2.pszText	= _T("Alerts");

-			tci2.cchTextMax	= strlen("Alerts");

-			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 1, (LPARAM)&tci2);

-

-			tci3.mask		= TCIF_TEXT;

-			tci3.pszText	= _T("Events");

-			tci3.cchTextMax	= strlen("Events");

-			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 2, (LPARAM)&tci3);

-

-			tci4.mask		= TCIF_TEXT;

-			tci4.pszText	= _T("About");

-			tci4.cchTextMax	= strlen("About");

-			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 3, (LPARAM)&tci4);

-

-

-			/***********************************************************************************/

-			/***********************************************************************************/

-			/***********************************************************************************/

-

-			g_hPrefTabSettings	= CreateDialog((HINSTANCE)g_hInstance,

-									MAKEINTRESOURCE(IDD_SETTINGS),

-									hWnd,		

-									(DLGPROC)SettingsProc);

-			SetDialog(g_hPrefTabSettings,	IDD_SETTINGS);

-

-			g_hPrefTabAlerts	= CreateDialog((HINSTANCE)g_hInstance,

-									MAKEINTRESOURCE(IDD_ALERTS),

-									hWnd,

-									(DLGPROC)AlertsProc);

-			SetDialog(g_hPrefTabAlerts,		IDD_ALERTS);

-

-			g_hPrefTabEvents	= CreateDialog((HINSTANCE)g_hInstance,

-									MAKEINTRESOURCE(IDD_EVENTS),

-									hWnd,		

-									(DLGPROC)EventsProc);

-			SetDialog(g_hPrefTabEvents,		IDD_EVENTS);

-

-			g_hPrefTabAbout		= CreateDialog((HINSTANCE)g_hInstance,

-									MAKEINTRESOURCE(IDD_ABOUT),

-									hWnd,

-									(DLGPROC)AboutProc);

-		}

-		break;

-	case WM_SHOWWINDOW:

-		{

-			if(wparam)

-			{

-				SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_SETCURSEL, 0, 0);

-				ShowWindow(g_hPrefTabSettings,	SW_SHOW);

-				ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-				ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-				ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-			}

-		}

-		break;

-	case WM_NOTIFY:

-		{

-			NMHDR *pData = (NMHDR *)lparam;

-

-			switch(pData->code)

-			{

-			case TCN_SELCHANGE:

-				{

-					switch(SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_GETCURSEL, 0, 0))

-					{

-					case 0:

-						{

-							ShowWindow(g_hPrefTabSettings,	SW_SHOW);

-							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-							ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-							ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-						}

-						break;

-					case 1:

-						{

-							ShowWindow(g_hPrefTabSettings,	SW_HIDE);

-							ShowWindow(g_hPrefTabAlerts,	SW_SHOW);

-							ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-							ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-						}

-						break;

-					case 2:

-						{

-							ShowWindow(g_hPrefTabSettings,	SW_HIDE);

-							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-							ShowWindow(g_hPrefTabEvents,	SW_SHOW);

-							ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-						}

-						break;

-					case 3:

-						{

-							ShowWindow(g_hPrefTabSettings,	SW_HIDE);

-							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-							ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-							ShowWindow(g_hPrefTabAbout,		SW_SHOW);

-						}

-						break;

-					}

-				}

-				break;

-			}

-		}

-		break;

-	case WM_CLOSE:

-		{

-			ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-			ShowWindow(g_hPrefTabSettings,	SW_HIDE);

-			ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-			ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-			ShowWindow(hWnd,				SW_HIDE);

-			return TRUE;

-		}

-		break;

-	case WM_COMMAND:

-		{

-			switch(wparam)

-			{

-			case IDC_PREF_OK:

-				{

-					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS);

-					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS);

-					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS);

-

-					SavePrefs(0);

-

-					ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-					ShowWindow(g_hPrefTabSettings,	SW_HIDE);

-					ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-					ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-					ShowWindow(hWnd,				SW_HIDE);

-					return TRUE;

-				}

-				break;

-			case IDC_PREF_CANCEL:

-				{

-					ShowWindow(g_hPrefTabEvents,	SW_HIDE);

-					ShowWindow(g_hPrefTabSettings,	SW_HIDE);

-					ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

-					ShowWindow(g_hPrefTabAbout,		SW_HIDE);

-					ShowWindow(hWnd,				SW_HIDE);

-					return TRUE;

-				}

-				break;

-			case IDC_PREF_APPLY:

-				{

-					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS);

-					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS);

-					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS);

-

-					SavePrefs(0);

-					return FALSE;

-				}

-				break;

-			}

-		}

-		break;

-	case WM_DESTROY:

-		{

-			SendMessage(g_hPrefTabEvents,	WM_CLOSE, 0, 0);

-			SendMessage(g_hPrefTabSettings,	WM_CLOSE, 0, 0);

-			SendMessage(g_hPrefTabAbout,	WM_CLOSE, 0, 0);

-			SendMessage(g_hPrefTabAlerts,	WM_CLOSE, 0, 0);

-		}

-		break;

-	}

-

-	return FALSE;

-}

-

-/****************************************************/

-/****************************************************/

-/****************************************************/

-LRESULT CALLBACK AlertsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	switch(msg)

-	{

-	case WM_CLOSE:

-		{

-			DestroyWindow(hWnd);

-			return TRUE;

-			break;

-		}

-		break;

-	case WM_COMMAND:

-		{

-			switch(LOWORD(wparam))

-			{

-			case PREF_AMAE:

-				{

-					SetToggle(hWnd, PREF_OSBWM,			PREF_AMAE, TRUE);

-					SetToggle(hWnd, PREF_UWIOB,			PREF_AMAE, TRUE);

-					SetToggle(hWnd, PREF_KAOI,			PREF_AMAE, TRUE);

-					

-					if(IsDlgButtonChecked(hWnd, PREF_AMAE))

-					{

-						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);

-						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);

-						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);

-						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);

-					}

-					else

-					{

-						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE);

-						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE);

-						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE);

-						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE);

-					}

-				}

-				break;

-			case PREF_UWIOB:

-				{

-					SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);

-					SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);

-				}

-				break;

-			case PREF_KAOI:

-				{

-					SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);

-					SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);

-				}

-				break;

-			}

-			break;

-		}

-	}

-

-	return FALSE;

-}

-

-/****************************************************/

-/****************************************************/

-/****************************************************/

-LRESULT CALLBACK AboutProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	if(msg == WM_CLOSE)

-	{

-		DestroyWindow(hWnd);

-		return true;

-	}

-

-	return FALSE;

-}

-

-/*****************************************************/

-/** Process the events for our event dialog **********/

-/*****************************************************/

-LRESULT CALLBACK EventsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	if(msg == WM_CLOSE)

-	{

-		DestroyWindow(hWnd);

-		return true;

-	}

-

-	return FALSE;

-}

-

-/*****************************************************/

-/** Process the events for our settings dialog this **/

-/** is alot more complicated because options are	**/

-/** enabled/disabled based on the state of others   **/

-/*****************************************************/

-LRESULT CALLBACK SettingsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	if(msg == WM_CLOSE)

-	{

-		DestroyWindow(hWnd);

-		return true;

-	}

-

-	return FALSE;

-}

-

-/*****************************************************/

-/** this is the hotkey message  processing function **/

-/** this window is always open and ready to be told **/

-/** if someone has hit the hotkey, if they did, we  **/

-/** need to close out all of the tray alerts, for   **/

-/** this I wrote sdCloseAlerts, more info there	 **/

-/*****************************************************/

-LRESULT CALLBACK HotKeyProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	if(msg == WM_CLOSE)

-	{

-		DestroyWindow(hWnd);

-		return true;

-	}

-	else if(msg == WM_HOTKEY)

-	{

-		sdCloseAlerts();

-	}

-

-	return FALSE;

-}

-

diff --git a/plugins/xtray/callbacks.h b/plugins/xtray/callbacks.h
deleted file mode 100644
index 99cbae74..00000000
--- a/plugins/xtray/callbacks.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#ifndef _H_CALLBACKS_H

-#define _H_CALLBACKS_H

-

-int					event_cb		(char *word[], void *userdata);

-int					command_cb		(char *word[], char *word_eol[], void *userdata);

-

-LRESULT CALLBACK	WindowProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-BOOL	CALLBACK	EnumWindowsProc	(HWND hWnd, LPARAM lParam);

-LRESULT CALLBACK	sdTrayProc		(HWND hwnd, int msg);

-

-LRESULT CALLBACK	AlertProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-LRESULT CALLBACK	HotKeyProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-LRESULT CALLBACK	EventsProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-LRESULT CALLBACK	AboutProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-LRESULT CALLBACK	AlertsProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-LRESULT CALLBACK	SettingsProc	(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-int		CALLBACK	PrefProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

-

-#endif
\ No newline at end of file
diff --git a/plugins/xtray/icons/banned.ico b/plugins/xtray/icons/banned.ico
deleted file mode 100644
index fef8df8c..00000000
--- a/plugins/xtray/icons/banned.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/chan_msg.ico b/plugins/xtray/icons/chan_msg.ico
deleted file mode 100644
index 793d050e..00000000
--- a/plugins/xtray/icons/chan_msg.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/disconnected.ico b/plugins/xtray/icons/disconnected.ico
deleted file mode 100644
index 9063e7e3..00000000
--- a/plugins/xtray/icons/disconnected.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/highlight-1-3.ico b/plugins/xtray/icons/highlight-1-3.ico
deleted file mode 100644
index a759145b..00000000
--- a/plugins/xtray/icons/highlight-1-3.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/highlight.ico b/plugins/xtray/icons/highlight.ico
deleted file mode 100644
index 625cca9a..00000000
--- a/plugins/xtray/icons/highlight.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/kicked.ico b/plugins/xtray/icons/kicked.ico
deleted file mode 100644
index 845a74e1..00000000
--- a/plugins/xtray/icons/kicked.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/priv_msg-1-2-2.ico b/plugins/xtray/icons/priv_msg-1-2-2.ico
deleted file mode 100644
index 7941ff77..00000000
--- a/plugins/xtray/icons/priv_msg-1-2-2.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/sd.ico b/plugins/xtray/icons/sd.ico
deleted file mode 100644
index ca179621..00000000
--- a/plugins/xtray/icons/sd.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/server_notice.ico b/plugins/xtray/icons/server_notice.ico
deleted file mode 100644
index ff765d87..00000000
--- a/plugins/xtray/icons/server_notice.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/icons/xchat.ico b/plugins/xtray/icons/xchat.ico
deleted file mode 100644
index 73247fd0..00000000
--- a/plugins/xtray/icons/xchat.ico
+++ /dev/null
Binary files differdiff --git a/plugins/xtray/makefile.mak b/plugins/xtray/makefile.mak
deleted file mode 100644
index d1f8d295..00000000
--- a/plugins/xtray/makefile.mak
+++ /dev/null
@@ -1,37 +0,0 @@
-include "..\..\src\makeinc.mak"
-
-TARGET = xtray.dll
-
-TRAY_OBJECTS = \
-callbacks.obj \
-sdAlerts.obj \
-sdTray.obj \
-utility.obj \
-xchat.obj \
-xtray.obj
-
-CPPFLAGS = $(CPPFLAGS) /D_STL70_ /D_STATIC_CPPLIB /EHsc /DUNICODE /D_UNICODE
-
-all: $(TRAY_OBJECTS) $(TARGET)
-
-xtray.def:
-	echo EXPORTS > xtray.def
-	echo xchat_plugin_init >> xtray.def
-	echo xchat_plugin_deinit >> xtray.def
-
-.cpp.obj:
-	$(CC) $(CPPFLAGS) /c $<
-
-res:
-	rc /nologo resource.rc
-	
-$(TARGET): $(TRAY_OBJECTS) xtray.def res
-	$(LINK) /DLL /out:$(TARGET) $(LDFLAGS) $(TRAY_OBJECTS) ntstc_msvcrt.lib $(LIBS) /def:xtray.def resource.res
-
-clean:
-	del $(TARGET)
-	del *.obj
-	del xtray.def
-	del resource.res
-	del *.lib
-	del *.exp
diff --git a/plugins/xtray/plugin.h b/plugins/xtray/plugin.h
deleted file mode 100644
index 50b0de21..00000000
--- a/plugins/xtray/plugin.h
+++ /dev/null
@@ -1,335 +0,0 @@
-/* You can distribute this header with your plugins for easy compilation */
-#ifndef XCHAT_PLUGIN_H
-#define XCHAT_PLUGIN_H
-
-#include <time.h>
-
-#define XCHAT_IFACE_MAJOR	1
-#define XCHAT_IFACE_MINOR	9
-#define XCHAT_IFACE_MICRO	11
-#define XCHAT_IFACE_VERSION	((XCHAT_IFACE_MAJOR * 10000) + \
-				 (XCHAT_IFACE_MINOR * 100) + \
-				 (XCHAT_IFACE_MICRO))
-
-#define XCHAT_PRI_HIGHEST	127
-#define XCHAT_PRI_HIGH		64
-#define XCHAT_PRI_NORM		0
-#define XCHAT_PRI_LOW		(-64)
-#define XCHAT_PRI_LOWEST	(-128)
-
-#define XCHAT_FD_READ		1
-#define XCHAT_FD_WRITE		2
-#define XCHAT_FD_EXCEPTION	4
-#define XCHAT_FD_NOTSOCKET	8
-
-#define XCHAT_EAT_NONE		0	/* pass it on through! */
-#define XCHAT_EAT_XCHAT		1	/* don't let xchat see this event */
-#define XCHAT_EAT_PLUGIN	2	/* don't let other plugins see this event */
-#define XCHAT_EAT_ALL		(XCHAT_EAT_XCHAT|XCHAT_EAT_PLUGIN)	/* don't let anything see this event */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _xchat_plugin xchat_plugin;
-typedef struct _xchat_list xchat_list;
-typedef struct _xchat_hook xchat_hook;
-#ifndef PLUGIN_C
-typedef struct _xchat_context xchat_context;
-#endif
-
-#ifndef PLUGIN_C
-struct _xchat_plugin
-{
-	/* these are only used on win32 */
-	xchat_hook *(*xchat_hook_command) (xchat_plugin *ph,
-		    const char *name,
-		    int pri,
-		    int (*callback) (char *word[], char *word_eol[], void *user_data),
-		    const char *help_text,
-		    void *userdata);
-	xchat_hook *(*xchat_hook_server) (xchat_plugin *ph,
-		   const char *name,
-		   int pri,
-		   int (*callback) (char *word[], char *word_eol[], void *user_data),
-		   void *userdata);
-	xchat_hook *(*xchat_hook_print) (xchat_plugin *ph,
-		  const char *name,
-		  int pri,
-		  int (*callback) (char *word[], void *user_data),
-		  void *userdata);
-	xchat_hook *(*xchat_hook_timer) (xchat_plugin *ph,
-		  int timeout,
-		  int (*callback) (void *user_data),
-		  void *userdata);
-	xchat_hook *(*xchat_hook_fd) (xchat_plugin *ph,
-		   int fd,
-		   int flags,
-		   int (*callback) (int fd, int flags, void *user_data),
-		   void *userdata);
-	void *(*xchat_unhook) (xchat_plugin *ph,
-	      xchat_hook *hook);
-	void (*xchat_print) (xchat_plugin *ph,
-	     const char *text);
-	void (*xchat_printf) (xchat_plugin *ph,
-	      const char *format, ...);
-	void (*xchat_command) (xchat_plugin *ph,
-	       const char *command);
-	void (*xchat_commandf) (xchat_plugin *ph,
-		const char *format, ...);
-	int (*xchat_nickcmp) (xchat_plugin *ph,
-	       const char *s1,
-	       const char *s2);
-	int (*xchat_set_context) (xchat_plugin *ph,
-		   xchat_context *ctx);
-	xchat_context *(*xchat_find_context) (xchat_plugin *ph,
-		    const char *servname,
-		    const char *channel);
-	xchat_context *(*xchat_get_context) (xchat_plugin *ph);
-	const char *(*xchat_get_info) (xchat_plugin *ph,
-		const char *id);
-	int (*xchat_get_prefs) (xchat_plugin *ph,
-		 const char *name,
-		 const char **string,
-		 int *integer);
-	xchat_list * (*xchat_list_get) (xchat_plugin *ph,
-		const char *name);
-	void (*xchat_list_free) (xchat_plugin *ph,
-		 xchat_list *xlist);
-	const char * const * (*xchat_list_fields) (xchat_plugin *ph,
-		   const char *name);
-	int (*xchat_list_next) (xchat_plugin *ph,
-		 xchat_list *xlist);
-	const char * (*xchat_list_str) (xchat_plugin *ph,
-		xchat_list *xlist,
-		const char *name);
-	int (*xchat_list_int) (xchat_plugin *ph,
-		xchat_list *xlist,
-		const char *name);
-	void * (*xchat_plugingui_add) (xchat_plugin *ph,
-		     const char *filename,
-		     const char *name,
-		     const char *desc,
-		     const char *version,
-		     char *reserved);
-	void (*xchat_plugingui_remove) (xchat_plugin *ph,
-			void *handle);
-	int (*xchat_emit_print) (xchat_plugin *ph,
-			const char *event_name, ...);
-	int (*xchat_read_fd) (xchat_plugin *ph,
-			void *src,
-			char *buf,
-			int *len);
-	time_t (*xchat_list_time) (xchat_plugin *ph,
-		xchat_list *xlist,
-		const char *name);
-	char *(*xchat_gettext) (xchat_plugin *ph,
-		const char *msgid);
-	void (*xchat_send_modes) (xchat_plugin *ph,
-		  const char **targets,
-		  int ntargets,
-		  int modes_per_line,
-		  char sign,
-		  char mode);
-	char *(*xchat_strip) (xchat_plugin *ph,
-	     const char *str,
-	     int len,
-	     int flags);
-	void (*xchat_free) (xchat_plugin *ph,
-	    void *ptr);
-};
-#endif
-
-
-
-xchat_hook *
-xchat_hook_command (xchat_plugin *ph,
-		    const char *name,
-		    int pri,
-		    int (*callback) (char *word[], char *word_eol[], void *user_data),
-		    const char *help_text,
-		    void *userdata);
-
-xchat_hook *
-xchat_hook_server (xchat_plugin *ph,
-		   const char *name,
-		   int pri,
-		   int (*callback) (char *word[], char *word_eol[], void *user_data),
-		   void *userdata);
-
-xchat_hook *
-xchat_hook_print (xchat_plugin *ph,
-		  const char *name,
-		  int pri,
-		  int (*callback) (char *word[], void *user_data),
-		  void *userdata);
-
-xchat_hook *
-xchat_hook_timer (xchat_plugin *ph,
-		  int timeout,
-		  int (*callback) (void *user_data),
-		  void *userdata);
-
-xchat_hook *
-xchat_hook_fd (xchat_plugin *ph,
-		int fd,
-		int flags,
-		int (*callback) (int fd, int flags, void *user_data),
-		void *userdata);
-
-void *
-xchat_unhook (xchat_plugin *ph,
-	      xchat_hook *hook);
-
-void
-xchat_print (xchat_plugin *ph,
-	     const char *text);
-
-void
-xchat_printf (xchat_plugin *ph,
-	      const char *format, ...);
-
-void
-xchat_command (xchat_plugin *ph,
-	       const char *command);
-
-void
-xchat_commandf (xchat_plugin *ph,
-		const char *format, ...);
-
-int
-xchat_nickcmp (xchat_plugin *ph,
-	       const char *s1,
-	       const char *s2);
-
-int
-xchat_set_context (xchat_plugin *ph,
-		   xchat_context *ctx);
-
-xchat_context *
-xchat_find_context (xchat_plugin *ph,
-		    const char *servname,
-		    const char *channel);
-
-xchat_context *
-xchat_get_context (xchat_plugin *ph);
-
-const char *
-xchat_get_info (xchat_plugin *ph,
-		const char *id);
-
-int
-xchat_get_prefs (xchat_plugin *ph,
-		 const char *name,
-		 const char **string,
-		 int *integer);
-
-xchat_list *
-xchat_list_get (xchat_plugin *ph,
-		const char *name);
-
-void
-xchat_list_free (xchat_plugin *ph,
-		 xchat_list *xlist);
-
-const char * const *
-xchat_list_fields (xchat_plugin *ph,
-		   const char *name);
-
-int
-xchat_list_next (xchat_plugin *ph,
-		 xchat_list *xlist);
-
-const char *
-xchat_list_str (xchat_plugin *ph,
-		xchat_list *xlist,
-		const char *name);
-
-int
-xchat_list_int (xchat_plugin *ph,
-		xchat_list *xlist,
-		const char *name);
-
-time_t
-xchat_list_time (xchat_plugin *ph,
-		 xchat_list *xlist,
-		 const char *name);
-
-void *
-xchat_plugingui_add (xchat_plugin *ph,
-		     const char *filename,
-		     const char *name,
-		     const char *desc,
-		     const char *version,
-		     char *reserved);
-
-void
-xchat_plugingui_remove (xchat_plugin *ph,
-			void *handle);
-
-int 
-xchat_emit_print (xchat_plugin *ph,
-		  const char *event_name, ...);
-
-char *
-xchat_gettext (xchat_plugin *ph,
-	       const char *msgid);
-
-void
-xchat_send_modes (xchat_plugin *ph,
-		  const char **targets,
-		  int ntargets,
-		  int modes_per_line,
-		  char sign,
-		  char mode);
-
-char *
-xchat_strip (xchat_plugin *ph,
-	     const char *str,
-	     int len,
-	     int flags);
-
-void
-xchat_free (xchat_plugin *ph,
-	    void *ptr);
-
-#if !defined(PLUGIN_C) && defined(WIN32)
-#ifndef XCHAT_PLUGIN_HANDLE
-#define XCHAT_PLUGIN_HANDLE (ph)
-#endif
-#define xchat_hook_command ((XCHAT_PLUGIN_HANDLE)->xchat_hook_command)
-#define xchat_hook_server ((XCHAT_PLUGIN_HANDLE)->xchat_hook_server)
-#define xchat_hook_print ((XCHAT_PLUGIN_HANDLE)->xchat_hook_print)
-#define xchat_hook_timer ((XCHAT_PLUGIN_HANDLE)->xchat_hook_timer)
-#define xchat_hook_fd ((XCHAT_PLUGIN_HANDLE)->xchat_hook_fd)
-#define xchat_unhook ((XCHAT_PLUGIN_HANDLE)->xchat_unhook)
-#define xchat_print ((XCHAT_PLUGIN_HANDLE)->xchat_print)
-#define xchat_printf ((XCHAT_PLUGIN_HANDLE)->xchat_printf)
-#define xchat_command ((XCHAT_PLUGIN_HANDLE)->xchat_command)
-#define xchat_commandf ((XCHAT_PLUGIN_HANDLE)->xchat_commandf)
-#define xchat_nickcmp ((XCHAT_PLUGIN_HANDLE)->xchat_nickcmp)
-#define xchat_set_context ((XCHAT_PLUGIN_HANDLE)->xchat_set_context)
-#define xchat_find_context ((XCHAT_PLUGIN_HANDLE)->xchat_find_context)
-#define xchat_get_context ((XCHAT_PLUGIN_HANDLE)->xchat_get_context)
-#define xchat_get_info ((XCHAT_PLUGIN_HANDLE)->xchat_get_info)
-#define xchat_get_prefs ((XCHAT_PLUGIN_HANDLE)->xchat_get_prefs)
-#define xchat_list_get ((XCHAT_PLUGIN_HANDLE)->xchat_list_get)
-#define xchat_list_free ((XCHAT_PLUGIN_HANDLE)->xchat_list_free)
-#define xchat_list_fields ((XCHAT_PLUGIN_HANDLE)->xchat_list_fields)
-#define xchat_list_str ((XCHAT_PLUGIN_HANDLE)->xchat_list_str)
-#define xchat_list_int ((XCHAT_PLUGIN_HANDLE)->xchat_list_int)
-#define xchat_list_time ((XCHAT_PLUGIN_HANDLE)->xchat_list_time)
-#define xchat_list_next ((XCHAT_PLUGIN_HANDLE)->xchat_list_next)
-#define xchat_plugingui_add ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_add)
-#define xchat_plugingui_remove ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_remove)
-#define xchat_emit_print ((XCHAT_PLUGIN_HANDLE)->xchat_emit_print)
-#define xchat_gettext ((XCHAT_PLUGIN_HANDLE)->xchat_gettext)
-#define xchat_send_modes ((XCHAT_PLUGIN_HANDLE)->xchat_send_modes)
-#define xchat_strip ((XCHAT_PLUGIN_HANDLE)->xchat_strip)
-#define xchat_free ((XCHAT_PLUGIN_HANDLE)->xchat_free)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/plugins/xtray/resource.h b/plugins/xtray/resource.h
deleted file mode 100644
index b8008c2c..00000000
--- a/plugins/xtray/resource.h
+++ /dev/null
@@ -1,47 +0,0 @@
-//{{NO_DEPENDENCIES}}

-// Microsoft Visual C++ generated include file.

-// Used by resource.rc

-//

-#define IDD_ALERTS                      104

-#define IDD_EVENTS                      105

-#define IDD_SETTINGS                    106

-#define IDD_ALERT                       107

-#define IDD_PREF                        108

-#define IDD_ABOUT                       109

-#define IDR_TRAY_MENU                   110

-#define ICO_XCHAT                       111

-#define ICO_BANNED                      112

-#define ICO_CHANMSG                     113

-#define ICO_DISCONNECTED                114

-#define ICO_HIGHLIGHT                   115

-#define ICO_KICKED                      116

-#define ICO_PMSG                        117

-#define ICO_SNOTICE                     118

-#define IDB_SD_LOGO                     119

-#define IDC_PREF_OK                     1014

-#define IDC_PREF_CANCEL                 1015

-#define IDC_PREF_APPLY                  1016

-#define IDC_AWAY_MSG                    1017

-#define IDC_ALERT_TIME                  1018

-#define IDC_TAB_CONTROL                 1019

-#define IDC_ALERT_HOTKEY                1020

-#define IDC_ALERT_MSG                   1021

-#define IDC_ALERT_HOTKEY_TEXT           1022

-#define IDC_ALERT_TIME_TEXT             1023

-#define ACT_EXIT                        40001

-#define ACT_SETTINGS                    40002

-#define ACT_AWAY                        40003

-#define ACT_BACK                        40004

-#define ACT_RESTORE                     40005

-#define IDC_STATIC                      -1

-

-// Next default values for new objects

-// 

-#ifdef APSTUDIO_INVOKED

-#ifndef APSTUDIO_READONLY_SYMBOLS

-#define _APS_NEXT_RESOURCE_VALUE        120

-#define _APS_NEXT_COMMAND_VALUE         40006

-#define _APS_NEXT_CONTROL_VALUE         1024

-#define _APS_NEXT_SYMED_VALUE           101

-#endif

-#endif

diff --git a/plugins/xtray/resource.rc b/plugins/xtray/resource.rc
deleted file mode 100644
index 906cf591..00000000
--- a/plugins/xtray/resource.rc
+++ /dev/null
@@ -1,309 +0,0 @@
-// Microsoft Visual C++ generated resource script.

-//

-#include "resource.h"

-

-#define APSTUDIO_READONLY_SYMBOLS

-/////////////////////////////////////////////////////////////////////////////

-//

-// Generated from the TEXTINCLUDE 2 resource.

-//

-#define APSTUDIO_HIDDEN_SYMBOLS

-#include "windows.h"

-#undef APSTUDIO_HIDDEN_SYMBOLS

-

-/////////////////////////////////////////////////////////////////////////////

-#undef APSTUDIO_READONLY_SYMBOLS

-

-/////////////////////////////////////////////////////////////////////////////

-// English (U.S.) resources

-

-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)

-#ifdef _WIN32

-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

-#pragma code_page(1252)

-#endif //_WIN32

-

-/////////////////////////////////////////////////////////////////////////////

-//

-// Dialog

-//

-

-IDD_EVENTS DIALOGEX 8, 20, 216, 143

-STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CHILD

-FONT 8, "Tahoma", 0, 0, 0x0

-BEGIN

-    GROUPBOX        "XChat Events",IDC_STATIC,5,5,205,77

-    CONTROL         "Banned",4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,49,10

-    CONTROL         "Kicked",5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,32,49,10

-    CONTROL         "Killed",8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,49,10

-    CONTROL         "Disconnect",10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,60,49,10

-    CONTROL         "Private Message",7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,18,69,10

-    CONTROL         "Channel Message",21,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,32,69,10

-    CONTROL         "Highlight",1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,46,69,10

-    CONTROL         "CTCP",6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,60,69,10

-    CONTROL         "Topic Change",3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,18,55,10

-    CONTROL         "Server Notice",9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,32,55,10

-    CONTROL         "Invite",2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,46,55,10

-END

-

-IDD_SETTINGS DIALOGEX 8, 20, 216, 143

-STYLE DS_SETFONT | WS_CHILD

-FONT 8, "Tahoma", 0, 0, 0x0

-BEGIN

-    GROUPBOX        "Options",IDC_STATIC,5,5,205,135

-    CONTROL         "Auto away on minimize",11,"Button",BS_AUTOCHECKBOX | 

-                    WS_TABSTOP,16,60,100,10

-    CONTROL         "Minimize XChat to the system tray",12,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,18,133,10

-    CONTROL         "Minimize to the tray instead of closing",17,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,32,174,9

-    EDITTEXT        IDC_AWAY_MSG,33,86,169,50,ES_AUTOHSCROLL

-    LTEXT           "Away Msg:",IDC_STATIC,27,72,35,8

-    CONTROL         "Remove XChat from the taskbar (only show in tray)",

-                    20,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,191,9

-END

-

-IDD_ALERT DIALOGEX 0, 0, 151, 28

-STYLE DS_LOCALEDIT | DS_SETFONT | DS_NOIDLEMSG | DS_CENTER | WS_CAPTION | 

-    WS_SYSMENU

-EXSTYLE WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TOOLWINDOW

-CAPTION "Event Name"

-FONT 8, "Tahoma", 0, 0, 0x1

-BEGIN

-    LTEXT           "Event Text",IDC_ALERT_MSG,3,0,147,27

-END

-

-IDD_PREF DIALOGEX 0, 0, 233, 190

-STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | 

-    WS_SYSMENU

-CAPTION "X-Tray Preferences"

-FONT 8, "Tahoma", 0, 0, 0x0

-BEGIN

-    DEFPUSHBUTTON   "Ok",IDC_PREF_OK,57,173,50,14

-    PUSHBUTTON      "Cancel",IDC_PREF_CANCEL,115,173,50,14

-    PUSHBUTTON      "Apply",IDC_PREF_APPLY,175,173,50,14

-    CONTROL         "Tab1",IDC_TAB_CONTROL,"SysTabControl32",0x0,7,7,218,159

-END

-

-IDD_ABOUT DIALOGEX 8, 20, 216, 143

-STYLE DS_SETFONT | WS_CHILD

-FONT 8, "Tahoma", 0, 0, 0x0

-BEGIN

-    CONTROL         119,IDC_STATIC,"Static",SS_BITMAP | SS_SUNKEN | 

-                    WS_BORDER,3,6,88,81

-    CTEXT           "X-Tray\r\nBy: Michael Hotaling\r\n www.SinisterDevelopments.com",

-                    IDC_STATIC,95,33,118,30

-    LTEXT           "Folken\r\nBasket\r\nDonatzsky\r\nDaemon404",IDC_STATIC,

-                    15,103,64,33

-    GROUPBOX        "Special Thanks To:",IDC_STATIC,3,91,89,50

-    GROUPBOX        "Version Information:",IDC_STATIC,101,92,109,49

-    LTEXT           "1.2.4",IDC_STATIC,170,105,33,8,0,WS_EX_RIGHT

-    LTEXT           "Compiled In: ",IDC_STATIC,110,117,54,8

-    LTEXT           "2011",IDC_STATIC,170,117,33,8,0,WS_EX_RIGHT

-    LTEXT           "Version Number:",IDC_STATIC,110,105,54,8

-END

-

-IDD_ALERTS DIALOGEX 8, 20, 216, 143

-STYLE DS_SETFONT | WS_CHILD

-FONT 8, "Tahoma", 0, 0, 0x0

-BEGIN

-    GROUPBOX        "Alerts",IDC_STATIC,5,5,205,117

-    CONTROL         "Only show alerts while minimized",14,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,27,46,117,10

-    CONTROL         "Use tray alerts to notify me about events",13,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,32,152,10

-    CONTROL         "Use window instead of balloons",15,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,27,60,141,11

-    EDITTEXT        IDC_ALERT_TIME,137,101,61,12,ES_AUTOHSCROLL | ES_NUMBER,

-                    WS_EX_RIGHT

-    LTEXT           "Show alert for x seconds:",IDC_ALERT_TIME_TEXT,40,103,

-                    83,9

-    CONTROL         "Alert Hotkey",IDC_ALERT_HOTKEY,"msctls_hotkey32",

-                    WS_BORDER | WS_TABSTOP,137,74,61,13

-    LTEXT           "Close all alerts hotkey:",IDC_ALERT_HOTKEY_TEXT,39,75,

-                    76,10

-    CONTROL         "Leave alerts open indefinately",16,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,27,88,115,11

-    CONTROL         "Blink Icon to alert me about events",18,"Button",

-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,18,127,10

-END

-

-

-/////////////////////////////////////////////////////////////////////////////

-//

-// DESIGNINFO

-//

-

-#ifdef APSTUDIO_INVOKED

-GUIDELINES DESIGNINFO 

-BEGIN

-    IDD_EVENTS, DIALOG

-    BEGIN

-        BOTTOMMARGIN, 56

-    END

-

-    IDD_SETTINGS, DIALOG

-    BEGIN

-        BOTTOMMARGIN, 66

-    END

-

-    IDD_ALERT, DIALOG

-    BEGIN

-        RIGHTMARGIN, 150

-        BOTTOMMARGIN, 26

-    END

-

-    IDD_PREF, DIALOG

-    BEGIN

-        LEFTMARGIN, 7

-        RIGHTMARGIN, 232

-        TOPMARGIN, 7

-        BOTTOMMARGIN, 176

-    END

-

-    IDD_ABOUT, DIALOG

-    BEGIN

-        LEFTMARGIN, 7

-        RIGHTMARGIN, 209

-        TOPMARGIN, 7

-        BOTTOMMARGIN, 136

-    END

-

-    IDD_ALERTS, DIALOG

-    BEGIN

-        LEFTMARGIN, 7

-        RIGHTMARGIN, 208

-        TOPMARGIN, 7

-        BOTTOMMARGIN, 136

-    END

-END

-#endif    // APSTUDIO_INVOKED

-

-

-#ifdef APSTUDIO_INVOKED

-/////////////////////////////////////////////////////////////////////////////

-//

-// TEXTINCLUDE

-//

-

-1 TEXTINCLUDE 

-BEGIN

-    "resource.h\0"

-END

-

-2 TEXTINCLUDE 

-BEGIN

-    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"

-    "#include ""windows.h""\r\n"

-    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"

-    "\0"

-END

-

-3 TEXTINCLUDE 

-BEGIN

-    "xtray.h\0"

-END

-

-4 TEXTINCLUDE 

-BEGIN

-    "\r\n"

-    "\0"

-END

-

-#endif    // APSTUDIO_INVOKED

-

-

-/////////////////////////////////////////////////////////////////////////////

-//

-// Version

-//

-

-VS_VERSION_INFO VERSIONINFO

- FILEVERSION 1,2,4,0

- PRODUCTVERSION 1,2,4,0

- FILEFLAGSMASK 0x3fL

-#ifdef _DEBUG

- FILEFLAGS 0x1L

-#else

- FILEFLAGS 0x0L

-#endif

- FILEOS 0x40004L

- FILETYPE 0x2L

- FILESUBTYPE 0x0L

-BEGIN

-    BLOCK "StringFileInfo"

-    BEGIN

-        BLOCK "040904b0"

-        BEGIN

-            VALUE "CompanyName", "SinisterDevelopments"

-            VALUE "FileDescription", "X-Tray"

-            VALUE "FileVersion", "1, 2, 4, 0"

-            VALUE "InternalName", "X-Tray"

-            VALUE "LegalCopyright", "Copyright © 2005"

-            VALUE "OriginalFilename", "xtray.dll"

-            VALUE "ProductName", "X-Tray - XChat Win32 System Tray Plugin"

-            VALUE "ProductVersion", "1, 2, 4, 0"

-        END

-    END

-    BLOCK "VarFileInfo"

-    BEGIN

-        VALUE "Translation", 0x409, 1200

-    END

-END

-

-

-/////////////////////////////////////////////////////////////////////////////

-//

-// Menu

-//

-

-IDR_TRAY_MENU MENU 

-BEGIN

-    POPUP "TRAY"

-    BEGIN

-        MENUITEM "Restore",                     ACT_RESTORE

-        MENUITEM SEPARATOR

-        MENUITEM "Away",                        65535

-        MENUITEM "Settings",                    ACT_SETTINGS

-        MENUITEM SEPARATOR

-        MENUITEM "Exit",                        ACT_EXIT

-    END

-END

-

-

-/////////////////////////////////////////////////////////////////////////////

-//

-// Icon

-//

-

-// Icon with lowest ID value placed first to ensure application icon

-// remains consistent on all systems.

-ICO_XCHAT               ICON                    "icons\\xchat.ico"

-ICO_BANNED              ICON                    "icons\\banned.ico"

-ICO_CHANMSG             ICON                    "icons\\chan_msg.ico"

-ICO_HIGHLIGHT           ICON                    "icons\\highlight.ico"

-ICO_KICKED              ICON                    "icons\\kicked.ico"

-ICO_PMSG                ICON                    "icons\\priv_msg-1-2-2.ico"

-ICO_SNOTICE             ICON                    "icons\\server_notice.ico"

-ICO_DISCONNECTED        ICON                    "icons\\disconnected.ico"

-

-/////////////////////////////////////////////////////////////////////////////

-//

-// Bitmap

-//

-

-IDB_SD_LOGO             BITMAP                  "bitmaps\\sd.bmp"

-#endif    // English (U.S.) resources

-/////////////////////////////////////////////////////////////////////////////

-

-

-

-#ifndef APSTUDIO_INVOKED

-/////////////////////////////////////////////////////////////////////////////

-//

-// Generated from the TEXTINCLUDE 3 resource.

-//

-xtray.h

-/////////////////////////////////////////////////////////////////////////////

-#endif    // not APSTUDIO_INVOKED

-

diff --git a/plugins/xtray/sdAlerts.cpp b/plugins/xtray/sdAlerts.cpp
deleted file mode 100644
index 5e042806..00000000
--- a/plugins/xtray/sdAlerts.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#include <windows.h>

-#include <winuser.h>

-#include <stdio.h>

-#include "utility.h"

-#include "resource.h"

-#include "sdAlerts.h"

-

-int g_iAlerts = 0;

-

-void sdSystemAlert(HINSTANCE hModule, UINT uiDialog, char *szMsg, char *szName, unsigned int iTime)

-{

-	TCHAR wszMsg[256];

-	TCHAR wszName[64];

-

-	HWND hDialog;

-	RECT rcWorkArea, rcDlg;

-	int ixPos, iyPos;

-	int iNumPerCol;

-	

-	hDialog = CreateDialog(hModule, MAKEINTRESOURCE(uiDialog), NULL, (DLGPROC)sdAlertProc);

-

-	SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);

-	GetWindowRect(hDialog, &rcDlg);

-

-	iNumPerCol = ((rcWorkArea.bottom - rcWorkArea.top) / (rcDlg.bottom - rcDlg.top));

-	ixPos = rcWorkArea.right - (rcDlg.right - rcDlg.left) + 1;

-	iyPos = rcWorkArea.bottom - (rcDlg.bottom - rcDlg.top);

-

-	if((g_iAlerts >= iNumPerCol) && (iNumPerCol > 0))

-	{

-		ixPos -= ((g_iAlerts / iNumPerCol) * (rcDlg.right - rcDlg.left));

-		iyPos -= ((g_iAlerts - (iNumPerCol * (g_iAlerts / iNumPerCol))) * (rcDlg.bottom - rcDlg.top));

-	}

-	else

-	{

-		iyPos -= (g_iAlerts * (rcDlg.bottom - rcDlg.top));

-	}

-	SetWindowPos(hDialog, HWND_TOPMOST, ixPos, iyPos, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE);

-	

-	ConvertString(szName, wszName, 64);

-	ConvertString(szMsg, wszMsg, 256);

-

-	SetWindowText(hDialog, wszName);

-	SetDlgItemText(hDialog, IDC_ALERT_MSG, wszMsg);

-	ShowWindow(hDialog, SW_SHOWNA);

-

-	if(iTime > 0)

-	{

-		SetTimer(hDialog, 1, iTime, NULL);

-	}

-

-	g_iAlerts++;

-}

-

-void sdCloseAlerts()

-{

-	PostMessage(HWND_BROADCAST, RegisterWindowMessage(TEXT("xTray:CloseAllAlertWindows")), 0, 0);

-}

-

-LRESULT CALLBACK sdAlertProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)

-{

-	switch(msg)

-	{

-	case WM_CLOSE:

-		if(g_iAlerts > 0){ g_iAlerts--; }

-		DestroyWindow(hwnd);

-		return TRUE;

-		break;

-	case WM_TIMER:

-		if(g_iAlerts > 0){ g_iAlerts--; }

-		AnimateWindow(hwnd, 600, AW_SLIDE | AW_HIDE | AW_VER_POSITIVE);

-		DestroyWindow(hwnd);

-		return TRUE;

-		break;

-	default:

-		if(msg == RegisterWindowMessage(TEXT("xTray:CloseAllAlertWindows")))

-		{

-			if(g_iAlerts > 0){ g_iAlerts--; }

-			DestroyWindow(hwnd);

-			return TRUE;

-		}

-		break;

-	}

-

-	return FALSE;

-}

-

-int sdAlertNum()

-{

-	return g_iAlerts;

-}
\ No newline at end of file
diff --git a/plugins/xtray/sdAlerts.h b/plugins/xtray/sdAlerts.h
deleted file mode 100644
index cd45a05b..00000000
--- a/plugins/xtray/sdAlerts.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#ifndef _H_SDALERTS_H

-#define _H_SDALERTS_H

-

-void				sdSystemAlert	(HINSTANCE, UINT, char *, char *, UINT);

-LRESULT CALLBACK	sdAlertProc		(HWND, UINT, WPARAM, LPARAM);

-int					sdAlertNum		();

-void				sdCloseAlerts	();

-#endif
\ No newline at end of file
diff --git a/plugins/xtray/sdTray.cpp b/plugins/xtray/sdTray.cpp
deleted file mode 100644
index 3a91a61b..00000000
--- a/plugins/xtray/sdTray.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-#define _WIN32_IE 0x601

-#include <windows.h>

-#include <stdio.h>

-#include <tchar.h>

-#include "sdTray.h"

-#include "utility.h"

-

-HANDLE hThread;

-iBlink *tData	= NULL;

-

-int AddIcon(HWND hwnd, UINT id, HICON hicon, char *szTip, unsigned short flags, unsigned int cbMsg)

-{

-	NOTIFYICONDATA nidata;

-

-	nidata.cbSize			= NOTIFYICONDATA_V2_SIZE;

-	nidata.hIcon			= hicon;

-	nidata.hWnd				= hwnd;

-	nidata.uCallbackMessage = cbMsg;

-	nidata.uFlags			= flags;

-	nidata.uID				= id;

-

-	if(szTip != NULL)

-	{

-		TCHAR *szTemp = new TCHAR[64];

-

-		ConvertString(szTip, szTemp, 64);

-		_tcsncpy(nidata.szTip, szTemp, 64);

-

-		delete[] szTemp;

-	}

-

-	return Shell_NotifyIcon(NIM_ADD, &nidata);

-}

-

-int RemoveIcon(HWND hwnd, UINT id)

-{

-	if(hThread != NULL)

-	{

-		TerminateThread(hThread, 0);

-		hThread = NULL;

-

-		delete tData;

-	}

-

-	NOTIFYICONDATA nidata;

-

-	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;

-	nidata.hWnd   = hwnd;

-	nidata.uID    = id;

-

-	return Shell_NotifyIcon(NIM_DELETE, &nidata);

-}

-

-int SetIcon(HWND hwnd, UINT id, HICON hicon)

-{

-	NOTIFYICONDATA nidata;

-

-	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;

-	nidata.hWnd   = hwnd;

-	nidata.uID    = id;

-	nidata.hIcon  = hicon;

-	nidata.uFlags = NIF_ICON;

-

-	return Shell_NotifyIcon(NIM_MODIFY, &nidata);

-}

-

-int SetTooltip(HWND hwnd, UINT id, char *szTip)

-{

-	NOTIFYICONDATA nidata;

-

-	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;

-	nidata.hWnd   = hwnd;

-	nidata.uID    = id;

-	nidata.uFlags = NIF_TIP;

-

-	if(szTip != NULL)

-	{

-		TCHAR *szTemp = new TCHAR[64];

-		ConvertString(szTip, szTemp, 64);

-		_tcsncpy(nidata.szTip, szTemp, 64);

-		delete[] szTemp;

-	}

-

-	return Shell_NotifyIcon(NIM_MODIFY, &nidata);

-}

-

-int ShowBalloon(HWND hwnd, UINT id, char *szInfo, char *szTitle, UINT time, UINT infoFlags)

-{

-	NOTIFYICONDATA nidata;

-

-	nidata.cbSize	= NOTIFYICONDATA_V2_SIZE;

-	nidata.hWnd		= hwnd;

-	nidata.uID		= id;

-	nidata.uFlags	= NIF_INFO;

-	nidata.dwInfoFlags = infoFlags;

-

-	if(time > 0)

-		nidata.uTimeout = time;

-	else

-		nidata.uTimeout = 500000;

-

-	if(szInfo != NULL)

-	{

-		TCHAR *szTemp = new TCHAR[255];

-

-		ConvertString(szInfo, szTemp, 251);

-		szTemp[250] = 0;

-		

-		if(strlen(szInfo) > 255)

-		{

-			_sntprintf(szTemp, 255, _T("%s..."), szTemp);

-		}

-		_tcsncpy(nidata.szInfo, szTemp, 255);

-

-		delete[] szTemp;

-	}

-	if(szTitle != NULL)

-	{

-		TCHAR *wszTitle = new TCHAR[64];

-		ConvertString(szTitle, wszTitle, 64);

-		_tcsncpy(nidata.szInfoTitle, wszTitle, 64);

-		delete[] wszTitle;

-	}

-

-	return Shell_NotifyIcon(NIM_MODIFY, &nidata);

-}

-

-

-DWORD WINAPI BlinkThread(LPVOID lpParam)

-{

-	NOTIFYICONDATA nidata;

-

-	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;

-	nidata.hWnd   = tData->hwnd;

-	nidata.uID    = tData->id;

-	nidata.uFlags = NIF_ICON;

-

-	for(UINT i = 0; i < tData->num; i++)

-	{

-		nidata.hIcon = tData->hBlink;

-		Shell_NotifyIcon(NIM_MODIFY, &nidata);

-

-		Sleep(tData->time);

-

-		nidata.hIcon = tData->hBase;

-		Shell_NotifyIcon(NIM_MODIFY, &nidata);

-

-		Sleep(tData->time);

-	}

-

-	delete tData;

-	hThread = NULL;

-

-	return 0;

-}

-

-int BlinkIcon(HWND hwnd, UINT id, HICON hBase, HICON hBlink, UINT time, UINT num)

-{

-	if(hThread != NULL)

-	{

-		StopBlink(hwnd, id, hBase);

-	}

-

-	DWORD dwThreadID;

-	tData = new iBlink;

-

-	tData->hwnd		= hwnd;

-	tData->id		= id;

-	tData->hBase	= hBase;

-	tData->hBlink	= hBlink;

-	tData->time		= time;

-	tData->num		= num;

-

-	hThread = CreateThread(NULL, 0, BlinkThread, tData, 0, &dwThreadID);

-

-	return 0;

-}

-

-void StopBlink(HWND hwnd, UINT id, HICON hBase)

-{

-	if(hThread != NULL)

-	{

-		TerminateThread(hThread, 0);

-		hThread = NULL;

-

-		delete tData;

-	}

-

-	SetIcon(hwnd, id, hBase);

-}
\ No newline at end of file
diff --git a/plugins/xtray/sdTray.h b/plugins/xtray/sdTray.h
deleted file mode 100644
index 68469fe0..00000000
--- a/plugins/xtray/sdTray.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#ifndef _H_SDTRAY_H

-#define _H_SDTRAY_H

-

-int				AddIcon		(HWND, UINT, HICON, char *, unsigned short, UINT);

-int				ShowBalloon	(HWND, UINT, char *, char *, UINT, UINT);

-int				BlinkIcon	(HWND, UINT, HICON, HICON, UINT, UINT);

-int				SetTooltip	(HWND, UINT, char *);

-int				SetIcon		(HWND, UINT, HICON);

-void			StopBlink	(HWND, UINT, HICON);

-int				RemoveIcon	(HWND, UINT);

-

-typedef struct IBLINK

-{

-	HICON hBase;

-	HICON hBlink;

-	HWND hwnd;

-	UINT id;

-	UINT time;

-	UINT num;

-}iBlink;

-#endif
\ No newline at end of file
diff --git a/plugins/xtray/utility.cpp b/plugins/xtray/utility.cpp
deleted file mode 100644
index 60f3f2f0..00000000
--- a/plugins/xtray/utility.cpp
+++ /dev/null
@@ -1,563 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#include <windows.h>

-#include <stdio.h>

-#include <commctrl.h>

-#include <tchar.h>

-#include "utility.h"

-#include "plugin.h"

-#include "xtray.h"

-#include "callbacks.h"

-#include "resource.h"

-

-TCHAR BACKUP_INI_FILE[] = _T(".\\plugins\\config\\xtray.conf");

-struct HOTKEY g_hHotKey;

-

-void SavePrefs(int iDlg)

-{

-	/**************************************************************************************************/

-	/********** allocate space for our string, and then set it to the currently logged on user ********/

-	/**************************************************************************************************/

-	DWORD dBuff = 257;

-	TCHAR szUser[257];

-

-	GetUserName(szUser, &dBuff);

-

-	/**************************************************************************************************/

-	/*********************** Test if the file exists, If it doesn't, Create It ************************/

-	/**************************************************************************************************/

-	TCHAR XTRAY_INI_FILE[1024];

-	

-#ifdef UNICODE

-	char temp[1024];

-    TCHAR TEMP_INI_FILE[1024];

-	

-	_snprintf(temp, 1024, "%s\\xtray.conf", xchat_get_info(ph, "xchatdir"));

-	ConvertString(temp, TEMP_INI_FILE, 1024);

-

-	// ok this one is really ugly

-	// it checks to see if the file exists in two locations

-	// X-Chat default config dir, if that fails it trys xchat\plugins\config

-	// if neither one exists it tries to create it in

-	// X-Chat default config dir, if that fails it trys xchat\plugins\config

-	// In either case it writes \xFF\xFE to the file ( on creation )

-	// so that we can save unicode away messages WritePrivateProfile doesn't 

-	// do this for us, though I think it really should

-

-	if(FileExists(TEMP_INI_FILE))

-	{

-		_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);

-	}

-	else

-	{

-		if(FileExists(BACKUP_INI_FILE))

-		{

-			_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);

-		}

-		else

-		{

-			HANDLE xTemp;

-			DWORD dwBytesTemp;

-

-			if(xTemp = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))

-			{

-				if(GetLastError() != ERROR_ALREADY_EXISTS)

-				{

-					WriteFile(xTemp, _T("\xFF\xFE"), 4, &dwBytesTemp, NULL);

-				}

-				CloseHandle(xTemp);

-			}

-

-			if(FileExists(TEMP_INI_FILE))

-			{

-				_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);

-			}

-			else

-			{

-				HANDLE xBackup;

-				DWORD dwBytesBackup;

-

-				if(xBackup = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))

-				{

-					if(GetLastError() != ERROR_ALREADY_EXISTS)

-					{

-						WriteFile(xBackup, _T("\xFF\xFE"), 4, &dwBytesBackup, NULL);

-					}

-

-					CloseHandle(xBackup);

-				}

-

-				if(FileExists(BACKUP_INI_FILE))

-				{

-					_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);

-				}

-			}

-		}

-	}

-

-#else

-	_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);

-#endif

-

-	WritePrivateProfileInt(szUser, _T("SETTINGS"),		g_dwPrefs,		XTRAY_INI_FILE);

-	WritePrivateProfileInt(szUser, _T("AOT"),			g_iTime,		XTRAY_INI_FILE);

-	WritePrivateProfileInt(szUser, _T("KEY"),			g_hHotKey.key,	XTRAY_INI_FILE);

-	WritePrivateProfileInt(szUser, _T("MOD"),			g_hHotKey.mod,	XTRAY_INI_FILE);

-	WritePrivateProfileString(szUser, _T("AWAY"),		g_szAway,		XTRAY_INI_FILE);

-}

-

-void LoadPrefs()

-{

-	/**************************************************************************************************/

-	/*********************** Our Settings Section *****************************************************/

-	/**************************************************************************************************/

-	DWORD dBuff = 257;

-	TCHAR szUser[257];

-

-	GetUserName(szUser, &dBuff);

-

-	/**************************************************************************************************/

-	/*********************** Test if the file exists, If it doesn't, Create It ************************/

-	/**************************************************************************************************/

-	TCHAR XTRAY_INI_FILE[1024];

-

-#ifdef UNICODE

-	char temp[1024];

-	TCHAR TEMP_INI_FILE[1024];

-

-	_snprintf(temp, 1024, "%s\\xtray.conf", xchat_get_info(ph, "xchatdir"));

-	ConvertString(temp, TEMP_INI_FILE, 1024);

-

-	if(FileExists(TEMP_INI_FILE))

-	{

-		_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);

-	}

-	else

-	{

-		if(FileExists(BACKUP_INI_FILE))

-		{

-			_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);

-		}

-		else

-		{

-			HANDLE xTemp;

-			DWORD dwBytesTemp;

-

-			if(xTemp = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))

-			{

-				if(GetLastError() != ERROR_ALREADY_EXISTS)

-				{

-					WriteFile(xTemp, _T("\xFF\xFE"), 4, &dwBytesTemp, NULL);

-				}

-

-				CloseHandle(xTemp);

-			}

-

-			if(FileExists(TEMP_INI_FILE))

-			{

-				_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);

-			}

-			else

-			{

-				HANDLE xBackup;

-				DWORD dwBytesBackup;

-

-				if(xBackup = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))

-				{

-					if(GetLastError() != ERROR_ALREADY_EXISTS)

-					{

-						WriteFile(xBackup, _T("\xFF\xFE"), 4, &dwBytesBackup, NULL);

-					}

-

-					CloseHandle(xBackup);

-				}

-

-				if(FileExists(BACKUP_INI_FILE))

-				{

-					_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);

-				}

-			}

-		}

-	}

-

-#else

-	_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);

-#endif

-

-	/**************************************************************************************************/

-	/*************************** Get the value for each of our preferances ****************************/

-	/**************************************************************************************************/

-	g_dwPrefs = GetPrivateProfileInt(szUser, _T("SETTINGS"),	0,  XTRAY_INI_FILE);

-

-	// backwards compatability

-	// also allows us to set defaults if its a new installation

-	// disable topic change, channel message and server notice by default

-	if(g_dwPrefs == 0)

-	{

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("HILIGHT"),		1,  XTRAY_INI_FILE)<<1);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("INVITE"),		1,  XTRAY_INI_FILE)<<2);

-		/* g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("TOPIC"),		1,  XTRAY_INI_FILE)<<3); */

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("BANNED"),		1,  XTRAY_INI_FILE)<<4);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("KICKED"),		1,  XTRAY_INI_FILE)<<5);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("CTCP"),		1,  XTRAY_INI_FILE)<<6);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("PMSG"),		1,  XTRAY_INI_FILE)<<7);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("KILLED"),		1,  XTRAY_INI_FILE)<<8);

-		/* g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("NOTICE"),		1,  XTRAY_INI_FILE)<<9); */

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("DISCONNECT"),	1,  XTRAY_INI_FILE)<<10);

-

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("AOM"),			0,  XTRAY_INI_FILE)<<11);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("TOT"),			1,  XTRAY_INI_FILE)<<12);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("AMAE"),		1,  XTRAY_INI_FILE)<<13);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("OSBWM"),		0,  XTRAY_INI_FILE)<<14);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("UWIOB"),		0,  XTRAY_INI_FILE)<<15);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("KAOI"),		0,  XTRAY_INI_FILE)<<16);

-		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("MIOC"),		0,  XTRAY_INI_FILE)<<17);

-	}

-	

-	g_hHotKey.key	= GetPrivateProfileInt(szUser, _T("KEY"),	84, XTRAY_INI_FILE);

-	g_hHotKey.mod	= GetPrivateProfileInt(szUser, _T("MOD"),	(MOD_CONTROL | MOD_SHIFT),  XTRAY_INI_FILE);

-	g_iTime			= GetPrivateProfileInt(szUser, _T("AOT"),	5,  XTRAY_INI_FILE);

-

-	GetPrivateProfileString(szUser, _T("AWAY"), _T(""),	g_szAway, 1024, XTRAY_INI_FILE);

-	

-	/**************************************************************************************************/

-	/******************************** Register our hotkey with windows ********************************/

-	/**************************************************************************************************/

-	if(g_dwPrefs & (1<<PREF_UWIOB))

-	{

-		RegisterHotKey(g_hHotkeyWnd, 1, g_hHotKey.mod, g_hHotKey.key);

-	}

-}

-

-void CheckPrefs(HWND hwnd, int iDlg)

-{

-	/**************************************************************************************************/

-	/**************** save the preferances based on the checkmarks/options ****************************/

-	/**************************************************************************************************/

-	switch(iDlg)

-	{

-	case IDD_EVENTS:

-		{

-			SetOption(hwnd, CHAN_HILIGHT,		CHAN_HILIGHT);

-			SetOption(hwnd, CHAN_INVITE,		CHAN_INVITE);

-			SetOption(hwnd, CHAN_TOPIC_CHANGE,	CHAN_TOPIC_CHANGE);

-			SetOption(hwnd, CHAN_BANNED,		CHAN_BANNED);

-			SetOption(hwnd, CHAN_KICKED,		CHAN_KICKED);

-			SetOption(hwnd, CTCP_GENERIC,		CTCP_GENERIC);

-			SetOption(hwnd, PMSG_RECEIVE,		PMSG_RECEIVE);

-			SetOption(hwnd, SERV_KILLED,		SERV_KILLED);

-			SetOption(hwnd, SERV_NOTICE,		SERV_NOTICE);

-			SetOption(hwnd, SERV_DISCONNECT,	SERV_DISCONNECT);

-			SetOption(hwnd, CHAN_MESSAGE,		CHAN_MESSAGE);

-		}

-		break;

-	case IDD_ALERTS:

-		{

-			SetOption(hwnd, PREF_AMAE,	PREF_AMAE);

-			SetOption(hwnd, PREF_OSBWM,	PREF_OSBWM);

-			SetOption(hwnd, PREF_UWIOB,	PREF_UWIOB);

-			SetOption(hwnd, PREF_KAOI,	PREF_KAOI);

-			SetOption(hwnd, PREF_BLINK,	PREF_BLINK);

-

-			/**************************************************************************/

-			/**************************************************************************/

-			/**************************************************************************/

-			TCHAR tTime[512];

-

-			GetWindowText(GetDlgItem(hwnd, IDC_ALERT_TIME), tTime, 511);

-			

-			g_iTime = _tstoi(tTime);

-			

-			/**************************************************************************/

-			/**************** Get our Hotkey and save it                     **********/

-			/**************** then remove the old hotkey and add the new one **********/

-			/**************************************************************************/

-			DWORD hHotkey;

-			hHotkey = SendDlgItemMessage(hwnd, IDC_ALERT_HOTKEY, HKM_GETHOTKEY, 0, 0);

-			

-			g_hHotKey.key = LOBYTE(hHotkey);

-			g_hHotKey.mod = HIBYTE(hHotkey);

-			

-			if(IsDlgButtonChecked(hwnd, PREF_UWIOB) == BST_CHECKED)

-			{

-				UnregisterHotKey(g_hHotkeyWnd, 1);

-				RegisterHotKey(g_hHotkeyWnd, 1, g_hHotKey.mod, g_hHotKey.key);

-			}

-			else

-			{

-				UnregisterHotKey(g_hHotkeyWnd, 1);

-			}

-

-			/*************************************************************************/

-			/*********** Get and save the away msg and alert time ********************/

-			/*************************************************************************/

-		}

-		break;

-	case IDD_SETTINGS:

-		{

-			SetOption(hwnd, PREF_AOM, PREF_AOM);

-			SetOption(hwnd, PREF_TOT, PREF_TOT);

-			SetOption(hwnd, PREF_MIOC, PREF_MIOC);

-			SetOption(hwnd, PREF_DNSIT, PREF_DNSIT);

-

-			GetDlgItemText(hwnd, IDC_AWAY_MSG, g_szAway, 511);

-

-			if(g_dwPrefs & (1<<PREF_DNSIT))

-			{

-				DWORD dwStyle;

-				dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);

-				dwStyle |= (1<<WS_CHILD);

-				SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle);

-				SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, (LONG_PTR)g_hHotkeyWnd);

-			}

-			else

-			{

-				DWORD dwStyle;

-				dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);

-				dwStyle &= ~(1<<WS_CHILD);

-				SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle);

-				SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, NULL);

-			}

-		}

-		break;

-	} 

-}

-

-void SetDialog(HWND hwnd, int iDlg)

-{

-	switch(iDlg)

-	{

-	case IDD_EVENTS:

-		{

-			SetCheck(hwnd, CHAN_HILIGHT,		CHAN_HILIGHT);

-			SetCheck(hwnd, CHAN_INVITE,			CHAN_INVITE);

-			SetCheck(hwnd, CHAN_TOPIC_CHANGE,	CHAN_TOPIC_CHANGE);

-			SetCheck(hwnd, CHAN_BANNED,			CHAN_BANNED);

-			SetCheck(hwnd, CHAN_KICKED,			CHAN_KICKED);

-			SetCheck(hwnd, CTCP_GENERIC,		CTCP_GENERIC);

-			SetCheck(hwnd, PMSG_RECEIVE,		PMSG_RECEIVE);

-			SetCheck(hwnd, SERV_KILLED,			SERV_KILLED);

-			SetCheck(hwnd, SERV_NOTICE,			SERV_NOTICE);

-			SetCheck(hwnd, SERV_DISCONNECT,		SERV_DISCONNECT);

-			SetCheck(hwnd, CHAN_MESSAGE,		CHAN_MESSAGE);

-		}

-		break;

-	case IDD_SETTINGS:

-		{

-			SetCheck(hwnd, PREF_TOT,	PREF_TOT);

-			SetCheck(hwnd, PREF_MIOC,	PREF_MIOC);

-			SetCheck(hwnd, PREF_AOM,	PREF_AOM);

-			SetCheck(hwnd, PREF_DNSIT,	PREF_DNSIT);

-

-			SetDlgItemText(hwnd, IDC_AWAY_MSG, g_szAway);

-		}

-		break;

-	case IDD_ALERTS:

-		{

-			

-			SetCheck(hwnd, PREF_BLINK,	PREF_BLINK);

-			SetCheck(hwnd, PREF_OSBWM,	PREF_OSBWM);

-			SetCheck(hwnd, PREF_UWIOB,	PREF_UWIOB);

-			SetCheck(hwnd, PREF_KAOI,	PREF_KAOI);

-

-			/**********************************************************/

-			/**********************************************************/

-			/**********************************************************/

-			if(SetCheck(hwnd, PREF_AMAE, PREF_AMAE) == false)

-			{

-				SetToggle(hwnd, PREF_OSBWM,				PREF_AMAE, TRUE);

-				SetToggle(hwnd, PREF_UWIOB,				PREF_AMAE, TRUE);

-				SetToggle(hwnd, PREF_KAOI,				PREF_AMAE, TRUE);

-				SetToggle(hwnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE);

-				SetToggle(hwnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE);

-				SetToggle(hwnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE);

-				SetToggle(hwnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE);

-			}

-			else

-			{

-

-				SetToggle(hwnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);

-				SetToggle(hwnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);

-				SetToggle(hwnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);

-				SetToggle(hwnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);

-			}

-

-			/**********************************************************/

-			/**********************************************************/

-			/**********************************************************/

-			TCHAR tTime[255];

-			SendDlgItemMessage(hwnd, IDC_ALERT_TIME,	WM_SETTEXT, 0, (LPARAM)_itot(g_iTime, tTime, 10));

-			SendDlgItemMessage(hwnd, IDC_ALERT_HOTKEY,	HKM_SETHOTKEY, MAKEWORD(g_hHotKey.key, g_hHotKey.mod), 0);

-		}

-		break;

-	}

-}

-

-int SetCheck(HWND hDialog, unsigned int uiCheckBox, unsigned int uiPref)

-{

-	if((g_dwPrefs & (1<<uiPref)))

-	{

-		CheckDlgButton(hDialog, uiCheckBox, BST_CHECKED);

-		return 1;

-	}

-	else

-	{

-		CheckDlgButton(hDialog, uiCheckBox, BST_UNCHECKED);

-		return 0;

-	}

-

-	return 0;

-}

-

-int SetToggle(HWND hDialog, unsigned int uiCheckBox, unsigned int uiTestbox, bool offeqoff)

-{

-	/**************************************************************************************************/

-	/*********************** if(true) then if option is off turn toggle off ***************************/

-	/*********************** if(false) then if option is off turn toggle on ***************************/

-	/**************************************************************************************************/

-	if(offeqoff)

-	{

-		if(IsDlgButtonChecked(hDialog, uiTestbox) == BST_CHECKED)

-		{

-			EnableWindow(GetDlgItem(hDialog, uiCheckBox), TRUE);

-			return 1;

-		}

-		else

-		{

-			EnableWindow(GetDlgItem(hDialog, uiCheckBox), FALSE);

-			return 0;

-		}

-	}

-	else

-	{

-		if(IsDlgButtonChecked(hDialog, uiTestbox) == BST_CHECKED)

-		{

-			EnableWindow(GetDlgItem(hDialog, uiCheckBox), FALSE);

-			return 1;

-		}

-		else

-		{

-			EnableWindow(GetDlgItem(hDialog, uiCheckBox), TRUE);

-			return 0;

-		}

-	}

-

-	return 0;

-}

-

-int SetOption(HWND hDialog, unsigned int uiCheckBox, unsigned int uiPref)

-{

-	if(IsDlgButtonChecked(hDialog, uiCheckBox) == BST_CHECKED)

-	{

-		g_dwPrefs |= (1<<uiPref);

-	}

-	else

-	{

-		g_dwPrefs &= ~(1<<uiPref);

-	}

-

-	return (g_dwPrefs & (1<<uiPref));

-}

-

-int WritePrivateProfileIntA(char *szSection, char *szItem, int iData, char *szPath)

-{

-	char szData[33];

-	itoa(iData, szData, 10);

-	return WritePrivateProfileStringA(szSection, szItem, szData, szPath);

-}

-

-int WritePrivateProfileIntW(wchar_t *wszSection, wchar_t *wszItem, int iData, wchar_t *wszPath)

-{

-	wchar_t wszData[33];

-	_itow(iData, wszData, 10);

-	return WritePrivateProfileStringW(wszSection, wszItem, wszData, wszPath);

-}

-

-// For cleanup ( Closing windows and the such )

-void HoldClose()

-{

-	HANDLE hcThread;

-	DWORD dwThreadID;

-	hcThread = CreateThread(NULL, 0, HoldCloseThread, 0, 0, &dwThreadID);

-}

-

-DWORD WINAPI HoldCloseThread(LPVOID lpParam)

-{

-	Sleep(1000);

-	PostMessage(g_hXchatWnd, WM_CLOSE, 0, 0);

-	return 0;

-}

-

-bool FileExists(TCHAR *file)

-{

-	HANDLE hTemp = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

-	int nRet = GetLastError();

-	CloseHandle(hTemp);

-

-	if(nRet == 0)

-	{

-		return true;

-	}

-	else

-	{

-		return false;

-	}

-

-	return false;

-}

-

-void ConvertString(const char *in, wchar_t *out, int size)

-{

-	MultiByteToWideChar(CP_UTF8, 0, in,  -1, out, size);

-}

-

-void ConvertString(const wchar_t *in, char *out, int size)

-{

-	WideCharToMultiByte(CP_UTF8, 0, in, (size - 1), out, size, NULL, NULL);

-}

-

-void ConvertString(const char *in, char *out, int size)

-{

-	strncpy(out, in, size);

-}

-

-void ErrorDebug(LPTSTR lpszFunction)

-{ 

-    TCHAR szBuf[80]; 

-    LPVOID lpMsgBuf;

-    DWORD dw = GetLastError(); 

-

-    FormatMessage(

-        FORMAT_MESSAGE_ALLOCATE_BUFFER | 

-        FORMAT_MESSAGE_FROM_SYSTEM,

-        NULL,

-        dw,

-        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),

-        (LPTSTR) &lpMsgBuf,

-        0, NULL );

-

-    _stprintf(szBuf, 

-        _T("%s failed with error %d: %s"), 

-        lpszFunction, dw, lpMsgBuf); 

- 

-    MessageBox(NULL, szBuf, _T("Error"), MB_OK); 

-

-    LocalFree(lpMsgBuf);

-}

-

diff --git a/plugins/xtray/utility.h b/plugins/xtray/utility.h
deleted file mode 100644
index ce3d541c..00000000
--- a/plugins/xtray/utility.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#ifndef _H_UTILITY_H

-#define _H_UTILITY_H

-

-int						SetOption		(HWND, unsigned int, unsigned int);

-int						SetCheck		(HWND, unsigned int, unsigned int);

-int						SetToggle		(HWND, unsigned int, unsigned int, bool);

-void					ErrorDebug		(LPTSTR lpszFunction);

-void					SetDialog		(HWND, int);

-void					CheckPrefs		(HWND, int);

-bool					FileExists		(TCHAR *);

-DWORD WINAPI			HoldCloseThread	(LPVOID);

-void					SavePrefs		(int);

-void					LoadPrefs		();

-void					HoldClose		();

-

-void ConvertString(const char *in,		wchar_t *out,	int size);

-void ConvertString(const wchar_t *in,	char *out,		int size);

-void ConvertString(const char *in,		char *out,		int size);

-

-int WritePrivateProfileIntA(char *, char *, int, char *);

-int WritePrivateProfileIntW(wchar_t *, wchar_t *, int, wchar_t *);

-

-#ifdef UNICODE

-#define WritePrivateProfileInt WritePrivateProfileIntW

-#else

-#define WritePrivateProfileInt WritePrivateProfileIntA

-#endif

-

-struct HOTKEY

-{

-	WORD key;

-	WORD mod;

-};

-#endif
\ No newline at end of file
diff --git a/plugins/xtray/xchat.cpp b/plugins/xtray/xchat.cpp
deleted file mode 100644
index 581970f1..00000000
--- a/plugins/xtray/xchat.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/* X-Tray

- * Copyright (C) 1998, 2005 Peter Zelezny, Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#include <windows.h>

-#include <vector>

-#include <algorithm>

-#include <stdio.h>

-#include <tchar.h>

-#include "plugin.h"

-#include "xtray.h"

-#include "resource.h"

-#include "xchat.h"

-#include "utility.h"

-

-// from util.c of xchat source code ( slightly modified to fit X-Tray Syntax )

-char *xchat_strip_color (char *text)

-{

-	int nc	= 0;

-	int i	= 0;

-	int col	= 0;

-	int len	= strlen(text);

-	char *new_str = (char *)malloc(len + 2);

-

-	while (len > 0)

-	{

-		if ((col && isdigit(*text) && (nc < 2)) || (col && isdigit(*(text+1)) && (nc < 3) && (*text == ',')))

-		{

-			nc++;

-

-			if(*text == ',')

-			{

-				nc = 0;

-			}

-		}

-		else

-		{

-			col = 0;

-

-			switch (*text)

-			{

-			case '\003':			  /*ATTR_COLOR: */

-				{

-					col = 1;

-					nc = 0;

-				}

-				break;

-			case '\007':			  /*ATTR_BEEP: */

-			case '\017':			  /*ATTR_RESET: */

-			case '\026':			  /*ATTR_REVERSE: */

-			case '\002':			  /*ATTR_BOLD: */

-			case '\037':			  /*ATTR_UNDERLINE: */

-				break;

-			default:

-				{

-					new_str[i] = *text;

-					i++;

-				}

-				break;

-			}

-		}

-

-		text++;

-		len--;

-	}

-

-	new_str[i] = 0;

-

-	return new_str;

-}

-

-void check_special_chars (char *cmd)

-{

-	int occur	= 0;

-	int len		= strlen (cmd);

-	int i = 0, j = 0;

-	char *buf;

-

-	if (!len)

-		return;

-

-	buf = (char *)malloc (len + 1);

-

-	if (buf)

-	{

-		while (cmd[j])

-		{

-			switch (cmd[j])

-			{

-			case '%':

-				{

-					occur++;

-

-					switch (cmd[j + 1])

-					{

-					case 'R':

-						buf[i] = '\026';

-						break;

-					case 'U':

-						buf[i] = '\037';

-						break;

-					case 'B':

-						buf[i] = '\002';

-						break;

-					case 'C':

-						buf[i] = '\003';

-						break;

-					case 'O':

-						buf[i] = '\017';

-						break;

-					case '%':

-						buf[i] = '%';

-						break;

-					default:

-						buf[i] = '%';

-						j--;

-						break;

-					}

-

-					j++;

-				}

-				break;

-			default:

-				{

-					buf[i] = cmd[j];

-				}

-				break;

-			}

-

-			j++;

-			i++;

-		}

-

-		buf[i] = 0;

-

-		if (occur)

-			strcpy (cmd, buf);

-

-		free (buf);

-	}

-}

-

-void xchat_globally_away(TCHAR *tszAway)

-{

-	char szTemp[512];

-	char szAway[512];

-

-	ConvertString(tszAway, szAway, 512);

-	_snprintf(szTemp, 512, "ALLSERV AWAY %s\0", szAway);

-	check_special_chars(szTemp);

-	xchat_exec(szTemp);

-}

-

-void xchat_away(TCHAR *tszAway)

-{

-	char szTemp[512];

-	char szAway[512];

-

-	ConvertString(tszAway, szAway, 512);

-	_snprintf(szTemp, 512, szAway);

-	check_special_chars(szTemp);

-	xchat_commandf(ph, "AWAY %s\0", szTemp);

-}

-

-void xchat_globally_back()

-{

-	std::vector<int> xs;

-	std::vector<int>::iterator xsi;

-	xchat_list *xl = xchat_list_get(ph, "channels");

-

-	if(xl)

-	{

-		while(xchat_list_next(ph, xl))

-		{

-			xsi = std::find(xs.begin(), xs.end(), xchat_list_int(ph, xl, "id"));

-

-			if((xsi == xs.end()) &&

-				((strlen(xchat_list_str(ph, xl, "server")) > 0) || 

-				(strlen(xchat_list_str(ph, xl, "channel")) > 0)))

-			{

-				xs.push_back(xchat_list_int(ph, xl, "id"));

-				xchat_set_context(ph, (xchat_context *)xchat_list_str(ph, xl, "context"));

-				xchat_back();

-			}

-		}

-

-		xchat_list_free(ph, xl);

-	}

-}

-

-

-

-void xchat_back()

-{

-	if(xchat_get_info(ph, "away"))

-	{

-		xchat_command(ph, "BACK");

-	}

-}

-

-HMENU setServerMenu()

-{

-	HMENU sTemp = CreateMenu();

-	TCHAR wszServer[128];

-	TCHAR wszNick[128];

-	TCHAR wszMenuEntry[256];

-

-	std::vector<int> xs;

-	std::vector<int>::iterator xsi;

-	xchat_list *xl = xchat_list_get(ph, "channels");

-

-	AppendMenu(sTemp, MF_STRING, ACT_AWAY, _T("Set Globally Away"));

-	AppendMenu(sTemp, MF_STRING, ACT_BACK, _T("Set Globally Back"));

-	AppendMenu(sTemp, MF_SEPARATOR, 0, NULL);

-

-	if(xl)

-	{

-		while(xchat_list_next(ph, xl))

-		{

-			xsi = std::find(xs.begin(), xs.end(), xchat_list_int(ph, xl, "id"));

-

-			if( (xsi == xs.end()) &&

-				((strlen(xchat_list_str(ph, xl, "server")) > 0) || 

-				(strlen(xchat_list_str(ph, xl, "channel")) > 0)))

-			{

-				xchat_set_context(ph, (xchat_context *)xchat_list_str(ph, xl, "context"));

-				xs.push_back(xchat_list_int(ph, xl, "id"));

-

-				char *network	= _strdup(xchat_list_str(ph, xl, "network"));

-				char *server	= _strdup(xchat_list_str(ph, xl, "server"));

-				char *nick		= _strdup(xchat_get_info(ph, "nick"));

-

-				if(network != NULL)

-				{

-					ConvertString(network, wszServer, 128);

-				}

-				else

-				{

-					ConvertString(server, wszServer, 128);

-				}

-

-				if(server != NULL)

-				{

-					ConvertString(nick, wszNick, 128);

-					_sntprintf(wszMenuEntry, 256, _T("%s @ %s\0"), wszNick, wszServer);

-

-					if(!xchat_get_info(ph, "away"))

-					{

-						AppendMenu(sTemp, MF_STRING, (xchat_list_int(ph, xl, "id") + 1), wszMenuEntry);

-					}

-					else

-					{

-						AppendMenu(sTemp, (MF_CHECKED | MF_STRING), (xchat_list_int(ph, xl, "id") + 1), wszMenuEntry);							

-					}

-				}

-

-				free(network);

-				free(server);

-				free(nick);

-			}

-		}

-

-		xchat_list_free(ph, xl);

-	}

-

-	return sTemp;

-}

-

-struct _xchat_context *xchat_find_server(int find_id)

-{

-	xchat_context *xc;

-	xchat_list *xl = xchat_list_get(ph, "channels");

-	int id;

-

-	if(!xl)

-		return NULL;

-

-	while(xchat_list_next(ph, xl))

-	{

-		id = xchat_list_int(ph, xl, "id");

-		

-		if(id == -1)

-		{

-			return NULL;

-		}

-		else if(id == find_id)

-		{

-			xc = (xchat_context *)xchat_list_str(ph, xl, "context");

-			

-			xchat_list_free(ph, xl);

-

-			return xc;

-		}

-	}

-

-	xchat_list_free(ph, xl);

-

-	return NULL;

-}

-

-void xchat_exec(char *command)

-{

-	xchat_set_context(ph, xchat_find_context(ph, NULL, NULL));

-	xchat_command(ph, command);

-}
\ No newline at end of file
diff --git a/plugins/xtray/xchat.h b/plugins/xtray/xchat.h
deleted file mode 100644
index 76452aeb..00000000
--- a/plugins/xtray/xchat.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#ifndef _H_XCHAT_H

-#define _H_XCHAT_H

-

-void					xchat_exec			(char *);

-char					*xchat_strip_color	(char *);

-void					xchat_parse			(char *);

-struct _xchat_context	*xchat_find_server	(int);

-void					xchat_globally_away	(TCHAR *);

-void					xchat_away			(TCHAR *);

-void					xchat_globally_back	();

-void					xchat_back			();

-HMENU					setServerMenu		();

-

-#endif
\ No newline at end of file
diff --git a/plugins/xtray/xtray.cpp b/plugins/xtray/xtray.cpp
deleted file mode 100644
index a7c8c8bd..00000000
--- a/plugins/xtray/xtray.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#define _WIN32_IE 0x0601

-

-#include <windows.h>

-#include <list>

-#include <string>

-#include <shobjidl.h>

-#include "resource.h"

-#include "callbacks.h"

-#include "plugin.h"

-#include "utility.h"

-#include "xtray.h"

-#include "sdTray.h"

-#include "sdAlerts.h"

-#include "plugin.h"

-

-/*****************************************************/

-/**** Don't want to pollute the namespace do we? *****/

-/*****************************************************/

-std::list<xchat_hook *> g_vHooks;

-

-/*****************************************************/

-/************ Global Identifiers *********************/

-/*****************************************************/

-WNDPROC g_hOldProc;

-xchat_plugin *ph;

-

-/*****************************************************/

-/***************** Resources *************************/

-/*****************************************************/

-HWND	g_hXchatWnd;

-HWND	g_hHotkeyWnd;

-HWND	g_hPrefDlg;

-HMENU	g_hTrayMenu;

-HICON	g_hIcons[11];

-HANDLE	g_hInstance;

-/*****************************************************/

-/***************** Preferences ***********************/

-/*****************************************************/

-unsigned int g_dwPrefs;

-TCHAR	g_szAway[512];

-int		g_iTime;

-

-

-BOOL WINAPI DllMain(HANDLE hModule, DWORD fdwReason, LPVOID lpVoid)

-{

-	if((fdwReason == DLL_PROCESS_ATTACH) || (fdwReason == DLL_THREAD_ATTACH))

-	{

-		g_hInstance = hModule;

-	}

-

-	return TRUE;

-}

-

-int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)

-{

-	ph = plugin_handle;

-

-	*plugin_name	= "X-Tray";

-	*plugin_desc	= "Minimize XChat to the Windows system tray";

-	*plugin_version = "1.2.4";

-

-	/***************************************************************************************************************************/

-	/************************* Load our preferances from xTray.ini *************************************************************/

-	/***************************************************************************************************************************/

-	LoadPrefs();

-

-	/***************************************************************************************************************************/

-	/************************* Finds the xChat window and saves it for later use ***********************************************/

-	/***************************************************************************************************************************/

-	g_hXchatWnd = (HWND)xchat_get_info(ph, "win_ptr");

-

-	if(g_hXchatWnd == NULL)

-	{

-		EnumThreadWindows(GetCurrentThreadId(), EnumWindowsProc, 0);

-	}

-

-	g_hOldProc	= (WNDPROC)GetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC);

-	SetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC, (LONG_PTR)WindowProc);

-

-	/***************************************************************************************************************************/	

-	/************************* Grab the xChat Icon, Load our menu, create the window to receive the hotkey messages  ***********/

-	/************************* and register the windows message so we know if explorer crashes                       ***********/

-	/***************************************************************************************************************************/

-	g_hTrayMenu		= GetSubMenu(LoadMenu((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDR_TRAY_MENU)), 0);

-	g_hHotkeyWnd	= CreateDialog((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDD_ALERT), NULL,		(DLGPROC)HotKeyProc);

-	g_hPrefDlg		= CreateDialog((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDD_PREF),  g_hXchatWnd, (DLGPROC)PrefProc);

-

-	g_hIcons[0]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_XCHAT),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[1]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_CHANMSG),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[2]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_HIGHLIGHT),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[5]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_BANNED),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[6]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_KICKED),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[8]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_PMSG),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[10]= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_SNOTICE),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-	g_hIcons[11]= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_DISCONNECTED),	IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

-

-	/***************************************************************************************************************************/

-	/************************* Add our icon to the tray ************************************************************************/

-	/***************************************************************************************************************************/

-	char szVersion[64];

-	_snprintf(szVersion, 64, "XChat-WDK [%s]", xchat_get_info(ph, "version"));

-	AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG);

-

-	/***************************************************************************************************************************/

-	/***************************************************************************************************************************/

-	/***************************************************************************************************************************/

-	if(g_dwPrefs & (1<<PREF_DNSIT))

-	{

-		DWORD dwStyle;

-		dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);

-		dwStyle |= (1<<WS_CHILD);

-		SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle);

-		SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, (LONG_PTR)g_hHotkeyWnd);

-	}

-

-	/***************************************************************************************************************************/

-	/************************* Set our hooks and save them for later so we can unhook them *************************************/

-	/***************************************************************************************************************************/

-	g_vHooks.push_back(xchat_hook_print(ph, "Channel Msg Hilight",			XCHAT_PRI_NORM, event_cb,	(void *)CHAN_HILIGHT));

-	g_vHooks.push_back(xchat_hook_print(ph, "Channel Message",				XCHAT_PRI_NORM, event_cb,	(void *)CHAN_MESSAGE));

-	g_vHooks.push_back(xchat_hook_print(ph, "Topic Change",					XCHAT_PRI_NORM, event_cb,	(void *)CHAN_TOPIC_CHANGE));

-	g_vHooks.push_back(xchat_hook_print(ph, "Channel Action Hilight",		XCHAT_PRI_NORM, event_cb,	(void *)CHAN_HILIGHT));

-	g_vHooks.push_back(xchat_hook_print(ph, "Channel INVITE",				XCHAT_PRI_NORM, event_cb,	(void *)CHAN_INVITE));

-	g_vHooks.push_back(xchat_hook_print(ph, "You Kicked",					XCHAT_PRI_NORM, event_cb,	(void *)CHAN_KICKED));

-	g_vHooks.push_back(xchat_hook_print(ph, "Banned",						XCHAT_PRI_NORM, event_cb,	(void *)CHAN_BANNED));

-	g_vHooks.push_back(xchat_hook_print(ph, "CTCP Generic",					XCHAT_PRI_NORM, event_cb,	(void *)CTCP_GENERIC));

-	g_vHooks.push_back(xchat_hook_print(ph, "Private Message",				XCHAT_PRI_NORM, event_cb,	(void *)PMSG_RECEIVE));

-	g_vHooks.push_back(xchat_hook_print(ph, "Private Message to Dialog",	XCHAT_PRI_NORM, event_cb,	(void *)PMSG_RECEIVE));

-	g_vHooks.push_back(xchat_hook_print(ph, "Disconnected",					XCHAT_PRI_NORM, event_cb,	(void *)SERV_DISCONNECT));

-	g_vHooks.push_back(xchat_hook_print(ph, "Killed",						XCHAT_PRI_NORM, event_cb,	(void *)SERV_KILLED));

-	g_vHooks.push_back(xchat_hook_print(ph, "Notice",						XCHAT_PRI_NORM, event_cb,	(void *)SERV_NOTICE));

-	g_vHooks.push_back(xchat_hook_command(ph, "tray_alert",					XCHAT_PRI_NORM, command_cb,	"Create an Alert", NULL));

-

-	return 1;

-}

-

-int xchat_plugin_deinit(xchat_plugin *plugin_handle)

-{

-	/******************************************/

-	/****** Remove the Icon from the tray *****/

-	/******************************************/

-	StopBlink(g_hXchatWnd, 1, g_hIcons[0]);

-	RemoveIcon(g_hXchatWnd, 1);

-	

-	/*******************************************/

-	/*******************************************/

-	/*******************************************/

-	if(g_dwPrefs & (1<<PREF_DNSIT))

-	{

-		DWORD dwStyle;

-		dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);

-		dwStyle &= ~(1<<WS_CHILD);

-		SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle);

-		SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, NULL);

-	}

-

-	/******************************************/

-	/****** Unload our resources **************/

-	/******************************************/

-	DestroyMenu(g_hTrayMenu);

-

-	for(int i = 0; i <= 11; i++)

-	{

-		DestroyIcon(g_hIcons[i]);

-	}

-

-	/******************************************/

-	/****** Remove our window hook ************/

-	/******************************************/

-	SetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC, (LONG_PTR)g_hOldProc);

-

-	/******************************************/

-	/****** Remove our hotkey, and destroy ****/

-	/****** the window that receives its   ****/

-	/****** messages                       ****/

-	/******************************************/

-	UnregisterHotKey(g_hHotkeyWnd, 1);

-	DestroyWindow(g_hHotkeyWnd);

-	DestroyWindow(g_hPrefDlg);

-

-	/******************************************/

-	/************* Clean up Isle 7 ************/

-	/******************************************/

-	if(sdAlertNum())

-	{

-		sdCloseAlerts();

-	}

-	/******************************************/

-	/****** remove our xchat_hook_*s **********/

-	/******************************************/

-	while(!g_vHooks.empty())

-	{

-		if(g_vHooks.back() != NULL)

-		{

-			xchat_unhook(ph, g_vHooks.back());

-		}

-		g_vHooks.pop_back();

-	}

-

-	return 1;

-}

diff --git a/plugins/xtray/xtray.h b/plugins/xtray/xtray.h
deleted file mode 100644
index 56323cf2..00000000
--- a/plugins/xtray/xtray.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* X-Tray

- * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

- *

- * X-Tray is free software; you can redistribute it and/or modify

- * it under the terms of the GNU General Public License as published by

- * the Free Software Foundation; either version 2 of the License, or

- * (at your option) any later version.

- * 

- * X-Tray is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

- * GNU General Public License for more details.

- * 

- * You should have received a copy of the GNU General Public License

- * along with X-Tray; if not, write to the Free Software

- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- */

-

-#ifndef _XTRAY_H

-#define _XTRAY_H

-

-/******************** Globals *************************/

-extern HWND				g_hXchatWnd;

-extern HWND				g_hHotkeyWnd;

-extern HWND				g_hPrefDlg;

-extern HMENU			g_hTrayMenu;

-extern HICON			g_hIcons[11];

-extern HANDLE			g_hInstance;

-extern unsigned int		g_dwPrefs;

-extern TCHAR			g_szAway[512];

-extern int				g_iTime;

-extern WNDPROC			g_hOldProc;

-extern struct _xchat_plugin *ph;

-/******************************************************/

-

-/******************** Messages ************************/

-#define WM_TRAYMSG WM_APP

-/******************************************************/

-

-/********************* Events *************************/

-#define CHAN_HILIGHT			1

-#define CHAN_INVITE				2

-#define CHAN_TOPIC_CHANGE		3

-#define CHAN_BANNED				4

-#define CHAN_KICKED				5

-

-#define CTCP_GENERIC			6

-#define PMSG_RECEIVE			7

-

-#define SERV_KILLED				8

-#define SERV_NOTICE				9

-#define SERV_DISCONNECT			10

-

-/* new events */

-#define CHAN_MESSAGE			21

-

-#define PREF_AOM				11 // away on minimize

-#define PREF_TOT				12 // Tray on Taskbar

-#define PREF_AMAE				13 // alert me about events

-#define PREF_OSBWM				14 // Only Show Balloon When Minimized

-#define PREF_UWIOB				15 // Use Window Instead of Balloon

-#define PREF_KAOI				16 // Keep alerts open indefinately

-#define PREF_MIOC				17 // Minimize instead of close

-#define PREF_BLINK				18 // blink icon

-#define PREF_CICO				19 // change icon - not implemented

-#define PREF_DNSIT				20 // Do not show in taskbar

-/******************************************************/

-#endif

-

-#ifdef _WIN64

-/* use replacement with the same value, and use SetWindowLongPtr instead

-   of SetWindowLong. more info:

-

-   http://msdn.microsoft.com/en-us/library/ms633591.aspx

-   http://msdn.microsoft.com/en-us/library/ms644898.aspx */

-#define GWL_HWNDPARENT GWLP_HWNDPARENT

-#endif