summary refs log tree commit diff stats
path: root/plugins/winamp
diff options
context:
space:
mode:
authorberkeviktor@aol.com <berkeviktor@aol.com>2010-10-09 20:46:20 +0200
committerberkeviktor@aol.com <berkeviktor@aol.com>2010-10-09 20:46:20 +0200
commit77292b4254a78cb286991589bc2796761e621bb0 (patch)
treec15624c2ec16af2b28cb5a57329fc31fb872b763 /plugins/winamp
parent5bc55056180fa436be33e9d43a8f0729259cece5 (diff)
replace easywinampcontrol with winamp
Diffstat (limited to 'plugins/winamp')
-rw-r--r--plugins/winamp/makefile.mak18
-rw-r--r--plugins/winamp/winamp.c184
2 files changed, 202 insertions, 0 deletions
diff --git a/plugins/winamp/makefile.mak b/plugins/winamp/makefile.mak
new file mode 100644
index 00000000..6fd431bd
--- /dev/null
+++ b/plugins/winamp/makefile.mak
@@ -0,0 +1,18 @@
+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) winamp.c

+

+clean:

+	del *.obj

+	del *.dll

+	del *.exp

+	del *.lib

diff --git a/plugins/winamp/winamp.c b/plugins/winamp/winamp.c
new file mode 100644
index 00000000..586a5e67
--- /dev/null
+++ b/plugins/winamp/winamp.c
@@ -0,0 +1,184 @@
+/********************* 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: /wa [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.4";
+
+   xchat_hook_command(ph, "WA", XCHAT_PRI_NORM, winamp, "Usage: /WA [PAUSE|PLAY|STOP|NEXT|PREV|START] - control Winamp or show what's currently playing", 0);
+
+   xchat_print(ph, "Winamp plugin loaded\n");
+
+   return 1;       /* return 1 for success */
+}
+
+int xchat_plugin_deinit(void)
+{
+	xchat_print(ph, "Winamp plugin unloaded\n");
+	return 1;
+}