changeset 15928:5b065c7ff5cd

merge of '04076a446ca2bc48c37d00b8b255bc1311b6c51c' and '8a20c90142cacba36041509da3a0e11499df3ebc'
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Mon, 26 Mar 2007 01:55:33 +0000
parents f771cdcc551a (current diff) f8c16848b76d (diff)
children 9ac4e6b097d3
files doc/gaims_funniest_home_convos.txt finch/gntrequest.c finch/libgnt/gntfilesel.c finch/libgnt/gntfilesel.h gaim.apspec.in gaim.spec.in libpurple/gaim-client-example.c libpurple/gaim-client.c libpurple/gaim-notifications-example libpurple/gaim-remote libpurple/gaim-send libpurple/gaim-send-async libpurple/gaim-url-handler libpurple/gaim.h libpurple/gconf/gaim.schemas.in libpurple/plugins/Makefile.am libpurple/plugins/gaim.pl libpurple/plugins/mono/api/GaimPlugin.cs libpurple/plugins/perl/libgaimperl.c m4macros/gaim.m4 pidgin/Makefile.am pidgin/gtkutils.c pidgin/pixmaps/Makefile.am pidgin/pixmaps/gaim.ico pidgin/pixmaps/gaim.png pidgin/pixmaps/gaim.svg pidgin/pixmaps/pidgin.png pidgin/plugins/crazychat/cc_gaim_plugin.c pidgin/plugins/gaimrc.c
diffstat 252 files changed, 6893 insertions(+), 6661 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -10,32 +10,30 @@
 		README.SVN \
 		README.dbus \
 		README.mingw \
+		config.h.mingw \
 		gaim.pc.in \
-		gaim.spec.in \
-		gaim.apspec.in \
-		pidgin.desktop.in \
+		gaim-uninstalled.pc.in \
 		gaim.service.in \
 		intltool-extract.in \
 		intltool-merge.in \
 		intltool-update.in \
-		config.h.mingw \
+		pidgin.apspec.in \
+		pidgin.spec.in \
+		pidgin.desktop.in \
 		po/Makefile.mingw
 
 noinst_HEADERS = config.h
 
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = gaim.pc
-
 if ENABLE_DBUS
 dbus_servicedir=$(DBUS_SERVICES_DIR)
 dbus_service_DATA=gaim.service
 endif
 
-dist-hook: gaim.spec
-	cp gaim.spec $(distdir)
+dist-hook: pidgin.spec
+	cp pidgin.spec $(distdir)
 	rm $(distdir)/config.h
 
-distcheck-hook: libpurple/plugins/perl/common/Gaim.pm gtk/plugins/perl/common/GtkUI.pm
+distcheck-hook: libpurple/plugins/perl/common/Purple.pm pidgin/plugins/perl/common/GtkUI.pm
 #	cp libpurple/plugins/perl/common/Gaim.pm $(distdir)/libpurple/plugins/perl/common
 
 appsdir = $(datadir)/applications
@@ -66,9 +64,9 @@
 # breaks "make distcheck" unless we ignore perl things
 
 distuninstallcheck_listfiles = \
-	find . -type f -print | grep -v perl | grep -v Gaim.3pm
+	find . -type f -print | grep -v perl | grep -v Purple.3pm
 
-DISTCLEANFILES= pidgin.desktop libpurple/gconf/gaim.schemas intltool-extract \
+DISTCLEANFILES= pidgin.desktop libpurple/gconf/purple.schemas intltool-extract \
 			intltool-merge intltool-update
 
 ACLOCAL_AMFLAGS = -I m4
--- a/configure.ac	Mon Mar 26 01:11:46 2007 +0000
+++ b/configure.ac	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([pidgin], [2.0.0beta7devel], [gaim-devel@lists.sourceforge.net])
+AC_INIT([pidgin], [2.0.0beta7devel], [devel@pidgin.im])
 AC_CANONICAL_SYSTEM
 AM_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
@@ -700,14 +700,14 @@
 extern_init=
 load_proto=
 for i in $STATIC_PRPLS ; do
-	dnl Ugly special case for "libsilcgaim.a":
+	dnl Ugly special case for "libsilcpurple.a":
 	if test "x$i" = "xsilc"; then
-		STATIC_LINK_LIBS="$STATIC_LINK_LIBS protocols/$i/lib${i}gaim.a"
+		STATIC_LINK_LIBS="$STATIC_LINK_LIBS protocols/$i/lib${i}purple.a"
 	else
 		STATIC_LINK_LIBS="$STATIC_LINK_LIBS protocols/$i/lib$i.a"
 	fi
-	extern_init="$extern_init extern gboolean gaim_init_${i}_plugin();"
-	load_proto="$load_proto gaim_init_${i}_plugin();"
+	extern_init="$extern_init extern gboolean purple_init_${i}_plugin();"
+	load_proto="$load_proto purple_init_${i}_plugin();"
 	case $i in
 		bonjour)	static_bonjour=yes ;;
 		gg)			static_gg=yes ;;
@@ -883,7 +883,7 @@
 fi
 AC_SUBST(CFLAGS)
 
-AC_PATH_PROG(gaimpath, gaim)
+AC_PATH_PROG(pidginpath, pidgin)
 
 dnl #######################################################################
 dnl # Check for D-Bus libraries
@@ -935,7 +935,7 @@
 dnl it is now accessible through D-Bus.
 
 dnl Python is only required if --enable-dbus is used, and only for
-dnl the build process to generate the code, not for running gaim.
+dnl the build process to generate the code, not for running pidgin.
 dnl This autogenerated code is system-independent, so in principle we
 dnl can generate all of it before shipping.  But I thought adding
 dnl auto-generated stuff to the repository is inelegant.
@@ -1145,7 +1145,7 @@
 
 		AC_ARG_WITH(perl-lib,
 		[AC_HELP_STRING([--with-perl-lib=[site|vendor|DIR]],
-			[specify where to install the Perl libraries for gaim. Default is site.])],
+			[specify where to install the Perl libraries for pidgin. Default is site.])],
 		[
 			if test "x$withval" = xsite; then
 				PERL_MM_PARAMS=""
@@ -1890,25 +1890,26 @@
 AC_ARG_ENABLE(fatal-asserts, [AC_HELP_STRING([--enable-fatal-asserts],
 	[make assertions fatal (useful for debugging)])], , enable_fatal_asserts=no)
 if test "x$enable_fatal_asserts" = "xyes" ; then
-	AC_DEFINE(GAIM_FATAL_ASSERTS, 1, [Define to make assertions fatal (useful for debugging).])
+	AC_DEFINE(PURPLE_FATAL_ASSERTS, 1, [Define to make assertions fatal (useful for debugging).])
 fi
 
 AC_OUTPUT([Makefile
 		   Doxyfile
-		   gaim.apspec
 		   gaim.service
 		   doc/Makefile
 		   doc/pidgin.1
 		   doc/finch.1
 		   m4macros/Makefile
+		   pidgin.apspec
 		   pidgin/Makefile
 		   pidgin/pidgin.pc
+		   pidgin/pidgin-uninstalled.pc
 		   pidgin/pixmaps/Makefile
 		   pidgin/pixmaps/animations/Makefile
 		   pidgin/pixmaps/animations/16/Makefile
 		   pidgin/pixmaps/buddy_icons/Makefile
 		   pidgin/pixmaps/buddy_icons/qq/Makefile
- 		   pidgin/pixmaps/dialogs/Makefile
+		   pidgin/pixmaps/dialogs/Makefile
 		   pidgin/pixmaps/dialogs/16/Makefile
 		   pidgin/pixmaps/dialogs/16/scalable/Makefile
 		   pidgin/pixmaps/dialogs/64/Makefile
@@ -1919,7 +1920,7 @@
 		   pidgin/pixmaps/emotes/Makefile
 		   pidgin/pixmaps/emotes/default/Makefile
 		   pidgin/pixmaps/emotes/default/22/Makefile
-		   pidgin/pixmaps/emotes/default/22/scalable/Makefile	
+		   pidgin/pixmaps/emotes/default/22/scalable/Makefile
 		   pidgin/pixmaps/emotes/none/Makefile
 		   pidgin/pixmaps/protocols/Makefile
 		   pidgin/pixmaps/protocols/16/Makefile
@@ -1958,6 +1959,7 @@
 		   libpurple/example/Makefile
 		   libpurple/gconf/Makefile
 		   libpurple/purple.pc
+		   libpurple/purple-uninstalled.pc
 		   libpurple/plugins/Makefile
 		   libpurple/plugins/mono/Makefile
 		   libpurple/plugins/mono/api/Makefile
@@ -1989,9 +1991,7 @@
 		   finch/libgnt/wms/Makefile
 		   finch/plugins/Makefile
 		   po/Makefile.in
-		   gaim.pc
-		   gaim-uninstalled.pc
-		   gaim.spec
+		   pidgin.spec
 		  ])
 
 echo
@@ -2030,9 +2030,9 @@
 echo Print debugging messages...... : $enable_debug
 echo Assertions are fatal.......... : $enable_fatal_asserts
 echo
-eval eval echo Gaim will be installed in $bindir.
-if test "x$gaimpath" != "x" ; then
-	echo Warning: You have an old copy of gaim at $gaimpath.
+eval eval echo Pidgin will be installed in $bindir.
+if test "x$pidginpath" != "x" ; then
+	echo Warning: You have an old copy of Pidgin at $pidginpath.
 fi
 echo
 echo configure complete, now type \'make\'
--- a/doc/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/doc/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -12,7 +12,7 @@
 	conversation-signals.dox \
 	core-signals.dox \
 	dbus-server-signals.dox \
-	gaims_funniest_home_convos.txt \
+	funniest_home_convos.txt \
 	finch.1.in \
 	gtkaccount-signals.dox \
 	gtkblist-signals.dox \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/funniest_home_convos.txt	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,453 @@
+All IM names have been changed, so we don't get sued or nothing.  We get some 
+interesting convos....
+
+17:58:27 Luser: You do any GTK programming?
+17:58:43 Zilding: You mean, work on GTK itself?
+17:58:56 Luser: no program stuff using GTK
+17:59:37 Zilding: Hrm.  How do you know me, again? :)
+17:59:54 Luser: haha.......i saw your handle in the help part of gaim
+18:00:01 Zilding: yes.
+18:00:05 Luser: Didnt mean to freak you out
+18:00:16 Zilding: Iz okay, I figured that was the answer.
+18:00:26 Zilding: Is gaim written with Athena, Motif, or Xforms?
+18:00:29 Zilding: or GTK? :)
+18:00:39 Luser: GTK :)
+18:00:50 Zilding: I believe you have answered your own question. :)
+
+
+15:40:14 SomeGuy: hey you there?
+15:40:28 Zilding: nope
+15:40:33 SomeGuy: :-)
+15:40:43 SomeGuy: ah there was a little bug in my code.
+15:40:46 SomeGuy: did you notice it?
+15:41:28 Zilding:  uh....jim ain't here...well...not at the keyboard at
+least...this is alissa...
+15:41:38 Zilding: and uh...i am not wearing a bra
+15:41:46 SomeGuy: hi alissa
+15:41:46 Zilding: i have him tied up at the moment
+15:41:51 SomeGuy: ah
+15:41:52 Zilding: hello
+15:42:01 SomeGuy: I hope he is having fun.
+15:42:05 Zilding: yeah....we're kinda busy righ tnow
+15:42:09 Zilding: know..err
+15:42:22 Zilding: hehe....
+15:42:24 SomeGuy: should I let you two love bird go?
+15:43:09 Zilding: uh...well...yeah i  guess...he really isn't in any sort of
+position to help you right now...
+15:43:42 Zilding: THREE CHEERS FOR A WIRELESS KEYBOARD
+15:43:44 Zilding: WOOHOO
+15:43:54 SomeGuy: tell him I said... compared to the current situation what
+I was going to ask him is microscopic.
+15:44:00 SomeGuy: have fun guys.
+
+
+16:24:41 JailBait: Hello How are you?
+16:24:48 JailBait: stats?
+16:25:00 Zilding: pretty good, who is this?
+16:25:54 JailBait: I got your name from the hotmail webCourier...i'm Abi   13/f
+16:26:39 Zilding: Hotmail webcourier?
+16:26:51 JailBait: yeah
+16:26:59 Zilding: Interesting.
+16:27:17 Zilding: Well, I'm 18 years old, male, and I still haven't a clue how you got my IM :)
+16:28:28 JailBait: yes it was under the thing where people were asking Questions and you anwered them....someone ask if they could IM you and you put in this s/n
+16:28:59 Zilding: Hmm.. what kind of questions was I answering?
+16:29:38 JailBait: normal one's you were ansering   holdon
+16:29:54 JailBait: hey mom is home talk to you later
+16:29:56 JailBait: bye bye]
+16:30:02 Zilding: uh.. okay :)
+16:31:58 Zilding: hey can you send me the URL to where you got my screen name?  I'm just curious :)
+
+
+19:05:45 ZFriend: waddle waddle waddle
+19:15:34 ZFriend: *waddle waddle waddle*
+19:15:45 ZFriend: (pssttt)
+19:16:07 ZFriend: (the penguins are coming...)
+19:16:12 ZFriend: (they are coming to dance with you...)
+19:45:16 Zilding: Really?  Coming to dance with ME?
+19:45:22 ZFriend: yes!
+19:45:49 Zilding: Cool! Why?
+19:46:01 ZFriend: they like you
+19:47:12 Zilding: wooohooo!
+19:47:14 Zilding: How'd you find this out?
+19:47:22 ZFriend: ...........they told me.......
+19:47:58 Zilding: Do you have secret meetings with them?  And what kind of dancng will we be doing?
+19:48:17 ZFriend: i cannot release any more information..... they do the mambo
+19:49:13 Zilding: hehe sounds like fun.  When are they coming?
+19:49:24 ZFriend: after their tea time
+19:49:55 Zilding: Okay.  Are they bringing the herring or should I make a run?
+19:50:10 ZFriend: the herring is not provided 
+19:50:31 Zilding: Ok cool.  Well thank you, Miss Mander Oracle :)
+19:50:54 ZFriend: :)
+
+
+16:57:30 L0s3R: u help write tik?
+16:57:54 Zilding: No, I'm the author and maintainer of gaim, and I spell correctly.
+16:58:25 L0s3R: gud gohd eyem sohry ashole
+16:58:36 Zilding: Fuck off.
+16:59:44 L0s3R: eheh
+16:59:46 L0s3R: i bet you have awin98 box too dont you fag
+16:59:46 L0s3R: tik owns
+16:59:46 L0s3R: eheh
+16:59:46 L0s3R: actually all this aol shit sucks
+16:59:46 L0s3R: eheh
+17:00:36 Zilding: Pardon me.  I've written Linux device drivers, and I'm on the XFree development team.  What have you given to the community?
+17:01:27 L0s3R: Nothing you've heard about mr uppity. =)
+17:02:17 Zilding: I'm sure not.  So forgive me when I'm not in a very good mood and I have a little contempt for people who use phrases like 'owns', can't spell correctly, and feel the need to capitalize every other letter in their name.  Are you a hax0r too?
+17:02:26 L0s3R: you ego is taknig up alot of space btw
+17:02:29 L0s3R: taking
+17:02:29 L0s3R: if you will
+17:02:32 L0s3R: lol
+17:02:39 L0s3R: goddamn
+17:02:50 L0s3R: im sure you use office software too
+17:03:31 Zilding: Get outta my face, ya script kiddie, and go back to your quake game.
+
+13:35:35 WinFreak: could u help me out with gaim..i kno i'm retarded  ROFL
+13:35:54 WinFreak : after you unzip it what do u do?
+13:36:36 RobFlynn: You have gaim-0.9.5.tar.gz?
+13:36:40 WinFreak : yeah 
+13:36:43 RobFlynn: first do: tar xvzf gaim-0.9.5.tar.gz
+13:36:47 RobFlynn: then go into that directory and type:
+13:36:49 RobFlynn: ./configure                                                 
+13:36:52 RobFlynn: then type: make
+13:37:10 WinFreak : tar xvzf...is that on ur webpage?
+13:40:00 RobFlynn: Umm ...
+13:45:00 WinFreak : Where can I download tar xvzf gaim-0.9.5.tar.gz?  Is this for windows?
+
+
+*** This is what happens when Gaim Developers get bored.
+
+22:39:18 RobFlynn: Umm
+22:39:19 RobFlynn: My brain is dead.
+22:39:39 Flyn Orange: *hooks up electrodes to Rob's brain and connects the battery*
+22:39:47 Flyn Orange: kaZAP!
+22:39:53 RobFlynn: EEpepEPAPEPAEppaep BBrRERERFFFF EPEPEPPEPpeppepape
+22:39:58 RobFlynn: *waddle jerk waddle waddle twitch*
+22:40:14 Flyn Orange: Its alive! Its ALIIIIIIIIIIIVE!!
+22:40:25 Flyn Orange: *maniacal laugh*
+22:40:26 RobFlynn: *twitch twitch waddle convulse*
+22:40:41 Flyn Orange: *disconnects battery*
+22:40:52 RobFlynn: *** The sun slowly fades away as a giant penguin towers above the remains of a small, wooden table***
+22:41:13 Flyn Orange: ** storm clouds rise **
+22:41:25 Flyn Orange: *thunder crack*
+22:41:26 RobFlynn: *** With an eerie, almost mechanical qualling, the penguin marches its way over to its creator ***
+22:41:56 Flyn Orange: Well, hello lit...er...big fella. Would you like some HERRING?
+22:42:19 Flyn Orange: How about some FREE BEER?
+22:42:44 RobFlynn: *** A booming voice echos through the hallways ***
+22:42:47 RobFlynn: *** PIPE GREP MORE ***
+22:43:20 RobFlynn: *** With a low, rumbling sound the last syllable of the mysterious phrase shakes the very foundation of the decrepit laboratory***
+22:43:22 Flyn Orange: ** the mad scientists terminal suddenly crashes, and a vaguely familiar blue screen shows on it's display **
+22:44:08 Flyn Orange: Damn the fates! How can I face my peers now when I TOLD them proprietary was better!
+!
+22:45:19 RobFlynn: *** THE PENGUIN BALKS: CTRL-ALT-DELETE ***
+
+
+hungryguy: Were you the one who ate the 1lbs hamburger?
+Flyn Orange: hehe... Well, I tried to. I was feeling kinda sick. :)
+Flyn Orange: Flyn Orange: Would've finished that sucker off if I'd have been feeling better!
+hungryguy: I'm proud of you still.
+Flyn Orange: PsyAssasin: That's quite impressive.
+Flyn Orange: *grin*  Thanks!
+hungryguy: I'm motivated to have a 1lbs hamburger party here.
+hungryguy: That would be sweet.
+Flyn Orange: haha!  That would rock!
+Flyn Orange: Good idea.
+Flyn Orange: Think I might do that sometime too!
+Flyn Orange: There are some truly cool people out there.
+
+--- If you guys havent learned yet, Jer is a smartass :-) ---
+
+00:03:43 Flyn Orange: *shoots you with silly string*
+00:03:55 RobFlynn: HELP! I AM COVERED IN NEONG REEN STRING
+00:06:54 Flyn Orange: NEONG REEN, Taiwan (AP) -
+                      Despite the recent economical collapses suffered due to 
+                      massive geological activity over the last month, the very
+                      profitable gag-manufacturer of Silly String has 
+                      maintained production through the turmoil. Still 
+                      employing 324 workers and a management team of 15 
+                      Slinkies, there is no risk of a price hike in cans of
+                      Silly String over the next few months...
+
+--- heheh Jeramey is a jackass :-) ---
+
+14:44:28 Flyn Orange: You should see gimp try and swim. She goes in circles
+'cause she's only got three legs. ;)
+14:44:34 RobFlynn: *giggles*
+14:44:39 RobFlynn: Ive seen my cars swim before
+14:44:44 RobFlynn: They doggie paddle :)
+14:44:51 Flyn Orange: cats you mean? :)
+14:44:56 RobFlynn: Woops!
+14:44:57 RobFlynn: Yeah.
+14:44:59 RobFlynn: Cars sink.
+14:45:01 Flyn Orange: hehe
+14:45:07 Flyn Orange: Yeah. Cars suck at swimming.
+14:45:15 RobFlynn: heheh
+
+
+---
+Eric and I were a little weird this night hehe
+
+
+03:31:43 RobFlynn: "No Bite", she rebuked.
+03:31:46 RobFlynn: Rebuked is a fun word.
+03:31:51 RobFlynn: I don't know if I used it properly, but it is still fun.
+03:31:55 Eric Warmenhoven: i like idiosyncratic
+03:32:01 RobFlynn: I like sesquipedalian
+03:32:14 Eric Warmenhoven: variations on idiosyncracy are my favorite words.
+03:32:20 Eric Warmenhoven: i like them.
+03:32:22 RobFlynn: I like sesquipedalian because it is polysylabic by
+defination and practice.
+03:32:25 Eric Warmenhoven: that's one of my idiosyncracies.
+03:32:40 RobFlynn: Idiosyncracy is a sesquipedalian.
+03:32:48 Eric Warmenhoven: holy crap
+03:33:00 RobFlynn: Sesquipedalians such as idiosyncracy are often times
+considered ambiguous.  Why use a large word when a dimunitve one will suffice?
+
+
+--
+
+(14:54:25) SeanEgan: are you coding now?
+(14:55:33) RobFlynn: Nah I gotta go buy pants.
+(14:55:37) SeanEgan: haha
+(14:55:40) SeanEgan: that was so random
+
+---
+
+(13:51:10) wizardof___: can we have a memorable conversation?
+(13:51:19) RobFlynn: i think we just did
+
+---
+
+(22:39:02) KingAnt: I'll try to find someone with ichat to test it with (ie. get one of the guys I live with to install it)
+(22:48:12) Paco-Paco: KingAnt: I have iChat
+(22:48:34) KingAnt: Paco-Paco: Does it suck?
+(22:48:42) Paco-Paco: yes
+(22:48:47) Paco-Paco: it's hard to use
+(22:48:47) KingAnt: Cool
+
+---
+
+(22:33:31) CopyMe: ok, how do I copy a file and paste into another directory
+(22:33:47) Zilding: cp <filename> <other filename>
+(22:34:04) CopyMe: what does that do
+(22:34:06) CopyMe: copy?
+(22:36:05) Zilding: yeah
+(22:37:27) CopyMe: then how do you paste it?
+
+---
+
+(02:08:12) gobblegobble: whats a chicken head
+(02:08:24) RobFlynn: your mom
+
+---
+
+<KingAnt> I dislike the random capitalization utilized by fortunes
+<Paco-Paco> those aren't fortunes
+<Paco-Paco> those are yows
+<Paco-Paco> I don't know why lunix fortune gives back yows
+<KingAnt> Paco-Paco: I understand everything you just said
+<Paco-Paco> does it scare you?
+<KingAnt> Paco-Paco: You have no idea
+
+---
+
+(18:45:00) SuperNewbie entered the room.
+(18:51:07) SuperNewbie: I'm new and I dont understand how to get into a chat.
+(18:51:19) faceprint: you're in a chat now
+(18:51:30) SuperNewbie: Oh OK
+
+---
+
+23:39 <@LSchiere> try the grammer again
+23:40 <SeanEgan> LSchiere, you can try the spelling again, too ;)
+23:40 <@LSchiere> SeanEgan: you know by now that i'm incorigible
+
+---
+
+(20:53:30) idiot1: im havn problems with my sound in gaim can any1 help me
+(20:54:59) LSchiere2: have you read the faq?
+(21:03:35) idiot1: no and im not reading it
+(21:03:45) idiot1: cuz it wont help anyways
+(21:03:47) LSchiere2: then you will have no help
+(21:03:54) LSchiere2: because i wrote it and i know it would help
+(21:04:27) LSchiere2: since you already know everything though, you obviously don't need any help idiot1
+(21:05:38) idiot1: nope
+(21:05:42) idiot1: opps
+
+
+---
+
+(20:37:03) marv: nosnilmot: I can just try tweaking gtk_imhtml_get_markup_range
+(20:38:28) nosnilmot: marv: I know you can, because you know what's going on in there, but is there any point in me trying?...
+(20:38:57) marv: nosnilmot: I could explain it to you I guess. Sure why not.
+(20:39:44) nosnilmot: marv: I'd like to know (I think?), but now probably isn't the best time, I shouldn't have asked
+(20:40:11) marv: The buffer is composed to unescaped (no entities) text, with a certain unicode character representing images or smileys or widgets.
+(20:40:26) marv: nosnilmot: oh. well let me know when you feel like listening
+(20:41:10) nosnilmot: marv: don't worry, I will. I need to learn C first.
+(20:41:27) marv: um, you don't know C?
+(20:41:31) nosnilmot: no
+(20:41:44) marv: then what were those patches i applied from you earlier?
+(20:42:05) nosnilmot: you don't need to know C to write patches
+(20:42:12) marv: oh okay
+
+---
+
+-!- seanegan [~sean@...] has quit [Remote closed the connection]
+-!- seanegan [~sean@...] has joined #gaim
+<seanegan> Someone should fix that bug where if you click on the user list
+	in an IRC channel, it crashes.
+-!- LSchiere2 [~luke@...] has quit [Remote closed the connection]
+<seanegan> I guess that was "reproducing"
+
+---
+
+18:33:26 <NoName> hello there
+18:34:03 <NoName> I just wanted to share some bevavior that I think its kinda of
+                  unsafe when using GAIM with yahoo messenges accounts
+18:34:43 <NoName> Whenever you transfer files between users, no receiving
+                  confirmation is requested, the file gets transfered
+                  automatically
+18:37:32 <Paco-Paco> surely you have to accept file transfers
+18:37:57 <NoName> Paco-Paco, nope, Whenever people sends me files, I get no
+                  confirmation request
+18:38:30 <NoName> Paco-Paco, and the files gets right through my home directory
+18:39:00 <deryni> I find this a bit hard to believe since most people come in here
+                  asking for some way to auto-accept.
+18:39:48 <NoName> deryni, I just installed fc3 , fully updated it, no extra
+                  configuration was done and that's the default behavior
+18:40:06 <NoName> deryni, I searched the settings and there is no configuration
+                  on this issue
+18:40:29 <deryni> I know there's no configuration on it, that's what everyone keeps
+                  asking for.
+18:41:08 <NoName> deryni, sometimes I get pictures of naked girls in my computer
+                  and I guess that GAIM is the one responsible for that since it
+                  does not ask for file transfer confirmation
+
+---
+
+(16:35:01) noname2: hello gaim is new port ?
+(16:35:08) noname2: msn
+(16:35:17) LSchiere2: what in the world are you trying to ask
+
+---
+
+(00:22:45) user:         hi
+(00:22:47) user:         can you help me?
+(00:22:56) richielaager: I don't know.
+(00:23:02) user:         can i borrow a pencil?
+(00:24:13) richielaager: Only if you're willing to pay transportation costs
+                         to get you the pencil, plus $60/hour for the time it
+                         takes me to transport said pencil to you, plus a pencil
+                         rental fee of $1/day, plus a one time pencil sharpening
+                         service charge of $5.
+(00:24:37) user:         I have a 100$ in paypal, where do i send it to?
+(00:25:10) richielaager: I hear some guys in Nigeria are looking for account
+                         information?
+(00:25:32) user:         or can you put a pencil feature into gaim? to create a
+                         physical pencil out of a rubber reconstruction machine?
+(00:25:50) user:         those guys only sent wood- no lead :(
+(00:26:10) user:         they told me it was "invisible" lead.
+(00:28:27) richielaager: Interesting... They sent me plenty of visible lead,
+                         they said, it's just waiting for me at a holding company
+                         in Moscow or some place like that.
+(00:28:53) user:         Seems you've been had.
+(00:29:09) user:         The invisible lead works quite well.
+(00:29:28) user:         Anyways, I'm here to ask a question.
+(00:29:29) richielaager: Damn!
+(00:29:42) richielaager: Damn to that too. :)
+
+21:26 <An_Idiot> I was considering just making a remote control program
+21:26 <An_Idiot> where you type in a password, send it via gaim, and
+                 gaim becomes a text terminal
+      [time passes ...]
+21:38 <An_Idiot>  I'm terribly conservative when it comes to security
+
+19:47 <someusr> hey
+19:48 <someusr> how do i set aim to block all users except those on my
+                buddy list?
+19:48 <someusr> don't tell me i have to log in with the regular AIM :(
+19:48 <Paco-Paco> I wouldn't tell you that, because it's wrong
+19:48 <Paco-Paco> how about you look in privacy
+19:49 <someusr> where?
+19:49 <someusr> i can't find it
+19:49 <SimGuy> in Privacy
+19:49 <someusr> OH!
+19:49 <someusr> haha
+19:49 <someusr> thanks!
+
+14:12 <colorshape> Is it possible for me to see my friends webcam via
+                   msn in gaim?
+14:12 <Paco-Paco> no
+14:13 <colorshape> not voice either then i guess?
+14:13 <Paco-Paco> correct
+14:13 <colorshape> ok, then not much to do.
+14:13 <Err> there's always seppuku
+14:14 <Paco-Paco> so true
+14:14 <colorshape> ok, is that another client?
+14:14 <Err> something like that
+
+(17:44:15) elb: what's that one song that's always played at weddings that's not the processional or recessional
+(17:44:37) tehfox: bridal choral or something?
+(17:45:04) seanegan: elb: The Chicken Dance
+(17:45:12) elb: seanegan: oh that's the one
+(17:45:34) ***LSchiere boggles
+(17:45:56) elb: it's the one that goes
+(17:46:31) elb: dunnn dunnnn dunnnnn dunnnn dunnn DUUNN duun DUUUNNN, dun da-da-di da-da-di da-da-da-di-di-di dunn da-da-di dun-da-di-di-diii-di
+(17:49:13) seanegan: Pachelbel's canon?
+(17:49:18) elb: seanegan: YES
+(17:49:25) seanegan: hell yeah!
+(17:49:25) elb: awesome, thanks
+(17:49:28) elb: Kanon in D
+
+edited for brevity, and name changed.
+(13:51:31) l33t_h4x0r: Is there such thing as a gaim ip sniffer for linux?
+(13:51:40) LSchiere: no
+(13:51:46) l33t_h4x0r: You sure?
+(13:51:50) LSchiere: though if there were, I'd still say no
+(13:51:55) l33t_h4x0r: Why?
+(13:52:00) LSchiere: since there's no good reason to be looking for one
+(13:55:12) l33t_h4x0r: Is...this a sensitive subject?
+(13:55:29) seanegan: l33t_h4x0r: not as sensitive as someone's IP address, apparently.
+(13:55:31) Err: no, "needing" to know what someone's IP is without asking them is totally sane, rational, and socially normal
+(13:55:42) l33t_h4x0r: I want to use it for destruive purposes?
+(13:55:50) l33t_h4x0r: Morally wrong.
+(13:56:01) l33t_h4x0r: I'll admit, but a valid reason.
+(13:57:04) l33t_h4x0r: Asking someone would give away my position...
+(13:57:33) l33t_h4x0r: Arlight, nevermind.
+(13:57:36) l33t_h4x0r left the room ("Leaving").
+(13:58:58) LSchiere: *amused* that's the first time in a while that the requester has *agreed* that there is no legit reason to want the feature
+(13:59:19) Err: he was not the sharpest knife in the drawer
+
+14:57 <itchypants> [blah blah blah simple question]
+      [other traffic]
+14:57 <itchypants> [retransmit simple question]
+14:59 <seanegan> itchypants: you need to chill the hell out
+14:59 <itchypants> seanegan, ah okay thanks
+15:00 <seanegan> no problem
+
+(15:57:11) sadrul: the files (at least a couple) in the tar.bz2 are different
+(15:57:23) datallah: right.. that is the problem - the code in svn is fine
+(15:57:31) seanegan: oh, what the hell?
+(15:57:41) seanegan: don't tell me I make dist'ed the wrong tree
+(15:57:46) LSchiere: how does the code in svn differ except in gaim's
+funniest and the spec.in?
+(15:57:50) LSchiere: seanegan: sounds like it
+(15:57:53) datallah: you are such a screw up!
+(15:58:12) seanegan: I sure am
+(15:58:32) seanegan: Ugh!
+(15:58:37) datallah: you must have been distracted by um... plugins
+(15:58:45) seanegan: Don't I test these things?
+(15:58:51) LSchiere: you test things?
+(15:59:06) SimGuy: seanegan: by experience, I think we've determined you do
+not :)
+
+(07:52:07 PM) clueless21: are you one of the gaim makers?
+(07:52:14 PM) Nathan Walp: yes
+(07:52:24 PM) clueless21:  cool
+(07:52:37 PM) clueless21:  if your busy, i can leave you alone...
+(07:53:03 PM) Nathan Walp: if you have a question I can answer it
+(07:53:34 PM) clueless21:  umm... well i don't exactly know what gaim does and what it's for. i don't know if i should get it
+(07:53:46 PM) Nathan Walp: it is an IM client
+(07:53:57 PM) clueless21:  o. what's it do?
+(07:54:03 PM) clueless21:  what's an im client?
+(07:54:25 PM) Nathan Walp: it lets you chat with other people, like we are chatting now
+(07:54:45 PM) clueless21:  oooooooooo... thanks
--- a/doc/gaims_funniest_home_convos.txt	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-All IM names have been changed, so we don't get sued or nothing.  We get some 
-interesting convos....
-
-17:58:27 Luser: You do any GTK programming?
-17:58:43 Zilding: You mean, work on GTK itself?
-17:58:56 Luser: no program stuff using GTK
-17:59:37 Zilding: Hrm.  How do you know me, again? :)
-17:59:54 Luser: haha.......i saw your handle in the help part of gaim
-18:00:01 Zilding: yes.
-18:00:05 Luser: Didnt mean to freak you out
-18:00:16 Zilding: Iz okay, I figured that was the answer.
-18:00:26 Zilding: Is gaim written with Athena, Motif, or Xforms?
-18:00:29 Zilding: or GTK? :)
-18:00:39 Luser: GTK :)
-18:00:50 Zilding: I believe you have answered your own question. :)
-
-
-15:40:14 SomeGuy: hey you there?
-15:40:28 Zilding: nope
-15:40:33 SomeGuy: :-)
-15:40:43 SomeGuy: ah there was a little bug in my code.
-15:40:46 SomeGuy: did you notice it?
-15:41:28 Zilding:  uh....jim ain't here...well...not at the keyboard at
-least...this is alissa...
-15:41:38 Zilding: and uh...i am not wearing a bra
-15:41:46 SomeGuy: hi alissa
-15:41:46 Zilding: i have him tied up at the moment
-15:41:51 SomeGuy: ah
-15:41:52 Zilding: hello
-15:42:01 SomeGuy: I hope he is having fun.
-15:42:05 Zilding: yeah....we're kinda busy righ tnow
-15:42:09 Zilding: know..err
-15:42:22 Zilding: hehe....
-15:42:24 SomeGuy: should I let you two love bird go?
-15:43:09 Zilding: uh...well...yeah i  guess...he really isn't in any sort of
-position to help you right now...
-15:43:42 Zilding: THREE CHEERS FOR A WIRELESS KEYBOARD
-15:43:44 Zilding: WOOHOO
-15:43:54 SomeGuy: tell him I said... compared to the current situation what
-I was going to ask him is microscopic.
-15:44:00 SomeGuy: have fun guys.
-
-
-16:24:41 JailBait: Hello How are you?
-16:24:48 JailBait: stats?
-16:25:00 Zilding: pretty good, who is this?
-16:25:54 JailBait: I got your name from the hotmail webCourier...i'm Abi   13/f
-16:26:39 Zilding: Hotmail webcourier?
-16:26:51 JailBait: yeah
-16:26:59 Zilding: Interesting.
-16:27:17 Zilding: Well, I'm 18 years old, male, and I still haven't a clue how you got my IM :)
-16:28:28 JailBait: yes it was under the thing where people were asking Questions and you anwered them....someone ask if they could IM you and you put in this s/n
-16:28:59 Zilding: Hmm.. what kind of questions was I answering?
-16:29:38 JailBait: normal one's you were ansering   holdon
-16:29:54 JailBait: hey mom is home talk to you later
-16:29:56 JailBait: bye bye]
-16:30:02 Zilding: uh.. okay :)
-16:31:58 Zilding: hey can you send me the URL to where you got my screen name?  I'm just curious :)
-
-
-19:05:45 ZFriend: waddle waddle waddle
-19:15:34 ZFriend: *waddle waddle waddle*
-19:15:45 ZFriend: (pssttt)
-19:16:07 ZFriend: (the penguins are coming...)
-19:16:12 ZFriend: (they are coming to dance with you...)
-19:45:16 Zilding: Really?  Coming to dance with ME?
-19:45:22 ZFriend: yes!
-19:45:49 Zilding: Cool! Why?
-19:46:01 ZFriend: they like you
-19:47:12 Zilding: wooohooo!
-19:47:14 Zilding: How'd you find this out?
-19:47:22 ZFriend: ...........they told me.......
-19:47:58 Zilding: Do you have secret meetings with them?  And what kind of dancng will we be doing?
-19:48:17 ZFriend: i cannot release any more information..... they do the mambo
-19:49:13 Zilding: hehe sounds like fun.  When are they coming?
-19:49:24 ZFriend: after their tea time
-19:49:55 Zilding: Okay.  Are they bringing the herring or should I make a run?
-19:50:10 ZFriend: the herring is not provided 
-19:50:31 Zilding: Ok cool.  Well thank you, Miss Mander Oracle :)
-19:50:54 ZFriend: :)
-
-
-16:57:30 L0s3R: u help write tik?
-16:57:54 Zilding: No, I'm the author and maintainer of gaim, and I spell correctly.
-16:58:25 L0s3R: gud gohd eyem sohry ashole
-16:58:36 Zilding: Fuck off.
-16:59:44 L0s3R: eheh
-16:59:46 L0s3R: i bet you have awin98 box too dont you fag
-16:59:46 L0s3R: tik owns
-16:59:46 L0s3R: eheh
-16:59:46 L0s3R: actually all this aol shit sucks
-16:59:46 L0s3R: eheh
-17:00:36 Zilding: Pardon me.  I've written Linux device drivers, and I'm on the XFree development team.  What have you given to the community?
-17:01:27 L0s3R: Nothing you've heard about mr uppity. =)
-17:02:17 Zilding: I'm sure not.  So forgive me when I'm not in a very good mood and I have a little contempt for people who use phrases like 'owns', can't spell correctly, and feel the need to capitalize every other letter in their name.  Are you a hax0r too?
-17:02:26 L0s3R: you ego is taknig up alot of space btw
-17:02:29 L0s3R: taking
-17:02:29 L0s3R: if you will
-17:02:32 L0s3R: lol
-17:02:39 L0s3R: goddamn
-17:02:50 L0s3R: im sure you use office software too
-17:03:31 Zilding: Get outta my face, ya script kiddie, and go back to your quake game.
-
-13:35:35 WinFreak: could u help me out with gaim..i kno i'm retarded  ROFL
-13:35:54 WinFreak : after you unzip it what do u do?
-13:36:36 RobFlynn: You have gaim-0.9.5.tar.gz?
-13:36:40 WinFreak : yeah 
-13:36:43 RobFlynn: first do: tar xvzf gaim-0.9.5.tar.gz
-13:36:47 RobFlynn: then go into that directory and type:
-13:36:49 RobFlynn: ./configure                                                 
-13:36:52 RobFlynn: then type: make
-13:37:10 WinFreak : tar xvzf...is that on ur webpage?
-13:40:00 RobFlynn: Umm ...
-13:45:00 WinFreak : Where can I download tar xvzf gaim-0.9.5.tar.gz?  Is this for windows?
-
-
-*** This is what happens when Gaim Developers get bored.
-
-22:39:18 RobFlynn: Umm
-22:39:19 RobFlynn: My brain is dead.
-22:39:39 Flyn Orange: *hooks up electrodes to Rob's brain and connects the battery*
-22:39:47 Flyn Orange: kaZAP!
-22:39:53 RobFlynn: EEpepEPAPEPAEppaep BBrRERERFFFF EPEPEPPEPpeppepape
-22:39:58 RobFlynn: *waddle jerk waddle waddle twitch*
-22:40:14 Flyn Orange: Its alive! Its ALIIIIIIIIIIIVE!!
-22:40:25 Flyn Orange: *maniacal laugh*
-22:40:26 RobFlynn: *twitch twitch waddle convulse*
-22:40:41 Flyn Orange: *disconnects battery*
-22:40:52 RobFlynn: *** The sun slowly fades away as a giant penguin towers above the remains of a small, wooden table***
-22:41:13 Flyn Orange: ** storm clouds rise **
-22:41:25 Flyn Orange: *thunder crack*
-22:41:26 RobFlynn: *** With an eerie, almost mechanical qualling, the penguin marches its way over to its creator ***
-22:41:56 Flyn Orange: Well, hello lit...er...big fella. Would you like some HERRING?
-22:42:19 Flyn Orange: How about some FREE BEER?
-22:42:44 RobFlynn: *** A booming voice echos through the hallways ***
-22:42:47 RobFlynn: *** PIPE GREP MORE ***
-22:43:20 RobFlynn: *** With a low, rumbling sound the last syllable of the mysterious phrase shakes the very foundation of the decrepit laboratory***
-22:43:22 Flyn Orange: ** the mad scientists terminal suddenly crashes, and a vaguely familiar blue screen shows on it's display **
-22:44:08 Flyn Orange: Damn the fates! How can I face my peers now when I TOLD them proprietary was better!
-!
-22:45:19 RobFlynn: *** THE PENGUIN BALKS: CTRL-ALT-DELETE ***
-
-
-hungryguy: Were you the one who ate the 1lbs hamburger?
-Flyn Orange: hehe... Well, I tried to. I was feeling kinda sick. :)
-Flyn Orange: Flyn Orange: Would've finished that sucker off if I'd have been feeling better!
-hungryguy: I'm proud of you still.
-Flyn Orange: PsyAssasin: That's quite impressive.
-Flyn Orange: *grin*  Thanks!
-hungryguy: I'm motivated to have a 1lbs hamburger party here.
-hungryguy: That would be sweet.
-Flyn Orange: haha!  That would rock!
-Flyn Orange: Good idea.
-Flyn Orange: Think I might do that sometime too!
-Flyn Orange: There are some truly cool people out there.
-
---- If you guys havent learned yet, Jer is a smartass :-) ---
-
-00:03:43 Flyn Orange: *shoots you with silly string*
-00:03:55 RobFlynn: HELP! I AM COVERED IN NEONG REEN STRING
-00:06:54 Flyn Orange: NEONG REEN, Taiwan (AP) -
-                      Despite the recent economical collapses suffered due to 
-                      massive geological activity over the last month, the very
-                      profitable gag-manufacturer of Silly String has 
-                      maintained production through the turmoil. Still 
-                      employing 324 workers and a management team of 15 
-                      Slinkies, there is no risk of a price hike in cans of
-                      Silly String over the next few months...
-
---- heheh Jeramey is a jackass :-) ---
-
-14:44:28 Flyn Orange: You should see gimp try and swim. She goes in circles
-'cause she's only got three legs. ;)
-14:44:34 RobFlynn: *giggles*
-14:44:39 RobFlynn: Ive seen my cars swim before
-14:44:44 RobFlynn: They doggie paddle :)
-14:44:51 Flyn Orange: cats you mean? :)
-14:44:56 RobFlynn: Woops!
-14:44:57 RobFlynn: Yeah.
-14:44:59 RobFlynn: Cars sink.
-14:45:01 Flyn Orange: hehe
-14:45:07 Flyn Orange: Yeah. Cars suck at swimming.
-14:45:15 RobFlynn: heheh
-
-
----
-Eric and I were a little weird this night hehe
-
-
-03:31:43 RobFlynn: "No Bite", she rebuked.
-03:31:46 RobFlynn: Rebuked is a fun word.
-03:31:51 RobFlynn: I don't know if I used it properly, but it is still fun.
-03:31:55 Eric Warmenhoven: i like idiosyncratic
-03:32:01 RobFlynn: I like sesquipedalian
-03:32:14 Eric Warmenhoven: variations on idiosyncracy are my favorite words.
-03:32:20 Eric Warmenhoven: i like them.
-03:32:22 RobFlynn: I like sesquipedalian because it is polysylabic by
-defination and practice.
-03:32:25 Eric Warmenhoven: that's one of my idiosyncracies.
-03:32:40 RobFlynn: Idiosyncracy is a sesquipedalian.
-03:32:48 Eric Warmenhoven: holy crap
-03:33:00 RobFlynn: Sesquipedalians such as idiosyncracy are often times
-considered ambiguous.  Why use a large word when a dimunitve one will suffice?
-
-
---
-
-(14:54:25) SeanEgan: are you coding now?
-(14:55:33) RobFlynn: Nah I gotta go buy pants.
-(14:55:37) SeanEgan: haha
-(14:55:40) SeanEgan: that was so random
-
----
-
-(13:51:10) wizardof___: can we have a memorable conversation?
-(13:51:19) RobFlynn: i think we just did
-
----
-
-(22:39:02) KingAnt: I'll try to find someone with ichat to test it with (ie. get one of the guys I live with to install it)
-(22:48:12) Paco-Paco: KingAnt: I have iChat
-(22:48:34) KingAnt: Paco-Paco: Does it suck?
-(22:48:42) Paco-Paco: yes
-(22:48:47) Paco-Paco: it's hard to use
-(22:48:47) KingAnt: Cool
-
----
-
-(22:33:31) CopyMe: ok, how do I copy a file and paste into another directory
-(22:33:47) Zilding: cp <filename> <other filename>
-(22:34:04) CopyMe: what does that do
-(22:34:06) CopyMe: copy?
-(22:36:05) Zilding: yeah
-(22:37:27) CopyMe: then how do you paste it?
-
----
-
-(02:08:12) gobblegobble: whats a chicken head
-(02:08:24) RobFlynn: your mom
-
----
-
-<KingAnt> I dislike the random capitalization utilized by fortunes
-<Paco-Paco> those aren't fortunes
-<Paco-Paco> those are yows
-<Paco-Paco> I don't know why lunix fortune gives back yows
-<KingAnt> Paco-Paco: I understand everything you just said
-<Paco-Paco> does it scare you?
-<KingAnt> Paco-Paco: You have no idea
-
----
-
-(18:45:00) SuperNewbie entered the room.
-(18:51:07) SuperNewbie: I'm new and I dont understand how to get into a chat.
-(18:51:19) faceprint: you're in a chat now
-(18:51:30) SuperNewbie: Oh OK
-
----
-
-23:39 <@LSchiere> try the grammer again
-23:40 <SeanEgan> LSchiere, you can try the spelling again, too ;)
-23:40 <@LSchiere> SeanEgan: you know by now that i'm incorigible
-
----
-
-(20:53:30) idiot1: im havn problems with my sound in gaim can any1 help me
-(20:54:59) LSchiere2: have you read the faq?
-(21:03:35) idiot1: no and im not reading it
-(21:03:45) idiot1: cuz it wont help anyways
-(21:03:47) LSchiere2: then you will have no help
-(21:03:54) LSchiere2: because i wrote it and i know it would help
-(21:04:27) LSchiere2: since you already know everything though, you obviously don't need any help idiot1
-(21:05:38) idiot1: nope
-(21:05:42) idiot1: opps
-
-
----
-
-(20:37:03) marv: nosnilmot: I can just try tweaking gtk_imhtml_get_markup_range
-(20:38:28) nosnilmot: marv: I know you can, because you know what's going on in there, but is there any point in me trying?...
-(20:38:57) marv: nosnilmot: I could explain it to you I guess. Sure why not.
-(20:39:44) nosnilmot: marv: I'd like to know (I think?), but now probably isn't the best time, I shouldn't have asked
-(20:40:11) marv: The buffer is composed to unescaped (no entities) text, with a certain unicode character representing images or smileys or widgets.
-(20:40:26) marv: nosnilmot: oh. well let me know when you feel like listening
-(20:41:10) nosnilmot: marv: don't worry, I will. I need to learn C first.
-(20:41:27) marv: um, you don't know C?
-(20:41:31) nosnilmot: no
-(20:41:44) marv: then what were those patches i applied from you earlier?
-(20:42:05) nosnilmot: you don't need to know C to write patches
-(20:42:12) marv: oh okay
-
----
-
--!- seanegan [~sean@...] has quit [Remote closed the connection]
--!- seanegan [~sean@...] has joined #gaim
-<seanegan> Someone should fix that bug where if you click on the user list
-	in an IRC channel, it crashes.
--!- LSchiere2 [~luke@...] has quit [Remote closed the connection]
-<seanegan> I guess that was "reproducing"
-
----
-
-18:33:26 <NoName> hello there
-18:34:03 <NoName> I just wanted to share some bevavior that I think its kinda of
-                  unsafe when using GAIM with yahoo messenges accounts
-18:34:43 <NoName> Whenever you transfer files between users, no receiving
-                  confirmation is requested, the file gets transfered
-                  automatically
-18:37:32 <Paco-Paco> surely you have to accept file transfers
-18:37:57 <NoName> Paco-Paco, nope, Whenever people sends me files, I get no
-                  confirmation request
-18:38:30 <NoName> Paco-Paco, and the files gets right through my home directory
-18:39:00 <deryni> I find this a bit hard to believe since most people come in here
-                  asking for some way to auto-accept.
-18:39:48 <NoName> deryni, I just installed fc3 , fully updated it, no extra
-                  configuration was done and that's the default behavior
-18:40:06 <NoName> deryni, I searched the settings and there is no configuration
-                  on this issue
-18:40:29 <deryni> I know there's no configuration on it, that's what everyone keeps
-                  asking for.
-18:41:08 <NoName> deryni, sometimes I get pictures of naked girls in my computer
-                  and I guess that GAIM is the one responsible for that since it
-                  does not ask for file transfer confirmation
-
----
-
-(16:35:01) noname2: hello gaim is new port ?
-(16:35:08) noname2: msn
-(16:35:17) LSchiere2: what in the world are you trying to ask
-
----
-
-(00:22:45) user:         hi
-(00:22:47) user:         can you help me?
-(00:22:56) richielaager: I don't know.
-(00:23:02) user:         can i borrow a pencil?
-(00:24:13) richielaager: Only if you're willing to pay transportation costs
-                         to get you the pencil, plus $60/hour for the time it
-                         takes me to transport said pencil to you, plus a pencil
-                         rental fee of $1/day, plus a one time pencil sharpening
-                         service charge of $5.
-(00:24:37) user:         I have a 100$ in paypal, where do i send it to?
-(00:25:10) richielaager: I hear some guys in Nigeria are looking for account
-                         information?
-(00:25:32) user:         or can you put a pencil feature into gaim? to create a
-                         physical pencil out of a rubber reconstruction machine?
-(00:25:50) user:         those guys only sent wood- no lead :(
-(00:26:10) user:         they told me it was "invisible" lead.
-(00:28:27) richielaager: Interesting... They sent me plenty of visible lead,
-                         they said, it's just waiting for me at a holding company
-                         in Moscow or some place like that.
-(00:28:53) user:         Seems you've been had.
-(00:29:09) user:         The invisible lead works quite well.
-(00:29:28) user:         Anyways, I'm here to ask a question.
-(00:29:29) richielaager: Damn!
-(00:29:42) richielaager: Damn to that too. :)
-
-21:26 <An_Idiot> I was considering just making a remote control program
-21:26 <An_Idiot> where you type in a password, send it via gaim, and
-                 gaim becomes a text terminal
-      [time passes ...]
-21:38 <An_Idiot>  I'm terribly conservative when it comes to security
-
-19:47 <someusr> hey
-19:48 <someusr> how do i set aim to block all users except those on my
-                buddy list?
-19:48 <someusr> don't tell me i have to log in with the regular AIM :(
-19:48 <Paco-Paco> I wouldn't tell you that, because it's wrong
-19:48 <Paco-Paco> how about you look in privacy
-19:49 <someusr> where?
-19:49 <someusr> i can't find it
-19:49 <SimGuy> in Privacy
-19:49 <someusr> OH!
-19:49 <someusr> haha
-19:49 <someusr> thanks!
-
-14:12 <colorshape> Is it possible for me to see my friends webcam via
-                   msn in gaim?
-14:12 <Paco-Paco> no
-14:13 <colorshape> not voice either then i guess?
-14:13 <Paco-Paco> correct
-14:13 <colorshape> ok, then not much to do.
-14:13 <Err> there's always seppuku
-14:14 <Paco-Paco> so true
-14:14 <colorshape> ok, is that another client?
-14:14 <Err> something like that
-
-(17:44:15) elb: what's that one song that's always played at weddings that's not the processional or recessional
-(17:44:37) tehfox: bridal choral or something?
-(17:45:04) seanegan: elb: The Chicken Dance
-(17:45:12) elb: seanegan: oh that's the one
-(17:45:34) ***LSchiere boggles
-(17:45:56) elb: it's the one that goes
-(17:46:31) elb: dunnn dunnnn dunnnnn dunnnn dunnn DUUNN duun DUUUNNN, dun da-da-di da-da-di da-da-da-di-di-di dunn da-da-di dun-da-di-di-diii-di
-(17:49:13) seanegan: Pachelbel's canon?
-(17:49:18) elb: seanegan: YES
-(17:49:25) seanegan: hell yeah!
-(17:49:25) elb: awesome, thanks
-(17:49:28) elb: Kanon in D
-
-edited for brevity, and name changed.
-(13:51:31) l33t_h4x0r: Is there such thing as a gaim ip sniffer for linux?
-(13:51:40) LSchiere: no
-(13:51:46) l33t_h4x0r: You sure?
-(13:51:50) LSchiere: though if there were, I'd still say no
-(13:51:55) l33t_h4x0r: Why?
-(13:52:00) LSchiere: since there's no good reason to be looking for one
-(13:55:12) l33t_h4x0r: Is...this a sensitive subject?
-(13:55:29) seanegan: l33t_h4x0r: not as sensitive as someone's IP address, apparently.
-(13:55:31) Err: no, "needing" to know what someone's IP is without asking them is totally sane, rational, and socially normal
-(13:55:42) l33t_h4x0r: I want to use it for destruive purposes?
-(13:55:50) l33t_h4x0r: Morally wrong.
-(13:56:01) l33t_h4x0r: I'll admit, but a valid reason.
-(13:57:04) l33t_h4x0r: Asking someone would give away my position...
-(13:57:33) l33t_h4x0r: Arlight, nevermind.
-(13:57:36) l33t_h4x0r left the room ("Leaving").
-(13:58:58) LSchiere: *amused* that's the first time in a while that the requester has *agreed* that there is no legit reason to want the feature
-(13:59:19) Err: he was not the sharpest knife in the drawer
-
-14:57 <itchypants> [blah blah blah simple question]
-      [other traffic]
-14:57 <itchypants> [retransmit simple question]
-14:59 <seanegan> itchypants: you need to chill the hell out
-14:59 <itchypants> seanegan, ah okay thanks
-15:00 <seanegan> no problem
-
-(15:57:11) sadrul: the files (at least a couple) in the tar.bz2 are different
-(15:57:23) datallah: right.. that is the problem - the code in svn is fine
-(15:57:31) seanegan: oh, what the hell?
-(15:57:41) seanegan: don't tell me I make dist'ed the wrong tree
-(15:57:46) LSchiere: how does the code in svn differ except in gaim's
-funniest and the spec.in?
-(15:57:50) LSchiere: seanegan: sounds like it
-(15:57:53) datallah: you are such a screw up!
-(15:58:12) seanegan: I sure am
-(15:58:32) seanegan: Ugh!
-(15:58:37) datallah: you must have been distracted by um... plugins
-(15:58:45) seanegan: Don't I test these things?
-(15:58:51) LSchiere: you test things?
-(15:59:06) SimGuy: seanegan: by experience, I think we've determined you do
-not :)
-
-(07:52:07 PM) clueless21: are you one of the gaim makers?
-(07:52:14 PM) Nathan Walp: yes
-(07:52:24 PM) clueless21:  cool
-(07:52:37 PM) clueless21:  if your busy, i can leave you alone...
-(07:53:03 PM) Nathan Walp: if you have a question I can answer it
-(07:53:34 PM) clueless21:  umm... well i don't exactly know what gaim does and what it's for. i don't know if i should get it
-(07:53:46 PM) Nathan Walp: it is an IM client
-(07:53:57 PM) clueless21:  o. what's it do?
-(07:54:03 PM) clueless21:  what's an im client?
-(07:54:25 PM) Nathan Walp: it lets you chat with other people, like we are chatting now
-(07:54:45 PM) clueless21:  oooooooooo... thanks
--- a/finch/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -43,7 +43,7 @@
 	gntstatus.h \
 	gntui.h
 
-finchincludedir=$(includedir)/gaim/gnt
+finchincludedir=$(includedir)/finch
 finchinclude_HEADERS = \
 	$(finch_headers)
 
@@ -63,7 +63,7 @@
 	-DSTANDALONE \
 	-DBR_PTHREADS=0 \
 	-DDATADIR=\"$(datadir)\" \
-	-DLIBDIR=\"$(libdir)/gaim/\" \
+	-DLIBDIR=\"$(libdir)/finch/\" \
 	-DLOCALEDIR=\"$(datadir)/locale\" \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-I$(top_srcdir)/libpurple/ \
--- a/finch/finch.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/finch.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/finch.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/finch.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/getopt.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/getopt.c	Mon Mar 26 01:55:33 2007 +0000
@@ -3,7 +3,7 @@
    "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
    before changing it!
 
-   Purple is the legal property of its developers, whose names are too numerous
+   Finch is the legal property of its developers, whose names are too numerous
    to list here.  Please refer to the COPYRIGHT file distributed with this
    source distribution.
 
--- a/finch/getopt.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/getopt.h	Mon Mar 26 01:55:33 2007 +0000
@@ -4,7 +4,7 @@
    "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
    before changing it!
 
-   Purple is the legal property of its developers, whose names are too numerous
+   Finch is the legal property of its developers, whose names are too numerous
    to list here.  Please refer to the COPYRIGHT file distributed with this
    source distribution.
 
--- a/finch/getopt1.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/getopt1.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Purple is the legal property of its developers, whose names are too numerous
+   Finch is the legal property of its developers, whose names are too numerous
    to list here.  Please refer to the COPYRIGHT file distributed with this
    source distribution.
 
--- a/finch/gntaccount.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntaccount.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntaccount.c GNT Account API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntaccount.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntaccount.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntaccount.h GNT Account API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntblist.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntblist.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntblist.c GNT BuddyList API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntblist.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntblist.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntblist.h GNT BuddyList API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntconn.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntconn.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntconn.c GNT Connection API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntconn.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntconn.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntconn.h GNT Connection API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntconv.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntconv.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntconv.c GNT Conversation API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntconv.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntconv.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntconv.h GNT Conversation API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntdebug.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntdebug.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntdebug.c GNT Debug API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntdebug.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntdebug.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntdebug.h GNT Debug API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntft.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntft.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntft.c GNT File Transfer UI
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntft.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntft.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntft.h GNT File Transfer UI
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntidle.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntidle.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntidle.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntidle.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gntidle.h GNT Idle API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntnotify.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntnotify.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntnotify.c GNT Notify API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntnotify.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntnotify.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntnotify.h GNT Notify API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntplugin.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntplugin.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntplugin.c GNT Plugins API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntplugin.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntplugin.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntplugin.h GNT Plugins API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntpounce.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntpounce.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntpounce.c GNT Buddy Pounce API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntpounce.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntpounce.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntpounce.h GNT Buddy Pounce API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntprefs.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntprefs.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntprefs.c GNT Preferences API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntprefs.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntprefs.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntprefs.h GNT Preferences API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntrequest.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntrequest.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntrequest.c GNT Request API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntrequest.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntrequest.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntrequest.h GNT Request API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntstatus.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntstatus.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntstatus.c GNT Status API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntstatus.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntstatus.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gntstatus.h GNT Status API
  * @ingroup gntui
  *
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntui.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntui.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/gntui.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/gntui.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
- * purple
+ * finch
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Finch is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/finch/libgnt/gntfilesel.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/libgnt/gntfilesel.c	Mon Mar 26 01:55:33 2007 +0000
@@ -28,6 +28,10 @@
 {
 	GntFileSel *sel = GNT_FILE_SEL(widget);
 	g_free(sel->current);
+	if (sel->tags) {
+		g_list_foreach(sel->tags, (GFunc)g_free, NULL);
+		g_list_free(sel->tags);
+	}
 }
 
 static char *
@@ -73,6 +77,15 @@
 }
 
 static gboolean
+is_tagged(GntFileSel *sel, const char *f)
+{
+	char *ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", f);
+	gboolean find = g_list_find_custom(sel->tags, ret, (GCompareFunc)g_utf8_collate) != NULL;
+	g_free(ret);
+	return find;
+}
+
+static gboolean
 location_changed(GntFileSel *sel, GError **err)
 {
 	GDir *dir;
@@ -109,15 +122,19 @@
 		if (stat(fp, &st)) {
 			g_printerr("Error stating location %s\n", fp);
 		} else {
-			if (S_ISDIR(st.st_mode))
+			if (S_ISDIR(st.st_mode)) {
 				gnt_tree_add_row_after(GNT_TREE(sel->dirs), g_strdup(str),
 						gnt_tree_create_row(GNT_TREE(sel->dirs), str), NULL, NULL);
-			else if (!sel->dirsonly) {
+				if (sel->multiselect && sel->dirsonly && is_tagged(sel, str))
+					gnt_tree_set_row_flags(GNT_TREE(sel->dirs), (gpointer)str, GNT_TEXT_FLAG_BOLD);
+			} else if (!sel->dirsonly) {
 				char size[128];
 				snprintf(size, sizeof(size), "%ld", (long)st.st_size);
 
 				gnt_tree_add_row_after(GNT_TREE(sel->files), g_strdup(str),
 						gnt_tree_create_row(GNT_TREE(sel->files), str, size, ""), NULL, NULL);
+				if (sel->multiselect && is_tagged(sel, str))
+					gnt_tree_set_row_flags(GNT_TREE(sel->files), (gpointer)str, GNT_TEXT_FLAG_BOLD);
 			}
 		}
 		g_free(fp);
@@ -131,7 +148,6 @@
 dir_key_pressed(GntTree *tree, const char *key, GntFileSel *sel)
 {
 	if (strcmp(key, "\r") == 0) {
-		/* XXX: if we are moving up the tree, make sure the current node is selected after the redraw */
 		char *str = g_strdup(gnt_tree_get_selection_data(tree));
 		char *path = g_build_filename(sel->current, str, NULL);
 		char *dir = g_path_get_basename(sel->current);
@@ -225,7 +241,7 @@
 
 	vbox = gnt_vbox_new(FALSE);
 	gnt_box_set_pad(GNT_BOX(vbox), 0);
-	gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_LEFT);
+	gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_MID);
 
 	/* The dir. and files list */
 	hbox = gnt_hbox_new(FALSE);
@@ -253,9 +269,64 @@
 	update_location(sel);
 }
 
+static gboolean
+toggle_tag_selection(GntBindable *bind, GList *null)
+{
+	GntFileSel *sel = GNT_FILE_SEL(bind);
+	char *str;
+	GList *find;
+	char *file;
+	GntWidget *tree;
+
+	if (!sel->multiselect)
+		return FALSE;
+	tree = sel->dirsonly ? sel->dirs : sel->files;
+	if (!gnt_widget_has_focus(tree))
+		return FALSE;
+
+	file = gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
+
+	str = gnt_file_sel_get_selected_file(sel);
+	if ((find = g_list_find_custom(sel->tags, str, (GCompareFunc)g_utf8_collate)) != NULL) {
+		g_free(find->data);
+		sel->tags = g_list_delete_link(sel->tags, find);
+		gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_NORMAL);
+		g_free(str);
+	} else {
+		sel->tags = g_list_prepend(sel->tags, str);
+		gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_BOLD);
+	}
+
+	return TRUE;
+}
+
+static gboolean
+clear_tags(GntBindable *bind, GList *null)
+{
+	GntFileSel *sel = GNT_FILE_SEL(bind);
+	GntWidget *tree;
+	GList *iter;
+
+	if (!sel->multiselect)
+		return FALSE;
+	tree = sel->dirsonly ? sel->dirs : sel->files;
+	if (!gnt_widget_has_focus(tree))
+		return FALSE;
+
+	g_list_foreach(sel->tags, (GFunc)g_free, NULL);
+	g_list_free(sel->tags);
+	sel->tags = NULL;
+
+	for (iter = GNT_TREE(tree)->list; iter; iter = iter->next)
+		gnt_tree_set_row_flags(GNT_TREE(tree), iter->data, GNT_TEXT_FLAG_NORMAL);
+
+	return TRUE;
+}
+
 static void
 gnt_file_sel_class_init(GntFileSelClass *klass)
 {
+	GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass);
 	GntWidgetClass *kl = GNT_WIDGET_CLASS(klass);
 	parent_class = GNT_WINDOW_CLASS(klass);
 	kl->destroy = gnt_file_sel_destroy;
@@ -270,6 +341,9 @@
 					 NULL, NULL,
 					 gnt_closure_marshal_VOID__STRING_STRING,
 					 G_TYPE_NONE, 0);
+
+	gnt_bindable_class_register_action(bindable, "toggle-tag", toggle_tag_selection, "t", NULL);
+	gnt_bindable_class_register_action(bindable, "clear-tags", clear_tags, "c", NULL);
 	gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
 
 	GNTDEBUG;
@@ -312,7 +386,7 @@
 	return type;
 }
 
-GntWidget *gnt_file_sel_new()
+GntWidget *gnt_file_sel_new(void)
 {
 	GntWidget *widget = g_object_new(GNT_TYPE_FILE_SEL, NULL);
 	GntFileSel *sel = GNT_FILE_SEL(widget);
@@ -375,3 +449,47 @@
 	return sel->dirsonly;
 }
 
+char *gnt_file_sel_get_selected_file(GntFileSel *sel)
+{
+	char *ret;
+	const char *tmp;
+	tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
+	ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
+	return ret;
+}
+
+void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must)
+{
+	/*XXX: What do I do with this? */
+	sel->must_exist = must;
+}
+
+gboolean gnt_file_sel_get_must_exist(GntFileSel *sel)
+{
+	return sel->must_exist;
+}
+
+void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set)
+{
+	sel->multiselect = set;
+}
+
+GList *gnt_file_sel_get_selected_multi_files(GntFileSel *sel)
+{
+	GList *list = NULL, *iter;
+	char *str = gnt_file_sel_get_selected_file(sel);
+
+	for (iter = sel->tags; iter; iter = iter->next) {
+		list = g_list_prepend(list, g_strdup(iter->data));
+		if (g_utf8_collate(str, iter->data)) {
+			g_free(str);
+			str = NULL;
+		}
+	}
+	if (str)
+		list = g_list_prepend(list, str);
+	list = g_list_reverse(list);
+	return list;
+}
+
+
--- a/finch/libgnt/gntfilesel.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/libgnt/gntfilesel.h	Mon Mar 26 01:55:33 2007 +0000
@@ -17,11 +17,11 @@
 #define GNT_FILE_SEL_SET_FLAGS(obj, flags)		(GNT_FILE_SEL_FLAGS(obj) |= flags)
 #define GNT_FILE_SEL_UNSET_FLAGS(obj, flags)	(GNT_FILE_SEL_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnFileSel			GntFileSel;
-typedef struct _GnFileSelPriv		GntFileSelPriv;
-typedef struct _GnFileSelClass		GntFileSelClass;
+typedef struct _GntFileSel			GntFileSel;
+typedef struct _GntFileSelPriv		GntFileSelPriv;
+typedef struct _GntFileSelClass		GntFileSelClass;
 
-struct _GnFileSel
+struct _GntFileSel
 {
 	GntWindow parent;
 
@@ -36,9 +36,11 @@
 	/* XXX: someone should make these useful */
 	gboolean must_exist; /* Make sure the selected file (the name entered in 'location') exists */
 	gboolean dirsonly;   /* Show only directories */
+    gboolean multiselect;
+    GList *tags;         /* List of tagged files when multiselect is set */
 };
 
-struct _GnFileSelClass
+struct _GntFileSelClass
 {
 	GntWindowClass parent;
 
@@ -53,16 +55,25 @@
 
 GType gnt_file_sel_get_gtype(void);
 
-GntWidget *gnt_file_sel_new();
+GntWidget *gnt_file_sel_new(void);
 
 gboolean gnt_file_sel_set_current_location(GntFileSel *sel, const char *path);
 
-const char *gnt_file_sel_get_current_location(GntFileSel *sel);
-
 void gnt_file_sel_set_dirs_only(GntFileSel *sel, gboolean dirs);
 
 gboolean gnt_file_sel_get_dirs_only(GntFileSel *sel);
 
+void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must);
+
+gboolean gnt_file_sel_get_must_exist(GntFileSel *sel);
+
+char *gnt_file_sel_get_selected_file(GntFileSel *sel);  /* The returned value should be free'd */
+
+GList *gnt_file_sel_get_selected_multi_files(GntFileSel *sel);
+
+void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set);
+
 G_END_DECLS
 
 #endif /* GNT_FILE_SEL_H */
+
--- a/finch/libgnt/wms/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/libgnt/wms/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -3,7 +3,7 @@
 plugin_LTLIBRARIES = \
 	s.la
 
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/finch
 
 s_la_SOURCES = s.c
 s_la_LIBADD =  \
--- a/finch/plugins/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/plugins/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,3 +1,4 @@
+gntclipboard_la_LDFLAGS = -module -avoid-version
 gntgf_la_LDFLAGS      = -module -avoid-version
 gnthistory_la_LDFLAGS = -module -avoid-version
 gntlastlog_la_LDFLAGS    = -module -avoid-version
@@ -5,18 +6,21 @@
 if PLUGINS
 
 plugin_LTLIBRARIES = \
+	gntclipboard.la \
 	gntgf.la \
 	gnthistory.la \
 	gntlastlog.la
 
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/finch
 
+gntclipboard_la_SOURCES = gntclipboard.c
 gntgf_la_SOURCES      = gntgf.c
 gnthistory_la_SOURCES = gnthistory.c
 gntlastlog_la_SOURCES = lastlog.c
 
 gntgf_la_CFLAGS = $(X11_CFLAGS)
 
+gntclipboard_la_LIBADD = $(GLIB_LIBS)
 gntgf_la_LIBADD       = $(GLIB_LIBS) $(X11_LIBS) $(top_builddir)/finch/libgnt/libgnt.la
 gnthistory_la_LIBADD  = $(GLIB_LIBS)
 gntlastlog_la_LIBADD  = $(GLIB_LIBS)
--- a/finch/plugins/gntclipboard.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/plugins/gntclipboard.c	Mon Mar 26 01:55:33 2007 +0000
@@ -110,10 +110,12 @@
 static gboolean
 plugin_load(PurplePlugin *plugin)
 {
+#ifdef HAVE_X11
 	if (!XOpenDisplay(NULL)) {
 		purple_debug_warning("gntclipboard", "Couldn't find X display\n");
 		return FALSE;
 	}
+#endif
 	if (!getenv("WINDOWID")) {
 		purple_debug_warning("gntclipboard", "Couldn't find window\n");
 		return FALSE;
@@ -150,7 +152,7 @@
 	N_("When the gnt clipboard contents change, "
 		"the contents are made available to X, if possible."),
 	"Richard Nelson <wabz@whatsbeef.net>",
-	"http://purple.sourceforge.net",
+	PURPLE_WEBSITE,
 	plugin_load,
 	plugin_unload,
 	NULL,
--- a/finch/plugins/gntgf.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/plugins/gntgf.c	Mon Mar 26 01:55:33 2007 +0000
@@ -357,7 +357,7 @@
 	N_("Toaster plugin"),
 	N_("Toaster plugin"),
 	"Sadrul H Chowdhury <sadrul@users.sourceforge.net>",
-	"http://purple.sourceforge.net",
+	PURPLE_WEBSITE,
 	plugin_load,
 	plugin_unload,
 	NULL,
--- a/finch/plugins/lastlog.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/finch/plugins/lastlog.c	Mon Mar 26 01:55:33 2007 +0000
@@ -123,7 +123,7 @@
 	N_("Lastlog plugin."),
 	N_("Lastlog plugin."),
 	"Sadrul H Chowdhury <sadrul@users.sourceforge.net>",
-	"http://purple.sourceforge.net",
+	PURPLE_WEBSITE,
 	plugin_load,
 	plugin_unload,
 	NULL,
--- a/gaim.apspec.in	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-# -*-shell-script-*-
-
-[Meta]
-RootName: @gaim.sourceforge.net/gaim:$SOFTWAREVERSION
-DisplayName: Gaim Internet Messenger
-ShortName: gaim
-Maintainer: The Gaim Developers
-URL: http://gaim.sourceforge.net/
-Packager: Tim Ringenbach <marv_sf@users.sourceforge.net>
-Summary: A GTK+ based multiprotocol instant messaging client
-SoftwareVersion: @VERSION@
-InterfaceVersion: 2.0
-PackageVersion: 1
-
-[Description]
-Gaim allows you to talk to anyone using a variety of messaging protocols,
-including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, Jabber,
-Gadu-Gadu, and Zephyr. These protocols are implemented using a
-modular, easy to use design. To use a protocol, just add an account using the
-account editor.
-
-Gaim supports many common features of other clients, as well as many unique
-features, such as perl scripting, TCL scripting and C plugins.
-
-Gaim is NOT affiliated with or endorsed by America Online, Inc., Microsoft
-Corporation, Yahoo! Inc., or ICQ Inc.
-
-[BuildPrepare]
-APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-gtktest --disable-glibtest --disable-vv  --disable-fortify
-#APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-vv
-
-
-[BuildUnprepare]
-unprepareBuild
-
-[Imports]
-rm -rf include
-rm -rf lib/pkgconfig
-find -name '*.la' | xargs rm
-echo '*' | import
-
-[Prepare]
-# Dependency checking
-require @gtk.org/gtk 2.2
-require @68k.org/libaudiofile 0.0
-require @xiph.org/libao 2.0
-require @gtkspell.sourceforge.net/gtkspell 0.0
-require @gnutls.org/gnutls 11.0 || { require @mozilla.org/nspr 4 && require @mozilla.org/nss 3; }
-
-[Install]
-# Put your installation script here
-installExe ./bin/*
-installLib ./lib/libgaim-remote.so.0.0.0
-# do the plugins
-copyFiles ./lib/gaim "$PREFIX/lib"
-installMan 1 ./man/man1/gaim.1
-installDesktop "Networking/Instant Messaging" ./share/applications/gaim.desktop
-installLocale ./share/locale
-copyFiles ./share/pixmaps "$PREFIX/share"
-copyFiles ./share/sounds "$PREFIX/share"
-installIcon ./share/pixmaps/gaim.png
-# install and fix the .pc file
-# move this to the -devel package when I make one
-# copyFile ./lib/pkgconfig/gaim.pc "$PREFIX/lib/pkgconfig/gaim.pc"
-# safeSed "$PREFIX/lib/pkgconfig/gaim.pc" "s|prefix=/usr/local|prefix=$PREFIX|"
-
-[Uninstall]
-# Usually just the following line is enough to uninstall everything
-uninstallFromLog
--- a/gaim.pc.in	Mon Mar 26 01:11:46 2007 +0000
+++ b/gaim.pc.in	Mon Mar 26 01:55:33 2007 +0000
@@ -5,10 +5,10 @@
 datarootdir=@datarootdir@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
- 
+
 Name: Gaim
 Description: Gaim is a GTK2-based instant messenger application.
 Version: @VERSION@
 Requires: glib-2.0
-Cflags: -I${includedir}/gaim
-Libs: -L${libdir} -lgaim
+Cflags: -I${includedir}/libpurple
+Libs: -L${libdir} -lpurple
--- a/gaim.spec.in	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +0,0 @@
-# Older RPM doesn't define these by default
-%{!?perl_vendorlib: %define perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib)}
-%{!?perl_vendorarch: %define perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)}
-%{!?perl_archlib: %define perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib)}
-
-# When not doing betas comment this out
-# NOTE: %defines in spec files are evaluated in comments so the correct
-#       way to comment it out is to replace the % with #
-#define beta 7
-
-%if 0%{?beta}
-%define gaimver %(echo "@VERSION@"|sed -e 's/dev//; s/beta.*//')
-%else
-%define gaimver @VERSION@
-%endif
-
-Summary:    A GTK+ based multiprotocol instant messaging client
-Name:       @PACKAGE@
-Version:    %gaimver
-Release:    0%{?beta:.beta%{beta}}
-Epoch:      1
-License:    GPL
-Group:      Applications/Internet
-URL:        http://gaim.sourceforge.net/
-Packager:   %{packager}
-Source:     %{name}-@VERSION@.tar.bz2
-BuildRoot:  %{_tmppath}/%{name}-%{version}-root
-
-# Generic build requirements
-BuildRequires: libtool, pkgconfig, intltool, gettext, libxml2-devel
-%{?_with_avahi:BuildRequires: avahi-compat-howl-devel}
-%{!?_without_gtkspell:BuildRequires: gtkspell-devel}
-%{?_with_howl:BuildRequires: howl-devel}
-%{?_with_meanwhile:BuildRequires: meanwhile-devel}
-%{?_with_mono:BuildRequires: mono-devel}
-%{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2}
-%{?_with_silc:BuildRequires: /usr/include/silc/silcclient.h}
-%{?_with_tcl:BuildRequires: tcl, tk, /usr/include/tcl.h}
-%{!?_without_text:BuildRequires: ncurses-devel}
-
-%if "%{_vendor}" == "suse"
-# For SuSE:
-BuildRequires: gnutls-devel
-%{?_with_dbus:BuildRequires: dbus-1-devel >= 0.35}
-%{!?_without_gstreamer:BuildRequires: gstreamer010-devel >= 0.10}
-%else
-%{?_with_dbus:BuildRequires: dbus-devel >= 0.35}
-%{!?_without_gstreamer:BuildRequires: gstreamer-devel >= 0.10}
-%endif
-
-# Mandrake 10.1 and lower || Mandrake 10.2 (and higher?)
-%if "%{_vendor}" == "MandrakeSoft" || "%{_vendor}" == "Mandrakesoft" || "%{_vendor}" == "Mandriva"
-# For Mandrake/Mandriva:
-BuildRequires: libgtk+2.0_0-devel, libnss3-devel, perl-devel
-Obsoletes:  libgaim-remote0
-%else
-# For SuSE, Red Hat, Fedora and others:
-BuildRequires: gtk2-devel
-%if "%{_vendor}" != "suse"
-# For Red Hat, Fedora and others:
-# let's assume RH & FC1 are the only brain-dead distros missing the
-# perl-XML-Parser dependency on intltool and that other RH/FC releases
-# don't care if we specify it here
-BuildRequires: perl-XML-Parser
-BuildRequires: mozilla-nss-devel
-%endif
-%endif
-
-# For some reason perl isn't always automatically detected as a requirement :(
-Requires: perl
-# Gadu-Gadu support was split out temporarily
-Provides: gaim-gadugadu = %{epoch}:%{version}-%{release}
-
-%package devel
-Summary:    Development headers, documentation, and libraries for Gaim.
-Group:      Applications/Internet
-Requires:   pkgconfig, gaim = %{epoch}:%{version}
-
-%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
-%package bonjour
-Summary:    Bonjour plugin for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_meanwhile:1}
-%package meanwhile
-Summary:    Lotus Sametime plugin for Gaim using the Meanwhile library
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_mono:1}
-%package mono
-Summary:    Mono .NET plugin support for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_silc:1}
-%package silc
-Summary:    SILC (Secure Internet Live Conferencing) plugin for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_tcl:1}
-%package tcl
-Summary:    Tcl scripting support for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{!?_without_text:1}
-%package text
-Summary:    A text-based user interface for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%description
-Gaim allows you to talk to anyone using a variety of messaging
-protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu,
-ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and
-Zephyr.  These protocols are implemented using a modular, easy to
-use design.  To use a protocol, just add an account using the
-account editor.
-
-Gaim supports many common features of other clients, as well as many
-unique features, such as perl scripting, TCL scripting and C plugins.
-
-Gaim is not affiliated with or endorsed by America Online, Inc.,
-Microsoft Corporation, Yahoo! Inc., or ICQ Inc.
-
-%description devel
-The gaim-devel package contains the header files, developer
-documentation, and libraries required for development of Gaim scripts
-and plugins.
-
-%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
-%description bonjour
-Bonjour plugin for Gaim.
-%endif
-
-%if 0%{?_with_meanwhile:1}
-%description meanwhile
-Lotus Sametime plugin for Gaim using the Meanwhile library.
-%endif
-
-%if 0%{?_with_mono:1}
-%description mono
-Mono plugin loader for Gaim.  This package will allow you to write or
-use Gaim plugins written in the .NET programming language.
-%endif
-
-%if 0%{?_with_silc:1}
-%description silc
-SILC (Secure Internet Live Conferencing) plugin for Gaim.
-%endif
-
-%if 0%{!?without_text:1}
-%description text
-A text-based user interface for Gaim.  This can be run from a
-standard text console or from a terminal within X Windows.  It
-uses ncurses and our homegrown gnt library for drawing windows
-and text.
-%endif
-
-%if 0%{?_with_tcl:1}
-%description tcl
-Tcl plugin loader for Gaim.  This package will allow you to write or
-use Gaim plugins written in the Tcl programming language.
-%endif
-
-%prep
-%setup -q -n %{name}-@VERSION@
-
-%build
-CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} \
-                                    --bindir=%{_bindir} \
-                                    --datadir=%{_datadir} \
-                                    --includedir=%{_includedir} \
-                                    --libdir=%{_libdir} \
-                                    --mandir=%{_mandir} \
-                                    --sysconfdir=%{_sysconfdir} \
-                                    --disable-schemas-install \
-                                    %{!?_with_dbus:--disable-dbus} \
-                                    %{?_without_gstreamer:--disable-gstreamer} \
-                                    %{?_without_gtkspell:--disable-gtkspell} \
-                                    %{?_with_mono:--enable-mono} \
-                                    %{?_with_perlmakehack:--with-perl-lib=%{buildroot}%{_prefix}} \
-                                    %{!?_with_perlmakehack:--with-perl-lib=%{_prefix}} \
-                                    %{?_with_sasl:--enable-cyrus-sasl} \
-                                    %{?_with_silc:--with-silc-includes=%{_includedir}/silc} \
-                                    %{?_with_silc:--with-silc-libs=%{_libdir}/silc} \
-                                    %{!?_with_tcl:--disable-tcl} \
-                                    %{?_without_text:--disable-consoleui}
-
-make %{?_smp_mflags}
-
-%install
-rm -rf %{buildroot}
-%if 0%{?_with_perlmakehack:1}
-make prefix=%{buildroot}%{_prefix} bindir=%{buildroot}%{_bindir} \
-     datadir=%{buildroot}%{_datadir} includedir=%{buildroot}%{_includedir} \
-     libdir=%{buildroot}%{_libdir} mandir=%{buildroot}%{_mandir} \
-     sysconfdir=%{buildroot}%{_sysconfdir} \
-     install
-%else
-make DESTDIR=$RPM_BUILD_ROOT install
-%endif
-
-# Delete files that we don't want to put in any of the RPMs
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/*.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
-rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod
-find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
-find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';'
-
-%if 0%{!?_with_howl:1} && 0%{!?_with_avahi:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/libbonjour.so
-%endif
-
-%if 0%{!?_with_meanwhile:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/libsametime.so
-%endif
-
-%if 0%{!?_with_mono:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/mono.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/*.dll
-%endif
-
-%if 0%{!?_with_silc:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/libsilcgaim.so
-%endif
-
-%if 0%{!?_with_tcl:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/tcl.so
-%endif
-
-%if 0%{?_without_text:1}
-rm -f $RPM_BUILD_ROOT%{_mandir}/man1/gaim-text.*
-rm -f $RPM_BUILD_ROOT%{_bindir}/gaim-text
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/gntgf.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/gnthistory.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/s.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/libgnt.so.*
-%endif
-
-%find_lang %{name}
-
-find $RPM_BUILD_ROOT%{_libdir}/gaim -xtype f -print | \
-        sed "s@^$RPM_BUILD_ROOT@@g" | \
-        grep -v /gntgf.so | \
-        grep -v /gnthistory.so | \
-        grep -v /libbonjour.so | \
-        grep -v /libsilcgaim.so | \
-        grep -v /libsametime.so | \
-        grep -v /mono.so | \
-        grep -v /s.so | \
-        grep -v /tcl.so | \
-        grep -v ".dll$" | \
-        grep -v ".tcl$" > %{name}-%{version}-coreplugins
-
-# files -f file can only take one filename :(
-cat %{name}.lang >> %{name}-%{version}-coreplugins
-
-%clean
-rm -rf %{buildroot}
-
-%pre
-if [ "$1" -gt 1 -a -n "`which gconftool-2 2>/dev/null`" ]; then
-    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-    gconftool-2 --makefile-uninstall-rule \
-        %{_sysconfdir}/gconf/schemas/gaim.schemas >/dev/null || :
-    killall -HUP gconfd-2 || :
-fi
-
-%post
-if [ -n "`which gconftool-2 2>/dev/null`" ]; then
-    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-    gconftool-2 --makefile-install-rule \
-        %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
-    killall -HUP gconfd-2 || :
-fi
-/sbin/ldconfig
-
-%preun
-if [ "$1" -eq 0 -a -n "`which gconftool-2 2>/dev/null`" ]; then
-    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-    gconftool-2 --makefile-uninstall-rule \
-      %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
-    killall -HUP gconfd-2 || :
-fi
-
-%postun -p /sbin/ldconfig
-
-%files -f %{name}-%{version}-coreplugins
-%defattr(-, root, root)
-
-%doc AUTHORS
-%doc COPYING
-%doc COPYRIGHT
-%doc ChangeLog
-%doc NEWS
-%doc README
-%doc README.SVN
-%doc doc/FAQ
-%doc doc/the_penguin.txt
-%doc %{_mandir}/man1/gaim.*
-%doc %{_mandir}/man3*/*
-
-%dir %{_libdir}/gaim
-%attr(755, root, root) %{perl_vendorarch}/Gaim*
-%attr(755, root, root) %{perl_vendorarch}/auto/Gaim
-
-%{_bindir}/gaim
-%{_datadir}/pixmaps/*
-%dir %{_datadir}/sounds/gaim
-%{_datadir}/sounds/gaim/*
-%{_datadir}/applications/*
-%{_libdir}/libgaim.so.*
-%{_sysconfdir}/gconf/schemas/gaim.schemas
-
-%if 0%{?_with_dbus:1}
-%{_bindir}/gaim-client-example
-%{_bindir}/gaim-remote
-%{_bindir}/gaim-send
-%{_bindir}/gaim-send-async
-%{_bindir}/gaim-url-handler
-%{_libdir}/libgaim-client.so.*
-%{_datadir}/dbus-1/services/gaim.service
-%doc README.dbus
-%doc libgaim/gaim-notifications-example
-%endif
-
-%files devel
-%defattr(-, root, root)
-
-%doc ChangeLog.API
-%doc HACKING
-%doc PLUGIN_HOWTO
-%doc PROGRAMMING_NOTES
-
-%dir %{_includedir}/gaim
-%{_includedir}/gaim/*.h
-%dir %{_includedir}/gaim/gnt
-%{_includedir}/gaim/gnt/*.h
-%dir %{_includedir}/gnt
-%{_includedir}/gnt/*.h
-%{_libdir}/libgaim.so
-%{_libdir}/libgnt.so
-%{_libdir}/pkgconfig/gaim.pc
-%{_libdir}/pkgconfig/gnt.pc
-%{_datadir}/aclocal/gaim.m4
-%if 0%{?_with_dbus:1}
-%{_libdir}/libgaim-client.so
-%endif
-
-%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
-%files bonjour
-%defattr(-, root, root)
-
-%{_libdir}/gaim/libbonjour.*
-%endif
-
-%if 0%{?_with_meanwhile:1}
-%files meanwhile
-%defattr(-, root, root)
-
-%{_libdir}/gaim/libsametime.*
-%endif
-
-%if 0%{?_with_mono:1}
-%files mono
-%defattr(-, root, root)
-
-%{_libdir}/gaim/mono.so
-%{_libdir}/gaim/*.dll
-%endif
-
-%if 0%{?_with_silc:1}
-%files silc
-%defattr(-, root, root)
-
-%{_libdir}/gaim/libsilcgaim.*
-%endif
-
-%if 0%{?_with_tcl:1}
-%files tcl
-%defattr(-, root, root)
-
-%{_libdir}/gaim/tcl.so
-%endif
-
-%if 0%{!?_without_text:1}
-%files text
-%defattr(-, root, root)
-
-%doc %{_mandir}/man1/gaim-text.*
-%{_bindir}/gaim-text
-%{_libdir}/gaim/gntgf.so
-%{_libdir}/gaim/gnthistory.so
-%{_libdir}/gaim/s.so
-%{_libdir}/libgnt.so.*
-%endif
-
-%changelog
-* Sun Oct  1 2006 Stu Tomlinson <stu@nosnilmot.com>
-- We can build with internal gadu gadu again, so bring it back into the
-  main package
-- Deal with gconf schame uninstallation on package upgrade and removal
-
-* Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com>
-- Make the gstreamer-devel dependency overridable with '--without-gstreamer'
-  to allow building on older distributions without suitable gstreamer
-
-* Tue Aug 15 2006 Mark Doliner <thekingant@users.sourceforge.net>
-- Add a BuildRequire for gstreamer-devel
-- Remove the BuildRequires for audiofile-devel and libao-devel
-
-* Mon May 8 2006 Mark Doliner <thekingant@users.sourceforge.net>
-- Add --with avahi option to compile the gaim-bonjour package against
-  Avahi's Howl compatibility layer
-
-* Wed Mar 29 2006 Stu Tomlinson <stu@nosnilmot.com>
-- Source RPM uses tar.bz2 now to save space
-- Update BuildRequires for new intltool dependencies
-- Add a --with perlmakehack option to allow builds to succeed on RH9
-- Add a --with gadugadu to build (separate) gaim-gadugadu package
-
-* Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Add support for beta versions so the subsequent releases are seen as newer
-  by RPM
-- Split of sametime support to gaim-meanwhile
-- Use make DESTDIR=... instead of overloading prefix etc. when installing
-- Default build to include cyrus-sasl support in Jabber
-- Add --with dbus to build with DBUS support
-
-* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net>
-- Added obsoletes gaim-meanwhile
-
-* Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Add separate gaim-bonjour package if built with --with-howl
-- Add separate gaim-mono package if built with --with-mono
-- Exclude some unwanted perl files
-
-* Sat Aug 20 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Include libgaimperl.so
-- Include gaim.m4 in gaim-devel
-
-* Thu Apr 28 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Use perl_vendorlib & perl_archlib for better 64bit compat (Jeff Mahoney)
-- Clean up Requires, most should be auto-detected
-- Restore gtkspell-devel build requirement (and add --without gtkspell option)
-- Fix Tcl build requirements to work across more distros
-- Fix SILC build requirements to work across more distros
-
-* Mon Oct 11 2004 John Jolly <john.jolly@gmail.com>
-- Added if "%{_vendor}" == "suse" to handle GnuTLS libraries for SuSE
-
-* Sat Oct  2 2004 Stu Tomlinson <stu@nosnilmot.com>
-- If --with tcl or silc are not specified, make sure the plugins don't
-  exist to prevent RPM complaining about unpackaged files
-
-* Tue Jun 29 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Change Tcl to use --with tcl, the same as SILC, and build a gaim-tcl
-  package if specified.
-
-* Thu Jun 24 2004 Mark Doliner <thekingant@users.sourceforge.net>
-- Add --with silc rebuild option for compiling a separate gaim-silc
-  RPM containing the silc protocol plugin (Stu Tomlinson).
-
-* Wed Jun 23 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Moved gaim headers and a pkgconfig configuration file into the
-  gaim-devel RPM (Stu Tomlinson).
-
-* Thu Jan 15 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Removed the manual strip command, as it seems to be unwarranted if
-  the necessary programs are properly installed.  (For me, this was
-  elfutils.)
-
-* Sun Jul 20 2003 Bjoern Voigt <bjoern@cs.tu-berlin.de>
-- Added pkgconfig build dependency.
-- if "%{_vendor}" != "MandrakeSoft" now also works with rpm 3.x.
-- Added Gaim-specific directories to list of Gaim's files.
-
-* Wed Jul 16 2003 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Complete spec file rewrite to take advantage of "new" RPM features
-  and make things prettier.
-- Use system-supplied %%{_prefix}, %%{_datadir}, etc. rather than
-  attempt to define our own.
--- a/libpurple/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,12 +1,13 @@
 EXTRA_DIST = \
 		dbus-analyze-functions.py \
 		dbus-analyze-types.py \
-		gaim-notifications-example \
-		gaim-remote \
-		gaim-send \
-		gaim-send-async \
-		gaim-url-handler \
+		purple-notifications-example \
+		purple-remote \
+		purple-send \
+		purple-send-async \
+		purple-url-handler \
 		purple.pc.in \
+		purple-uninstalled.pc.in \
 		Makefile.mingw \
 		win32/global.mak \
 		win32/libc_interface.c \
@@ -15,7 +16,7 @@
 		win32/libpurplerc.rc.in \
 		win32/rules.mak \
 		win32/targets.mak \
-		win32/wgaimerror.h \
+		win32/wpurpleerror.h \
 		win32/win32dep.c \
 		win32/giowin32.c \
 		win32/win32dep.h
@@ -29,7 +30,7 @@
 
 SUBDIRS = $(GCONF_DIR) plugins protocols tests . example
 
-gaim_coresources = \
+purple_coresources = \
 	account.c \
 	accountopt.c \
 	blist.c \
@@ -77,7 +78,7 @@
 	xmlnode.c \
 	whiteboard.c
 
-gaim_coreheaders = \
+purple_coreheaders = \
 	account.h \
 	accountopt.h \
 	blist.h \
@@ -93,7 +94,7 @@
 	desktopitem.h \
 	eventloop.h \
 	ft.h \
-	gaim.h \
+	gaim-compat.h \
 	idle.h \
 	imgstore.h \
 	log.h \
@@ -137,9 +138,9 @@
 	dbus-types.h \
 	purple-client-bindings.c \
 	purple-client-bindings.h \
-	gaim.service
+	purple.service
 
-# gaim dbus server
+# purple dbus server
 
 dbus_sources  = dbus-server.c dbus-useful.c
 dbus_headers  = dbus-bindings.h dbus-purple.h dbus-server.h dbus-useful.h dbus-define-api.h
@@ -148,64 +149,64 @@
                 connection.h conversation.h core.h log.h prefs.h roomlist.h \
                 savedstatuses.h status.h server.h xmlnode.h
 
-gaim_build_coreheaders = $(addprefix $(srcdir)/, $(gaim_coreheaders))
+purple_build_coreheaders = $(addprefix $(srcdir)/, $(purple_coreheaders))
 dbus_build_exported = $(addprefix $(srcdir)/, $(dbus_exported))
 
-dbus-types.c: dbus-analyze-types.py $(gaim_coreheaders)
-	cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DEFINE_TYPE\(%s\) > $@
+dbus-types.c: dbus-analyze-types.py $(purple_coreheaders)
+	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DEFINE_TYPE\(%s\) > $@
 
 dbus-types.h: dbus-analyze-types.py $(dbus_coreheaders)
-	cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DECLARE_TYPE\(%s\) > $@
+	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DECLARE_TYPE\(%s\) > $@
 
 dbus-bindings.c: dbus-analyze-functions.py $(dbus_exported)
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py > $@
 
 dbus-server.$(OBJEXT): dbus-bindings.c dbus-types.c dbus-types.h
 dbus-server.lo: dbus-bindings.c dbus-types.c dbus-types.h
-$(libgaim_la_OBJECTS): dbus-types.h
+$(libpurple_la_OBJECTS): dbus-types.h
 
-# libgaim-client
+# libpurple-client
 
-libgaim_client_lib = libgaim-client.la
+libpurple_client_lib = libpurple-client.la
 
-libgaim_client_la_SOURCES = gaim-client.c gaim-client.h
+libpurple_client_la_SOURCES = purple-client.c purple-client.h
 
-libgaim_client_la_LIBADD = $(DBUS_LIBS)
+libpurple_client_la_LIBADD = $(DBUS_LIBS)
 
 purple-client-bindings.c: dbus-analyze-functions.py $(dbus_exported)
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client > $@
 
-purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(gaim_coreheaders) $(dbus_exported)
-	cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim > $@
+purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(purple_coreheaders) $(dbus_exported)
+	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim > $@
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client --headers >> $@
 
-$(libgaim_client_la_OBJECTS): purple-client-bindings.h purple-client-bindings.c
+$(libpurple_client_la_OBJECTS): purple-client-bindings.h purple-client-bindings.c
 
-# gaim-client-example
+# purple-client-example
 
-gaim_client_example_SOURCES = gaim-client-example.c
+purple_client_example_SOURCES = purple-client-example.c
 
-gaim_client_example_DEPENDENCIES = libgaim-client.la
+purple_client_example_DEPENDENCIES = libpurple-client.la
 
-gaim_client_example_LDADD = \
-	libgaim-client.la \
+purple_client_example_LDADD = \
+	libpurple-client.la \
 	$(GLIB_LIBS) \
 	$(DBUS_LIBS)
 
-bin_PROGRAMS = gaim-client-example
+bin_PROGRAMS = purple-client-example
 
-gaim-client-example.$(OBJEXT): purple-client-bindings.h
+purple-client-example.$(OBJEXT): purple-client-bindings.h
 
 # scripts
 
-bin_SCRIPTS = gaim-remote gaim-send gaim-send-async gaim-url-handler
+bin_SCRIPTS = purple-remote purple-send purple-send-async purple-url-handler
 
 endif
 
-lib_LTLIBRARIES = libpurple.la $(libgaim_client_lib)
+lib_LTLIBRARIES = libpurple.la $(libpurple_client_lib)
 
 libpurple_la_SOURCES = \
-	$(gaim_coresources) \
+	$(purple_coresources) \
 	$(dbus_sources)
 
 noinst_HEADERS= \
@@ -214,7 +215,7 @@
 
 libpurpleincludedir=$(includedir)/libpurple
 libpurpleinclude_HEADERS = \
-	$(gaim_coreheaders) \
+	$(purple_coreheaders) \
 	$(dbus_headers)
 
 libpurple_la_DEPENDENCIES = $(STATIC_LINK_LIBS)
--- a/libpurple/example/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/example/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 bin_PROGRAMS = nullclient
 
-nullclient_SOURCES = nullclient.c
-nullclient_DEPENDENCIES = 
+nullclient_SOURCES = defines.h nullclient.c
+nullclient_DEPENDENCIES =
 nullclient_LDFLAGS = -export-dynamic
 nullclient_LDADD = \
 	$(DBUS_LIBS) \
--- a/libpurple/gaim-client-example.c	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#define DBUS_API_SUBJECT_TO_CHANGE
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "purple-client.h"
-
-/*
-   This example demonstrates how to use libpurple-client to communicate
-   with purple.  The names and signatures of functions provided by
-   libpurple-client are the same as those in purple.  However, all
-   structures (such as PurpleAccount) are opaque, that is, you can only
-   use pointer to them.  In fact, these pointers DO NOT actually point
-   to anything, they are just integer identifiers of assigned to these
-   structures by purple.  So NEVER try to dereference these pointers.
-   Integer ids as disguised as pointers to provide type checking and
-   prevent mistakes such as passing an id of PurpleAccount when an id of
-   PurpleBuddy is expected.  According to glib manual, this technique is
-   portable.
-*/
-
-int main (int argc, char **argv)
-{
-	GList *alist, *node;
-
-	purple_init();
-
-	alist = purple_accounts_get_all();
-	for (node = alist; node != NULL; node = node->next)
-	{
-		PurpleAccount *account = (PurpleAccount*) node->data;
-		char *name = purple_account_get_username(account);
-		g_print("Name: %s\n", name);
-		g_free(name);
-	}
-	g_list_free(alist);
-
-	return 0;
-}
--- a/libpurple/gaim-client.c	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#define DBUS_API_SUBJECT_TO_CHANGE
-
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "dbus-purple.h"
-#include "purple-client-bindings.h"
-
-static DBusGConnection *bus;
-static DBusGProxy *purple_proxy;
-
-static GList *garray_int_to_glist(GArray *array)
-{
-	GList *list = NULL;
-	int i;
-
-	for (i = 0; i < array->len; i++)
-		list = g_list_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
-
-	g_array_free(array, TRUE);
-	return list;
-}
-
-static GSList *garray_int_to_gslist(GArray *array)
-{
-	GSList *list = NULL;
-	int i;
-
-	for (i = 0; i < array->len; i++)
-		list = g_slist_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
-
-	g_array_free(array, TRUE);
-	return list;
-}
-
-#include "purple-client-bindings.c"
-
-static void lose(const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-static void lose_gerror(const char *prefix, GError *error) G_GNUC_NORETURN;
-
-static void
-lose(const char *str, ...)
-{
-	va_list args;
-
-	va_start(args, str);
-
-	vfprintf(stderr, str, args);
-	fputc('\n', stderr);
-
-	va_end(args);
-
-	exit(1);
-}
-
-static void
-lose_gerror(const char *prefix, GError *error)
-{
-	lose("%s: %s", prefix, error->message);
-}
-
-void purple_init(void)
-{
-	GError *error = NULL;
-
-	g_type_init ();
-
-	bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-	if (!bus)
-		lose_gerror ("Couldn't connect to session bus", error);
-
-	purple_proxy = dbus_g_proxy_new_for_name (bus,
-					DBUS_SERVICE_PURPLE,
-					DBUS_PATH_PURPLE,
-					DBUS_INTERFACE_PURPLE);
-
-	if (!purple_proxy)
-		lose_gerror ("Couldn't connect to the Purple Service", error);
-}
-
--- a/libpurple/gaim-compat.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/gaim-compat.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /**
- * @file purple-compat.h Purple Compat macros
+ * @file gaim-compat.h Gaim Compat macros
  * @ingroup core
  *
  * pidgin
@@ -24,2254 +24,2284 @@
  *
  * @see @ref account-signals
  */
-#ifndef _PURPLE_COMPAT_H_
-#define _PURPLE_COMPAT_H_
+#ifndef _GAIM_COMPAT_H_
+#define _GAIM_COMPAT_H_
 
 /* from account.h */
-#define PurpleAccountUiOps PurpleAccountUiOps
-#define PurpleAccount PurpleAccount
-
-#define PurpleFilterAccountFunc PurpleFilterAccountFunc
-#define PurpleAccountRequestAuthorizationCb PurpleAccountRequestAuthorizationCb
-
-#define purple_account_new           purple_account_new
-#define purple_account_destroy       purple_account_destroy
-#define purple_account_connect       purple_account_connect
-#define purple_account_register      purple_account_register
-#define purple_account_disconnect    purple_account_disconnect
-#define purple_account_notify_added  purple_account_notify_added
-#define purple_account_request_add   purple_account_request_add
-
-#define purple_account_request_authorization     purple_account_request_authorization
-#define purple_account_request_change_password   purple_account_request_change_password
-#define purple_account_request_change_user_info  purple_account_request_change_user_info
-
-#define purple_account_set_username            purple_account_set_username
-#define purple_account_set_password            purple_account_set_password
-#define purple_account_set_alias               purple_account_set_alias
-#define purple_account_set_user_info           purple_account_set_user_info
-#define purple_account_set_buddy_icon          purple_account_set_buddy_icon
-#define purple_account_set_buddy_icon_path     purple_account_set_buddy_icon_path
-#define purple_account_set_protocol_id         purple_account_set_protocol_id
-#define purple_account_set_connection          purple_account_set_connection
-#define purple_account_set_remember_password   purple_account_set_remember_password
-#define purple_account_set_check_mail          purple_account_set_check_mail
-#define purple_account_set_enabled             purple_account_set_enabled
-#define purple_account_set_proxy_info          purple_account_set_proxy_info
-#define purple_account_set_status_types        purple_account_set_status_types
-#define purple_account_set_status              purple_account_set_status
-#define purple_account_set_status_list         purple_account_set_status_list
-
-#define purple_account_clear_settings   purple_account_clear_settings
-
-#define purple_account_set_int    purple_account_set_int
-#define purple_account_set_string purple_account_set_string
-#define purple_account_set_bool   purple_account_set_bool
-
-#define purple_account_set_ui_int     purple_account_set_ui_int
-#define purple_account_set_ui_string  purple_account_set_ui_string
-#define purple_account_set_ui_bool    purple_account_set_ui_bool
-
-#define purple_account_is_connected     purple_account_is_connected
-#define purple_account_is_connecting    purple_account_is_connecting
-#define purple_account_is_disconnected  purple_account_is_disconnected
-
-#define purple_account_get_username           purple_account_get_username
-#define purple_account_get_password           purple_account_get_password
-#define purple_account_get_alias              purple_account_get_alias
-#define purple_account_get_user_info          purple_account_get_user_info
-#define purple_account_get_buddy_icon         purple_account_get_buddy_icon
-#define purple_account_get_buddy_icon_path    purple_account_get_buddy_icon_path
-#define purple_account_get_protocol_id        purple_account_get_protocol_id
-#define purple_account_get_protocol_name      purple_account_get_protocol_name
-#define purple_account_get_connection         purple_account_get_connection
-#define purple_account_get_remember_password  purple_account_get_remember_password
-#define purple_account_get_check_mail         purple_account_get_check_mail
-#define purple_account_get_enabled            purple_account_get_enabled
-#define purple_account_get_proxy_info         purple_account_get_proxy_info
-#define purple_account_get_active_status      purple_account_get_active_status
-#define purple_account_get_status             purple_account_get_status
-#define purple_account_get_status_type        purple_account_get_status_type
-#define purple_account_get_status_type_with_primitive \
+#define GaimAccountUiOps PurpleAccountUiOps
+#define GaimAccount PurpleAccount
+
+#define GaimFilterAccountFunc PurpleFilterAccountFunc
+#define GaimAccountRequestAuthorizationCb PurpleAccountRequestAuthorizationCb
+
+#define gaim_account_new           purple_account_new
+#define gaim_account_destroy       purple_account_destroy
+#define gaim_account_connect       purple_account_connect
+#define gaim_account_register      purple_account_register
+#define gaim_account_disconnect    purple_account_disconnect
+#define gaim_account_notify_added  purple_account_notify_added
+#define gaim_account_request_add   purple_account_request_add
+#define gaim_account_request_close   purple_account_request_close
+
+#define gaim_account_request_authorization     purple_account_request_authorization
+#define gaim_account_request_change_password   purple_account_request_change_password
+#define gaim_account_request_change_user_info  purple_account_request_change_user_info
+
+#define gaim_account_set_username            purple_account_set_username
+#define gaim_account_set_password            purple_account_set_password
+#define gaim_account_set_alias               purple_account_set_alias
+#define gaim_account_set_user_info           purple_account_set_user_info
+#define gaim_account_set_buddy_icon          purple_account_set_buddy_icon
+#define gaim_account_set_buddy_icon_path     purple_account_set_buddy_icon_path
+#define gaim_account_set_protocol_id         purple_account_set_protocol_id
+#define gaim_account_set_connection          purple_account_set_connection
+#define gaim_account_set_remember_password   purple_account_set_remember_password
+#define gaim_account_set_check_mail          purple_account_set_check_mail
+#define gaim_account_set_enabled             purple_account_set_enabled
+#define gaim_account_set_proxy_info          purple_account_set_proxy_info
+#define gaim_account_set_status_types        purple_account_set_status_types
+#define gaim_account_set_status              purple_account_set_status
+#define gaim_account_set_status_list         purple_account_set_status_list
+
+#define gaim_account_clear_settings   purple_account_clear_settings
+
+#define gaim_account_set_int    purple_account_set_int
+#define gaim_account_set_string purple_account_set_string
+#define gaim_account_set_bool   purple_account_set_bool
+
+#define gaim_account_set_ui_int     purple_account_set_ui_int
+#define gaim_account_set_ui_string  purple_account_set_ui_string
+#define gaim_account_set_ui_bool    purple_account_set_ui_bool
+
+#define gaim_account_is_connected     purple_account_is_connected
+#define gaim_account_is_connecting    purple_account_is_connecting
+#define gaim_account_is_disconnected  purple_account_is_disconnected
+
+#define gaim_account_get_username           purple_account_get_username
+#define gaim_account_get_password           purple_account_get_password
+#define gaim_account_get_alias              purple_account_get_alias
+#define gaim_account_get_user_info          purple_account_get_user_info
+#define gaim_account_get_buddy_icon         purple_account_get_buddy_icon
+#define gaim_account_get_buddy_icon_path    purple_account_get_buddy_icon_path
+#define gaim_account_get_protocol_id        purple_account_get_protocol_id
+#define gaim_account_get_protocol_name      purple_account_get_protocol_name
+#define gaim_account_get_connection         purple_account_get_connection
+#define gaim_account_get_remember_password  purple_account_get_remember_password
+#define gaim_account_get_check_mail         purple_account_get_check_mail
+#define gaim_account_get_enabled            purple_account_get_enabled
+#define gaim_account_get_proxy_info         purple_account_get_proxy_info
+#define gaim_account_get_active_status      purple_account_get_active_status
+#define gaim_account_get_status             purple_account_get_status
+#define gaim_account_get_status_type        purple_account_get_status_type
+#define gaim_account_get_status_type_with_primitive \
 	purple_account_get_status_type_with_primitive
 
-#define purple_account_get_presence       purple_account_get_presence
-#define purple_account_is_status_active   purple_account_is_status_active
-#define purple_account_get_status_types   purple_account_get_status_types
-
-#define purple_account_get_int            purple_account_get_int
-#define purple_account_get_string         purple_account_get_string
-#define purple_account_get_bool           purple_account_get_bool
-
-#define purple_account_get_ui_int     purple_account_get_ui_int
-#define purple_account_get_ui_string  purple_account_get_ui_string
-#define purple_account_get_ui_bool    purple_account_get_ui_bool
-
-
-#define purple_account_get_log      purple_account_get_log
-#define purple_account_destroy_log  purple_account_destroy_log
-
-#define purple_account_add_buddy       purple_account_add_buddy
-#define purple_account_add_buddies     purple_account_add_buddies
-#define purple_account_remove_buddy    purple_account_remove_buddy
-#define purple_account_remove_buddies  purple_account_remove_buddies
-
-#define purple_account_remove_group  purple_account_remove_group
-
-#define purple_account_change_password  purple_account_change_password
-
-#define purple_account_supports_offline_message  purple_account_supports_offline_message
-
-#define purple_accounts_add      purple_accounts_add
-#define purple_accounts_remove   purple_accounts_remove
-#define purple_accounts_delete   purple_accounts_delete
-#define purple_accounts_reorder  purple_accounts_reorder
-
-#define purple_accounts_get_all         purple_accounts_get_all
-#define purple_accounts_get_all_active  purple_accounts_get_all_active
-
-#define purple_accounts_find   purple_accounts_find
-
-#define purple_accounts_restore_current_statuses  purple_accounts_restore_current_statuses
-
-#define purple_accounts_set_ui_ops  purple_accounts_set_ui_ops
-#define purple_accounts_get_ui_ops  purple_accounts_get_ui_ops
-
-#define purple_accounts_get_handle  purple_accounts_get_handle
-
-#define purple_accounts_init    purple_accounts_init
-#define purple_accounts_uninit  purple_accounts_uninit
+#define gaim_account_get_presence       purple_account_get_presence
+#define gaim_account_is_status_active   purple_account_is_status_active
+#define gaim_account_get_status_types   purple_account_get_status_types
+
+#define gaim_account_get_int            purple_account_get_int
+#define gaim_account_get_string         purple_account_get_string
+#define gaim_account_get_bool           purple_account_get_bool
+
+#define gaim_account_get_ui_int     purple_account_get_ui_int
+#define gaim_account_get_ui_string  purple_account_get_ui_string
+#define gaim_account_get_ui_bool    purple_account_get_ui_bool
+
+
+#define gaim_account_get_log      purple_account_get_log
+#define gaim_account_destroy_log  purple_account_destroy_log
+
+#define gaim_account_add_buddy       purple_account_add_buddy
+#define gaim_account_add_buddies     purple_account_add_buddies
+#define gaim_account_remove_buddy    purple_account_remove_buddy
+#define gaim_account_remove_buddies  purple_account_remove_buddies
+
+#define gaim_account_remove_group  purple_account_remove_group
+
+#define gaim_account_change_password  purple_account_change_password
+
+#define gaim_account_supports_offline_message  purple_account_supports_offline_message
+
+#define gaim_accounts_add      purple_accounts_add
+#define gaim_accounts_remove   purple_accounts_remove
+#define gaim_accounts_delete   purple_accounts_delete
+#define gaim_accounts_reorder  purple_accounts_reorder
+
+#define gaim_accounts_get_all         purple_accounts_get_all
+#define gaim_accounts_get_all_active  purple_accounts_get_all_active
+
+#define gaim_accounts_find   purple_accounts_find
+
+#define gaim_accounts_restore_current_statuses  purple_accounts_restore_current_statuses
+
+#define gaim_accounts_set_ui_ops  purple_accounts_set_ui_ops
+#define gaim_accounts_get_ui_ops  purple_accounts_get_ui_ops
+
+#define gaim_accounts_get_handle  purple_accounts_get_handle
+
+#define gaim_accounts_init    purple_accounts_init
+#define gaim_accounts_uninit  purple_accounts_uninit
 
 /* from accountopt.h */
 
-#define PurpleAccountOption     PurpleAccountOption
-#define PurpleAccountUserSplit  PurpleAccountUserSplit
-
-#define purple_account_option_new         purple_account_option_new
-#define purple_account_option_bool_new    purple_account_option_bool_new
-#define purple_account_option_int_new     purple_account_option_int_new
-#define purple_account_option_string_new  purple_account_option_string_new
-#define purple_account_option_list_new    purple_account_option_list_new
-
-#define purple_account_option_destroy  purple_account_option_destroy
-
-#define purple_account_option_set_default_bool    purple_account_option_set_default_bool
-#define purple_account_option_set_default_int     purple_account_option_set_default_int
-#define purple_account_option_set_default_string  purple_account_option_set_default_string
-
-#define purple_account_option_set_masked  purple_account_option_set_masked
-
-#define purple_account_option_set_list  purple_account_option_set_list
-
-#define purple_account_option_add_list_item  purple_account_option_add_list_item
-
-#define purple_account_option_get_type     purple_account_option_get_type
-#define purple_account_option_get_text     purple_account_option_get_text
-#define purple_account_option_get_setting  purple_account_option_get_setting
-
-#define purple_account_option_get_default_bool        purple_account_option_get_default_bool
-#define purple_account_option_get_default_int         purple_account_option_get_default_int
-#define purple_account_option_get_default_string      purple_account_option_get_default_string
-#define purple_account_option_get_default_list_value  purple_account_option_get_default_list_value
-
-#define purple_account_option_get_masked  purple_account_option_get_masked
-#define purple_account_option_get_list    purple_account_option_get_list
-
-#define purple_account_user_split_new      purple_account_user_split_new
-#define purple_account_user_split_destroy  purple_account_user_split_destroy
-
-#define purple_account_user_split_get_text           purple_account_user_split_get_text
-#define purple_account_user_split_get_default_value  purple_account_user_split_get_default_value
-#define purple_account_user_split_get_separator      purple_account_user_split_get_separator
+#define GaimAccountOption     PurpleAccountOption
+#define GaimAccountUserSplit  PurpleAccountUserSplit
+
+#define gaim_account_option_new         purple_account_option_new
+#define gaim_account_option_bool_new    purple_account_option_bool_new
+#define gaim_account_option_int_new     purple_account_option_int_new
+#define gaim_account_option_string_new  purple_account_option_string_new
+#define gaim_account_option_list_new    purple_account_option_list_new
+
+#define gaim_account_option_destroy  purple_account_option_destroy
+
+#define gaim_account_option_set_default_bool    purple_account_option_set_default_bool
+#define gaim_account_option_set_default_int     purple_account_option_set_default_int
+#define gaim_account_option_set_default_string  purple_account_option_set_default_string
+
+#define gaim_account_option_set_masked  purple_account_option_set_masked
+
+#define gaim_account_option_set_list  purple_account_option_set_list
+
+#define gaim_account_option_add_list_item  purple_account_option_add_list_item
+
+#define gaim_account_option_get_type     purple_account_option_get_type
+#define gaim_account_option_get_text     purple_account_option_get_text
+#define gaim_account_option_get_setting  purple_account_option_get_setting
+
+#define gaim_account_option_get_default_bool        purple_account_option_get_default_bool
+#define gaim_account_option_get_default_int         purple_account_option_get_default_int
+#define gaim_account_option_get_default_string      purple_account_option_get_default_string
+#define gaim_account_option_get_default_list_value  purple_account_option_get_default_list_value
+
+#define gaim_account_option_get_masked  purple_account_option_get_masked
+#define gaim_account_option_get_list    purple_account_option_get_list
+
+#define gaim_account_user_split_new      purple_account_user_split_new
+#define gaim_account_user_split_destroy  purple_account_user_split_destroy
+
+#define gaim_account_user_split_get_text           purple_account_user_split_get_text
+#define gaim_account_user_split_get_default_value  purple_account_user_split_get_default_value
+#define gaim_account_user_split_get_separator      purple_account_user_split_get_separator
 
 /* from blist.h */
 
-#define PurpleBuddyList    PurpleBuddyList
-#define PurpleBlistUiOps   PurpleBlistUiOps
-#define PurpleBlistNode    PurpleBlistNode
-
-#define PurpleChat     PurpleChat
-#define PurpleGroup    PurpleGroup
-#define PurpleContact  PurpleContact
-#define PurpleBuddy    PurpleBuddy
-
-#define PURPLE_BLIST_GROUP_NODE     PURPLE_BLIST_GROUP_NODE
-#define PURPLE_BLIST_CONTACT_NODE   PURPLE_BLIST_CONTACT_NODE
-#define PURPLE_BLIST_BUDDY_NODE     PURPLE_BLIST_BUDDY_NODE
-#define PURPLE_BLIST_CHAT_NODE      PURPLE_BLIST_CHAT_NODE
-#define PURPLE_BLIST_OTHER_NODE     PURPLE_BLIST_OTHER_NODE
-#define PurpleBlistNodeType         PurpleBlistNodeType
-
-#define PURPLE_BLIST_NODE_IS_CHAT       PURPLE_BLIST_NODE_IS_CHAT
-#define PURPLE_BLIST_NODE_IS_BUDDY      PURPLE_BLIST_NODE_IS_BUDDY
-#define PURPLE_BLIST_NODE_IS_CONTACT    PURPLE_BLIST_NODE_IS_CONTACT
-#define PURPLE_BLIST_NODE_IS_GROUP      PURPLE_BLIST_NODE_IS_GROUP
-
-#define PURPLE_BUDDY_IS_ONLINE PURPLE_BUDDY_IS_ONLINE
-
-#define PURPLE_BLIST_NODE_FLAG_NO_SAVE  PURPLE_BLIST_NODE_FLAG_NO_SAVE
-#define PurpleBlistNodeFlags            PurpleBlistNodeFlags
-
-#define PURPLE_BLIST_NODE_HAS_FLAG     PURPLE_BLIST_NODE_HAS_FLAG
-#define PURPLE_BLIST_NODE_SHOULD_SAVE  PURPLE_BLIST_NODE_SHOULD_SAVE
-
-#define PURPLE_BLIST_NODE_NAME   PURPLE_BLIST_NODE_NAME
-
-
-#define purple_blist_new  purple_blist_new
-#define purple_set_blist  purple_set_blist
-#define purple_get_blist  purple_get_blist
-
-#define purple_blist_get_root   purple_blist_get_root
-#define purple_blist_node_next  purple_blist_node_next
-
-#define purple_blist_show  purple_blist_show
-
-#define purple_blist_destroy  purple_blist_destroy
-
-#define purple_blist_set_visible  purple_blist_set_visible
-
-#define purple_blist_update_buddy_status  purple_blist_update_buddy_status
-#define purple_blist_update_buddy_icon    purple_blist_update_buddy_icon
-
-
-#define purple_blist_alias_contact       purple_blist_alias_contact
-#define purple_blist_alias_buddy         purple_blist_alias_buddy
-#define purple_blist_server_alias_buddy  purple_blist_server_alias_buddy
-#define purple_blist_alias_chat          purple_blist_alias_chat
-
-#define purple_blist_rename_buddy  purple_blist_rename_buddy
-#define purple_blist_rename_group  purple_blist_rename_group
-
-#define purple_chat_new        purple_chat_new
-#define purple_blist_add_chat  purple_blist_add_chat
-
-#define purple_buddy_new           purple_buddy_new
-#define purple_buddy_set_icon      purple_buddy_set_icon
-#define purple_buddy_get_account   purple_buddy_get_account
-#define purple_buddy_get_name      purple_buddy_get_name
-#define purple_buddy_get_icon      purple_buddy_get_icon
-#define purple_buddy_get_contact   purple_buddy_get_contact
-#define purple_buddy_get_presence  purple_buddy_get_presence
-
-#define purple_blist_add_buddy  purple_blist_add_buddy
-
-#define purple_group_new  purple_group_new
-
-#define purple_blist_add_group  purple_blist_add_group
-
-#define purple_contact_new  purple_contact_new
-
-#define purple_blist_add_contact    purple_blist_add_contact
-#define purple_blist_merge_contact  purple_blist_merge_contact
-
-#define purple_contact_get_priority_buddy  purple_contact_get_priority_buddy
-#define purple_contact_set_alias           purple_contact_set_alias
-#define purple_contact_get_alias           purple_contact_get_alias
-#define purple_contact_on_account          purple_contact_on_account
-
-#define purple_contact_invalidate_priority_buddy  purple_contact_invalidate_priority_buddy
-
-#define purple_blist_remove_buddy    purple_blist_remove_buddy
-#define purple_blist_remove_contact  purple_blist_remove_contact
-#define purple_blist_remove_chat     purple_blist_remove_chat
-#define purple_blist_remove_group    purple_blist_remove_group
-
-#define purple_buddy_get_alias_only     purple_buddy_get_alias_only
-#define purple_buddy_get_server_alias   purple_buddy_get_server_alias
-#define purple_buddy_get_contact_alias  purple_buddy_get_contact_alias
-#define purple_buddy_get_local_alias    purple_buddy_get_local_alias
-#define purple_buddy_get_alias          purple_buddy_get_alias
-
-#define purple_chat_get_name  purple_chat_get_name
-
-#define purple_find_buddy           purple_find_buddy
-#define purple_find_buddy_in_group  purple_find_buddy_in_group
-#define purple_find_buddies         purple_find_buddies
-
-#define purple_find_group  purple_find_group
-
-#define purple_blist_find_chat  purple_blist_find_chat
-
-#define purple_chat_get_group   purple_chat_get_group
-#define purple_buddy_get_group  purple_buddy_get_group
-
-#define purple_group_get_accounts  purple_group_get_accounts
-#define purple_group_on_account    purple_group_on_account
-
-#define purple_blist_add_account     purple_blist_add_account
-#define purple_blist_remove_account  purple_blist_remove_account
-
-#define purple_blist_get_group_size          purple_blist_get_group_size
-#define purple_blist_get_group_online_count  purple_blist_get_group_online_count
-
-#define purple_blist_load           purple_blist_load
-#define purple_blist_schedule_save  purple_blist_schedule_save
-
-#define purple_blist_request_add_buddy  purple_blist_request_add_buddy
-#define purple_blist_request_add_chat   purple_blist_request_add_chat
-#define purple_blist_request_add_group  purple_blist_request_add_group
-
-#define purple_blist_node_set_bool    purple_blist_node_set_bool
-#define purple_blist_node_get_bool    purple_blist_node_get_bool
-#define purple_blist_node_set_int     purple_blist_node_set_int
-#define purple_blist_node_get_int     purple_blist_node_get_int
-#define purple_blist_node_set_string  purple_blist_node_set_string
-#define purple_blist_node_get_string  purple_blist_node_get_string
-
-#define purple_blist_node_remove_setting  purple_blist_node_remove_setting
-
-#define purple_blist_node_set_flags  purple_blist_node_set_flags
-#define purple_blist_node_get_flags  purple_blist_node_get_flags
-
-#define purple_blist_node_get_extended_menu  purple_blist_node_get_extended_menu
-
-#define purple_blist_set_ui_ops  purple_blist_set_ui_ops
-#define purple_blist_get_ui_ops  purple_blist_get_ui_ops
-
-#define purple_blist_get_handle  purple_blist_get_handle
-
-#define purple_blist_init    purple_blist_init
-#define purple_blist_uninit  purple_blist_uninit
-
-
-#define PurpleBuddyIcon  PurpleBuddyIcon
-
-#define purple_buddy_icon_new      purple_buddy_icon_new
-#define purple_buddy_icon_destroy  purple_buddy_icon_destroy
-#define purple_buddy_icon_ref      purple_buddy_icon_ref
-#define purple_buddy_icon_unref    purple_buddy_icon_unref
-#define purple_buddy_icon_update   purple_buddy_icon_update
-#define purple_buddy_icon_cache    purple_buddy_icon_cache
-#define purple_buddy_icon_uncache  purple_buddy_icon_uncache
-
-#define purple_buddy_icon_set_account   purple_buddy_icon_set_account
-#define purple_buddy_icon_set_username  purple_buddy_icon_set_username
-#define purple_buddy_icon_set_data      purple_buddy_icon_set_data
-#define purple_buddy_icon_set_path      purple_buddy_icon_set_path
-
-#define purple_buddy_icon_get_account   purple_buddy_icon_get_account
-#define purple_buddy_icon_get_username  purple_buddy_icon_get_username
-#define purple_buddy_icon_get_data      purple_buddy_icon_get_data
-#define purple_buddy_icon_get_path      purple_buddy_icon_get_path
-#define purple_buddy_icon_get_type      purple_buddy_icon_get_type
-
-#define purple_buddy_icons_set_for_user   purple_buddy_icons_set_for_user
-#define purple_buddy_icons_find           purple_buddy_icons_find
-#define purple_buddy_icons_set_caching    purple_buddy_icons_set_caching
-#define purple_buddy_icons_is_caching     purple_buddy_icons_is_caching
-#define purple_buddy_icons_set_cache_dir  purple_buddy_icons_set_cache_dir
-#define purple_buddy_icons_get_cache_dir  purple_buddy_icons_get_cache_dir
-#define purple_buddy_icons_get_full_path  purple_buddy_icons_get_full_path
-#define purple_buddy_icons_get_handle     purple_buddy_icons_get_handle
-
-#define purple_buddy_icons_init    purple_buddy_icons_init
-#define purple_buddy_icons_uninit  purple_buddy_icons_uninit
-
-#define purple_buddy_icon_get_scale_size  purple_buddy_icon_get_scale_size
+#define GaimBuddyList    PurpleBuddyList
+#define GaimBlistUiOps   PurpleBlistUiOps
+#define GaimBlistNode    PurpleBlistNode
+
+#define GaimChat     PurpleChat
+#define GaimGroup    PurpleGroup
+#define GaimContact  PurpleContact
+#define GaimBuddy    PurpleBuddy
+
+#define GAIM_BLIST_GROUP_NODE     PURPLE_BLIST_GROUP_NODE
+#define GAIM_BLIST_CONTACT_NODE   PURPLE_BLIST_CONTACT_NODE
+#define GAIM_BLIST_BUDDY_NODE     PURPLE_BLIST_BUDDY_NODE
+#define GAIM_BLIST_CHAT_NODE      PURPLE_BLIST_CHAT_NODE
+#define GAIM_BLIST_OTHER_NODE     PURPLE_BLIST_OTHER_NODE
+#define GaimBlistNodeType         PurpleBlistNodeType
+
+#define GAIM_BLIST_NODE_IS_CHAT       PURPLE_BLIST_NODE_IS_CHAT
+#define GAIM_BLIST_NODE_IS_BUDDY      PURPLE_BLIST_NODE_IS_BUDDY
+#define GAIM_BLIST_NODE_IS_CONTACT    PURPLE_BLIST_NODE_IS_CONTACT
+#define GAIM_BLIST_NODE_IS_GROUP      PURPLE_BLIST_NODE_IS_GROUP
+
+#define GAIM_BUDDY_IS_ONLINE PURPLE_BUDDY_IS_ONLINE
+
+#define GAIM_BLIST_NODE_FLAG_NO_SAVE  PURPLE_BLIST_NODE_FLAG_NO_SAVE
+#define GaimBlistNodeFlags            PurpleBlistNodeFlags
+
+#define GAIM_BLIST_NODE_HAS_FLAG     PURPLE_BLIST_NODE_HAS_FLAG
+#define GAIM_BLIST_NODE_SHOULD_SAVE  PURPLE_BLIST_NODE_SHOULD_SAVE
+
+#define GAIM_BLIST_NODE_NAME   PURPLE_BLIST_NODE_NAME
+
+
+#define gaim_blist_new  purple_blist_new
+#define gaim_set_blist  purple_set_blist
+#define gaim_get_blist  purple_get_blist
+
+#define gaim_blist_get_root   purple_blist_get_root
+#define gaim_blist_node_next  purple_blist_node_next
+
+#define gaim_blist_show  purple_blist_show
+
+#define gaim_blist_destroy  purple_blist_destroy
+
+#define gaim_blist_set_visible  purple_blist_set_visible
+
+#define gaim_blist_update_buddy_status  purple_blist_update_buddy_status
+#define gaim_blist_update_buddy_icon    purple_blist_update_buddy_icon
+
+
+#define gaim_blist_alias_contact       purple_blist_alias_contact
+#define gaim_blist_alias_buddy         purple_blist_alias_buddy
+#define gaim_blist_server_alias_buddy  purple_blist_server_alias_buddy
+#define gaim_blist_alias_chat          purple_blist_alias_chat
+
+#define gaim_blist_rename_buddy  purple_blist_rename_buddy
+#define gaim_blist_rename_group  purple_blist_rename_group
+
+#define gaim_chat_new        purple_chat_new
+#define gaim_blist_add_chat  purple_blist_add_chat
+
+#define gaim_buddy_new           purple_buddy_new
+#define gaim_buddy_set_icon      purple_buddy_set_icon
+#define gaim_buddy_get_account   purple_buddy_get_account
+#define gaim_buddy_get_name      purple_buddy_get_name
+#define gaim_buddy_get_icon      purple_buddy_get_icon
+#define gaim_buddy_get_contact   purple_buddy_get_contact
+#define gaim_buddy_get_presence  purple_buddy_get_presence
+
+#define gaim_blist_add_buddy  purple_blist_add_buddy
+
+#define gaim_group_new  purple_group_new
+
+#define gaim_blist_add_group  purple_blist_add_group
+
+#define gaim_contact_new  purple_contact_new
+
+#define gaim_blist_add_contact    purple_blist_add_contact
+#define gaim_blist_merge_contact  purple_blist_merge_contact
+
+#define gaim_contact_get_priority_buddy  purple_contact_get_priority_buddy
+#define gaim_contact_set_alias           purple_contact_set_alias
+#define gaim_contact_get_alias           purple_contact_get_alias
+#define gaim_contact_on_account          purple_contact_on_account
+
+#define gaim_contact_invalidate_priority_buddy  purple_contact_invalidate_priority_buddy
+
+#define gaim_blist_remove_buddy    purple_blist_remove_buddy
+#define gaim_blist_remove_contact  purple_blist_remove_contact
+#define gaim_blist_remove_chat     purple_blist_remove_chat
+#define gaim_blist_remove_group    purple_blist_remove_group
+
+#define gaim_buddy_get_alias_only     purple_buddy_get_alias_only
+#define gaim_buddy_get_server_alias   purple_buddy_get_server_alias
+#define gaim_buddy_get_contact_alias  purple_buddy_get_contact_alias
+#define gaim_buddy_get_local_alias    purple_buddy_get_local_alias
+#define gaim_buddy_get_alias          purple_buddy_get_alias
+
+#define gaim_chat_get_name  purple_chat_get_name
+
+#define gaim_find_buddy           purple_find_buddy
+#define gaim_find_buddy_in_group  purple_find_buddy_in_group
+#define gaim_find_buddies         purple_find_buddies
+
+#define gaim_find_group  purple_find_group
+
+#define gaim_blist_find_chat  purple_blist_find_chat
+
+#define gaim_chat_get_group   purple_chat_get_group
+#define gaim_buddy_get_group  purple_buddy_get_group
+
+#define gaim_group_get_accounts  purple_group_get_accounts
+#define gaim_group_on_account    purple_group_on_account
+
+#define gaim_blist_add_account     purple_blist_add_account
+#define gaim_blist_remove_account  purple_blist_remove_account
+
+#define gaim_blist_get_group_size          purple_blist_get_group_size
+#define gaim_blist_get_group_online_count  purple_blist_get_group_online_count
+
+#define gaim_blist_load           purple_blist_load
+#define gaim_blist_schedule_save  purple_blist_schedule_save
+
+#define gaim_blist_request_add_buddy  purple_blist_request_add_buddy
+#define gaim_blist_request_add_chat   purple_blist_request_add_chat
+#define gaim_blist_request_add_group  purple_blist_request_add_group
+
+#define gaim_blist_node_set_bool    purple_blist_node_set_bool
+#define gaim_blist_node_get_bool    purple_blist_node_get_bool
+#define gaim_blist_node_set_int     purple_blist_node_set_int
+#define gaim_blist_node_get_int     purple_blist_node_get_int
+#define gaim_blist_node_set_string  purple_blist_node_set_string
+#define gaim_blist_node_get_string  purple_blist_node_get_string
+
+#define gaim_blist_node_remove_setting  purple_blist_node_remove_setting
+
+#define gaim_blist_node_set_flags  purple_blist_node_set_flags
+#define gaim_blist_node_get_flags  purple_blist_node_get_flags
+
+#define gaim_blist_node_get_extended_menu  purple_blist_node_get_extended_menu
+
+#define gaim_blist_set_ui_ops  purple_blist_set_ui_ops
+#define gaim_blist_get_ui_ops  purple_blist_get_ui_ops
+
+#define gaim_blist_get_handle  purple_blist_get_handle
+
+#define gaim_blist_init    purple_blist_init
+#define gaim_blist_uninit  purple_blist_uninit
+
+
+#define GaimBuddyIcon  PurpleBuddyIcon
+
+#define gaim_buddy_icon_new      purple_buddy_icon_new
+#define gaim_buddy_icon_destroy  purple_buddy_icon_destroy
+#define gaim_buddy_icon_ref      purple_buddy_icon_ref
+#define gaim_buddy_icon_unref    purple_buddy_icon_unref
+#define gaim_buddy_icon_update   purple_buddy_icon_update
+#define gaim_buddy_icon_cache    purple_buddy_icon_cache
+#define gaim_buddy_icon_uncache  purple_buddy_icon_uncache
+
+#define gaim_buddy_icon_set_account   purple_buddy_icon_set_account
+#define gaim_buddy_icon_set_username  purple_buddy_icon_set_username
+#define gaim_buddy_icon_set_data      purple_buddy_icon_set_data
+#define gaim_buddy_icon_set_path      purple_buddy_icon_set_path
+
+#define gaim_buddy_icon_get_account   purple_buddy_icon_get_account
+#define gaim_buddy_icon_get_username  purple_buddy_icon_get_username
+#define gaim_buddy_icon_get_data      purple_buddy_icon_get_data
+#define gaim_buddy_icon_get_path      purple_buddy_icon_get_path
+#define gaim_buddy_icon_get_type      purple_buddy_icon_get_type
+
+#define gaim_buddy_icons_set_for_user   purple_buddy_icons_set_for_user
+#define gaim_buddy_icons_find           purple_buddy_icons_find
+#define gaim_buddy_icons_set_caching    purple_buddy_icons_set_caching
+#define gaim_buddy_icons_is_caching     purple_buddy_icons_is_caching
+#define gaim_buddy_icons_set_cache_dir  purple_buddy_icons_set_cache_dir
+#define gaim_buddy_icons_get_cache_dir  purple_buddy_icons_get_cache_dir
+#define gaim_buddy_icons_get_full_path  purple_buddy_icons_get_full_path
+#define gaim_buddy_icons_get_handle     purple_buddy_icons_get_handle
+
+#define gaim_buddy_icons_init    purple_buddy_icons_init
+#define gaim_buddy_icons_uninit  purple_buddy_icons_uninit
+
+#define gaim_buddy_icon_get_scale_size  purple_buddy_icon_get_scale_size
 
 /* from cipher.h */
 
-#define PURPLE_CIPHER          PURPLE_CIPHER
-#define PURPLE_CIPHER_OPS      PURPLE_CIPHER_OPS
-#define PURPLE_CIPHER_CONTEXT  PURPLE_CIPHER_CONTEXT
-
-#define PurpleCipher         PurpleCipher
-#define PurpleCipherOps      PurpleCipherOps
-#define PurpleCipherContext  PurpleCipherContext
-
-#define PURPLE_CIPHER_CAPS_SET_OPT  PURPLE_CIPHER_CAPS_SET_OPT
-#define PURPLE_CIPHER_CAPS_GET_OPT  PURPLE_CIPHER_CAPS_GET_OPT
-#define PURPLE_CIPHER_CAPS_INIT     PURPLE_CIPHER_CAPS_INIT
-#define PURPLE_CIPHER_CAPS_RESET    PURPLE_CIPHER_CAPS_RESET
-#define PURPLE_CIPHER_CAPS_UNINIT   PURPLE_CIPHER_CAPS_UNINIT
-#define PURPLE_CIPHER_CAPS_SET_IV   PURPLE_CIPHER_CAPS_SET_IV
-#define PURPLE_CIPHER_CAPS_APPEND   PURPLE_CIPHER_CAPS_APPEND
-#define PURPLE_CIPHER_CAPS_DIGEST   PURPLE_CIPHER_CAPS_DIGEST
-#define PURPLE_CIPHER_CAPS_ENCRYPT  PURPLE_CIPHER_CAPS_ENCRYPT
-#define PURPLE_CIPHER_CAPS_DECRYPT  PURPLE_CIPHER_CAPS_DECRYPT
-#define PURPLE_CIPHER_CAPS_SET_SALT  PURPLE_CIPHER_CAPS_SET_SALT
-#define PURPLE_CIPHER_CAPS_GET_SALT_SIZE  PURPLE_CIPHER_CAPS_GET_SALT_SIZE
-#define PURPLE_CIPHER_CAPS_SET_KEY        PURPLE_CIPHER_CAPS_SET_KEY
-#define PURPLE_CIPHER_CAPS_GET_KEY_SIZE   PURPLE_CIPHER_CAPS_GET_KEY_SIZE
-#define PURPLE_CIPHER_CAPS_UNKNOWN        PURPLE_CIPHER_CAPS_UNKNOWN
-
-#define purple_cipher_get_name          purple_cipher_get_name
-#define purple_cipher_get_capabilities  purple_cipher_get_capabilities
-#define purple_cipher_digest_region     purple_cipher_digest_region
-
-#define purple_ciphers_find_cipher        purple_ciphers_find_cipher
-#define purple_ciphers_register_cipher    purple_ciphers_register_cipher
-#define purple_ciphers_unregister_cipher  purple_ciphers_unregister_cipher
-#define purple_ciphers_get_ciphers        purple_ciphers_get_ciphers
-
-#define purple_ciphers_get_handle  purple_ciphers_get_handle
-#define purple_ciphers_init        purple_ciphers_init
-#define purple_ciphers_uninit      purple_ciphers_uninit
-
-#define purple_cipher_context_set_option  purple_cipher_context_set_option
-#define purple_cipher_context_get_option  purple_cipher_context_get_option
-
-#define purple_cipher_context_new            purple_cipher_context_new
-#define purple_cipher_context_new_by_name    purple_cipher_context_new_by_name
-#define purple_cipher_context_reset          purple_cipher_context_reset
-#define purple_cipher_context_destroy        purple_cipher_context_destroy
-#define purple_cipher_context_set_iv         purple_cipher_context_set_iv
-#define purple_cipher_context_append         purple_cipher_context_append
-#define purple_cipher_context_digest         purple_cipher_context_digest
-#define purple_cipher_context_digest_to_str  purple_cipher_context_digest_to_str
-#define purple_cipher_context_encrypt        purple_cipher_context_encrypt
-#define purple_cipher_context_decrypt        purple_cipher_context_decrypt
-#define purple_cipher_context_set_salt       purple_cipher_context_set_salt
-#define purple_cipher_context_get_salt_size  purple_cipher_context_get_salt_size
-#define purple_cipher_context_set_key        purple_cipher_context_set_key
-#define purple_cipher_context_get_key_size   purple_cipher_context_get_key_size
-#define purple_cipher_context_set_data       purple_cipher_context_set_data
-#define purple_cipher_context_get_data       purple_cipher_context_get_data
-
-#define purple_cipher_http_digest_calculate_session_key \
+#define GAIM_CIPHER          PURPLE_CIPHER
+#define GAIM_CIPHER_OPS      PURPLE_CIPHER_OPS
+#define GAIM_CIPHER_CONTEXT  PURPLE_CIPHER_CONTEXT
+
+#define GaimCipher         PurpleCipher
+#define GaimCipherOps      PurpleCipherOps
+#define GaimCipherContext  PurpleCipherContext
+
+#define GAIM_CIPHER_CAPS_SET_OPT  PURPLE_CIPHER_CAPS_SET_OPT
+#define GAIM_CIPHER_CAPS_GET_OPT  PURPLE_CIPHER_CAPS_GET_OPT
+#define GAIM_CIPHER_CAPS_INIT     PURPLE_CIPHER_CAPS_INIT
+#define GAIM_CIPHER_CAPS_RESET    PURPLE_CIPHER_CAPS_RESET
+#define GAIM_CIPHER_CAPS_UNINIT   PURPLE_CIPHER_CAPS_UNINIT
+#define GAIM_CIPHER_CAPS_SET_IV   PURPLE_CIPHER_CAPS_SET_IV
+#define GAIM_CIPHER_CAPS_APPEND   PURPLE_CIPHER_CAPS_APPEND
+#define GAIM_CIPHER_CAPS_DIGEST   PURPLE_CIPHER_CAPS_DIGEST
+#define GAIM_CIPHER_CAPS_ENCRYPT  PURPLE_CIPHER_CAPS_ENCRYPT
+#define GAIM_CIPHER_CAPS_DECRYPT  PURPLE_CIPHER_CAPS_DECRYPT
+#define GAIM_CIPHER_CAPS_SET_SALT  PURPLE_CIPHER_CAPS_SET_SALT
+#define GAIM_CIPHER_CAPS_GET_SALT_SIZE  PURPLE_CIPHER_CAPS_GET_SALT_SIZE
+#define GAIM_CIPHER_CAPS_SET_KEY        PURPLE_CIPHER_CAPS_SET_KEY
+#define GAIM_CIPHER_CAPS_GET_KEY_SIZE   PURPLE_CIPHER_CAPS_GET_KEY_SIZE
+#define GAIM_CIPHER_CAPS_UNKNOWN        PURPLE_CIPHER_CAPS_UNKNOWN
+
+#define gaim_cipher_get_name          purple_cipher_get_name
+#define gaim_cipher_get_capabilities  purple_cipher_get_capabilities
+#define gaim_cipher_digest_region     purple_cipher_digest_region
+
+#define gaim_ciphers_find_cipher        purple_ciphers_find_cipher
+#define gaim_ciphers_register_cipher    purple_ciphers_register_cipher
+#define gaim_ciphers_unregister_cipher  purple_ciphers_unregister_cipher
+#define gaim_ciphers_get_ciphers        purple_ciphers_get_ciphers
+
+#define gaim_ciphers_get_handle  purple_ciphers_get_handle
+#define gaim_ciphers_init        purple_ciphers_init
+#define gaim_ciphers_uninit      purple_ciphers_uninit
+
+#define gaim_cipher_context_set_option  purple_cipher_context_set_option
+#define gaim_cipher_context_get_option  purple_cipher_context_get_option
+
+#define gaim_cipher_context_new            purple_cipher_context_new
+#define gaim_cipher_context_new_by_name    purple_cipher_context_new_by_name
+#define gaim_cipher_context_reset          purple_cipher_context_reset
+#define gaim_cipher_context_destroy        purple_cipher_context_destroy
+#define gaim_cipher_context_set_iv         purple_cipher_context_set_iv
+#define gaim_cipher_context_append         purple_cipher_context_append
+#define gaim_cipher_context_digest         purple_cipher_context_digest
+#define gaim_cipher_context_digest_to_str  purple_cipher_context_digest_to_str
+#define gaim_cipher_context_encrypt        purple_cipher_context_encrypt
+#define gaim_cipher_context_decrypt        purple_cipher_context_decrypt
+#define gaim_cipher_context_set_salt       purple_cipher_context_set_salt
+#define gaim_cipher_context_get_salt_size  purple_cipher_context_get_salt_size
+#define gaim_cipher_context_set_key        purple_cipher_context_set_key
+#define gaim_cipher_context_get_key_size   purple_cipher_context_get_key_size
+#define gaim_cipher_context_set_data       purple_cipher_context_set_data
+#define gaim_cipher_context_get_data       purple_cipher_context_get_data
+
+#define gaim_cipher_http_digest_calculate_session_key \
 	purple_cipher_http_digest_calculate_session_key
 
-#define purple_cipher_http_digest_calculate_response \
+#define gaim_cipher_http_digest_calculate_response \
 	purple_cipher_http_digest_calculate_response
 
 /* from circbuffer.h */
 
-#define PurpleCircBuffer  PurpleCircBuffer
-
-#define purple_circ_buffer_new           purple_circ_buffer_new
-#define purple_circ_buffer_destroy       purple_circ_buffer_destroy
-#define purple_circ_buffer_append        purple_circ_buffer_append
-#define purple_circ_buffer_get_max_read  purple_circ_buffer_get_max_read
-#define purple_circ_buffer_mark_read     purple_circ_buffer_mark_read
+#define GaimCircBuffer  PurpleCircBuffer
+
+#define gaim_circ_buffer_new           purple_circ_buffer_new
+#define gaim_circ_buffer_destroy       purple_circ_buffer_destroy
+#define gaim_circ_buffer_append        purple_circ_buffer_append
+#define gaim_circ_buffer_get_max_read  purple_circ_buffer_get_max_read
+#define gaim_circ_buffer_mark_read     purple_circ_buffer_mark_read
 
 /* from cmds.h */
 
-#define PurpleCmdPriority  PurpleCmdPriority
-#define PurpleCmdFlag      PurpleCmdFlag
-#define PurpleCmdStatus    PurpleCmdStatus
-#define PurpleCmdRet       PurpleCmdRet
-
-#define PURPLE_CMD_FUNC  PURPLE_CMD_FUNC
-
-#define PurpleCmdFunc  PurpleCmdFunc
-
-#define PurpleCmdId  PurpleCmdId
-
-#define purple_cmd_register    purple_cmd_register
-#define purple_cmd_unregister  purple_cmd_unregister
-#define purple_cmd_do_command  purple_cmd_do_command
-#define purple_cmd_list        purple_cmd_list
-#define purple_cmd_help        purple_cmd_help
+#define GaimCmdPriority  PurpleCmdPriority
+#define GaimCmdFlag      PurpleCmdFlag
+#define GaimCmdStatus    PurpleCmdStatus
+#define GaimCmdRet       PurpleCmdRet
+
+#define GAIM_CMD_STATUS_OK            PURPLE_CMD_STATUS_OK
+#define GAIM_CMD_STATUS_FAILED        PURPLE_CMD_STATUS_FAILED
+#define GAIM_CMD_STATUS_NOT_FOUND     PURPLE_CMD_STATUS_NOT_FOUND
+#define GAIM_CMD_STATUS_WRONG_ARGS    PURPLE_CMD_STATUS_WRONG_ARGS
+#define GAIM_CMD_STATUS_WRONG_PRPL    PURPLE_CMD_STATUS_WRONG_PRPL
+#define GAIM_CMD_STATUS_WRONG_TYPE    PURPLE_CMD_STATUS_WRONG_TYPE
+
+#define GAIM_CMD_FUNC  PURPLE_CMD_FUNC
+
+#define GaimCmdFunc  PurpleCmdFunc
+
+#define GaimCmdId  PurpleCmdId
+
+#define gaim_cmd_register    purple_cmd_register
+#define gaim_cmd_unregister  purple_cmd_unregister
+#define gaim_cmd_do_command  purple_cmd_do_command
+#define gaim_cmd_list        purple_cmd_list
+#define gaim_cmd_help        purple_cmd_help
 
 /* from connection.h */
 
-#define PurpleConnection  PurpleConnection
-
-#define PURPLE_CONNECTION_HTML              PURPLE_CONNECTION_HTML
-#define PURPLE_CONNECTION_NO_BGCOLOR        PURPLE_CONNECTION_NO_BGCOLOR
-#define PURPLE_CONNECTION_AUTO_RESP         PURPLE_CONNECTION_AUTO_RESP
-#define PURPLE_CONNECTION_FORMATTING_WBFO   PURPLE_CONNECTION_FORMATTING_WBFO
-#define PURPLE_CONNECTION_NO_NEWLINES       PURPLE_CONNECTION_NO_NEWLINES
-#define PURPLE_CONNECTION_NO_FONTSIZE       PURPLE_CONNECTION_NO_FONTSIZE
-#define PURPLE_CONNECTION_NO_URLDESC        PURPLE_CONNECTION_NO_URLDESC
-#define PURPLE_CONNECTION_NO_IMAGES         PURPLE_CONNECTION_NO_IMAGES
-
-#define PurpleConnectionFlags  PurpleConnectionFlags
-
-#define PURPLE_DISCONNECTED  PURPLE_DISCONNECTED
-#define PURPLE_CONNECTED     PURPLE_CONNECTED
-#define PURPLE_CONNECTING    PURPLE_CONNECTING
-
-#define PurpleConnectionState  PurpleConnectionState
-
-#define PurpleConnectionUiOps  PurpleConnectionUiOps
-
-#define purple_connection_new      purple_connection_new
-#define purple_connection_destroy  purple_connection_destroy
-
-#define purple_connection_set_state         purple_connection_set_state
-#define purple_connection_set_account       purple_connection_set_account
-#define purple_connection_set_display_name  purple_connection_set_display_name
-#define purple_connection_get_state         purple_connection_get_state
-
-#define PURPLE_CONNECTION_IS_CONNECTED  PURPLE_CONNECTION_IS_CONNECTED
-
-#define purple_connection_get_account       purple_connection_get_account
-#define purple_connection_get_password      purple_connection_get_password
-#define purple_connection_get_display_name  purple_connection_get_display_name
-
-#define purple_connection_update_progress  purple_connection_update_progress
-
-#define purple_connection_notice  purple_connection_notice
-#define purple_connection_error   purple_connection_error
-
-#define purple_connections_disconnect_all  purple_connections_disconnect_all
-
-#define purple_connections_get_all         purple_connections_get_all
-#define purple_connections_get_connecting  purple_connections_get_connecting
-
-#define PURPLE_CONNECTION_IS_VALID  PURPLE_CONNECTION_IS_VALID
-
-#define purple_connections_set_ui_ops  purple_connections_set_ui_ops
-#define purple_connections_get_ui_ops  purple_connections_get_ui_ops
-
-#define purple_connections_init    purple_connections_init
-#define purple_connections_uninit  purple_connections_uninit
-#define purple_connections_get_handle  purple_connections_get_handle
+#define GaimConnection  PurpleConnection
+
+#define GAIM_CONNECTION_HTML              PURPLE_CONNECTION_HTML
+#define GAIM_CONNECTION_NO_BGCOLOR        PURPLE_CONNECTION_NO_BGCOLOR
+#define GAIM_CONNECTION_AUTO_RESP         PURPLE_CONNECTION_AUTO_RESP
+#define GAIM_CONNECTION_FORMATTING_WBFO   PURPLE_CONNECTION_FORMATTING_WBFO
+#define GAIM_CONNECTION_NO_NEWLINES       PURPLE_CONNECTION_NO_NEWLINES
+#define GAIM_CONNECTION_NO_FONTSIZE       PURPLE_CONNECTION_NO_FONTSIZE
+#define GAIM_CONNECTION_NO_URLDESC        PURPLE_CONNECTION_NO_URLDESC
+#define GAIM_CONNECTION_NO_IMAGES         PURPLE_CONNECTION_NO_IMAGES
+
+#define GaimConnectionFlags  PurpleConnectionFlags
+
+#define GAIM_DISCONNECTED  PURPLE_DISCONNECTED
+#define GAIM_CONNECTED     PURPLE_CONNECTED
+#define GAIM_CONNECTING    PURPLE_CONNECTING
+
+#define GaimConnectionState  PurpleConnectionState
+
+#define GaimConnectionUiOps  PurpleConnectionUiOps
+
+#define gaim_connection_new      purple_connection_new
+#define gaim_connection_destroy  purple_connection_destroy
+
+#define gaim_connection_set_state         purple_connection_set_state
+#define gaim_connection_set_account       purple_connection_set_account
+#define gaim_connection_set_display_name  purple_connection_set_display_name
+#define gaim_connection_get_state         purple_connection_get_state
+
+#define GAIM_CONNECTION_IS_CONNECTED  PURPLE_CONNECTION_IS_CONNECTED
+
+#define gaim_connection_get_account       purple_connection_get_account
+#define gaim_connection_get_password      purple_connection_get_password
+#define gaim_connection_get_display_name  purple_connection_get_display_name
+
+#define gaim_connection_update_progress  purple_connection_update_progress
+
+#define gaim_connection_notice  purple_connection_notice
+#define gaim_connection_error   purple_connection_error
+
+#define gaim_connections_disconnect_all  purple_connections_disconnect_all
+
+#define gaim_connections_get_all         purple_connections_get_all
+#define gaim_connections_get_connecting  purple_connections_get_connecting
+
+#define GAIM_CONNECTION_IS_VALID  PURPLE_CONNECTION_IS_VALID
+
+#define gaim_connections_set_ui_ops  purple_connections_set_ui_ops
+#define gaim_connections_get_ui_ops  purple_connections_get_ui_ops
+
+#define gaim_connections_init    purple_connections_init
+#define gaim_connections_uninit  purple_connections_uninit
+#define gaim_connections_get_handle  purple_connections_get_handle
 
 
 /* from conversation.h */
 
-#define PurpleConversationUiOps  PurpleConversationUiOps
-#define PurpleConversation       PurpleConversation
-#define PurpleConvIm             PurpleConvIm
-#define PurpleConvChat           PurpleConvChat
-#define PurpleConvChatBuddy      PurpleConvChatBuddy
-
-#define PURPLE_CONV_TYPE_UNKNOWN  PURPLE_CONV_TYPE_UNKNOWN
-#define PURPLE_CONV_TYPE_IM       PURPLE_CONV_TYPE_IM
-#define PURPLE_CONV_TYPE_CHAT     PURPLE_CONV_TYPE_CHAT
-#define PURPLE_CONV_TYPE_MISC     PURPLE_CONV_TYPE_MISC
-#define PURPLE_CONV_TYPE_ANY      PURPLE_CONV_TYPE_ANY
-
-#define PurpleConversationType  PurpleConversationType
-
-#define PURPLE_CONV_UPDATE_ADD       PURPLE_CONV_UPDATE_ADD
-#define PURPLE_CONV_UPDATE_REMOVE    PURPLE_CONV_UPDATE_REMOVE
-#define PURPLE_CONV_UPDATE_ACCOUNT   PURPLE_CONV_UPDATE_ACCOUNT
-#define PURPLE_CONV_UPDATE_TYPING    PURPLE_CONV_UPDATE_TYPING
-#define PURPLE_CONV_UPDATE_UNSEEN    PURPLE_CONV_UPDATE_UNSEEN
-#define PURPLE_CONV_UPDATE_LOGGING   PURPLE_CONV_UPDATE_LOGGING
-#define PURPLE_CONV_UPDATE_TOPIC     PURPLE_CONV_UPDATE_TOPIC
-#define PURPLE_CONV_ACCOUNT_ONLINE   PURPLE_CONV_ACCOUNT_ONLINE
-#define PURPLE_CONV_ACCOUNT_OFFLINE  PURPLE_CONV_ACCOUNT_OFFLINE
-#define PURPLE_CONV_UPDATE_AWAY      PURPLE_CONV_UPDATE_AWAY
-#define PURPLE_CONV_UPDATE_ICON      PURPLE_CONV_UPDATE_ICON
-#define PURPLE_CONV_UPDATE_TITLE     PURPLE_CONV_UPDATE_TITLE
-#define PURPLE_CONV_UPDATE_CHATLEFT  PURPLE_CONV_UPDATE_CHATLEFT
-#define PURPLE_CONV_UPDATE_FEATURES  PURPLE_CONV_UPDATE_FEATURES
-
-#define PurpleConvUpdateType  PurpleConvUpdateType
-
-#define PURPLE_NOT_TYPING  PURPLE_NOT_TYPING
-#define PURPLE_TYPING      PURPLE_TYPING
-#define PURPLE_TYPED       PURPLE_TYPED
-
-#define PurpleTypingState  PurpleTypingState
-
-#define PURPLE_MESSAGE_SEND         PURPLE_MESSAGE_SEND
-#define PURPLE_MESSAGE_RECV         PURPLE_MESSAGE_RECV
-#define PURPLE_MESSAGE_SYSTEM       PURPLE_MESSAGE_SYSTEM
-#define PURPLE_MESSAGE_AUTO_RESP    PURPLE_MESSAGE_AUTO_RESP
-#define PURPLE_MESSAGE_ACTIVE_ONLY  PURPLE_MESSAGE_ACTIVE_ONLY
-#define PURPLE_MESSAGE_NICK         PURPLE_MESSAGE_NICK
-#define PURPLE_MESSAGE_NO_LOG       PURPLE_MESSAGE_NO_LOG
-#define PURPLE_MESSAGE_WHISPER      PURPLE_MESSAGE_WHISPER
-#define PURPLE_MESSAGE_ERROR        PURPLE_MESSAGE_ERROR
-#define PURPLE_MESSAGE_DELAYED      PURPLE_MESSAGE_DELAYED
-#define PURPLE_MESSAGE_RAW          PURPLE_MESSAGE_RAW
-#define PURPLE_MESSAGE_IMAGES       PURPLE_MESSAGE_IMAGES
-
-#define PurpleMessageFlags  PurpleMessageFlags
-
-#define PURPLE_CBFLAGS_NONE     PURPLE_CBFLAGS_NONE
-#define PURPLE_CBFLAGS_VOICE    PURPLE_CBFLAGS_VOICE
-#define PURPLE_CBFLAGS_HALFOP   PURPLE_CBFLAGS_HALFOP
-#define PURPLE_CBFLAGS_OP       PURPLE_CBFLAGS_OP
-#define PURPLE_CBFLAGS_FOUNDER  PURPLE_CBFLAGS_FOUNDER
-#define PURPLE_CBFLAGS_TYPING   PURPLE_CBFLAGS_TYPING
-
-#define PurpleConvChatBuddyFlags  PurpleConvChatBuddyFlags
-
-#define purple_conversations_set_ui_ops  purple_conversations_set_ui_ops
-
-#define purple_conversation_new          purple_conversation_new
-#define purple_conversation_destroy      purple_conversation_destroy
-#define purple_conversation_present      purple_conversation_present
-#define purple_conversation_get_type     purple_conversation_get_type
-#define purple_conversation_set_ui_ops   purple_conversation_set_ui_ops
-#define purple_conversation_get_ui_ops   purple_conversation_get_ui_ops
-#define purple_conversation_set_account  purple_conversation_set_account
-#define purple_conversation_get_account  purple_conversation_get_account
-#define purple_conversation_get_gc       purple_conversation_get_gc
-#define purple_conversation_set_title    purple_conversation_set_title
-#define purple_conversation_get_title    purple_conversation_get_title
-#define purple_conversation_autoset_title  purple_conversation_autoset_title
-#define purple_conversation_set_name       purple_conversation_set_name
-#define purple_conversation_get_name       purple_conversation_get_name
-#define purple_conversation_set_logging    purple_conversation_set_logging
-#define purple_conversation_is_logging     purple_conversation_is_logging
-#define purple_conversation_close_logs     purple_conversation_close_logs
-#define purple_conversation_get_im_data    purple_conversation_get_im_data
-
-#define PURPLE_CONV_IM    PURPLE_CONV_IM
-
-#define purple_conversation_get_chat_data  purple_conversation_get_chat_data
-
-#define PURPLE_CONV_CHAT  PURPLE_CONV_CHAT
-
-#define purple_conversation_set_data       purple_conversation_set_data
-#define purple_conversation_get_data       purple_conversation_get_data
-
-#define purple_get_conversations  purple_get_conversations
-#define purple_get_ims            purple_get_ims
-#define purple_get_chats          purple_get_chats
-
-#define purple_find_conversation_with_account \
+#define GaimConversationUiOps  PurpleConversationUiOps
+#define GaimConversation       PurpleConversation
+#define GaimConvIm             PurpleConvIm
+#define GaimConvChat           PurpleConvChat
+#define GaimConvChatBuddy      PurpleConvChatBuddy
+
+#define GAIM_CONV_TYPE_UNKNOWN  PURPLE_CONV_TYPE_UNKNOWN
+#define GAIM_CONV_TYPE_IM       PURPLE_CONV_TYPE_IM
+#define GAIM_CONV_TYPE_CHAT     PURPLE_CONV_TYPE_CHAT
+#define GAIM_CONV_TYPE_MISC     PURPLE_CONV_TYPE_MISC
+#define GAIM_CONV_TYPE_ANY      PURPLE_CONV_TYPE_ANY
+
+#define GaimConversationType  PurpleConversationType
+
+#define GAIM_CONV_UPDATE_ADD       PURPLE_CONV_UPDATE_ADD
+#define GAIM_CONV_UPDATE_REMOVE    PURPLE_CONV_UPDATE_REMOVE
+#define GAIM_CONV_UPDATE_ACCOUNT   PURPLE_CONV_UPDATE_ACCOUNT
+#define GAIM_CONV_UPDATE_TYPING    PURPLE_CONV_UPDATE_TYPING
+#define GAIM_CONV_UPDATE_UNSEEN    PURPLE_CONV_UPDATE_UNSEEN
+#define GAIM_CONV_UPDATE_LOGGING   PURPLE_CONV_UPDATE_LOGGING
+#define GAIM_CONV_UPDATE_TOPIC     PURPLE_CONV_UPDATE_TOPIC
+#define GAIM_CONV_ACCOUNT_ONLINE   PURPLE_CONV_ACCOUNT_ONLINE
+#define GAIM_CONV_ACCOUNT_OFFLINE  PURPLE_CONV_ACCOUNT_OFFLINE
+#define GAIM_CONV_UPDATE_AWAY      PURPLE_CONV_UPDATE_AWAY
+#define GAIM_CONV_UPDATE_ICON      PURPLE_CONV_UPDATE_ICON
+#define GAIM_CONV_UPDATE_TITLE     PURPLE_CONV_UPDATE_TITLE
+#define GAIM_CONV_UPDATE_CHATLEFT  PURPLE_CONV_UPDATE_CHATLEFT
+#define GAIM_CONV_UPDATE_FEATURES  PURPLE_CONV_UPDATE_FEATURES
+
+#define GaimConvUpdateType  PurpleConvUpdateType
+
+#define GAIM_NOT_TYPING  PURPLE_NOT_TYPING
+#define GAIM_TYPING      PURPLE_TYPING
+#define GAIM_TYPED       PURPLE_TYPED
+
+#define GaimTypingState  PurpleTypingState
+
+#define GAIM_MESSAGE_SEND         PURPLE_MESSAGE_SEND
+#define GAIM_MESSAGE_RECV         PURPLE_MESSAGE_RECV
+#define GAIM_MESSAGE_SYSTEM       PURPLE_MESSAGE_SYSTEM
+#define GAIM_MESSAGE_AUTO_RESP    PURPLE_MESSAGE_AUTO_RESP
+#define GAIM_MESSAGE_ACTIVE_ONLY  PURPLE_MESSAGE_ACTIVE_ONLY
+#define GAIM_MESSAGE_NICK         PURPLE_MESSAGE_NICK
+#define GAIM_MESSAGE_NO_LOG       PURPLE_MESSAGE_NO_LOG
+#define GAIM_MESSAGE_WHISPER      PURPLE_MESSAGE_WHISPER
+#define GAIM_MESSAGE_ERROR        PURPLE_MESSAGE_ERROR
+#define GAIM_MESSAGE_DELAYED      PURPLE_MESSAGE_DELAYED
+#define GAIM_MESSAGE_RAW          PURPLE_MESSAGE_RAW
+#define GAIM_MESSAGE_IMAGES       PURPLE_MESSAGE_IMAGES
+
+#define GaimMessageFlags  PurpleMessageFlags
+
+#define GAIM_CBFLAGS_NONE     PURPLE_CBFLAGS_NONE
+#define GAIM_CBFLAGS_VOICE    PURPLE_CBFLAGS_VOICE
+#define GAIM_CBFLAGS_HALFOP   PURPLE_CBFLAGS_HALFOP
+#define GAIM_CBFLAGS_OP       PURPLE_CBFLAGS_OP
+#define GAIM_CBFLAGS_FOUNDER  PURPLE_CBFLAGS_FOUNDER
+#define GAIM_CBFLAGS_TYPING   PURPLE_CBFLAGS_TYPING
+
+#define GaimConvChatBuddyFlags  PurpleConvChatBuddyFlags
+
+#define gaim_conversations_set_ui_ops  purple_conversations_set_ui_ops
+
+#define gaim_conversation_new          purple_conversation_new
+#define gaim_conversation_destroy      purple_conversation_destroy
+#define gaim_conversation_present      purple_conversation_present
+#define gaim_conversation_get_type     purple_conversation_get_type
+#define gaim_conversation_set_ui_ops   purple_conversation_set_ui_ops
+#define gaim_conversation_get_ui_ops   purple_conversation_get_ui_ops
+#define gaim_conversation_set_account  purple_conversation_set_account
+#define gaim_conversation_get_account  purple_conversation_get_account
+#define gaim_conversation_get_gc       purple_conversation_get_gc
+#define gaim_conversation_set_title    purple_conversation_set_title
+#define gaim_conversation_get_title    purple_conversation_get_title
+#define gaim_conversation_autoset_title  purple_conversation_autoset_title
+#define gaim_conversation_set_name       purple_conversation_set_name
+#define gaim_conversation_get_name       purple_conversation_get_name
+#define gaim_conversation_set_logging    purple_conversation_set_logging
+#define gaim_conversation_is_logging     purple_conversation_is_logging
+#define gaim_conversation_close_logs     purple_conversation_close_logs
+#define gaim_conversation_get_im_data    purple_conversation_get_im_data
+
+#define GAIM_CONV_IM    PURPLE_CONV_IM
+
+#define gaim_conversation_get_chat_data  purple_conversation_get_chat_data
+
+#define GAIM_CONV_CHAT  PURPLE_CONV_CHAT
+
+#define gaim_conversation_set_data       purple_conversation_set_data
+#define gaim_conversation_get_data       purple_conversation_get_data
+
+#define gaim_get_conversations  purple_get_conversations
+#define gaim_get_ims            purple_get_ims
+#define gaim_get_chats          purple_get_chats
+
+#define gaim_find_conversation_with_account \
 	purple_find_conversation_with_account
 
-#define purple_conversation_write         purple_conversation_write
-#define purple_conversation_set_features  purple_conversation_set_features
-#define purple_conversation_get_features  purple_conversation_get_features
-#define purple_conversation_has_focus     purple_conversation_has_focus
-#define purple_conversation_update        purple_conversation_update
-#define purple_conversation_foreach       purple_conversation_foreach
-
-#define purple_conv_im_get_conversation  purple_conv_im_get_conversation
-#define purple_conv_im_set_icon          purple_conv_im_set_icon
-#define purple_conv_im_get_icon          purple_conv_im_get_icon
-#define purple_conv_im_set_typing_state  purple_conv_im_set_typing_state
-#define purple_conv_im_get_typing_state  purple_conv_im_get_typing_state
-
-#define purple_conv_im_start_typing_timeout  purple_conv_im_start_typing_timeout
-#define purple_conv_im_stop_typing_timeout   purple_conv_im_stop_typing_timeout
-#define purple_conv_im_get_typing_timeout    purple_conv_im_get_typing_timeout
-#define purple_conv_im_set_type_again        purple_conv_im_set_type_again
-#define purple_conv_im_get_type_again        purple_conv_im_get_type_again
-
-#define purple_conv_im_start_send_typed_timeout \
+#define gaim_conversation_write         purple_conversation_write
+#define gaim_conversation_set_features  purple_conversation_set_features
+#define gaim_conversation_get_features  purple_conversation_get_features
+#define gaim_conversation_has_focus     purple_conversation_has_focus
+#define gaim_conversation_update        purple_conversation_update
+#define gaim_conversation_foreach       purple_conversation_foreach
+
+#define gaim_conv_im_get_conversation  purple_conv_im_get_conversation
+#define gaim_conv_im_set_icon          purple_conv_im_set_icon
+#define gaim_conv_im_get_icon          purple_conv_im_get_icon
+#define gaim_conv_im_set_typing_state  purple_conv_im_set_typing_state
+#define gaim_conv_im_get_typing_state  purple_conv_im_get_typing_state
+
+#define gaim_conv_im_start_typing_timeout  purple_conv_im_start_typing_timeout
+#define gaim_conv_im_stop_typing_timeout   purple_conv_im_stop_typing_timeout
+#define gaim_conv_im_get_typing_timeout    purple_conv_im_get_typing_timeout
+#define gaim_conv_im_set_type_again        purple_conv_im_set_type_again
+#define gaim_conv_im_get_type_again        purple_conv_im_get_type_again
+
+#define gaim_conv_im_start_send_typed_timeout \
 	purple_conv_im_start_send_typed_timeout
 
-#define purple_conv_im_stop_send_typed_timeout \
+#define gaim_conv_im_stop_send_typed_timeout \
 	purple_conv_im_stop_send_typed_timeout
 
-#define purple_conv_im_get_send_typed_timeout \
+#define gaim_conv_im_get_send_typed_timeout \
 	purple_conv_im_get_send_typed_timeout
 
-#define purple_conv_present_error     purple_conv_present_error
-#define purple_conv_send_confirm      purple_conv_send_confirm
-
-#define purple_conv_im_update_typing    purple_conv_im_update_typing
-#define purple_conv_im_write            purple_conv_im_write
-#define purple_conv_im_send             purple_conv_im_send
-#define purple_conv_im_send_with_flags  purple_conv_im_send_with_flags
-
-#define purple_conv_custom_smiley_add    purple_conv_custom_smiley_add
-#define purple_conv_custom_smiley_write  purple_conv_custom_smiley_write
-#define purple_conv_custom_smiley_close  purple_conv_custom_smiley_close
-
-#define purple_conv_chat_get_conversation  purple_conv_chat_get_conversation
-#define purple_conv_chat_set_users         purple_conv_chat_set_users
-#define purple_conv_chat_get_users         purple_conv_chat_get_users
-#define purple_conv_chat_ignore            purple_conv_chat_ignore
-#define purple_conv_chat_unignore          purple_conv_chat_unignore
-#define purple_conv_chat_set_ignored       purple_conv_chat_set_ignored
-#define purple_conv_chat_get_ignored       purple_conv_chat_get_ignored
-#define purple_conv_chat_get_ignored_user  purple_conv_chat_get_ignored_user
-#define purple_conv_chat_is_user_ignored   purple_conv_chat_is_user_ignored
-#define purple_conv_chat_set_topic         purple_conv_chat_set_topic
-#define purple_conv_chat_get_topic         purple_conv_chat_get_topic
-#define purple_conv_chat_set_id            purple_conv_chat_set_id
-#define purple_conv_chat_get_id            purple_conv_chat_get_id
-#define purple_conv_chat_write             purple_conv_chat_write
-#define purple_conv_chat_send              purple_conv_chat_send
-#define purple_conv_chat_send_with_flags   purple_conv_chat_send_with_flags
-#define purple_conv_chat_add_user          purple_conv_chat_add_user
-#define purple_conv_chat_add_users         purple_conv_chat_add_users
-#define purple_conv_chat_rename_user       purple_conv_chat_rename_user
-#define purple_conv_chat_remove_user       purple_conv_chat_remove_user
-#define purple_conv_chat_remove_users      purple_conv_chat_remove_users
-#define purple_conv_chat_find_user         purple_conv_chat_find_user
-#define purple_conv_chat_user_set_flags    purple_conv_chat_user_set_flags
-#define purple_conv_chat_user_get_flags    purple_conv_chat_user_get_flags
-#define purple_conv_chat_clear_users       purple_conv_chat_clear_users
-#define purple_conv_chat_set_nick          purple_conv_chat_set_nick
-#define purple_conv_chat_get_nick          purple_conv_chat_get_nick
-#define purple_conv_chat_left              purple_conv_chat_left
-#define purple_conv_chat_has_left          purple_conv_chat_has_left
-
-#define purple_find_chat                   purple_find_chat
-
-#define purple_conv_chat_cb_new            purple_conv_chat_cb_new
-#define purple_conv_chat_cb_find           purple_conv_chat_cb_find
-#define purple_conv_chat_cb_get_name       purple_conv_chat_cb_get_name
-#define purple_conv_chat_cb_destroy        purple_conv_chat_cb_destroy
-
-#define purple_conversations_get_handle    purple_conversations_get_handle
-#define purple_conversations_init          purple_conversations_init
-#define purple_conversations_uninit        purple_conversations_uninit
+#define gaim_conv_present_error     purple_conv_present_error
+#define gaim_conv_send_confirm      purple_conv_send_confirm
+
+#define gaim_conv_im_update_typing    purple_conv_im_update_typing
+#define gaim_conv_im_write            purple_conv_im_write
+#define gaim_conv_im_send             purple_conv_im_send
+#define gaim_conv_im_send_with_flags  purple_conv_im_send_with_flags
+
+#define gaim_conv_custom_smiley_add    purple_conv_custom_smiley_add
+#define gaim_conv_custom_smiley_write  purple_conv_custom_smiley_write
+#define gaim_conv_custom_smiley_close  purple_conv_custom_smiley_close
+
+#define gaim_conv_chat_get_conversation  purple_conv_chat_get_conversation
+#define gaim_conv_chat_set_users         purple_conv_chat_set_users
+#define gaim_conv_chat_get_users         purple_conv_chat_get_users
+#define gaim_conv_chat_ignore            purple_conv_chat_ignore
+#define gaim_conv_chat_unignore          purple_conv_chat_unignore
+#define gaim_conv_chat_set_ignored       purple_conv_chat_set_ignored
+#define gaim_conv_chat_get_ignored       purple_conv_chat_get_ignored
+#define gaim_conv_chat_get_ignored_user  purple_conv_chat_get_ignored_user
+#define gaim_conv_chat_is_user_ignored   purple_conv_chat_is_user_ignored
+#define gaim_conv_chat_set_topic         purple_conv_chat_set_topic
+#define gaim_conv_chat_get_topic         purple_conv_chat_get_topic
+#define gaim_conv_chat_set_id            purple_conv_chat_set_id
+#define gaim_conv_chat_get_id            purple_conv_chat_get_id
+#define gaim_conv_chat_write             purple_conv_chat_write
+#define gaim_conv_chat_send              purple_conv_chat_send
+#define gaim_conv_chat_send_with_flags   purple_conv_chat_send_with_flags
+#define gaim_conv_chat_add_user          purple_conv_chat_add_user
+#define gaim_conv_chat_add_users         purple_conv_chat_add_users
+#define gaim_conv_chat_rename_user       purple_conv_chat_rename_user
+#define gaim_conv_chat_remove_user       purple_conv_chat_remove_user
+#define gaim_conv_chat_remove_users      purple_conv_chat_remove_users
+#define gaim_conv_chat_find_user         purple_conv_chat_find_user
+#define gaim_conv_chat_user_set_flags    purple_conv_chat_user_set_flags
+#define gaim_conv_chat_user_get_flags    purple_conv_chat_user_get_flags
+#define gaim_conv_chat_clear_users       purple_conv_chat_clear_users
+#define gaim_conv_chat_set_nick          purple_conv_chat_set_nick
+#define gaim_conv_chat_get_nick          purple_conv_chat_get_nick
+#define gaim_conv_chat_left              purple_conv_chat_left
+#define gaim_conv_chat_has_left          purple_conv_chat_has_left
+
+#define gaim_find_chat                   purple_find_chat
+
+#define gaim_conv_chat_cb_new            purple_conv_chat_cb_new
+#define gaim_conv_chat_cb_find           purple_conv_chat_cb_find
+#define gaim_conv_chat_cb_get_name       purple_conv_chat_cb_get_name
+#define gaim_conv_chat_cb_destroy        purple_conv_chat_cb_destroy
+
+#define gaim_conversations_get_handle    purple_conversations_get_handle
+#define gaim_conversations_init          purple_conversations_init
+#define gaim_conversations_uninit        purple_conversations_uninit
 
 /* from core.h */
 
-#define PurpleCore  PurpleCore
-
-#define PurpleCoreUiOps  PurpleCoreUiOps
-
-#define purple_core_init  purple_core_init
-#define purple_core_quit  purple_core_quit
-
-#define purple_core_quit_cb      purple_core_quit_cb
-#define purple_core_get_version  purple_core_get_version
-#define purple_core_get_ui       purple_core_get_ui
-#define purple_get_core          purple_get_core
-#define purple_core_set_ui_ops   purple_core_set_ui_ops
-#define purple_core_get_ui_ops   purple_core_get_ui_ops
+#define GaimCore  PurpleCore
+
+#define GaimCoreUiOps  PurpleCoreUiOps
+
+#define gaim_core_init  purple_core_init
+#define gaim_core_quit  purple_core_quit
+
+#define gaim_core_quit_cb      purple_core_quit_cb
+#define gaim_core_get_version  purple_core_get_version
+#define gaim_core_get_ui       purple_core_get_ui
+#define gaim_get_core          purple_get_core
+#define gaim_core_set_ui_ops   purple_core_set_ui_ops
+#define gaim_core_get_ui_ops   purple_core_get_ui_ops
 
 /* from debug.h */
 
-#define PURPLE_DEBUG_ALL      PURPLE_DEBUG_ALL
-#define PURPLE_DEBUG_MISC     PURPLE_DEBUG_MISC
-#define PURPLE_DEBUG_INFO     PURPLE_DEBUG_INFO
-#define PURPLE_DEBUG_WARNING  PURPLE_DEBUG_WARNING
-#define PURPLE_DEBUG_ERROR    PURPLE_DEBUG_ERROR
-#define PURPLE_DEBUG_FATAL    PURPLE_DEBUG_FATAL
-
-#define PurpleDebugLevel  PurpleDebugLevel
-
-#define PurpleDebugUiOps  PurpleDebugUiOps
-
-
-#define purple_debug          purple_debug
-#define purple_debug_misc     purple_debug_misc
-#define purple_debug_info     purple_debug_info
-#define purple_debug_warning  purple_debug_warning
-#define purple_debug_error    purple_debug_error
-#define purple_debug_fatal    purple_debug_fatal
-
-#define purple_debug_set_enabled  purple_debug_set_enabled
-#define purple_debug_is_enabled   purple_debug_is_enabled
-
-#define purple_debug_set_ui_ops  purple_debug_set_ui_ops
-#define purple_debug_get_ui_ops  purple_debug_get_ui_ops
-
-#define purple_debug_init  purple_debug_init
+#define GAIM_DEBUG_ALL      PURPLE_DEBUG_ALL
+#define GAIM_DEBUG_MISC     PURPLE_DEBUG_MISC
+#define GAIM_DEBUG_INFO     PURPLE_DEBUG_INFO
+#define GAIM_DEBUG_WARNING  PURPLE_DEBUG_WARNING
+#define GAIM_DEBUG_ERROR    PURPLE_DEBUG_ERROR
+#define GAIM_DEBUG_FATAL    PURPLE_DEBUG_FATAL
+
+#define GaimDebugLevel  PurpleDebugLevel
+
+#define GaimDebugUiOps  PurpleDebugUiOps
+
+
+#define gaim_debug          purple_debug
+#define gaim_debug_misc     purple_debug_misc
+#define gaim_debug_info     purple_debug_info
+#define gaim_debug_warning  purple_debug_warning
+#define gaim_debug_error    purple_debug_error
+#define gaim_debug_fatal    purple_debug_fatal
+
+#define gaim_debug_set_enabled  purple_debug_set_enabled
+#define gaim_debug_is_enabled   purple_debug_is_enabled
+
+#define gaim_debug_set_ui_ops  purple_debug_set_ui_ops
+#define gaim_debug_get_ui_ops  purple_debug_get_ui_ops
+
+#define gaim_debug_init  purple_debug_init
 
 /* from desktopitem.h */
 
-#define PURPLE_DESKTOP_ITEM_TYPE_NULL          PURPLE_DESKTOP_ITEM_TYPE_NULL
-#define PURPLE_DESKTOP_ITEM_TYPE_OTHER         PURPLE_DESKTOP_ITEM_TYPE_OTHER
-#define PURPLE_DESKTOP_ITEM_TYPE_APPLICATION   PURPLE_DESKTOP_ITEM_TYPE_APPLICATION
-#define PURPLE_DESKTOP_ITEM_TYPE_LINK          PURPLE_DESKTOP_ITEM_TYPE_LINK
-#define PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE      PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE
-#define PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE     PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE
-#define PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY     PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY
-#define PURPLE_DESKTOP_ITEM_TYPE_SERVICE       PURPLE_DESKTOP_ITEM_TYPE_SERVICE
-#define PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE  PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE
-
-#define PurpleDesktopItemType  PurpleDesktopItemType
-
-#define PurpleDesktopItem  PurpleDesktopItem
-
-#define PURPLE_TYPE_DESKTOP_ITEM         PURPLE_TYPE_DESKTOP_ITEM
-#define purple_desktop_item_get_type     purple_desktop_item_get_type
+#define GAIM_DESKTOP_ITEM_TYPE_NULL          PURPLE_DESKTOP_ITEM_TYPE_NULL
+#define GAIM_DESKTOP_ITEM_TYPE_OTHER         PURPLE_DESKTOP_ITEM_TYPE_OTHER
+#define GAIM_DESKTOP_ITEM_TYPE_APPLICATION   PURPLE_DESKTOP_ITEM_TYPE_APPLICATION
+#define GAIM_DESKTOP_ITEM_TYPE_LINK          PURPLE_DESKTOP_ITEM_TYPE_LINK
+#define GAIM_DESKTOP_ITEM_TYPE_FSDEVICE      PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE
+#define GAIM_DESKTOP_ITEM_TYPE_MIME_TYPE     PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE
+#define GAIM_DESKTOP_ITEM_TYPE_DIRECTORY     PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY
+#define GAIM_DESKTOP_ITEM_TYPE_SERVICE       PURPLE_DESKTOP_ITEM_TYPE_SERVICE
+#define GAIM_DESKTOP_ITEM_TYPE_SERVICE_TYPE  PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE
+
+#define GaimDesktopItemType  PurpleDesktopItemType
+
+#define GaimDesktopItem  PurpleDesktopItem
+
+#define GAIM_TYPE_DESKTOP_ITEM         PURPLE_TYPE_DESKTOP_ITEM
+#define gaim_desktop_item_get_type     purple_desktop_item_get_type
 
 /* standard */
 /* ugh, i'm just copying these as strings, rather than pidginifying them */
-#define PURPLE_DESKTOP_ITEM_ENCODING	"Encoding" /* string */
-#define PURPLE_DESKTOP_ITEM_VERSION	"Version"  /* numeric */
-#define PURPLE_DESKTOP_ITEM_NAME		"Name" /* localestring */
-#define PURPLE_DESKTOP_ITEM_GENERIC_NAME	"GenericName" /* localestring */
-#define PURPLE_DESKTOP_ITEM_TYPE		"Type" /* string */
-#define PURPLE_DESKTOP_ITEM_FILE_PATTERN "FilePattern" /* regexp(s) */
-#define PURPLE_DESKTOP_ITEM_TRY_EXEC	"TryExec" /* string */
-#define PURPLE_DESKTOP_ITEM_NO_DISPLAY	"NoDisplay" /* boolean */
-#define PURPLE_DESKTOP_ITEM_COMMENT	"Comment" /* localestring */
-#define PURPLE_DESKTOP_ITEM_EXEC		"Exec" /* string */
-#define PURPLE_DESKTOP_ITEM_ACTIONS	"Actions" /* strings */
-#define PURPLE_DESKTOP_ITEM_ICON		"Icon" /* string */
-#define PURPLE_DESKTOP_ITEM_MINI_ICON	"MiniIcon" /* string */
-#define PURPLE_DESKTOP_ITEM_HIDDEN	"Hidden" /* boolean */
-#define PURPLE_DESKTOP_ITEM_PATH		"Path" /* string */
-#define PURPLE_DESKTOP_ITEM_TERMINAL	"Terminal" /* boolean */
-#define PURPLE_DESKTOP_ITEM_TERMINAL_OPTIONS "TerminalOptions" /* string */
-#define PURPLE_DESKTOP_ITEM_SWALLOW_TITLE "SwallowTitle" /* string */
-#define PURPLE_DESKTOP_ITEM_SWALLOW_EXEC	"SwallowExec" /* string */
-#define PURPLE_DESKTOP_ITEM_MIME_TYPE	"MimeType" /* regexp(s) */
-#define PURPLE_DESKTOP_ITEM_PATTERNS	"Patterns" /* regexp(s) */
-#define PURPLE_DESKTOP_ITEM_DEFAULT_APP	"DefaultApp" /* string */
-#define PURPLE_DESKTOP_ITEM_DEV		"Dev" /* string */
-#define PURPLE_DESKTOP_ITEM_FS_TYPE	"FSType" /* string */
-#define PURPLE_DESKTOP_ITEM_MOUNT_POINT	"MountPoint" /* string */
-#define PURPLE_DESKTOP_ITEM_READ_ONLY	"ReadOnly" /* boolean */
-#define PURPLE_DESKTOP_ITEM_UNMOUNT_ICON "UnmountIcon" /* string */
-#define PURPLE_DESKTOP_ITEM_SORT_ORDER	"SortOrder" /* strings */
-#define PURPLE_DESKTOP_ITEM_URL		"URL" /* string */
-#define PURPLE_DESKTOP_ITEM_DOC_PATH	"X-GNOME-DocPath" /* string */
-
-#define purple_desktop_item_new_from_file   purple_desktop_item_new_from_file
-#define purple_desktop_item_get_entry_type  purple_desktop_item_get_entry_type
-#define purple_desktop_item_get_string      purple_desktop_item_get_string
-#define purple_desktop_item_copy            purple_desktop_item_copy
-#define purple_desktop_item_unref           purple_desktop_item_unref
+#define GAIM_DESKTOP_ITEM_ENCODING	"Encoding" /* string */
+#define GAIM_DESKTOP_ITEM_VERSION	"Version"  /* numeric */
+#define GAIM_DESKTOP_ITEM_NAME		"Name" /* localestring */
+#define GAIM_DESKTOP_ITEM_GENERIC_NAME	"GenericName" /* localestring */
+#define GAIM_DESKTOP_ITEM_TYPE		"Type" /* string */
+#define GAIM_DESKTOP_ITEM_FILE_PATTERN "FilePattern" /* regexp(s) */
+#define GAIM_DESKTOP_ITEM_TRY_EXEC	"TryExec" /* string */
+#define GAIM_DESKTOP_ITEM_NO_DISPLAY	"NoDisplay" /* boolean */
+#define GAIM_DESKTOP_ITEM_COMMENT	"Comment" /* localestring */
+#define GAIM_DESKTOP_ITEM_EXEC		"Exec" /* string */
+#define GAIM_DESKTOP_ITEM_ACTIONS	"Actions" /* strings */
+#define GAIM_DESKTOP_ITEM_ICON		"Icon" /* string */
+#define GAIM_DESKTOP_ITEM_MINI_ICON	"MiniIcon" /* string */
+#define GAIM_DESKTOP_ITEM_HIDDEN	"Hidden" /* boolean */
+#define GAIM_DESKTOP_ITEM_PATH		"Path" /* string */
+#define GAIM_DESKTOP_ITEM_TERMINAL	"Terminal" /* boolean */
+#define GAIM_DESKTOP_ITEM_TERMINAL_OPTIONS "TerminalOptions" /* string */
+#define GAIM_DESKTOP_ITEM_SWALLOW_TITLE "SwallowTitle" /* string */
+#define GAIM_DESKTOP_ITEM_SWALLOW_EXEC	"SwallowExec" /* string */
+#define GAIM_DESKTOP_ITEM_MIME_TYPE	"MimeType" /* regexp(s) */
+#define GAIM_DESKTOP_ITEM_PATTERNS	"Patterns" /* regexp(s) */
+#define GAIM_DESKTOP_ITEM_DEFAULT_APP	"DefaultApp" /* string */
+#define GAIM_DESKTOP_ITEM_DEV		"Dev" /* string */
+#define GAIM_DESKTOP_ITEM_FS_TYPE	"FSType" /* string */
+#define GAIM_DESKTOP_ITEM_MOUNT_POINT	"MountPoint" /* string */
+#define GAIM_DESKTOP_ITEM_READ_ONLY	"ReadOnly" /* boolean */
+#define GAIM_DESKTOP_ITEM_UNMOUNT_ICON "UnmountIcon" /* string */
+#define GAIM_DESKTOP_ITEM_SORT_ORDER	"SortOrder" /* strings */
+#define GAIM_DESKTOP_ITEM_URL		"URL" /* string */
+#define GAIM_DESKTOP_ITEM_DOC_PATH	"X-GNOME-DocPath" /* string */
+
+#define gaim_desktop_item_new_from_file   purple_desktop_item_new_from_file
+#define gaim_desktop_item_get_entry_type  purple_desktop_item_get_entry_type
+#define gaim_desktop_item_get_string      purple_desktop_item_get_string
+#define gaim_desktop_item_copy            purple_desktop_item_copy
+#define gaim_desktop_item_unref           purple_desktop_item_unref
 
 /* from dnsquery.h */
 
-#define PurpleDnsQueryData  PurpleDnsQueryData
-#define PurpleDnsQueryConnectFunction  PurpleDnsQueryConnectFunction
-
-#define purple_dnsquery_a        purple_dnsquery_a
-#define purple_dnsquery_destroy  purple_dnsquery_destroy
-#define purple_dnsquery_init     purple_dnsquery_init
-#define purple_dnsquery_uninit   purple_dnsquery_uninit
+#define GaimDnsQueryData  PurpleDnsQueryData
+#define GaimDnsQueryConnectFunction  PurpleDnsQueryConnectFunction
+
+#define gaim_dnsquery_a        		purple_dnsquery_a
+#define gaim_dnsquery_destroy  		purple_dnsquery_destroy
+#define gaim_dnsquery_init     		purple_dnsquery_init
+#define gaim_dnsquery_uninit   		purple_dnsquery_uninit
+#define gaim_dnsquery_set_ui_ops	purple_dnsquery_set_ui_ops
+#define gaim_dnsquery_get_host 		purple_dnsquery_get_host
+#define gaim_dnsquery_get_port 		purple_dnsquery_get_port
 
 /* from dnssrv.h */
 
-#define PurpleSrvResponse   PurpleSrvResponse
-#define PurpleSrvQueryData  PurpleSrvQueryData
-#define PurpleSrvCallback   PurpleSrvCallback
-
-#define purple_srv_resolve  purple_srv_resolve
-#define purple_srv_cancel   purple_srv_cancel
+#define GaimSrvResponse   PurpleSrvResponse
+#define GaimSrvQueryData  PurpleSrvQueryData
+#define GaimSrvCallback   PurpleSrvCallback
+
+#define gaim_srv_resolve  purple_srv_resolve
+#define gaim_srv_cancel   purple_srv_cancel
 
 /* from eventloop.h */
 
-#define PURPLE_INPUT_READ   PURPLE_INPUT_READ
-#define PURPLE_INPUT_WRITE  PURPLE_INPUT_WRITE
-
-#define PurpleInputCondition  PurpleInputCondition
-#define PurpleInputFunction   PurpleInputFunction
-#define PurpleEventLoopUiOps  PurpleEventLoopUiOps
-
-#define purple_timeout_add     purple_timeout_add
-#define purple_timeout_remove  purple_timeout_remove
-#define purple_input_add       purple_input_add
-#define purple_input_remove    purple_input_remove
-
-#define purple_eventloop_set_ui_ops  purple_eventloop_set_ui_ops
-#define purple_eventloop_get_ui_ops  purple_eventloop_get_ui_ops
+#define GAIM_INPUT_READ   PURPLE_INPUT_READ
+#define GAIM_INPUT_WRITE  PURPLE_INPUT_WRITE
+
+#define GaimInputCondition  PurpleInputCondition
+#define GaimInputFunction   PurpleInputFunction
+#define GaimEventLoopUiOps  PurpleEventLoopUiOps
+
+#define gaim_timeout_add     purple_timeout_add
+#define gaim_timeout_remove  purple_timeout_remove
+#define gaim_input_add       purple_input_add
+#define gaim_input_remove    purple_input_remove
+
+#define gaim_eventloop_set_ui_ops  purple_eventloop_set_ui_ops
+#define gaim_eventloop_get_ui_ops  purple_eventloop_get_ui_ops
 
 /* from ft.h */
 
-#define PurpleXfer  PurpleXfer
-
-#define PURPLE_XFER_UNKNOWN  PURPLE_XFER_UNKNOWN
-#define PURPLE_XFER_SEND     PURPLE_XFER_SEND
-#define PURPLE_XFER_RECEIVE  PURPLE_XFER_RECEIVE
-
-#define PurpleXferType  PurpleXferType
-
-#define PURPLE_XFER_STATUS_UNKNOWN        PURPLE_XFER_STATUS_UNKNOWN
-#define PURPLE_XFER_STATUS_NOT_STARTED    PURPLE_XFER_STATUS_NOT_STARTED
-#define PURPLE_XFER_STATUS_ACCEPTED       PURPLE_XFER_STATUS_ACCEPTED
-#define PURPLE_XFER_STATUS_STARTED        PURPLE_XFER_STATUS_STARTED
-#define PURPLE_XFER_STATUS_DONE           PURPLE_XFER_STATUS_DONE
-#define PURPLE_XFER_STATUS_CANCEL_LOCAL   PURPLE_XFER_STATUS_CANCEL_LOCAL
-#define PURPLE_XFER_STATUS_CANCEL_REMOTE  PURPLE_XFER_STATUS_CANCEL_REMOTE
-
-#define PurpleXferStatusType  PurpleXferStatusType
-
-#define PurpleXferUiOps  PurpleXferUiOps
-
-#define purple_xfer_new                  purple_xfer_new
-#define purple_xfer_ref                  purple_xfer_ref
-#define purple_xfer_unref                purple_xfer_unref
-#define purple_xfer_request              purple_xfer_request
-#define purple_xfer_request_accepted     purple_xfer_request_accepted
-#define purple_xfer_request_denied       purple_xfer_request_denied
-#define purple_xfer_get_type             purple_xfer_get_type
-#define purple_xfer_get_account          purple_xfer_get_account
-#define purple_xfer_get_status           purple_xfer_get_status
-#define purple_xfer_is_canceled          purple_xfer_is_canceled
-#define purple_xfer_is_completed         purple_xfer_is_completed
-#define purple_xfer_get_filename         purple_xfer_get_filename
-#define purple_xfer_get_local_filename   purple_xfer_get_local_filename
-#define purple_xfer_get_bytes_sent       purple_xfer_get_bytes_sent
-#define purple_xfer_get_bytes_remaining  purple_xfer_get_bytes_remaining
-#define purple_xfer_get_size             purple_xfer_get_size
-#define purple_xfer_get_progress         purple_xfer_get_progress
-#define purple_xfer_get_local_port       purple_xfer_get_local_port
-#define purple_xfer_get_remote_ip        purple_xfer_get_remote_ip
-#define purple_xfer_get_remote_port      purple_xfer_get_remote_port
-#define purple_xfer_set_completed        purple_xfer_set_completed
-#define purple_xfer_set_message          purple_xfer_set_message
-#define purple_xfer_set_filename         purple_xfer_set_filename
-#define purple_xfer_set_local_filename   purple_xfer_set_local_filename
-#define purple_xfer_set_size             purple_xfer_set_size
-#define purple_xfer_set_bytes_sent       purple_xfer_set_bytes_sent
-#define purple_xfer_get_ui_ops           purple_xfer_get_ui_ops
-#define purple_xfer_set_read_fnc         purple_xfer_set_read_fnc
-#define purple_xfer_set_write_fnc        purple_xfer_set_write_fnc
-#define purple_xfer_set_ack_fnc          purple_xfer_set_ack_fnc
-#define purple_xfer_set_request_denied_fnc  purple_xfer_set_request_denied_fnc
-#define purple_xfer_set_init_fnc         purple_xfer_set_init_fnc
-#define purple_xfer_set_start_fnc        purple_xfer_set_start_fnc
-#define purple_xfer_set_end_fnc          purple_xfer_set_end_fnc
-#define purple_xfer_set_cancel_send_fnc  purple_xfer_set_cancel_send_fnc
-#define purple_xfer_set_cancel_recv_fnc  purple_xfer_set_cancel_recv_fnc
-
-#define purple_xfer_read                purple_xfer_read
-#define purple_xfer_write               purple_xfer_write
-#define purple_xfer_start               purple_xfer_start
-#define purple_xfer_end                 purple_xfer_end
-#define purple_xfer_add                 purple_xfer_add
-#define purple_xfer_cancel_local        purple_xfer_cancel_local
-#define purple_xfer_cancel_remote       purple_xfer_cancel_remote
-#define purple_xfer_error               purple_xfer_error
-#define purple_xfer_update_progress     purple_xfer_update_progress
-#define purple_xfer_conversation_write  purple_xfer_conversation_write
-
-#define purple_xfers_get_handle  purple_xfers_get_handle
-#define purple_xfers_init        purple_xfers_init
-#define purple_xfers_uninit      purple_xfers_uninit
-#define purple_xfers_set_ui_ops  purple_xfers_set_ui_ops
-#define purple_xfers_get_ui_ops  purple_xfers_get_ui_ops
-
-/* from purple-client.h */
+#define GaimXfer  PurpleXfer
+
+#define GAIM_XFER_UNKNOWN  PURPLE_XFER_UNKNOWN
+#define GAIM_XFER_SEND     PURPLE_XFER_SEND
+#define GAIM_XFER_RECEIVE  PURPLE_XFER_RECEIVE
+
+#define GaimXferType  PurpleXferType
+
+#define GAIM_XFER_STATUS_UNKNOWN        PURPLE_XFER_STATUS_UNKNOWN
+#define GAIM_XFER_STATUS_NOT_STARTED    PURPLE_XFER_STATUS_NOT_STARTED
+#define GAIM_XFER_STATUS_ACCEPTED       PURPLE_XFER_STATUS_ACCEPTED
+#define GAIM_XFER_STATUS_STARTED        PURPLE_XFER_STATUS_STARTED
+#define GAIM_XFER_STATUS_DONE           PURPLE_XFER_STATUS_DONE
+#define GAIM_XFER_STATUS_CANCEL_LOCAL   PURPLE_XFER_STATUS_CANCEL_LOCAL
+#define GAIM_XFER_STATUS_CANCEL_REMOTE  PURPLE_XFER_STATUS_CANCEL_REMOTE
+
+#define GaimXferStatusType  PurpleXferStatusType
+
+#define GaimXferUiOps  PurpleXferUiOps
+
+#define gaim_xfer_new                  purple_xfer_new
+#define gaim_xfer_ref                  purple_xfer_ref
+#define gaim_xfer_unref                purple_xfer_unref
+#define gaim_xfer_request              purple_xfer_request
+#define gaim_xfer_request_accepted     purple_xfer_request_accepted
+#define gaim_xfer_request_denied       purple_xfer_request_denied
+#define gaim_xfer_get_type             purple_xfer_get_type
+#define gaim_xfer_get_account          purple_xfer_get_account
+#define gaim_xfer_get_status           purple_xfer_get_status
+#define gaim_xfer_is_canceled          purple_xfer_is_canceled
+#define gaim_xfer_is_completed         purple_xfer_is_completed
+#define gaim_xfer_get_filename         purple_xfer_get_filename
+#define gaim_xfer_get_local_filename   purple_xfer_get_local_filename
+#define gaim_xfer_get_bytes_sent       purple_xfer_get_bytes_sent
+#define gaim_xfer_get_bytes_remaining  purple_xfer_get_bytes_remaining
+#define gaim_xfer_get_size             purple_xfer_get_size
+#define gaim_xfer_get_progress         purple_xfer_get_progress
+#define gaim_xfer_get_local_port       purple_xfer_get_local_port
+#define gaim_xfer_get_remote_ip        purple_xfer_get_remote_ip
+#define gaim_xfer_get_remote_port      purple_xfer_get_remote_port
+#define gaim_xfer_set_completed        purple_xfer_set_completed
+#define gaim_xfer_set_message          purple_xfer_set_message
+#define gaim_xfer_set_filename         purple_xfer_set_filename
+#define gaim_xfer_set_local_filename   purple_xfer_set_local_filename
+#define gaim_xfer_set_size             purple_xfer_set_size
+#define gaim_xfer_set_bytes_sent       purple_xfer_set_bytes_sent
+#define gaim_xfer_get_ui_ops           purple_xfer_get_ui_ops
+#define gaim_xfer_set_read_fnc         purple_xfer_set_read_fnc
+#define gaim_xfer_set_write_fnc        purple_xfer_set_write_fnc
+#define gaim_xfer_set_ack_fnc          purple_xfer_set_ack_fnc
+#define gaim_xfer_set_request_denied_fnc  purple_xfer_set_request_denied_fnc
+#define gaim_xfer_set_init_fnc         purple_xfer_set_init_fnc
+#define gaim_xfer_set_start_fnc        purple_xfer_set_start_fnc
+#define gaim_xfer_set_end_fnc          purple_xfer_set_end_fnc
+#define gaim_xfer_set_cancel_send_fnc  purple_xfer_set_cancel_send_fnc
+#define gaim_xfer_set_cancel_recv_fnc  purple_xfer_set_cancel_recv_fnc
+
+#define gaim_xfer_read                purple_xfer_read
+#define gaim_xfer_write               purple_xfer_write
+#define gaim_xfer_start               purple_xfer_start
+#define gaim_xfer_end                 purple_xfer_end
+#define gaim_xfer_add                 purple_xfer_add
+#define gaim_xfer_cancel_local        purple_xfer_cancel_local
+#define gaim_xfer_cancel_remote       purple_xfer_cancel_remote
+#define gaim_xfer_error               purple_xfer_error
+#define gaim_xfer_update_progress     purple_xfer_update_progress
+#define gaim_xfer_conversation_write  purple_xfer_conversation_write
+
+#define gaim_xfers_get_handle  purple_xfers_get_handle
+#define gaim_xfers_init        purple_xfers_init
+#define gaim_xfers_uninit      purple_xfers_uninit
+#define gaim_xfers_set_ui_ops  purple_xfers_set_ui_ops
+#define gaim_xfers_get_ui_ops  purple_xfers_get_ui_ops
+
+/* from gaim-client.h */
 
 /* XXX: should this be purple_init, or pidgin_init */
-#define purple_init  purple_init
+#define gaim_init  purple_init
 
 /* from idle.h */
 
-#define PurpleIdleUiOps  PurpleIdleUiOps
-
-#define purple_idle_touch       purple_idle_touch
-#define purple_idle_set         purple_idle_set
-#define purple_idle_set_ui_ops  purple_idle_set_ui_ops
-#define purple_idle_get_ui_ops  purple_idle_get_ui_ops
-#define purple_idle_init        purple_idle_init
-#define purple_idle_uninit      purple_idle_uninit
+#define GaimIdleUiOps  PurpleIdleUiOps
+
+#define gaim_idle_touch       purple_idle_touch
+#define gaim_idle_set         purple_idle_set
+#define gaim_idle_set_ui_ops  purple_idle_set_ui_ops
+#define gaim_idle_get_ui_ops  purple_idle_get_ui_ops
+#define gaim_idle_init        purple_idle_init
+#define gaim_idle_uninit      purple_idle_uninit
 
 /* from imgstore.h */
 
-#define PurpleStoredImage  PurpleStoredImage
-
-#define purple_imgstore_add           purple_imgstore_add
-#define purple_imgstore_get           purple_imgstore_get
-#define purple_imgstore_get_data      purple_imgstore_get_data
-#define purple_imgstore_get_size      purple_imgstore_get_size
-#define purple_imgstore_get_filename  purple_imgstore_get_filename
-#define purple_imgstore_ref           purple_imgstore_ref
-#define purple_imgstore_unref         purple_imgstore_unref
+#define GaimStoredImage  PurpleStoredImage
+
+#define gaim_imgstore_add           purple_imgstore_add
+#define gaim_imgstore_get           purple_imgstore_get
+#define gaim_imgstore_get_data      purple_imgstore_get_data
+#define gaim_imgstore_get_size      purple_imgstore_get_size
+#define gaim_imgstore_get_filename  purple_imgstore_get_filename
+#define gaim_imgstore_ref           purple_imgstore_ref
+#define gaim_imgstore_unref         purple_imgstore_unref
 
 
 /* from log.h */
 
-#define PurpleLog                  PurpleLog
-#define PurpleLogLogger            PurpleLogLogger
-#define PurpleLogCommonLoggerData  PurpleLogCommonLoggerData
-#define PurpleLogSet               PurpleLogSet
-
-#define PURPLE_LOG_IM      PURPLE_LOG_IM
-#define PURPLE_LOG_CHAT    PURPLE_LOG_CHAT
-#define PURPLE_LOG_SYSTEM  PURPLE_LOG_SYSTEM
-
-#define PurpleLogType  PurpleLogType
-
-#define PURPLE_LOG_READ_NO_NEWLINE  PURPLE_LOG_READ_NO_NEWLINE
-
-#define PurpleLogReadFlags  PurpleLogReadFlags
-
-#define PurpleLogSetCallback  PurpleLogSetCallback
-
-#define purple_log_new    purple_log_new
-#define purple_log_free   purple_log_free
-#define purple_log_write  purple_log_write
-#define purple_log_read   purple_log_read
-
-#define purple_log_get_logs         purple_log_get_logs
-#define purple_log_get_log_sets     purple_log_get_log_sets
-#define purple_log_get_system_logs  purple_log_get_system_logs
-#define purple_log_get_size         purple_log_get_size
-#define purple_log_get_total_size   purple_log_get_total_size
-#define purple_log_get_log_dir      purple_log_get_log_dir
-#define purple_log_compare          purple_log_compare
-#define purple_log_set_compare      purple_log_set_compare
-#define purple_log_set_free         purple_log_set_free
-
-#define purple_log_common_writer       purple_log_common_writer
-#define purple_log_common_lister       purple_log_common_lister
-#define purple_log_common_total_sizer  purple_log_common_total_sizer
-#define purple_log_common_sizer        purple_log_common_sizer
-
-#define purple_log_logger_new     purple_log_logger_new
-#define purple_log_logger_free    purple_log_logger_free
-#define purple_log_logger_add     purple_log_logger_add
-#define purple_log_logger_remove  purple_log_logger_remove
-#define purple_log_logger_set     purple_log_logger_set
-#define purple_log_logger_get     purple_log_logger_get
-
-#define purple_log_logger_get_options  purple_log_logger_get_options
-
-#define purple_log_init        purple_log_init
-#define purple_log_get_handle  purple_log_get_handle
-#define purple_log_uninit      purple_log_uninit
+#define GaimLog                  PurpleLog
+#define GaimLogLogger            PurpleLogLogger
+#define GaimLogCommonLoggerData  PurpleLogCommonLoggerData
+#define GaimLogSet               PurpleLogSet
+
+#define GAIM_LOG_IM      PURPLE_LOG_IM
+#define GAIM_LOG_CHAT    PURPLE_LOG_CHAT
+#define GAIM_LOG_SYSTEM  PURPLE_LOG_SYSTEM
+
+#define GaimLogType  PurpleLogType
+
+#define GAIM_LOG_READ_NO_NEWLINE  PURPLE_LOG_READ_NO_NEWLINE
+
+#define GaimLogReadFlags  PurpleLogReadFlags
+
+#define GaimLogSetCallback  PurpleLogSetCallback
+
+#define gaim_log_new    purple_log_new
+#define gaim_log_free   purple_log_free
+#define gaim_log_write  purple_log_write
+#define gaim_log_read   purple_log_read
+
+#define gaim_log_get_logs         purple_log_get_logs
+#define gaim_log_get_log_sets     purple_log_get_log_sets
+#define gaim_log_get_system_logs  purple_log_get_system_logs
+#define gaim_log_get_size         purple_log_get_size
+#define gaim_log_get_total_size   purple_log_get_total_size
+#define gaim_log_get_log_dir      purple_log_get_log_dir
+#define gaim_log_compare          purple_log_compare
+#define gaim_log_set_compare      purple_log_set_compare
+#define gaim_log_set_free         purple_log_set_free
+
+#define gaim_log_common_writer       purple_log_common_writer
+#define gaim_log_common_lister       purple_log_common_lister
+#define gaim_log_common_total_sizer  purple_log_common_total_sizer
+#define gaim_log_common_sizer        purple_log_common_sizer
+
+#define gaim_log_logger_new     purple_log_logger_new
+#define gaim_log_logger_free    purple_log_logger_free
+#define gaim_log_logger_add     purple_log_logger_add
+#define gaim_log_logger_remove  purple_log_logger_remove
+#define gaim_log_logger_set     purple_log_logger_set
+#define gaim_log_logger_get     purple_log_logger_get
+
+#define gaim_log_logger_get_options  purple_log_logger_get_options
+
+#define gaim_log_init        purple_log_init
+#define gaim_log_get_handle  purple_log_get_handle
+#define gaim_log_uninit      purple_log_uninit
 
 /* from mime.h */
 
-#define PurpleMimeDocument  PurpleMimeDocument
-#define PurpleMimePart      PurpleMimePart
-
-#define purple_mime_document_new         purple_mime_document_new
-#define purple_mime_document_free        purple_mime_document_free
-#define purple_mime_document_parse       purple_mime_document_parse
-#define purple_mime_document_parsen      purple_mime_document_parsen
-#define purple_mime_document_write       purple_mime_document_write
-#define purple_mime_document_get_fields  purple_mime_document_get_fields
-#define purple_mime_document_get_field   purple_mime_document_get_field
-#define purple_mime_document_set_field   purple_mime_document_set_field
-#define purple_mime_document_get_parts   purple_mime_document_get_parts
-
-#define purple_mime_part_new                purple_mime_part_new
-#define purple_mime_part_get_fields         purple_mime_part_get_fields
-#define purple_mime_part_get_field          purple_mime_part_get_field
-#define purple_mime_part_get_field_decoded  purple_mime_part_get_field_decoded
-#define purple_mime_part_set_field          purple_mime_part_set_field
-#define purple_mime_part_get_data           purple_mime_part_get_data
-#define purple_mime_part_get_data_decoded   purple_mime_part_get_data_decoded
-#define purple_mime_part_get_length         purple_mime_part_get_length
-#define purple_mime_part_set_data           purple_mime_part_set_data
+#define GaimMimeDocument  PurpleMimeDocument
+#define GaimMimePart      PurpleMimePart
+
+#define gaim_mime_document_new         purple_mime_document_new
+#define gaim_mime_document_free        purple_mime_document_free
+#define gaim_mime_document_parse       purple_mime_document_parse
+#define gaim_mime_document_parsen      purple_mime_document_parsen
+#define gaim_mime_document_write       purple_mime_document_write
+#define gaim_mime_document_get_fields  purple_mime_document_get_fields
+#define gaim_mime_document_get_field   purple_mime_document_get_field
+#define gaim_mime_document_set_field   purple_mime_document_set_field
+#define gaim_mime_document_get_parts   purple_mime_document_get_parts
+
+#define gaim_mime_part_new                purple_mime_part_new
+#define gaim_mime_part_get_fields         purple_mime_part_get_fields
+#define gaim_mime_part_get_field          purple_mime_part_get_field
+#define gaim_mime_part_get_field_decoded  purple_mime_part_get_field_decoded
+#define gaim_mime_part_set_field          purple_mime_part_set_field
+#define gaim_mime_part_get_data           purple_mime_part_get_data
+#define gaim_mime_part_get_data_decoded   purple_mime_part_get_data_decoded
+#define gaim_mime_part_get_length         purple_mime_part_get_length
+#define gaim_mime_part_set_data           purple_mime_part_set_data
 
 
 /* from network.h */
 
-#define PurpleNetworkListenData  PurpleNetworkListenData
-
-#define PurpleNetworkListenCallback  PurpleNetworkListenCallback
-
-#define purple_network_ip_atoi              purple_network_ip_atoi
-#define purple_network_set_public_ip        purple_network_set_public_ip
-#define purple_network_get_public_ip        purple_network_get_public_ip
-#define purple_network_get_local_system_ip  purple_network_get_local_system_ip
-#define purple_network_get_my_ip            purple_network_get_my_ip
-
-#define purple_network_listen            purple_network_listen
-#define purple_network_listen_range      purple_network_listen_range
-#define purple_network_listen_cancel     purple_network_listen_cancel
-#define purple_network_get_port_from_fd  purple_network_get_port_from_fd
-
-#define purple_network_is_available  purple_network_is_available
-
-#define purple_network_init    purple_network_init
-#define purple_network_uninit  purple_network_uninit
+#define GaimNetworkListenData  PurpleNetworkListenData
+
+#define GaimNetworkListenCallback  PurpleNetworkListenCallback
+
+#define gaim_network_ip_atoi              purple_network_ip_atoi
+#define gaim_network_set_public_ip        purple_network_set_public_ip
+#define gaim_network_get_public_ip        purple_network_get_public_ip
+#define gaim_network_get_local_system_ip  purple_network_get_local_system_ip
+#define gaim_network_get_my_ip            purple_network_get_my_ip
+
+#define gaim_network_listen            purple_network_listen
+#define gaim_network_listen_range      purple_network_listen_range
+#define gaim_network_listen_cancel     purple_network_listen_cancel
+#define gaim_network_get_port_from_fd  purple_network_get_port_from_fd
+
+#define gaim_network_is_available  purple_network_is_available
+
+#define gaim_network_init    purple_network_init
+#define gaim_network_uninit  purple_network_uninit
 
 /* from notify.h */
 
 
-#define PurpleNotifyUserInfoEntry  PurpleNotifyUserInfoEntry
-#define PurpleNotifyUserInfo       PurpleNotifyUserInfo
-
-#define PurpleNotifyCloseCallback  PurpleNotifyCloseCallback
-
-#define PURPLE_NOTIFY_MESSAGE        PURPLE_NOTIFY_MESSAGE
-#define PURPLE_NOTIFY_EMAIL          PURPLE_NOTIFY_EMAIL
-#define PURPLE_NOTIFY_EMAILS         PURPLE_NOTIFY_EMAILS
-#define PURPLE_NOTIFY_FORMATTED      PURPLE_NOTIFY_FORMATTED
-#define PURPLE_NOTIFY_SEARCHRESULTS  PURPLE_NOTIFY_SEARCHRESULTS
-#define PURPLE_NOTIFY_USERINFO       PURPLE_NOTIFY_USERINFO
-#define PURPLE_NOTIFY_URI            PURPLE_NOTIFY_URI
-
-#define PurpleNotifyType  PurpleNotifyType
-
-#define PURPLE_NOTIFY_MSG_ERROR    PURPLE_NOTIFY_MSG_ERROR
-#define PURPLE_NOTIFY_MSG_WARNING  PURPLE_NOTIFY_MSG_WARNING
-#define PURPLE_NOTIFY_MSG_INFO     PURPLE_NOTIFY_MSG_INFO
-
-#define PurpleNotifyMsgType  PurpleNotifyMsgType
-
-#define PURPLE_NOTIFY_BUTTON_LABELED   PURPLE_NOTIFY_BUTTON_LABELED
-#define PURPLE_NOTIFY_BUTTON_CONTINUE  PURPLE_NOTIFY_BUTTON_CONTINUE
-#define PURPLE_NOTIFY_BUTTON_ADD       PURPLE_NOTIFY_BUTTON_ADD
-#define PURPLE_NOTIFY_BUTTON_INFO      PURPLE_NOTIFY_BUTTON_INFO
-#define PURPLE_NOTIFY_BUTTON_IM        PURPLE_NOTIFY_BUTTON_IM
-#define PURPLE_NOTIFY_BUTTON_JOIN      PURPLE_NOTIFY_BUTTON_JOIN
-#define PURPLE_NOTIFY_BUTTON_INVITE    PURPLE_NOTIFY_BUTTON_INVITE
-
-#define PurpleNotifySearchButtonType  PurpleNotifySearchButtonType
-
-#define PurpleNotifySearchResults  PurpleNotifySearchResult
-
-#define PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR            PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR
-#define PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK   PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK
-#define PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER  PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER
-
-#define PurpleNotifyUserInfoEntryType  PurpleNotifyUserInfoEntryType
-
-#define PurpleNotifySearchColumn           PurpleNotifySearchColumn
-#define PurpleNotifySearchResultsCallback  PurpleNotifySearchResultsCallback
-#define PurpleNotifySearchButton           PurpleNotifySearchButton
-
-#define PurpleNotifyUiOps  PurpleNotifyUiOps
-
-#define purple_notify_searchresults                     purple_notify_searchresults
-#define purple_notify_searchresults_free                purple_notify_searchresults_free
-#define purple_notify_searchresults_new_rows            purple_notify_searchresults_new_rows
-#define purple_notify_searchresults_button_add          purple_notify_searchresults_button_add
-#define purple_notify_searchresults_button_add_labeled  purple_notify_searchresults_button_add_labeled
-#define purple_notify_searchresults_new                 purple_notify_searchresults_new
-#define purple_notify_searchresults_column_new          purple_notify_searchresults_column_new
-#define purple_notify_searchresults_column_add          purple_notify_searchresults_column_add
-#define purple_notify_searchresults_row_add             purple_notify_searchresults_row_add
-#define purple_notify_searchresults_get_rows_count      purple_notify_searchresults_get_rows_count
-#define purple_notify_searchresults_get_columns_count   purple_notify_searchresults_get_columns_count
-#define purple_notify_searchresults_row_get             purple_notify_searchresults_row_get
-#define purple_notify_searchresults_column_get_title    purple_notify_searchresults_column_get_title
-
-#define purple_notify_message    purple_notify_message
-#define purple_notify_email      purple_notify_email
-#define purple_notify_emails     purple_notify_emails
-#define purple_notify_formatted  purple_notify_formatted
-#define purple_notify_userinfo   purple_notify_userinfo
-
-#define purple_notify_user_info_new                    purple_notify_user_info_new
-#define purple_notify_user_info_destroy                purple_notify_user_info_destroy
-#define purple_notify_user_info_get_entries            purple_notify_user_info_get_entries
-#define purple_notify_user_info_get_text_with_newline  purple_notify_user_info_get_text_with_newline
-#define purple_notify_user_info_add_pair               purple_notify_user_info_add_pair
-#define purple_notify_user_info_prepend_pair           purple_notify_user_info_prepend_pair
-#define purple_notify_user_info_remove_entry           purple_notify_user_info_remove_entry
-#define purple_notify_user_info_entry_new              purple_notify_user_info_entry_new
-#define purple_notify_user_info_add_section_break      purple_notify_user_info_add_section_break
-#define purple_notify_user_info_add_section_header     purple_notify_user_info_add_section_header
-#define purple_notify_user_info_remove_last_item       purple_notify_user_info_remove_last_item
-#define purple_notify_user_info_entry_get_label        purple_notify_user_info_entry_get_label
-#define purple_notify_user_info_entry_set_label        purple_notify_user_info_entry_set_label
-#define purple_notify_user_info_entry_get_value        purple_notify_user_info_entry_get_value
-#define purple_notify_user_info_entry_set_value        purple_notify_user_info_entry_set_value
-#define purple_notify_user_info_entry_get_type         purple_notify_user_info_entry_get_type
-#define purple_notify_user_info_entry_set_type         purple_notify_user_info_entry_set_type
-
-#define purple_notify_uri                purple_notify_uri
-#define purple_notify_close              purple_notify_close
-#define purple_notify_close_with_handle  purple_notify_close_with_handle
-
-#define purple_notify_info     purple_notify_info
-#define purple_notify_warning  purple_notify_warning
-#define purple_notify_error    purple_notify_error
-
-#define purple_notify_set_ui_ops  purple_notify_set_ui_ops
-#define purple_notify_get_ui_ops  purple_notify_get_ui_ops
-
-#define purple_notify_get_handle  purple_notify_get_handle
-
-#define purple_notify_init    purple_notify_init
-#define purple_notify_uninit  purple_notify_uninit
+#define GaimNotifyUserInfoEntry  PurpleNotifyUserInfoEntry
+#define GaimNotifyUserInfo       PurpleNotifyUserInfo
+
+#define GaimNotifyCloseCallback  PurpleNotifyCloseCallback
+
+#define GAIM_NOTIFY_MESSAGE        PURPLE_NOTIFY_MESSAGE
+#define GAIM_NOTIFY_EMAIL          PURPLE_NOTIFY_EMAIL
+#define GAIM_NOTIFY_EMAILS         PURPLE_NOTIFY_EMAILS
+#define GAIM_NOTIFY_FORMATTED      PURPLE_NOTIFY_FORMATTED
+#define GAIM_NOTIFY_SEARCHRESULTS  PURPLE_NOTIFY_SEARCHRESULTS
+#define GAIM_NOTIFY_USERINFO       PURPLE_NOTIFY_USERINFO
+#define GAIM_NOTIFY_URI            PURPLE_NOTIFY_URI
+
+#define GaimNotifyType  PurpleNotifyType
+
+#define GAIM_NOTIFY_MSG_ERROR    PURPLE_NOTIFY_MSG_ERROR
+#define GAIM_NOTIFY_MSG_WARNING  PURPLE_NOTIFY_MSG_WARNING
+#define GAIM_NOTIFY_MSG_INFO     PURPLE_NOTIFY_MSG_INFO
+
+#define GaimNotifyMsgType  PurpleNotifyMsgType
+
+#define GAIM_NOTIFY_BUTTON_LABELED   PURPLE_NOTIFY_BUTTON_LABELED
+#define GAIM_NOTIFY_BUTTON_CONTINUE  PURPLE_NOTIFY_BUTTON_CONTINUE
+#define GAIM_NOTIFY_BUTTON_ADD       PURPLE_NOTIFY_BUTTON_ADD
+#define GAIM_NOTIFY_BUTTON_INFO      PURPLE_NOTIFY_BUTTON_INFO
+#define GAIM_NOTIFY_BUTTON_IM        PURPLE_NOTIFY_BUTTON_IM
+#define GAIM_NOTIFY_BUTTON_JOIN      PURPLE_NOTIFY_BUTTON_JOIN
+#define GAIM_NOTIFY_BUTTON_INVITE    PURPLE_NOTIFY_BUTTON_INVITE
+
+#define GaimNotifySearchButtonType  PurpleNotifySearchButtonType
+
+#define GaimNotifySearchResults  PurpleNotifySearchResults
+
+#define GAIM_NOTIFY_USER_INFO_ENTRY_PAIR            PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR
+#define GAIM_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK   PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK
+#define GAIM_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER  PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER
+
+#define GaimNotifyUserInfoEntryType  PurpleNotifyUserInfoEntryType
+
+#define GaimNotifySearchColumn           PurpleNotifySearchColumn
+#define GaimNotifySearchResultsCallback  PurpleNotifySearchResultsCallback
+#define GaimNotifySearchButton           PurpleNotifySearchButton
+
+#define GaimNotifyUiOps  PurpleNotifyUiOps
+
+#define gaim_notify_searchresults                     purple_notify_searchresults
+#define gaim_notify_searchresults_free                purple_notify_searchresults_free
+#define gaim_notify_searchresults_new_rows            purple_notify_searchresults_new_rows
+#define gaim_notify_searchresults_button_add          purple_notify_searchresults_button_add
+#define gaim_notify_searchresults_button_add_labeled  purple_notify_searchresults_button_add_labeled
+#define gaim_notify_searchresults_new                 purple_notify_searchresults_new
+#define gaim_notify_searchresults_column_new          purple_notify_searchresults_column_new
+#define gaim_notify_searchresults_column_add          purple_notify_searchresults_column_add
+#define gaim_notify_searchresults_row_add             purple_notify_searchresults_row_add
+#define gaim_notify_searchresults_get_rows_count      purple_notify_searchresults_get_rows_count
+#define gaim_notify_searchresults_get_columns_count   purple_notify_searchresults_get_columns_count
+#define gaim_notify_searchresults_row_get             purple_notify_searchresults_row_get
+#define gaim_notify_searchresults_column_get_title    purple_notify_searchresults_column_get_title
+
+#define gaim_notify_message    purple_notify_message
+#define gaim_notify_email      purple_notify_email
+#define gaim_notify_emails     purple_notify_emails
+#define gaim_notify_formatted  purple_notify_formatted
+#define gaim_notify_userinfo   purple_notify_userinfo
+
+#define gaim_notify_user_info_new                    purple_notify_user_info_new
+#define gaim_notify_user_info_destroy                purple_notify_user_info_destroy
+#define gaim_notify_user_info_get_entries            purple_notify_user_info_get_entries
+#define gaim_notify_user_info_get_text_with_newline  purple_notify_user_info_get_text_with_newline
+#define gaim_notify_user_info_add_pair               purple_notify_user_info_add_pair
+#define gaim_notify_user_info_prepend_pair           purple_notify_user_info_prepend_pair
+#define gaim_notify_user_info_remove_entry           purple_notify_user_info_remove_entry
+#define gaim_notify_user_info_entry_new              purple_notify_user_info_entry_new
+#define gaim_notify_user_info_add_section_break      purple_notify_user_info_add_section_break
+#define gaim_notify_user_info_add_section_header     purple_notify_user_info_add_section_header
+#define gaim_notify_user_info_remove_last_item       purple_notify_user_info_remove_last_item
+#define gaim_notify_user_info_entry_get_label        purple_notify_user_info_entry_get_label
+#define gaim_notify_user_info_entry_set_label        purple_notify_user_info_entry_set_label
+#define gaim_notify_user_info_entry_get_value        purple_notify_user_info_entry_get_value
+#define gaim_notify_user_info_entry_set_value        purple_notify_user_info_entry_set_value
+#define gaim_notify_user_info_entry_get_type         purple_notify_user_info_entry_get_type
+#define gaim_notify_user_info_entry_set_type         purple_notify_user_info_entry_set_type
+
+#define gaim_notify_uri                purple_notify_uri
+#define gaim_notify_close              purple_notify_close
+#define gaim_notify_close_with_handle  purple_notify_close_with_handle
+
+#define gaim_notify_info     purple_notify_info
+#define gaim_notify_warning  purple_notify_warning
+#define gaim_notify_error    purple_notify_error
+
+#define gaim_notify_set_ui_ops  purple_notify_set_ui_ops
+#define gaim_notify_get_ui_ops  purple_notify_get_ui_ops
+
+#define gaim_notify_get_handle  purple_notify_get_handle
+
+#define gaim_notify_init    purple_notify_init
+#define gaim_notify_uninit  purple_notify_uninit
 
 /* from ntlm.h */
 
-#define purple_ntlm_gen_type1    purple_ntlm_gen_type1
-#define purple_ntlm_parse_type2  purple_ntlm_parse_type2
-#define purple_ntlm_gen_type3    purple_ntlm_gen_type3
+#define gaim_ntlm_gen_type1    purple_ntlm_gen_type1
+#define gaim_ntlm_parse_type2  purple_ntlm_parse_type2
+#define gaim_ntlm_gen_type3    purple_ntlm_gen_type3
 
 /* from plugin.h */
 
-#define PurplePlugin            PurplePlugin
-#define PurplePluginInfo        PurplePluginInfo
-#define PurplePluginUiInfo      PurplePluginUiInfo
-#define PurplePluginLoaderInfo  PurplePluginLoaderInfo
-#define PurplePluginAction      PurplePluginAction
-#define PurplePluginPriority    PurplePluginPriority
-
-#define PURPLE_PLUGIN_UNKNOWN   PURPLE_PLUGIN_UNKNOWN
-#define PURPLE_PLUGIN_STANDARD  PURPLE_PLUGIN_STANDARD
-#define PURPLE_PLUGIN_LOADER    PURPLE_PLUGIN_LOADER
-#define PURPLE_PLUGIN_PROTOCOL  PURPLE_PLUGIN_PROTOCOL
-
-#define PurplePluginType        PurplePluginType
-
-#define PURPLE_PRIORITY_DEFAULT  PURPLE_PRIORITY_DEFAULT
-#define PURPLE_PRIORITY_HIGHEST  PURPLE_PRIORITY_HIGHEST
-#define PURPLE_PRIORITY_LOWEST   PURPLE_PRIORITY_LOWEST
-
-#define PURPLE_PLUGIN_FLAG_INVISIBLE  PURPLE_PLUGIN_FLAG_INVISIBLE
-
-#define PURPLE_PLUGIN_MAGIC  PURPLE_PLUGIN_MAGIC
-
-#define PURPLE_PLUGIN_LOADER_INFO     PURPLE_PLUGIN_LOADER_INFO
-#define PURPLE_PLUGIN_HAS_PREF_FRAME  PURPLE_PLUGIN_HAS_PREF_FRAME
-#define PURPLE_PLUGIN_UI_INFO         PURPLE_PLUGIN_UI_INFO
-
-#define PURPLE_PLUGIN_HAS_ACTIONS  PURPLE_PLUGIN_HAS_ACTIONS
-#define PURPLE_PLUGIN_ACTIONS      PURPLE_PLUGIN_ACTIONS
-
-#define PURPLE_INIT_PLUGIN  PURPLE_INIT_PLUGIN
-
-#define purple_plugin_new              purple_plugin_new
-#define purple_plugin_probe            purple_plugin_probe
-#define purple_plugin_register         purple_plugin_register
-#define purple_plugin_load             purple_plugin_load
-#define purple_plugin_unload           purple_plugin_unload
-#define purple_plugin_reload           purple_plugin_reload
-#define purple_plugin_destroy          purple_plugin_destroy
-#define purple_plugin_is_loaded        purple_plugin_is_loaded
-#define purple_plugin_is_unloadable    purple_plugin_is_unloadable
-#define purple_plugin_get_id           purple_plugin_get_id
-#define purple_plugin_get_name         purple_plugin_get_name
-#define purple_plugin_get_version      purple_plugin_get_version
-#define purple_plugin_get_summary      purple_plugin_get_summary
-#define purple_plugin_get_description  purple_plugin_get_description
-#define purple_plugin_get_author       purple_plugin_get_author
-#define purple_plugin_get_homepage     purple_plugin_get_homepage
-
-#define purple_plugin_ipc_register        purple_plugin_ipc_register
-#define purple_plugin_ipc_unregister      purple_plugin_ipc_unregister
-#define purple_plugin_ipc_unregister_all  purple_plugin_ipc_unregister_all
-#define purple_plugin_ipc_get_params      purple_plugin_ipc_get_params
-#define purple_plugin_ipc_call            purple_plugin_ipc_call
-
-#define purple_plugins_add_search_path  purple_plugins_add_search_path
-#define purple_plugins_unload_all       purple_plugins_unload_all
-#define purple_plugins_destroy_all      purple_plugins_destroy_all
-#define purple_plugins_save_loaded      purple_plugins_save_loaded
-#define purple_plugins_load_saved       purple_plugins_load_saved
-#define purple_plugins_probe            purple_plugins_probe
-#define purple_plugins_enabled          purple_plugins_enabled
-
-#define purple_plugins_register_probe_notify_cb     purple_plugins_register_probe_notify_cb
-#define purple_plugins_unregister_probe_notify_cb   purple_plugins_unregister_probe_notify_cb
-#define purple_plugins_register_load_notify_cb      purple_plugins_register_load_notify_cb
-#define purple_plugins_unregister_load_notify_cb    purple_plugins_unregister_load_notify_cb
-#define purple_plugins_register_unload_notify_cb    purple_plugins_register_unload_notify_cb
-#define purple_plugins_unregister_unload_notify_cb  purple_plugins_unregister_unload_notify_cb
-
-#define purple_plugins_find_with_name      purple_plugins_find_with_name
-#define purple_plugins_find_with_filename  purple_plugins_find_with_filename
-#define purple_plugins_find_with_basename  purple_plugins_find_with_basename
-#define purple_plugins_find_with_id        purple_plugins_find_with_id
-
-#define purple_plugins_get_loaded     purple_plugins_get_loaded
-#define purple_plugins_get_protocols  purple_plugins_get_protocols
-#define purple_plugins_get_all        purple_plugins_get_all
-
-#define purple_plugins_get_handle  purple_plugins_get_handle
-#define purple_plugins_init        purple_plugins_init
-#define purple_plugins_uninit      purple_plugins_uninit
-
-#define purple_plugin_action_new   purple_plugin_action_new
-#define purple_plugin_action_free  purple_plugin_action_free
+#ifdef GAIM_PLUGINS
+#ifndef PURPLE_PLUGINS
+#define PURPLE_PLUGINS
+#endif
+#endif
+
+#define GaimPlugin            PurplePlugin
+#define GaimPluginInfo        PurplePluginInfo
+#define GaimPluginUiInfo      PurplePluginUiInfo
+#define GaimPluginLoaderInfo  PurplePluginLoaderInfo
+#define GaimPluginAction      PurplePluginAction
+#define GaimPluginPriority    PurplePluginPriority
+
+#define GAIM_PLUGIN_UNKNOWN   PURPLE_PLUGIN_UNKNOWN
+#define GAIM_PLUGIN_STANDARD  PURPLE_PLUGIN_STANDARD
+#define GAIM_PLUGIN_LOADER    PURPLE_PLUGIN_LOADER
+#define GAIM_PLUGIN_PROTOCOL  PURPLE_PLUGIN_PROTOCOL
+
+#define GaimPluginType        PurplePluginType
+
+#define GAIM_PRIORITY_DEFAULT  PURPLE_PRIORITY_DEFAULT
+#define GAIM_PRIORITY_HIGHEST  PURPLE_PRIORITY_HIGHEST
+#define GAIM_PRIORITY_LOWEST   PURPLE_PRIORITY_LOWEST
+
+#define GAIM_PLUGIN_FLAG_INVISIBLE  PURPLE_PLUGIN_FLAG_INVISIBLE
+
+#define GAIM_PLUGIN_MAGIC  PURPLE_PLUGIN_MAGIC
+
+#define GAIM_PLUGIN_LOADER_INFO     PURPLE_PLUGIN_LOADER_INFO
+#define GAIM_PLUGIN_HAS_PREF_FRAME  PURPLE_PLUGIN_HAS_PREF_FRAME
+#define GAIM_PLUGIN_UI_INFO         PURPLE_PLUGIN_UI_INFO
+
+#define GAIM_PLUGIN_HAS_ACTIONS  PURPLE_PLUGIN_HAS_ACTIONS
+#define GAIM_PLUGIN_ACTIONS      PURPLE_PLUGIN_ACTIONS
+
+#define GAIM_INIT_PLUGIN(pluginname, initfunc, plugininfo)  PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo)
+
+#define gaim_plugin_new              purple_plugin_new
+#define gaim_plugin_probe            purple_plugin_probe
+#define gaim_plugin_register         purple_plugin_register
+#define gaim_plugin_load             purple_plugin_load
+#define gaim_plugin_unload           purple_plugin_unload
+#define gaim_plugin_reload           purple_plugin_reload
+#define gaim_plugin_destroy          purple_plugin_destroy
+#define gaim_plugin_is_loaded        purple_plugin_is_loaded
+#define gaim_plugin_is_unloadable    purple_plugin_is_unloadable
+#define gaim_plugin_get_id           purple_plugin_get_id
+#define gaim_plugin_get_name         purple_plugin_get_name
+#define gaim_plugin_get_version      purple_plugin_get_version
+#define gaim_plugin_get_summary      purple_plugin_get_summary
+#define gaim_plugin_get_description  purple_plugin_get_description
+#define gaim_plugin_get_author       purple_plugin_get_author
+#define gaim_plugin_get_homepage     purple_plugin_get_homepage
+
+#define gaim_plugin_ipc_register        purple_plugin_ipc_register
+#define gaim_plugin_ipc_unregister      purple_plugin_ipc_unregister
+#define gaim_plugin_ipc_unregister_all  purple_plugin_ipc_unregister_all
+#define gaim_plugin_ipc_get_params      purple_plugin_ipc_get_params
+#define gaim_plugin_ipc_call            purple_plugin_ipc_call
+
+#define gaim_plugins_add_search_path  purple_plugins_add_search_path
+#define gaim_plugins_unload_all       purple_plugins_unload_all
+#define gaim_plugins_destroy_all      purple_plugins_destroy_all
+#define gaim_plugins_save_loaded      purple_plugins_save_loaded
+#define gaim_plugins_load_saved       purple_plugins_load_saved
+#define gaim_plugins_probe            purple_plugins_probe
+#define gaim_plugins_enabled          purple_plugins_enabled
+
+#define gaim_plugins_register_probe_notify_cb     purple_plugins_register_probe_notify_cb
+#define gaim_plugins_unregister_probe_notify_cb   purple_plugins_unregister_probe_notify_cb
+#define gaim_plugins_register_load_notify_cb      purple_plugins_register_load_notify_cb
+#define gaim_plugins_unregister_load_notify_cb    purple_plugins_unregister_load_notify_cb
+#define gaim_plugins_register_unload_notify_cb    purple_plugins_register_unload_notify_cb
+#define gaim_plugins_unregister_unload_notify_cb  purple_plugins_unregister_unload_notify_cb
+
+#define gaim_plugins_find_with_name      purple_plugins_find_with_name
+#define gaim_plugins_find_with_filename  purple_plugins_find_with_filename
+#define gaim_plugins_find_with_basename  purple_plugins_find_with_basename
+#define gaim_plugins_find_with_id        purple_plugins_find_with_id
+
+#define gaim_plugins_get_loaded     purple_plugins_get_loaded
+#define gaim_plugins_get_protocols  purple_plugins_get_protocols
+#define gaim_plugins_get_all        purple_plugins_get_all
+
+#define gaim_plugins_get_handle  purple_plugins_get_handle
+#define gaim_plugins_init        purple_plugins_init
+#define gaim_plugins_uninit      purple_plugins_uninit
+
+#define gaim_plugin_action_new   purple_plugin_action_new
+#define gaim_plugin_action_free  purple_plugin_action_free
 
 /* pluginpref.h */
 
-#define PurplePluginPrefFrame  PurplePluginPrefFrame
-#define PurplePluginPref       PurplePluginPref
-
-#define PURPLE_STRING_FORMAT_TYPE_NONE       PURPLE_STRING_FORMAT_TYPE_NONE
-#define PURPLE_STRING_FORMAT_TYPE_MULTILINE  PURPLE_STRING_FORMAT_TYPE_MULTILINE
-#define PURPLE_STRING_FORMAT_TYPE_HTML       PURPLE_STRING_FORMAT_TYPE_HTML
-
-#define PurpleStringFormatType  PurpleStringFormatType
-
-#define PURPLE_PLUGIN_PREF_NONE           PURPLE_PLUGIN_PREF_NONE
-#define PURPLE_PLUGIN_PREF_CHOICE         PURPLE_PLUGIN_PREF_CHOICE
-#define PURPLE_PLUGIN_PREF_INFO           PURPLE_PLUGIN_PREF_INFO
-#define PURPLE_PLUGIN_PREF_STRING_FORMAT  PURPLE_PLUGIN_PREF_STRING_FORMAT
-
-#define PurplePluginPrefType  PurplePluginPrefType
-
-#define purple_plugin_pref_frame_new        purple_plugin_pref_frame_new
-#define purple_plugin_pref_frame_destroy    purple_plugin_pref_frame_destroy
-#define purple_plugin_pref_frame_add        purple_plugin_pref_frame_add
-#define purple_plugin_pref_frame_get_prefs  purple_plugin_pref_frame_get_prefs
-
-#define purple_plugin_pref_new                      purple_plugin_pref_new
-#define purple_plugin_pref_new_with_name            purple_plugin_pref_new_with_name
-#define purple_plugin_pref_new_with_label           purple_plugin_pref_new_with_label
-#define purple_plugin_pref_new_with_name_and_label  purple_plugin_pref_new_with_name_and_label
-#define purple_plugin_pref_destroy                  purple_plugin_pref_destroy
-#define purple_plugin_pref_set_name                 purple_plugin_pref_set_name
-#define purple_plugin_pref_get_name                 purple_plugin_pref_get_name
-#define purple_plugin_pref_set_label                purple_plugin_pref_set_label
-#define purple_plugin_pref_get_label                purple_plugin_pref_get_label
-#define purple_plugin_pref_set_bounds               purple_plugin_pref_set_bounds
-#define purple_plugin_pref_get_bounds               purple_plugin_pref_get_bounds
-#define purple_plugin_pref_set_type                 purple_plugin_pref_set_type
-#define purple_plugin_pref_get_type                 purple_plugin_pref_get_type
-#define purple_plugin_pref_add_choice               purple_plugin_pref_add_choice
-#define purple_plugin_pref_get_choices              purple_plugin_pref_get_choices
-#define purple_plugin_pref_set_max_length           purple_plugin_pref_set_max_length
-#define purple_plugin_pref_get_max_length           purple_plugin_pref_get_max_length
-#define purple_plugin_pref_set_masked               purple_plugin_pref_set_masked
-#define purple_plugin_pref_get_masked               purple_plugin_pref_get_masked
-#define purple_plugin_pref_set_format_type          purple_plugin_pref_set_format_type
-#define purple_plugin_pref_get_format_type          purple_plugin_pref_get_format_type
+#define GaimPluginPrefFrame  PurplePluginPrefFrame
+#define GaimPluginPref       PurplePluginPref
+
+#define GAIM_STRING_FORMAT_TYPE_NONE       PURPLE_STRING_FORMAT_TYPE_NONE
+#define GAIM_STRING_FORMAT_TYPE_MULTILINE  PURPLE_STRING_FORMAT_TYPE_MULTILINE
+#define GAIM_STRING_FORMAT_TYPE_HTML       PURPLE_STRING_FORMAT_TYPE_HTML
+
+#define GaimStringFormatType  PurpleStringFormatType
+
+#define GAIM_PLUGIN_PREF_NONE           PURPLE_PLUGIN_PREF_NONE
+#define GAIM_PLUGIN_PREF_CHOICE         PURPLE_PLUGIN_PREF_CHOICE
+#define GAIM_PLUGIN_PREF_INFO           PURPLE_PLUGIN_PREF_INFO
+#define GAIM_PLUGIN_PREF_STRING_FORMAT  PURPLE_PLUGIN_PREF_STRING_FORMAT
+
+#define GaimPluginPrefType  PurplePluginPrefType
+
+#define gaim_plugin_pref_frame_new        purple_plugin_pref_frame_new
+#define gaim_plugin_pref_frame_destroy    purple_plugin_pref_frame_destroy
+#define gaim_plugin_pref_frame_add        purple_plugin_pref_frame_add
+#define gaim_plugin_pref_frame_get_prefs  purple_plugin_pref_frame_get_prefs
+
+#define gaim_plugin_pref_new                      purple_plugin_pref_new
+#define gaim_plugin_pref_new_with_name            purple_plugin_pref_new_with_name
+#define gaim_plugin_pref_new_with_label           purple_plugin_pref_new_with_label
+#define gaim_plugin_pref_new_with_name_and_label  purple_plugin_pref_new_with_name_and_label
+#define gaim_plugin_pref_destroy                  purple_plugin_pref_destroy
+#define gaim_plugin_pref_set_name                 purple_plugin_pref_set_name
+#define gaim_plugin_pref_get_name                 purple_plugin_pref_get_name
+#define gaim_plugin_pref_set_label                purple_plugin_pref_set_label
+#define gaim_plugin_pref_get_label                purple_plugin_pref_get_label
+#define gaim_plugin_pref_set_bounds               purple_plugin_pref_set_bounds
+#define gaim_plugin_pref_get_bounds               purple_plugin_pref_get_bounds
+#define gaim_plugin_pref_set_type                 purple_plugin_pref_set_type
+#define gaim_plugin_pref_get_type                 purple_plugin_pref_get_type
+#define gaim_plugin_pref_add_choice               purple_plugin_pref_add_choice
+#define gaim_plugin_pref_get_choices              purple_plugin_pref_get_choices
+#define gaim_plugin_pref_set_max_length           purple_plugin_pref_set_max_length
+#define gaim_plugin_pref_get_max_length           purple_plugin_pref_get_max_length
+#define gaim_plugin_pref_set_masked               purple_plugin_pref_set_masked
+#define gaim_plugin_pref_get_masked               purple_plugin_pref_get_masked
+#define gaim_plugin_pref_set_format_type          purple_plugin_pref_set_format_type
+#define gaim_plugin_pref_get_format_type          purple_plugin_pref_get_format_type
 
 /* from pounce.h */
 
-#define PurplePounce  PurplePounce
-
-#define PURPLE_POUNCE_NONE              PURPLE_POUNCE_NONE
-#define PURPLE_POUNCE_SIGNON            PURPLE_POUNCE_SIGNON
-#define PURPLE_POUNCE_SIGNOFF           PURPLE_POUNCE_SIGNOFF
-#define PURPLE_POUNCE_AWAY              PURPLE_POUNCE_AWAY
-#define PURPLE_POUNCE_AWAY_RETURN       PURPLE_POUNCE_AWAY_RETURN
-#define PURPLE_POUNCE_IDLE              PURPLE_POUNCE_IDLE
-#define PURPLE_POUNCE_IDLE_RETURN       PURPLE_POUNCE_IDLE_RETURN
-#define PURPLE_POUNCE_TYPING            PURPLE_POUNCE_TYPING
-#define PURPLE_POUNCE_TYPED             PURPLE_POUNCE_TYPED
-#define PURPLE_POUNCE_TYPING_STOPPED    PURPLE_POUNCE_TYPING_STOPPED
-#define PURPLE_POUNCE_MESSAGE_RECEIVED  PURPLE_POUNCE_MESSAGE_RECEIVED
-#define PurplePounceEvent  PurplePounceEvent
-
-#define PURPLE_POUNCE_OPTION_NONE  PURPLE_POUNCE_OPTION_NONE
-#define PURPLE_POUNCE_OPTION_AWAY  PURPLE_POUNCE_OPTION_AWAY
-#define PurplePounceOption  PurplePounceOption
-
-#define PurplePounceCb  PurplePounceCb
-
-#define purple_pounce_new                     purple_pounce_new
-#define purple_pounce_destroy                 purple_pounce_destroy
-#define purple_pounce_destroy_all_by_account  purple_pounce_destroy_all_by_account
-#define purple_pounce_set_events              purple_pounce_set_events
-#define purple_pounce_set_options             purple_pounce_set_options
-#define purple_pounce_set_pouncer             purple_pounce_set_pouncer
-#define purple_pounce_set_pouncee             purple_pounce_set_pouncee
-#define purple_pounce_set_save                purple_pounce_set_save
-#define purple_pounce_action_register         purple_pounce_action_register
-#define purple_pounce_action_set_enabled      purple_pounce_action_set_enabled
-#define purple_pounce_action_set_attribute    purple_pounce_action_set_attribute
-#define purple_pounce_set_data                purple_pounce_set_data
-#define purple_pounce_get_events              purple_pounce_get_events
-#define purple_pounce_get_options             purple_pounce_get_options
-#define purple_pounce_get_pouncer             purple_pounce_get_pouncer
-#define purple_pounce_get_pouncee             purple_pounce_get_pouncee
-#define purple_pounce_get_save                purple_pounce_get_save
-#define purple_pounce_action_is_enabled       purple_pounce_action_is_enabled
-#define purple_pounce_action_get_attribute    purple_pounce_action_get_attribute
-#define purple_pounce_get_data                purple_pounce_get_data
-#define purple_pounce_execute                 purple_pounce_execute
-
-#define purple_find_pounce                 purple_find_pounce
-#define purple_pounces_load                purple_pounces_load
-#define purple_pounces_register_handler    purple_pounces_register_handler
-#define purple_pounces_unregister_handler  purple_pounces_unregister_handler
-#define purple_pounces_get_all             purple_pounces_get_all
-#define purple_pounces_get_handle          purple_pounces_get_handle
-#define purple_pounces_init                purple_pounces_init
-#define purple_pounces_uninit              purple_pounces_uninit
+#define GaimPounce  PurplePounce
+
+#define GAIM_POUNCE_NONE              PURPLE_POUNCE_NONE
+#define GAIM_POUNCE_SIGNON            PURPLE_POUNCE_SIGNON
+#define GAIM_POUNCE_SIGNOFF           PURPLE_POUNCE_SIGNOFF
+#define GAIM_POUNCE_AWAY              PURPLE_POUNCE_AWAY
+#define GAIM_POUNCE_AWAY_RETURN       PURPLE_POUNCE_AWAY_RETURN
+#define GAIM_POUNCE_IDLE              PURPLE_POUNCE_IDLE
+#define GAIM_POUNCE_IDLE_RETURN       PURPLE_POUNCE_IDLE_RETURN
+#define GAIM_POUNCE_TYPING            PURPLE_POUNCE_TYPING
+#define GAIM_POUNCE_TYPED             PURPLE_POUNCE_TYPED
+#define GAIM_POUNCE_TYPING_STOPPED    PURPLE_POUNCE_TYPING_STOPPED
+#define GAIM_POUNCE_MESSAGE_RECEIVED  PURPLE_POUNCE_MESSAGE_RECEIVED
+#define GaimPounceEvent  PurplePounceEvent
+
+#define GAIM_POUNCE_OPTION_NONE  PURPLE_POUNCE_OPTION_NONE
+#define GAIM_POUNCE_OPTION_AWAY  PURPLE_POUNCE_OPTION_AWAY
+#define GaimPounceOption  PurplePounceOption
+
+#define GaimPounceCb  PurplePounceCb
+
+#define gaim_pounce_new                     purple_pounce_new
+#define gaim_pounce_destroy                 purple_pounce_destroy
+#define gaim_pounce_destroy_all_by_account  purple_pounce_destroy_all_by_account
+#define gaim_pounce_set_events              purple_pounce_set_events
+#define gaim_pounce_set_options             purple_pounce_set_options
+#define gaim_pounce_set_pouncer             purple_pounce_set_pouncer
+#define gaim_pounce_set_pouncee             purple_pounce_set_pouncee
+#define gaim_pounce_set_save                purple_pounce_set_save
+#define gaim_pounce_action_register         purple_pounce_action_register
+#define gaim_pounce_action_set_enabled      purple_pounce_action_set_enabled
+#define gaim_pounce_action_set_attribute    purple_pounce_action_set_attribute
+#define gaim_pounce_set_data                purple_pounce_set_data
+#define gaim_pounce_get_events              purple_pounce_get_events
+#define gaim_pounce_get_options             purple_pounce_get_options
+#define gaim_pounce_get_pouncer             purple_pounce_get_pouncer
+#define gaim_pounce_get_pouncee             purple_pounce_get_pouncee
+#define gaim_pounce_get_save                purple_pounce_get_save
+#define gaim_pounce_action_is_enabled       purple_pounce_action_is_enabled
+#define gaim_pounce_action_get_attribute    purple_pounce_action_get_attribute
+#define gaim_pounce_get_data                purple_pounce_get_data
+#define gaim_pounce_execute                 purple_pounce_execute
+
+#define gaim_find_pounce                 purple_find_pounce
+#define gaim_pounces_load                purple_pounces_load
+#define gaim_pounces_register_handler    purple_pounces_register_handler
+#define gaim_pounces_unregister_handler  purple_pounces_unregister_handler
+#define gaim_pounces_get_all             purple_pounces_get_all
+#define gaim_pounces_get_handle          purple_pounces_get_handle
+#define gaim_pounces_init                purple_pounces_init
+#define gaim_pounces_uninit              purple_pounces_uninit
 
 /* from prefs.h */
 
 
-#define PURPLE_PREF_NONE         PURPLE_PREF_NONE
-#define PURPLE_PREF_BOOLEAN      PURPLE_PREF_BOOLEAN
-#define PURPLE_PREF_INT          PURPLE_PREF_INT
-#define PURPLE_PREF_STRING       PURPLE_PREF_STRING
-#define PURPLE_PREF_STRING_LIST  PURPLE_PREF_STRING_LIST
-#define PURPLE_PREF_PATH         PURPLE_PREF_PATH
-#define PURPLE_PREF_PATH_LIST    PURPLE_PREF_PATH_LIST
-#define PurplePrefType  PurplePrefType
-
-#define PurplePrefCallback  PurplePrefCallback
-
-#define purple_prefs_get_handle             purple_prefs_get_handle
-#define purple_prefs_init                   purple_prefs_init
-#define purple_prefs_uninit                 purple_prefs_uninit
-#define purple_prefs_add_none               purple_prefs_add_none
-#define purple_prefs_add_bool               purple_prefs_add_bool
-#define purple_prefs_add_int                purple_prefs_add_int
-#define purple_prefs_add_string             purple_prefs_add_string
-#define purple_prefs_add_string_list        purple_prefs_add_string_list
-#define purple_prefs_add_path               purple_prefs_add_path
-#define purple_prefs_add_path_list          purple_prefs_add_path_list
-#define purple_prefs_remove                 purple_prefs_remove
-#define purple_prefs_rename                 purple_prefs_rename
-#define purple_prefs_rename_boolean_toggle  purple_prefs_rename_boolean_toggle
-#define purple_prefs_destroy                purple_prefs_destroy
-#define purple_prefs_set_generic            purple_prefs_set_generic
-#define purple_prefs_set_bool               purple_prefs_set_bool
-#define purple_prefs_set_int                purple_prefs_set_int
-#define purple_prefs_set_string             purple_prefs_set_string
-#define purple_prefs_set_string_list        purple_prefs_set_string_list
-#define purple_prefs_set_path               purple_prefs_set_path
-#define purple_prefs_set_path_list          purple_prefs_set_path_list
-#define purple_prefs_exists                 purple_prefs_exists
-#define purple_prefs_get_type               purple_prefs_get_type
-#define purple_prefs_get_bool               purple_prefs_get_bool
-#define purple_prefs_get_int                purple_prefs_get_int
-#define purple_prefs_get_string             purple_prefs_get_string
-#define purple_prefs_get_string_list        purple_prefs_get_string_list
-#define purple_prefs_get_path               purple_prefs_get_path
-#define purple_prefs_get_path_list          purple_prefs_get_path_list
-#define purple_prefs_connect_callback       purple_prefs_connect_callback
-#define purple_prefs_disconnect_callback    purple_prefs_disconnect_callback
-#define purple_prefs_disconnect_by_handle   purple_prefs_disconnect_by_handle
-#define purple_prefs_trigger_callback       purple_prefs_trigger_callback
-#define purple_prefs_load                   purple_prefs_load
-#define purple_prefs_update_old             purple_prefs_update_old
+#define GAIM_PREF_NONE         PURPLE_PREF_NONE
+#define GAIM_PREF_BOOLEAN      PURPLE_PREF_BOOLEAN
+#define GAIM_PREF_INT          PURPLE_PREF_INT
+#define GAIM_PREF_STRING       PURPLE_PREF_STRING
+#define GAIM_PREF_STRING_LIST  PURPLE_PREF_STRING_LIST
+#define GAIM_PREF_PATH         PURPLE_PREF_PATH
+#define GAIM_PREF_PATH_LIST    PURPLE_PREF_PATH_LIST
+#define GaimPrefType  PurplePrefType
+
+#define GaimPrefCallback  PurplePrefCallback
+
+#define gaim_prefs_get_handle             purple_prefs_get_handle
+#define gaim_prefs_init                   purple_prefs_init
+#define gaim_prefs_uninit                 purple_prefs_uninit
+#define gaim_prefs_add_none               purple_prefs_add_none
+#define gaim_prefs_add_bool               purple_prefs_add_bool
+#define gaim_prefs_add_int                purple_prefs_add_int
+#define gaim_prefs_add_string             purple_prefs_add_string
+#define gaim_prefs_add_string_list        purple_prefs_add_string_list
+#define gaim_prefs_add_path               purple_prefs_add_path
+#define gaim_prefs_add_path_list          purple_prefs_add_path_list
+#define gaim_prefs_remove                 purple_prefs_remove
+#define gaim_prefs_rename                 purple_prefs_rename
+#define gaim_prefs_rename_boolean_toggle  purple_prefs_rename_boolean_toggle
+#define gaim_prefs_destroy                purple_prefs_destroy
+#define gaim_prefs_set_generic            purple_prefs_set_generic
+#define gaim_prefs_set_bool               purple_prefs_set_bool
+#define gaim_prefs_set_int                purple_prefs_set_int
+#define gaim_prefs_set_string             purple_prefs_set_string
+#define gaim_prefs_set_string_list        purple_prefs_set_string_list
+#define gaim_prefs_set_path               purple_prefs_set_path
+#define gaim_prefs_set_path_list          purple_prefs_set_path_list
+#define gaim_prefs_exists                 purple_prefs_exists
+#define gaim_prefs_get_type               purple_prefs_get_type
+#define gaim_prefs_get_bool               purple_prefs_get_bool
+#define gaim_prefs_get_int                purple_prefs_get_int
+#define gaim_prefs_get_string             purple_prefs_get_string
+#define gaim_prefs_get_string_list        purple_prefs_get_string_list
+#define gaim_prefs_get_path               purple_prefs_get_path
+#define gaim_prefs_get_path_list          purple_prefs_get_path_list
+#define gaim_prefs_connect_callback       purple_prefs_connect_callback
+#define gaim_prefs_disconnect_callback    purple_prefs_disconnect_callback
+#define gaim_prefs_disconnect_by_handle   purple_prefs_disconnect_by_handle
+#define gaim_prefs_trigger_callback       purple_prefs_trigger_callback
+#define gaim_prefs_load                   purple_prefs_load
+#define gaim_prefs_update_old             purple_prefs_update_old
 
 /* from privacy.h */
 
-#define PURPLE_PRIVACY_ALLOW_ALL        PURPLE_PRIVACY_ALLOW_ALL
-#define PURPLE_PRIVACY_DENY_ALL         PURPLE_PRIVACY_DENY_ALL
-#define PURPLE_PRIVACY_ALLOW_USERS      PURPLE_PRIVACY_ALLOW_USERS
-#define PURPLE_PRIVACY_DENY_USERS       PURPLE_PRIVACY_DENY_USERS
-#define PURPLE_PRIVACY_ALLOW_BUDDYLIST  PURPLE_PRIVACY_ALLOW_BUDDYLIST
-#define PurplePrivacyType  PurplePrivacyType
-
-#define PurplePrivacyUiOps  PurplePrivacyUiOps
-
-#define purple_privacy_permit_add     purple_privacy_permit_add
-#define purple_privacy_permit_remove  purple_privacy_permit_remove
-#define purple_privacy_deny_add       purple_privacy_deny_add
-#define purple_privacy_deny_remove    purple_privacy_deny_remove
-#define purple_privacy_allow          purple_privacy_allow
-#define purple_privacy_deny           purple_privacy_deny
-#define purple_privacy_check          purple_privacy_check
-#define purple_privacy_set_ui_ops     purple_privacy_set_ui_ops
-#define purple_privacy_get_ui_ops     purple_privacy_get_ui_ops
-#define purple_privacy_init           purple_privacy_init
+#define GAIM_PRIVACY_ALLOW_ALL        PURPLE_PRIVACY_ALLOW_ALL
+#define GAIM_PRIVACY_DENY_ALL         PURPLE_PRIVACY_DENY_ALL
+#define GAIM_PRIVACY_ALLOW_USERS      PURPLE_PRIVACY_ALLOW_USERS
+#define GAIM_PRIVACY_DENY_USERS       PURPLE_PRIVACY_DENY_USERS
+#define GAIM_PRIVACY_ALLOW_BUDDYLIST  PURPLE_PRIVACY_ALLOW_BUDDYLIST
+#define GaimPrivacyType  PurplePrivacyType
+
+#define GaimPrivacyUiOps  PurplePrivacyUiOps
+
+#define gaim_privacy_permit_add     purple_privacy_permit_add
+#define gaim_privacy_permit_remove  purple_privacy_permit_remove
+#define gaim_privacy_deny_add       purple_privacy_deny_add
+#define gaim_privacy_deny_remove    purple_privacy_deny_remove
+#define gaim_privacy_allow          purple_privacy_allow
+#define gaim_privacy_deny           purple_privacy_deny
+#define gaim_privacy_check          purple_privacy_check
+#define gaim_privacy_set_ui_ops     purple_privacy_set_ui_ops
+#define gaim_privacy_get_ui_ops     purple_privacy_get_ui_ops
+#define gaim_privacy_init           purple_privacy_init
 
 /* from proxy.h */
 
-#define PURPLE_PROXY_USE_GLOBAL  PURPLE_PROXY_USE_GLOBAL
-#define PURPLE_PROXY_NONE        PURPLE_PROXY_NONE
-#define PURPLE_PROXY_HTTP        PURPLE_PROXY_HTTP
-#define PURPLE_PROXY_SOCKS4      PURPLE_PROXY_SOCKS4
-#define PURPLE_PROXY_SOCKS5      PURPLE_PROXY_SOCKS5
-#define PURPLE_PROXY_USE_ENVVAR  PURPLE_PROXY_USE_ENVVAR
-#define PurpleProxyType  PurpleProxyType
-
-#define PurpleProxyInfo  PurpleProxyInfo
-
-#define PurpleProxyConnectData      PurpleProxyConnectData
-#define PurpleProxyConnectFunction  PurpleProxyConnectFunction
-
-#define purple_proxy_info_new           purple_proxy_info_new
-#define purple_proxy_info_destroy       purple_proxy_info_destroy
-#define purple_proxy_info_set_type      purple_proxy_info_set_type
-#define purple_proxy_info_set_host      purple_proxy_info_set_host
-#define purple_proxy_info_set_port      purple_proxy_info_set_port
-#define purple_proxy_info_set_username  purple_proxy_info_set_username
-#define purple_proxy_info_set_password  purple_proxy_info_set_password
-#define purple_proxy_info_get_type      purple_proxy_info_get_type
-#define purple_proxy_info_get_host      purple_proxy_info_get_host
-#define purple_proxy_info_get_port      purple_proxy_info_get_port
-#define purple_proxy_info_get_username  purple_proxy_info_get_username
-#define purple_proxy_info_get_password  purple_proxy_info_get_password
-
-#define purple_global_proxy_get_info    purple_global_proxy_get_info
-#define purple_proxy_get_handle         purple_proxy_get_handle
-#define purple_proxy_init               purple_proxy_init
-#define purple_proxy_uninit             purple_proxy_uninit
-#define purple_proxy_get_setup          purple_proxy_get_setup
-
-#define purple_proxy_connect                     purple_proxy_connect
-#define purple_proxy_connect_socks5              purple_proxy_connect_socks5
-#define purple_proxy_connect_cancel              purple_proxy_connect_cancel
-#define purple_proxy_connect_cancel_with_handle  purple_proxy_connect_cancel_with_handle
+#define GAIM_PROXY_USE_GLOBAL  PURPLE_PROXY_USE_GLOBAL
+#define GAIM_PROXY_NONE        PURPLE_PROXY_NONE
+#define GAIM_PROXY_HTTP        PURPLE_PROXY_HTTP
+#define GAIM_PROXY_SOCKS4      PURPLE_PROXY_SOCKS4
+#define GAIM_PROXY_SOCKS5      PURPLE_PROXY_SOCKS5
+#define GAIM_PROXY_USE_ENVVAR  PURPLE_PROXY_USE_ENVVAR
+#define GaimProxyType  PurpleProxyType
+
+#define GaimProxyInfo  PurpleProxyInfo
+
+#define GaimProxyConnectData      PurpleProxyConnectData
+#define GaimProxyConnectFunction  PurpleProxyConnectFunction
+
+#define gaim_proxy_info_new           purple_proxy_info_new
+#define gaim_proxy_info_destroy       purple_proxy_info_destroy
+#define gaim_proxy_info_set_type      purple_proxy_info_set_type
+#define gaim_proxy_info_set_host      purple_proxy_info_set_host
+#define gaim_proxy_info_set_port      purple_proxy_info_set_port
+#define gaim_proxy_info_set_username  purple_proxy_info_set_username
+#define gaim_proxy_info_set_password  purple_proxy_info_set_password
+#define gaim_proxy_info_get_type      purple_proxy_info_get_type
+#define gaim_proxy_info_get_host      purple_proxy_info_get_host
+#define gaim_proxy_info_get_port      purple_proxy_info_get_port
+#define gaim_proxy_info_get_username  purple_proxy_info_get_username
+#define gaim_proxy_info_get_password  purple_proxy_info_get_password
+
+#define gaim_global_proxy_get_info    purple_global_proxy_get_info
+#define gaim_proxy_get_handle         purple_proxy_get_handle
+#define gaim_proxy_init               purple_proxy_init
+#define gaim_proxy_uninit             purple_proxy_uninit
+#define gaim_proxy_get_setup          purple_proxy_get_setup
+
+#define gaim_proxy_connect                     purple_proxy_connect
+#define gaim_proxy_connect_socks5              purple_proxy_connect_socks5
+#define gaim_proxy_connect_cancel              purple_proxy_connect_cancel
+#define gaim_proxy_connect_cancel_with_handle  purple_proxy_connect_cancel_with_handle
 
 /* from prpl.h */
 
-#define PurplePluginProtocolInfo  PurplePluginProtocolInfo
-
-#define PURPLE_ICON_SCALE_DISPLAY  PURPLE_ICON_SCALE_DISPLAY
-#define PURPLE_ICON_SCALE_SEND     PURPLE_ICON_SCALE_SEND
-#define PurpleIconScaleRules  PurpleIconScaleRules
-
-#define PurpleBuddyIconSpec  PurpleBuddyIconSpec
-
-#define PurpleProtocolOptions  PurpleProtocolOptions
-
-#define PURPLE_IS_PROTOCOL_PLUGIN  PURPLE_IS_PROTOCOL_PLUGIN
-
-#define PURPLE_PLUGIN_PROTOCOL_INFO  PURPLE_PLUGIN_PROTOCOL_INFO
-
-#define purple_prpl_got_account_idle        purple_prpl_got_account_idle
-#define purple_prpl_got_account_login_time  purple_prpl_got_account_login_time
-#define purple_prpl_got_account_status      purple_prpl_got_account_status
-#define purple_prpl_got_user_idle           purple_prpl_got_user_idle
-#define purple_prpl_got_user_login_time     purple_prpl_got_user_login_time
-#define purple_prpl_got_user_status         purple_prpl_got_user_status
-#define purple_prpl_change_account_status   purple_prpl_change_account_status
-#define purple_prpl_get_statuses            purple_prpl_get_statuses
-
-#define purple_find_prpl  purple_find_prpl
+#define GaimPluginProtocolInfo  PurplePluginProtocolInfo
+
+#define GAIM_ICON_SCALE_DISPLAY  PURPLE_ICON_SCALE_DISPLAY
+#define GAIM_ICON_SCALE_SEND     PURPLE_ICON_SCALE_SEND
+#define GaimIconScaleRules  PurpleIconScaleRules
+
+#define GaimBuddyIconSpec  PurpleBuddyIconSpec
+
+#define GaimProtocolOptions  PurpleProtocolOptions
+
+#define GAIM_IS_PROTOCOL_PLUGIN  PURPLE_IS_PROTOCOL_PLUGIN
+
+#define GAIM_PLUGIN_PROTOCOL_INFO  PURPLE_PLUGIN_PROTOCOL_INFO
+
+#define gaim_prpl_got_account_idle        purple_prpl_got_account_idle
+#define gaim_prpl_got_account_login_time  purple_prpl_got_account_login_time
+#define gaim_prpl_got_account_status      purple_prpl_got_account_status
+#define gaim_prpl_got_user_idle           purple_prpl_got_user_idle
+#define gaim_prpl_got_user_login_time     purple_prpl_got_user_login_time
+#define gaim_prpl_got_user_status         purple_prpl_got_user_status
+#define gaim_prpl_change_account_status   purple_prpl_change_account_status
+#define gaim_prpl_get_statuses            purple_prpl_get_statuses
+
+#define gaim_find_prpl  purple_find_prpl
 
 /* from request.h */
 
-#define PURPLE_DEFAULT_ACTION_NONE  PURPLE_DEFAULT_ACTION_NONE
-
-#define PURPLE_REQUEST_INPUT   PURPLE_REQUEST_INPUT
-#define PURPLE_REQUEST_CHOICE  PURPLE_REQUEST_CHOICE
-#define PURPLE_REQUEST_ACTION  PURPLE_REQUEST_ACTION
-#define PURPLE_REQUEST_FIELDS  PURPLE_REQUEST_FIELDS
-#define PURPLE_REQUEST_FILE    PURPLE_REQUEST_FILE
-#define PURPLE_REQUEST_FOLDER  PURPLE_REQUEST_FOLDER
-#define PurpleRequestType  PurpleRequestType
-
-#define PURPLE_REQUEST_FIELD_NONE     PURPLE_REQUEST_FIELD_NONE
-#define PURPLE_REQUEST_FIELD_STRING   PURPLE_REQUEST_FIELD_STRING
-#define PURPLE_REQUEST_FIELD_INTEGER  PURPLE_REQUEST_FIELD_INTEGER
-#define PURPLE_REQUEST_FIELD_BOOLEAN  PURPLE_REQUEST_FIELD_BOOLEAN
-#define PURPLE_REQUEST_FIELD_CHOICE   PURPLE_REQUEST_FIELD_CHOICE
-#define PURPLE_REQUEST_FIELD_LIST     PURPLE_REQUEST_FIELD_LIST
-#define PURPLE_REQUEST_FIELD_LABEL    PURPLE_REQUEST_FIELD_LABEL
-#define PURPLE_REQUEST_FIELD_IMAGE    PURPLE_REQUEST_FIELD_IMAGE
-#define PURPLE_REQUEST_FIELD_ACCOUNT  PURPLE_REQUEST_FIELD_ACCOUNT
-#define PurpleRequestFieldType  PurpleRequestFieldType
-
-#define PurpleRequestFields  PurpleRequestFields
-
-#define PurpleRequestFieldGroup  PurpleRequestFieldGroup
-
-#define PurpleRequestField  PurpleRequestField
-
-#define PurpleRequestUiOps  PurpleRequestUiOps
-
-#define PurpleRequestInputCb   PurpleRequestInputCb
-#define PurpleRequestActionCb  PurpleRequestActionCb
-#define PurpleRequestChoiceCb  PurpleRequestChoiceCb
-#define PurpleRequestFieldsCb  PurpleRequestFieldsCb
-#define PurpleRequestFileCb    PurpleRequestFileCb
-
-#define purple_request_fields_new                  purple_request_fields_new
-#define purple_request_fields_destroy              purple_request_fields_destroy
-#define purple_request_fields_add_group            purple_request_fields_add_group
-#define purple_request_fields_get_groups           purple_request_fields_get_groups
-#define purple_request_fields_exists               purple_request_fields_exists
-#define purple_request_fields_get_required         purple_request_fields_get_required
-#define purple_request_fields_is_field_required    purple_request_fields_is_field_required
-#define purple_request_fields_all_required_filled  purple_request_fields_all_required_filled
-#define purple_request_fields_get_field            purple_request_fields_get_field
-#define purple_request_fields_get_string           purple_request_fields_get_string
-#define purple_request_fields_get_integer          purple_request_fields_get_integer
-#define purple_request_fields_get_bool             purple_request_fields_get_bool
-#define purple_request_fields_get_choice           purple_request_fields_get_choice
-#define purple_request_fields_get_account          purple_request_fields_get_account
-
-#define purple_request_field_group_new         purple_request_field_group_new
-#define purple_request_field_group_destroy     purple_request_field_group_destroy
-#define purple_request_field_group_add_field   purple_request_field_group_add_field
-#define purple_request_field_group_get_title   purple_request_field_group_get_title
-#define purple_request_field_group_get_fields  purple_request_field_group_get_fields
-
-#define purple_request_field_new            purple_request_field_new
-#define purple_request_field_destroy        purple_request_field_destroy
-#define purple_request_field_set_label      purple_request_field_set_label
-#define purple_request_field_set_visible    purple_request_field_set_visible
-#define purple_request_field_set_type_hint  purple_request_field_set_type_hint
-#define purple_request_field_set_required   purple_request_field_set_required
-#define purple_request_field_get_type       purple_request_field_get_type
-#define purple_request_field_get_id         purple_request_field_get_id
-#define purple_request_field_get_label      purple_request_field_get_label
-#define purple_request_field_is_visible     purple_request_field_is_visible
-#define purple_request_field_get_type_hint  purple_request_field_get_type_hint
-#define purple_request_field_is_required    purple_request_field_is_required
-
-#define purple_request_field_string_new           purple_request_field_string_new
-#define purple_request_field_string_set_default_value \
+#define GAIM_DEFAULT_ACTION_NONE  PURPLE_DEFAULT_ACTION_NONE
+
+#define GAIM_REQUEST_INPUT   PURPLE_REQUEST_INPUT
+#define GAIM_REQUEST_CHOICE  PURPLE_REQUEST_CHOICE
+#define GAIM_REQUEST_ACTION  PURPLE_REQUEST_ACTION
+#define GAIM_REQUEST_FIELDS  PURPLE_REQUEST_FIELDS
+#define GAIM_REQUEST_FILE    PURPLE_REQUEST_FILE
+#define GAIM_REQUEST_FOLDER  PURPLE_REQUEST_FOLDER
+#define GaimRequestType  PurpleRequestType
+
+#define GAIM_REQUEST_FIELD_NONE     PURPLE_REQUEST_FIELD_NONE
+#define GAIM_REQUEST_FIELD_STRING   PURPLE_REQUEST_FIELD_STRING
+#define GAIM_REQUEST_FIELD_INTEGER  PURPLE_REQUEST_FIELD_INTEGER
+#define GAIM_REQUEST_FIELD_BOOLEAN  PURPLE_REQUEST_FIELD_BOOLEAN
+#define GAIM_REQUEST_FIELD_CHOICE   PURPLE_REQUEST_FIELD_CHOICE
+#define GAIM_REQUEST_FIELD_LIST     PURPLE_REQUEST_FIELD_LIST
+#define GAIM_REQUEST_FIELD_LABEL    PURPLE_REQUEST_FIELD_LABEL
+#define GAIM_REQUEST_FIELD_IMAGE    PURPLE_REQUEST_FIELD_IMAGE
+#define GAIM_REQUEST_FIELD_ACCOUNT  PURPLE_REQUEST_FIELD_ACCOUNT
+#define GaimRequestFieldType  PurpleRequestFieldType
+
+#define GaimRequestFields  PurpleRequestFields
+
+#define GaimRequestFieldGroup  PurpleRequestFieldGroup
+
+#define GaimRequestField  PurpleRequestField
+
+#define GaimRequestUiOps  PurpleRequestUiOps
+
+#define GaimRequestInputCb   PurpleRequestInputCb
+#define GaimRequestActionCb  PurpleRequestActionCb
+#define GaimRequestChoiceCb  PurpleRequestChoiceCb
+#define GaimRequestFieldsCb  PurpleRequestFieldsCb
+#define GaimRequestFileCb    PurpleRequestFileCb
+
+#define gaim_request_fields_new                  purple_request_fields_new
+#define gaim_request_fields_destroy              purple_request_fields_destroy
+#define gaim_request_fields_add_group            purple_request_fields_add_group
+#define gaim_request_fields_get_groups           purple_request_fields_get_groups
+#define gaim_request_fields_exists               purple_request_fields_exists
+#define gaim_request_fields_get_required         purple_request_fields_get_required
+#define gaim_request_fields_is_field_required    purple_request_fields_is_field_required
+#define gaim_request_fields_all_required_filled  purple_request_fields_all_required_filled
+#define gaim_request_fields_get_field            purple_request_fields_get_field
+#define gaim_request_fields_get_string           purple_request_fields_get_string
+#define gaim_request_fields_get_integer          purple_request_fields_get_integer
+#define gaim_request_fields_get_bool             purple_request_fields_get_bool
+#define gaim_request_fields_get_choice           purple_request_fields_get_choice
+#define gaim_request_fields_get_account          purple_request_fields_get_account
+
+#define gaim_request_field_group_new         purple_request_field_group_new
+#define gaim_request_field_group_destroy     purple_request_field_group_destroy
+#define gaim_request_field_group_add_field   purple_request_field_group_add_field
+#define gaim_request_field_group_get_title   purple_request_field_group_get_title
+#define gaim_request_field_group_get_fields  purple_request_field_group_get_fields
+
+#define gaim_request_field_new            purple_request_field_new
+#define gaim_request_field_destroy        purple_request_field_destroy
+#define gaim_request_field_set_label      purple_request_field_set_label
+#define gaim_request_field_set_visible    purple_request_field_set_visible
+#define gaim_request_field_set_type_hint  purple_request_field_set_type_hint
+#define gaim_request_field_set_required   purple_request_field_set_required
+#define gaim_request_field_get_type       purple_request_field_get_type
+#define gaim_request_field_get_id         purple_request_field_get_id
+#define gaim_request_field_get_label      purple_request_field_get_label
+#define gaim_request_field_is_visible     purple_request_field_is_visible
+#define gaim_request_field_get_type_hint  purple_request_field_get_type_hint
+#define gaim_request_field_is_required    purple_request_field_is_required
+
+#define gaim_request_field_string_new           purple_request_field_string_new
+#define gaim_request_field_string_set_default_value \
 	purple_request_field_string_set_default_value
-#define purple_request_field_string_set_value     purple_request_field_string_set_value
-#define purple_request_field_string_set_masked    purple_request_field_string_set_masked
-#define purple_request_field_string_set_editable  purple_request_field_string_set_editable
-#define purple_request_field_string_get_default_value \
+#define gaim_request_field_string_set_value     purple_request_field_string_set_value
+#define gaim_request_field_string_set_masked    purple_request_field_string_set_masked
+#define gaim_request_field_string_set_editable  purple_request_field_string_set_editable
+#define gaim_request_field_string_get_default_value \
 	purple_request_field_string_get_default_value
-#define purple_request_field_string_get_value     purple_request_field_string_get_value
-#define purple_request_field_string_is_multiline  purple_request_field_string_is_multiline
-#define purple_request_field_string_is_masked     purple_request_field_string_is_masked
-#define purple_request_field_string_is_editable   purple_request_field_string_is_editable
-
-#define purple_request_field_int_new        purple_request_field_int_new
-#define purple_request_field_int_set_default_value \
+#define gaim_request_field_string_get_value     purple_request_field_string_get_value
+#define gaim_request_field_string_is_multiline  purple_request_field_string_is_multiline
+#define gaim_request_field_string_is_masked     purple_request_field_string_is_masked
+#define gaim_request_field_string_is_editable   purple_request_field_string_is_editable
+
+#define gaim_request_field_int_new        purple_request_field_int_new
+#define gaim_request_field_int_set_default_value \
 	purple_request_field_int_set_default_value
-#define purple_request_field_int_set_value  purple_request_field_int_set_value
-#define purple_request_field_int_get_default_value \
+#define gaim_request_field_int_set_value  purple_request_field_int_set_value
+#define gaim_request_field_int_get_default_value \
 	purple_request_field_int_get_default_value
-#define purple_request_field_int_get_value  purple_request_field_int_get_value
-
-#define purple_request_field_bool_new        purple_request_field_bool_new
-#define purple_request_field_bool_set_default_value \
+#define gaim_request_field_int_get_value  purple_request_field_int_get_value
+
+#define gaim_request_field_bool_new        purple_request_field_bool_new
+#define gaim_request_field_bool_set_default_value \
 	purple_request_field_book_set_default_value
-#define purple_request_field_bool_set_value  purple_request_field_bool_set_value
-#define purple_request_field_bool_get_default_value \
+#define gaim_request_field_bool_set_value  purple_request_field_bool_set_value
+#define gaim_request_field_bool_get_default_value \
 	purple_request_field_bool_get_default_value
-#define purple_request_field_bool_get_value  purple_request_field_bool_get_value
-
-#define purple_request_field_choice_new         purple_request_field_choice_new
-#define purple_request_field_choice_add         purple_request_field_choice_add
-#define purple_request_field_choice_set_default_value \
+#define gaim_request_field_bool_get_value  purple_request_field_bool_get_value
+
+#define gaim_request_field_choice_new         purple_request_field_choice_new
+#define gaim_request_field_choice_add         purple_request_field_choice_add
+#define gaim_request_field_choice_set_default_value \
 	purple_request_field_choice_set_default_value
-#define purple_request_field_choice_set_value   purple_request_field_choice_set_value
-#define purple_request_field_choice_get_default_value \
+#define gaim_request_field_choice_set_value   purple_request_field_choice_set_value
+#define gaim_request_field_choice_get_default_value \
 	purple_request_field_choice_get_default_value
-#define purple_request_field_choice_get_value   purple_request_field_choice_get_value
-#define purple_request_field_choice_get_labels  purple_request_field_choice_get_labels
-
-#define purple_request_field_list_new               purple_request_field_list_new
-#define purple_request_field_list_set_multi_select  purple_request_field_list_set_multi_select
-#define purple_request_field_list_get_multi_select  purple_request_field_list_get_multi_select
-#define purple_request_field_list_get_data          purple_request_field_list_get_data
-#define purple_request_field_list_add               purple_request_field_list_add
-#define purple_request_field_list_add_selected      purple_request_field_list_add_selected
-#define purple_request_field_list_clear_selected    purple_request_field_list_clear_selected
-#define purple_request_field_list_set_selected      purple_request_field_list_set_selected
-#define purple_request_field_list_is_selected       purple_request_field_list_is_selected
-#define purple_request_field_list_get_selected      purple_request_field_list_get_selected
-#define purple_request_field_list_get_items         purple_request_field_list_get_items
-
-#define purple_request_field_label_new  purple_request_field_label_new
-
-#define purple_request_field_image_new          purple_request_field_image_new
-#define purple_request_field_image_set_scale    purple_request_field_image_set_scale
-#define purple_request_field_image_get_buffer   purple_request_field_image_get_buffer
-#define purple_request_field_image_get_size     purple_request_field_image_get_size
-#define purple_request_field_image_get_scale_x  purple_request_field_image_get_scale_x
-#define purple_request_field_image_get_scale_y  purple_request_field_image_get_scale_y
-
-#define purple_request_field_account_new                purple_request_field_account_new
-#define purple_request_field_account_set_default_value  purple_request_field_account_set_default_value
-#define purple_request_field_account_set_value          purple_request_field_account_set_value
-#define purple_request_field_account_set_show_all       purple_request_field_account_set_show_all
-#define purple_request_field_account_set_filter         purple_request_field_account_set_filter
-#define purple_request_field_account_get_default_value  purple_request_field_account_get_default_value
-#define purple_request_field_account_get_value          purple_request_field_account_get_value
-#define purple_request_field_account_get_show_all       purple_request_field_account_get_show_all
-#define purple_request_field_account_get_filter         purple_request_field_account_get_filter
-
-#define purple_request_input              purple_request_input
-#define purple_request_choice             purple_request_choice
-#define purple_request_choice_varg        purple_request_choice_varg
-#define purple_request_action             purple_request_action
-#define purple_request_action_varg        purple_request_action_varg
-#define purple_request_fields             purple_request_fields
-#define purple_request_close              purple_request_close
-#define purple_request_close_with_handle  purple_request_close_with_handle
-
-#define purple_request_yes_no         purple_request_yes_no
-#define purple_request_ok_cancel      purple_request_ok_cancel
-#define purple_request_accept_cancel  purple_request_accept_cancel
-
-#define purple_request_file    purple_request_file
-#define purple_request_folder  purple_request_folder
-
-#define purple_request_set_ui_ops  purple_request_set_ui_ops
-#define purple_request_get_ui_ops  purple_request_get_ui_ops
+#define gaim_request_field_choice_get_value   purple_request_field_choice_get_value
+#define gaim_request_field_choice_get_labels  purple_request_field_choice_get_labels
+
+#define gaim_request_field_list_new               purple_request_field_list_new
+#define gaim_request_field_list_set_multi_select  purple_request_field_list_set_multi_select
+#define gaim_request_field_list_get_multi_select  purple_request_field_list_get_multi_select
+#define gaim_request_field_list_get_data          purple_request_field_list_get_data
+#define gaim_request_field_list_add               purple_request_field_list_add
+#define gaim_request_field_list_add_selected      purple_request_field_list_add_selected
+#define gaim_request_field_list_clear_selected    purple_request_field_list_clear_selected
+#define gaim_request_field_list_set_selected      purple_request_field_list_set_selected
+#define gaim_request_field_list_is_selected       purple_request_field_list_is_selected
+#define gaim_request_field_list_get_selected      purple_request_field_list_get_selected
+#define gaim_request_field_list_get_items         purple_request_field_list_get_items
+
+#define gaim_request_field_label_new  purple_request_field_label_new
+
+#define gaim_request_field_image_new          purple_request_field_image_new
+#define gaim_request_field_image_set_scale    purple_request_field_image_set_scale
+#define gaim_request_field_image_get_buffer   purple_request_field_image_get_buffer
+#define gaim_request_field_image_get_size     purple_request_field_image_get_size
+#define gaim_request_field_image_get_scale_x  purple_request_field_image_get_scale_x
+#define gaim_request_field_image_get_scale_y  purple_request_field_image_get_scale_y
+
+#define gaim_request_field_account_new                purple_request_field_account_new
+#define gaim_request_field_account_set_default_value  purple_request_field_account_set_default_value
+#define gaim_request_field_account_set_value          purple_request_field_account_set_value
+#define gaim_request_field_account_set_show_all       purple_request_field_account_set_show_all
+#define gaim_request_field_account_set_filter         purple_request_field_account_set_filter
+#define gaim_request_field_account_get_default_value  purple_request_field_account_get_default_value
+#define gaim_request_field_account_get_value          purple_request_field_account_get_value
+#define gaim_request_field_account_get_show_all       purple_request_field_account_get_show_all
+#define gaim_request_field_account_get_filter         purple_request_field_account_get_filter
+
+#define gaim_request_input              purple_request_input
+#define gaim_request_choice             purple_request_choice
+#define gaim_request_choice_varg        purple_request_choice_varg
+#define gaim_request_action             purple_request_action
+#define gaim_request_action_varg        purple_request_action_varg
+#define gaim_request_fields             purple_request_fields
+#define gaim_request_close              purple_request_close
+#define gaim_request_close_with_handle  purple_request_close_with_handle
+
+#define gaim_request_yes_no         purple_request_yes_no
+#define gaim_request_ok_cancel      purple_request_ok_cancel
+#define gaim_request_accept_cancel  purple_request_accept_cancel
+
+#define gaim_request_file    purple_request_file
+#define gaim_request_folder  purple_request_folder
+
+#define gaim_request_set_ui_ops  purple_request_set_ui_ops
+#define gaim_request_get_ui_ops  purple_request_get_ui_ops
 
 /* from roomlist.h */
 
-#define PurpleRoomlist       PurpleRoomlist
-#define PurpleRoomlistRoom   PurpleRoomlistRoom
-#define PurpleRoomlistField  PurpleRoomlistField
-#define PurpleRoomlistUiOps  PurpleRoomlistUiOps
-
-#define PURPLE_ROOMLIST_ROOMTYPE_CATEGORY  PURPLE_ROOMLIST_ROOMTYPE_CATEGORY
-#define PURPLE_ROOMLIST_ROOMTYPE_ROOM      PURPLE_ROOMLIST_ROOMTYPE_ROOM
-#define PurpleRoomlistRoomType  PurpleRoomlistRoomType
-
-#define PURPLE_ROOMLIST_FIELD_BOOL    PURPLE_ROOMLIST_BOOL
-#define PURPLE_ROOMLIST_FIELD_INT     PURPLE_ROOMLIST_INT
-#define PURPLE_ROOMLIST_FIELD_STRING  PURPLE_ROOMLIST_STRING
-#define PurpleRoomlistFieldType  PurpleRoomlistFieldType
-
-#define purple_roomlist_show_with_account  purple_roomlist_show_with_account
-#define purple_roomlist_new                purple_roomlist_new
-#define purple_roomlist_ref                purple_roomlist_ref
-#define purple_roomlist_unref              purple_roomlist_unref
-#define purple_roomlist_set_fields         purple_roomlist_set_fields
-#define purple_roomlist_set_in_progress    purple_roomlist_set_in_progress
-#define purple_roomlist_get_in_progress    purple_roomlist_get_in_progress
-#define purple_roomlist_room_add           purple_roomlist_room_add
-
-#define purple_roomlist_get_list         purple_roomlist_get_list
-#define purple_roomlist_cancel_get_list  purple_roomlist_cancel_get_list
-#define purple_roomlist_expand_category  purple_roomlist_expand_category
-
-#define purple_roomlist_room_new        purple_roomlist_room_new
-#define purple_roomlist_room_add_field  purple_roomlist_room_add_field
-#define purple_roomlist_room_join       purple_roomlist_room_join
-#define purple_roomlist_field_new       purple_roomlist_field_new
-
-#define purple_roomlist_set_ui_ops  purple_roomlist_set_ui_ops
-#define purple_roomlist_get_ui_ops  purple_roomlist_get_ui_ops
+#define GaimRoomlist       PurpleRoomlist
+#define GaimRoomlistRoom   PurpleRoomlistRoom
+#define GaimRoomlistField  PurpleRoomlistField
+#define GaimRoomlistUiOps  PurpleRoomlistUiOps
+
+#define GAIM_ROOMLIST_ROOMTYPE_CATEGORY  PURPLE_ROOMLIST_ROOMTYPE_CATEGORY
+#define GAIM_ROOMLIST_ROOMTYPE_ROOM      PURPLE_ROOMLIST_ROOMTYPE_ROOM
+#define GaimRoomlistRoomType  PurpleRoomlistRoomType
+
+#define GAIM_ROOMLIST_FIELD_BOOL    PURPLE_ROOMLIST_BOOL
+#define GAIM_ROOMLIST_FIELD_INT     PURPLE_ROOMLIST_INT
+#define GAIM_ROOMLIST_FIELD_STRING  PURPLE_ROOMLIST_STRING
+#define GaimRoomlistFieldType  PurpleRoomlistFieldType
+
+#define gaim_roomlist_show_with_account  purple_roomlist_show_with_account
+#define gaim_roomlist_new                purple_roomlist_new
+#define gaim_roomlist_ref                purple_roomlist_ref
+#define gaim_roomlist_unref              purple_roomlist_unref
+#define gaim_roomlist_set_fields         purple_roomlist_set_fields
+#define gaim_roomlist_set_in_progress    purple_roomlist_set_in_progress
+#define gaim_roomlist_get_in_progress    purple_roomlist_get_in_progress
+#define gaim_roomlist_room_add           purple_roomlist_room_add
+
+#define gaim_roomlist_get_list         purple_roomlist_get_list
+#define gaim_roomlist_cancel_get_list  purple_roomlist_cancel_get_list
+#define gaim_roomlist_expand_category  purple_roomlist_expand_category
+
+#define gaim_roomlist_room_new        purple_roomlist_room_new
+#define gaim_roomlist_room_add_field  purple_roomlist_room_add_field
+#define gaim_roomlist_room_join       purple_roomlist_room_join
+#define gaim_roomlist_field_new       purple_roomlist_field_new
+
+#define gaim_roomlist_set_ui_ops  purple_roomlist_set_ui_ops
+#define gaim_roomlist_get_ui_ops  purple_roomlist_get_ui_ops
 
 /* from savedstatuses.h */
 
-#define PurpleSavedStatus     PurpleSavedStatus
-#define PurpleSavedStatusSub  PurpleSavedStatusSub
-
-#define purple_savedstatus_new              purple_savedstatus_new
-#define purple_savedstatus_set_title        purple_savedstatus_set_title
-#define purple_savedstatus_set_type         purple_savedstatus_set_type
-#define purple_savedstatus_set_message      purple_savedstatus_set_message
-#define purple_savedstatus_set_substatus    purple_savedstatus_set_substatus
-#define purple_savedstatus_unset_substatus  purple_savedstatus_unset_substatus
-#define purple_savedstatus_delete           purple_savedstatus_delete
-
-#define purple_savedstatuses_get_all              purple_savedstatuses_get_all
-#define purple_savedstatuses_get_popular          purple_savedstatuses_get_popular
-#define purple_savedstatus_get_current            purple_savedstatus_get_current
-#define purple_savedstatus_get_default            purple_savedstatus_get_default
-#define purple_savedstatus_get_idleaway           purple_savedstatus_get_idleaway
-#define purple_savedstatus_is_idleaway            purple_savedstatus_is_idleaway
-#define purple_savedstatus_set_idleaway           purple_savedstatus_set_idleaway
-#define purple_savedstatus_get_startup            purple_savedstatus_get_startup
-#define purple_savedstatus_find                   purple_savedstatus_find
-#define purple_savedstatus_find_by_creation_time  purple_savedstatus_find_by_creation_time
-#define purple_savedstatus_find_transient_by_type_and_message \
+#define GaimSavedStatus     PurpleSavedStatus
+#define GaimSavedStatusSub  PurpleSavedStatusSub
+
+#define gaim_savedstatus_new              purple_savedstatus_new
+#define gaim_savedstatus_set_title        purple_savedstatus_set_title
+#define gaim_savedstatus_set_type         purple_savedstatus_set_type
+#define gaim_savedstatus_set_message      purple_savedstatus_set_message
+#define gaim_savedstatus_set_substatus    purple_savedstatus_set_substatus
+#define gaim_savedstatus_unset_substatus  purple_savedstatus_unset_substatus
+#define gaim_savedstatus_delete           purple_savedstatus_delete
+
+#define gaim_savedstatuses_get_all              purple_savedstatuses_get_all
+#define gaim_savedstatuses_get_popular          purple_savedstatuses_get_popular
+#define gaim_savedstatus_get_current            purple_savedstatus_get_current
+#define gaim_savedstatus_get_default            purple_savedstatus_get_default
+#define gaim_savedstatus_get_idleaway           purple_savedstatus_get_idleaway
+#define gaim_savedstatus_is_idleaway            purple_savedstatus_is_idleaway
+#define gaim_savedstatus_set_idleaway           purple_savedstatus_set_idleaway
+#define gaim_savedstatus_get_startup            purple_savedstatus_get_startup
+#define gaim_savedstatus_find                   purple_savedstatus_find
+#define gaim_savedstatus_find_by_creation_time  purple_savedstatus_find_by_creation_time
+#define gaim_savedstatus_find_transient_by_type_and_message \
 	purple_savedstatus_find_transient_by_type_and_message
 
-#define purple_savedstatus_is_transient           purple_savedstatus_is_transient
-#define purple_savedstatus_get_title              purple_savedstatus_get_title
-#define purple_savedstatus_get_type               purple_savedstatus_get_type
-#define purple_savedstatus_get_message            purple_savedstatus_get_message
-#define purple_savedstatus_get_creation_time      purple_savedstatus_get_creation_time
-#define purple_savedstatus_has_substatuses        purple_savedstatus_has_substatuses
-#define purple_savedstatus_get_substatus          purple_savedstatus_get_substatus
-#define purple_savedstatus_substatus_get_type     purple_savedstatus_substatus_get_type
-#define purple_savedstatus_substatus_get_message  purple_savedstatus_substatus_get_message
-#define purple_savedstatus_activate               purple_savedstatus_activate
-#define purple_savedstatus_activate_for_account   purple_savedstatus_activate_for_account
-
-#define purple_savedstatuses_get_handle  purple_savedstatuses_get_handle
-#define purple_savedstatuses_init        purple_savedstatuses_init
-#define purple_savedstatuses_uninit      purple_savedstatuses_uninit
+#define gaim_savedstatus_is_transient           purple_savedstatus_is_transient
+#define gaim_savedstatus_get_title              purple_savedstatus_get_title
+#define gaim_savedstatus_get_type               purple_savedstatus_get_type
+#define gaim_savedstatus_get_message            purple_savedstatus_get_message
+#define gaim_savedstatus_get_creation_time      purple_savedstatus_get_creation_time
+#define gaim_savedstatus_has_substatuses        purple_savedstatus_has_substatuses
+#define gaim_savedstatus_get_substatus          purple_savedstatus_get_substatus
+#define gaim_savedstatus_substatus_get_type     purple_savedstatus_substatus_get_type
+#define gaim_savedstatus_substatus_get_message  purple_savedstatus_substatus_get_message
+#define gaim_savedstatus_activate               purple_savedstatus_activate
+#define gaim_savedstatus_activate_for_account   purple_savedstatus_activate_for_account
+
+#define gaim_savedstatuses_get_handle  purple_savedstatuses_get_handle
+#define gaim_savedstatuses_init        purple_savedstatuses_init
+#define gaim_savedstatuses_uninit      purple_savedstatuses_uninit
 
 /* from signals.h */
 
-#define PURPLE_CALLBACK  PURPLE_CALLBACK
-
-#define PurpleCallback           PurpleCallback
-#define PurpleSignalMarshalFunc  PurpleSignalMarshalFunc
-
-#define PURPLE_SIGNAL_PRIORITY_DEFAULT  PURPLE_SIGNAL_PRIORITY_DEFAULT
-#define PURPLE_SIGNAL_PRIORITY_HIGHEST  PURPLE_SIGNAL_PRIORITY_HIGHEST
-#define PURPLE_SIGNAL_PRIORITY_LOWEST   PURPLE_SIGNAL_PRIORITY_LOWEST
-
-#define purple_signal_register    purple_signal_register
-#define purple_signal_unregister  purple_signal_unregister
-
-#define purple_signals_unregister_by_instance  purple_signals_unregister_by_instance
-
-#define purple_signal_get_values              purple_signal_get_values
-#define purple_signal_connect_priority        purple_signal_connect_priority
-#define purple_signal_connect                 purple_signal_connect
-#define purple_signal_connect_priority_vargs  purple_signal_connect_priority_vargs
-#define purple_signal_connect_vargs           purple_signal_connect_vargs
-#define purple_signal_disconnect              purple_signal_disconnect
-
-#define purple_signals_disconnect_by_handle  purple_signals_disconnect_by_handle
-
-#define purple_signal_emit                 purple_signal_emit
-#define purple_signal_emit_vargs           purple_signal_emit_vargs
-#define purple_signal_emit_return_1        purple_signal_emit_vargs
-#define purple_signal_emit_vargs_return_1  purple_signal_emit_vargs_return_1
-
-#define purple_signals_init    purple_signals_init
-#define purple_signals_uninit  purple_signals_uninit
-
-#define purple_marshal_VOID \
+#define GAIM_CALLBACK  PURPLE_CALLBACK
+
+#define GaimCallback           PurpleCallback
+#define GaimSignalMarshalFunc  PurpleSignalMarshalFunc
+
+#define GAIM_SIGNAL_PRIORITY_DEFAULT  PURPLE_SIGNAL_PRIORITY_DEFAULT
+#define GAIM_SIGNAL_PRIORITY_HIGHEST  PURPLE_SIGNAL_PRIORITY_HIGHEST
+#define GAIM_SIGNAL_PRIORITY_LOWEST   PURPLE_SIGNAL_PRIORITY_LOWEST
+
+#define gaim_signal_register    purple_signal_register
+#define gaim_signal_unregister  purple_signal_unregister
+
+#define gaim_signals_unregister_by_instance  purple_signals_unregister_by_instance
+
+#define gaim_signal_get_values              purple_signal_get_values
+#define gaim_signal_connect_priority        purple_signal_connect_priority
+#define gaim_signal_connect                 purple_signal_connect
+#define gaim_signal_connect_priority_vargs  purple_signal_connect_priority_vargs
+#define gaim_signal_connect_vargs           purple_signal_connect_vargs
+#define gaim_signal_disconnect              purple_signal_disconnect
+
+#define gaim_signals_disconnect_by_handle  purple_signals_disconnect_by_handle
+
+#define gaim_signal_emit                 purple_signal_emit
+#define gaim_signal_emit_vargs           purple_signal_emit_vargs
+#define gaim_signal_emit_return_1        purple_signal_emit_vargs
+#define gaim_signal_emit_vargs_return_1  purple_signal_emit_vargs_return_1
+
+#define gaim_signals_init    purple_signals_init
+#define gaim_signals_uninit  purple_signals_uninit
+
+#define gaim_marshal_VOID \
 	purple_marshal_VOID
-#define purple_marshal_VOID__INT \
+#define gaim_marshal_VOID__INT \
 	purple_marshal_VOID__INT
-#define purple_marshal_VOID__INT_INT \
+#define gaim_marshal_VOID__INT_INT \
 	purple_marshal_VOID_INT_INT
-#define purple_marshal_VOID__POINTER \
+#define gaim_marshal_VOID__POINTER \
 	purple_marshal_VOID__POINTER
-#define purple_marshal_VOID__POINTER_UINT \
+#define gaim_marshal_VOID__POINTER_UINT \
 	purple_marshal_VOID__POINTER_UINT
-#define purple_marshal_VOID__POINTER_INT_INT \
+#define gaim_marshal_VOID__POINTER_INT_INT \
 	purple_marshal_VOID__POINTER_INT_INT
-#define purple_marshal_VOID__POINTER_POINTER \
+#define gaim_marshal_VOID__POINTER_POINTER \
 	purple_marshal_VOID__POINTER_POINTER
-#define purple_marshal_VOID__POINTER_POINTER_UINT \
+#define gaim_marshal_VOID__POINTER_POINTER_UINT \
 	purple_marshal_VOID__POINTER_POINTER_UINT
-#define purple_marshal_VOID__POINTER_POINTER_UINT_UINT \
+#define gaim_marshal_VOID__POINTER_POINTER_UINT_UINT \
 	purple_marshal_VOID__POINTER_POINTER_UINT_UINT
-#define purple_marshal_VOID__POINTER_POINTER_POINTER \
+#define gaim_marshal_VOID__POINTER_POINTER_POINTER \
 	purple_marshal_VOID__POINTER_POINTER_POINTER
-#define purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER \
+#define gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER \
 	purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER
-#define purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER \
+#define gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER \
 	purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER
-#define purple_marshal_VOID__POINTER_POINTER_POINTER_UINT \
+#define gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT \
 	purple_marshal_VOID__POINTER_POINTER_POINTER_UINT
-#define purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT \
+#define gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT \
 	purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT
-#define purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT \
+#define gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT \
 	purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT
 
-#define purple_marshal_INT__INT \
+#define gaim_marshal_INT__INT \
 	purple_marshal_INT__INT
-#define purple_marshal_INT__INT_INT \
+#define gaim_marshal_INT__INT_INT \
 	purple_marshal_INT__INT_INT
-#define purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER \
+#define gaim_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER \
 	purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER
 
-#define purple_marshal_BOOLEAN__POINTER \
+#define gaim_marshal_BOOLEAN__POINTER \
 	purple_marshal_BOOLEAN__POINTER
-#define purple_marshal_BOOLEAN__POINTER_POINTER \
+#define gaim_marshal_BOOLEAN__POINTER_POINTER \
 	purple_marshal_BOOLEAN__POINTER_POINTER
-#define purple_marshal_BOOLEAN__POINTER_POINTER_POINTER \
+#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER \
 	purple_marshal_BOOLEAN__POINTER_POINTER_POINTER
-#define purple_marshal_BOOLEAN__POINTER_POINTER_UINT \
+#define gaim_marshal_BOOLEAN__POINTER_POINTER_UINT \
 	purple_marshal_BOOLEAN__POINTER_POINTER_UINT
-#define purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT \
+#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT \
 	purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT
-#define purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER \
+#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER \
 	purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER
-#define purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER \
+#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER \
 	purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER
 
-#define purple_marshal_BOOLEAN__INT_POINTER \
+#define gaim_marshal_BOOLEAN__INT_POINTER \
 	purple_marshal_BOOLEAN__INT_POINTER
 
-#define purple_marshal_POINTER__POINTER_INT \
+#define gaim_marshal_POINTER__POINTER_INT \
 	purple_marshal_POINTER__POINTER_INT
-#define purple_marshal_POINTER__POINTER_INT64 \
+#define gaim_marshal_POINTER__POINTER_INT64 \
 	purple_marshal_POINTER__POINTER_INT64
-#define purple_marshal_POINTER__POINTER_INT_BOOLEAN \
+#define gaim_marshal_POINTER__POINTER_INT_BOOLEAN \
 	purple_marshal_POINTER__POINTER_INT_BOOLEAN
-#define purple_marshal_POINTER__POINTER_INT64_BOOLEAN \
+#define gaim_marshal_POINTER__POINTER_INT64_BOOLEAN \
 	purple_marshal_POINTER__POINTER_INT64_BOOLEAN
-#define purple_marshal_POINTER__POINTER_POINTER \
+#define gaim_marshal_POINTER__POINTER_POINTER \
 	purple_marshal_POINTER__POINTER_POINTER
 
 /* from sound.h */
 
-#define PURPLE_SOUND_BUDDY_ARRIVE    PURPLE_SOUND_BUDDY_ARRIVE
-#define PURPLE_SOUND_BUDDY_LEAVE     PURPLE_SOUND_BUDDY_LEAVE
-#define PURPLE_SOUND_RECEIVE         PURPLE_SOUND_RECEIVE
-#define PURPLE_SOUND_FIRST_RECEIVE   PURPLE_SOUND_FIRST_RECEIVE
-#define PURPLE_SOUND_SEND            PURPLE_SOUND_SEND
-#define PURPLE_SOUND_CHAT_JOIN       PURPLE_SOUND_CHAT_JOIN
-#define PURPLE_SOUND_CHAT_LEAVE      PURPLE_SOUND_CHAT_LEAVE
-#define PURPLE_SOUND_CHAT_YOU_SAY    PURPLE_SOUND_CHAT_YOU_SAY
-#define PURPLE_SOUND_CHAT_SAY        PURPLE_SOUND_CHAT_SAY
-#define PURPLE_SOUND_POUNCE_DEFAULT  PURPLE_SOUND_POUNCE_DEFAULT
-#define PURPLE_SOUND_CHAT_NICK       PURPLE_SOUND_CHAT_NICK
-#define PURPLE_NUM_SOUNDS            PURPLE_NUM_SOUNDS
-#define PurpleSoundEventID  PurpleSoundEventID
-
-#define PurpleSoundUiOps  PurpleSoundUiOps
-
-#define purple_sound_play_file   purple_sound_play_file
-#define purple_sound_play_event  purple_sound_play_event
-#define purple_sound_set_ui_ops  purple_sound_set_ui_ops
-#define purple_sound_get_ui_ops  purple_sound_get_ui_ops
-#define purple_sound_init        purple_sound_init
-#define purple_sound_uninit      purple_sound_uninit
-
-#define purple_sounds_get_handle  purple_sounds_get_handle
+#define GAIM_SOUND_BUDDY_ARRIVE    PURPLE_SOUND_BUDDY_ARRIVE
+#define GAIM_SOUND_BUDDY_LEAVE     PURPLE_SOUND_BUDDY_LEAVE
+#define GAIM_SOUND_RECEIVE         PURPLE_SOUND_RECEIVE
+#define GAIM_SOUND_FIRST_RECEIVE   PURPLE_SOUND_FIRST_RECEIVE
+#define GAIM_SOUND_SEND            PURPLE_SOUND_SEND
+#define GAIM_SOUND_CHAT_JOIN       PURPLE_SOUND_CHAT_JOIN
+#define GAIM_SOUND_CHAT_LEAVE      PURPLE_SOUND_CHAT_LEAVE
+#define GAIM_SOUND_CHAT_YOU_SAY    PURPLE_SOUND_CHAT_YOU_SAY
+#define GAIM_SOUND_CHAT_SAY        PURPLE_SOUND_CHAT_SAY
+#define GAIM_SOUND_POUNCE_DEFAULT  PURPLE_SOUND_POUNCE_DEFAULT
+#define GAIM_SOUND_CHAT_NICK       PURPLE_SOUND_CHAT_NICK
+#define GAIM_NUM_SOUNDS            PURPLE_NUM_SOUNDS
+#define GaimSoundEventID  PurpleSoundEventID
+
+#define GaimSoundUiOps  PurpleSoundUiOps
+
+#define gaim_sound_play_file   purple_sound_play_file
+#define gaim_sound_play_event  purple_sound_play_event
+#define gaim_sound_set_ui_ops  purple_sound_set_ui_ops
+#define gaim_sound_get_ui_ops  purple_sound_get_ui_ops
+#define gaim_sound_init        purple_sound_init
+#define gaim_sound_uninit      purple_sound_uninit
+
+#define gaim_sounds_get_handle  purple_sounds_get_handle
 
 /* from sslconn.h */
 
-#define PURPLE_SSL_DEFAULT_PORT  PURPLE_SSL_DEFAULT_PORT
-
-#define PURPLE_SSL_HANDSHAKE_FAILED  PURPLE_SSL_HANDSHAKE_FAILED
-#define PURPLE_SSL_CONNECT_FAILED    PURPLE_SSL_CONNECT_FAILED
-#define PurpleSslErrorType  PurpleSslErrorType
-
-#define PurpleSslConnection  PurpleSslConnection
-
-#define PurpleSslInputFunction  PurpleSslInputFunction
-#define PurpleSslErrorFunction  PurpleSslErrorFunction
-
-#define PurpleSslOps  PurpleSslOps
-
-#define purple_ssl_is_supported  purple_ssl_is_supported
-#define purple_ssl_connect       purple_ssl_connect
-#define purple_ssl_connect_fd    purple_ssl_connect_fd
-#define purple_ssl_input_add     purple_ssl_input_add
-#define purple_ssl_close         purple_ssl_close
-#define purple_ssl_read          purple_ssl_read
-#define purple_ssl_write         purple_ssl_write
-
-#define purple_ssl_set_ops  purple_ssl_set_ops
-#define purple_ssl_get_ops  purple_ssl_get_ops
-#define purple_ssl_init     purple_ssl_init
-#define purple_ssl_uninit   purple_ssl_uninit
+#define GAIM_SSL_DEFAULT_PORT  PURPLE_SSL_DEFAULT_PORT
+
+#define GAIM_SSL_HANDSHAKE_FAILED  PURPLE_SSL_HANDSHAKE_FAILED
+#define GAIM_SSL_CONNECT_FAILED    PURPLE_SSL_CONNECT_FAILED
+#define GaimSslErrorType  PurpleSslErrorType
+
+#define GaimSslConnection  PurpleSslConnection
+
+#define GaimSslInputFunction  PurpleSslInputFunction
+#define GaimSslErrorFunction  PurpleSslErrorFunction
+
+#define GaimSslOps  PurpleSslOps
+
+#define gaim_ssl_is_supported  purple_ssl_is_supported
+#define gaim_ssl_connect       purple_ssl_connect
+#define gaim_ssl_connect_fd    purple_ssl_connect_fd
+#define gaim_ssl_input_add     purple_ssl_input_add
+#define gaim_ssl_close         purple_ssl_close
+#define gaim_ssl_read          purple_ssl_read
+#define gaim_ssl_write         purple_ssl_write
+
+#define gaim_ssl_set_ops  purple_ssl_set_ops
+#define gaim_ssl_get_ops  purple_ssl_get_ops
+#define gaim_ssl_init     purple_ssl_init
+#define gaim_ssl_uninit   purple_ssl_uninit
 
 /* from status.h */
 
-#define PurpleStatusType  PurpleStatusType
-#define PurpleStatusAttr  PurpleStatusAttr
-#define PurplePresence    PurplePresence
-#define PurpleStatus      PurpleStatus
-
-#define PURPLE_PRESENCE_CONTEXT_UNSET    PURPLE_PRESENCE_CONTEXT_UNSET
-#define PURPLE_PRESENCE_CONTEXT_ACCOUNT  PURPLE_PRESENCE_CONTEXT_ACCOUNT
-#define PURPLE_PRESENCE_CONTEXT_CONV     PURPLE_PRESENCE_CONTEXT_CONV
-#define PURPLE_PRESENCE_CONTEXT_BUDDY    PURPLE_PRESENCE_CONTEXT_BUDDY
-#define PurplePresenceContext  PurplePresenceContext
-
-#define PURPLE_STATUS_UNSET           PURPLE_STATUS_UNSET
-#define PURPLE_STATUS_OFFLINE         PURPLE_STATUS_OFFLINE
-#define PURPLE_STATUS_AVAILABLE       PURPLE_STATUS_AVAILABLE
-#define PURPLE_STATUS_UNAVAILABLE     PURPLE_STATUS_UNAVAILABLE
-#define PURPLE_STATUS_INVISIBLE       PURPLE_STATUS_INVISIBLE
-#define PURPLE_STATUS_AWAY            PURPLE_STATUS_AWAY
-#define PURPLE_STATUS_EXTENDED_AWAY   PURPLE_STATUS_EXTENDED_AWAY
-#define PURPLE_STATUS_MOBILE          PURPLE_STATUS_MOBILE
-#define PURPLE_STATUS_NUM_PRIMITIVES  PURPLE_STATUS_NUM_PRIMITIVES
-#define PurpleStatusPrimitive  PurpleStatusPrimitive
-
-#define purple_primitive_get_id_from_type    purple_primitive_get_id_from_type
-#define purple_primitive_get_name_from_type  purple_primitive_get_name_from_type
-#define purple_primitive_get_type_from_id    purple_primitive_get_type_from_id
-
-#define purple_status_type_new_full          purple_status_type_new_full
-#define purple_status_type_new               purple_status_type_new
-#define purple_status_type_new_with_attrs    purple_status_type_new_with_attrs
-#define purple_status_type_destroy           purple_status_type_destroy
-#define purple_status_type_set_primary_attr  purple_status_type_set_primary_attr
-#define purple_status_type_add_attr          purple_status_type_add_attr
-#define purple_status_type_add_attrs         purple_status_type_add_attrs
-#define purple_status_type_add_attrs_vargs   purple_status_type_add_attrs_vargs
-#define purple_status_type_get_primitive     purple_status_type_get_primitive
-#define purple_status_type_get_id            purple_status_type_get_id
-#define purple_status_type_get_name          purple_status_type_get_name
-#define purple_status_type_is_saveable       purple_status_type_is_saveable
-#define purple_status_type_is_user_settable  purple_status_type_is_user_settable
-#define purple_status_type_is_independent    purple_status_type_is_independent
-#define purple_status_type_is_exclusive      purple_status_type_is_exclusive
-#define purple_status_type_is_available      purple_status_type_is_available
-#define purple_status_type_get_primary_attr  purple_status_type_get_primary_attr
-#define purple_status_type_get_attr          purple_status_type_get_attr
-#define purple_status_type_get_attrs         purple_status_type_get_attrs
-#define purple_status_type_find_with_id      purple_status_type_find_with_id
-
-#define purple_status_attr_new        purple_status_attr_new
-#define purple_status_attr_destroy    purple_status_attr_destroy
-#define purple_status_attr_get_id     purple_status_attr_get_id
-#define purple_status_attr_get_name   purple_status_attr_get_name
-#define purple_status_attr_get_value  purple_status_attr_get_value
-
-#define purple_status_new                         purple_status_new
-#define purple_status_destroy                     purple_status_destroy
-#define purple_status_set_active                  purple_status_set_active
-#define purple_status_set_active_with_attrs       purple_status_set_active_with_attrs
-#define purple_status_set_active_with_attrs_list  purple_status_set_active_with_attrs_list
-#define purple_status_set_attr_boolean            purple_status_set_attr_boolean
-#define purple_status_set_attr_int                purple_status_set_attr_int
-#define purple_status_set_attr_string             purple_status_set_attr_string
-#define purple_status_get_type                    purple_status_get_type
-#define purple_status_get_presence                purple_status_get_presence
-#define purple_status_get_id                      purple_status_get_id
-#define purple_status_get_name                    purple_status_get_name
-#define purple_status_is_independent              purple_status_is_independent
-#define purple_status_is_exclusive                purple_status_is_exclusive
-#define purple_status_is_available                purple_status_is_available
-#define purple_status_is_active                   purple_status_is_active
-#define purple_status_is_online                   purple_status_is_online
-#define purple_status_get_attr_value              purple_status_get_attr_value
-#define purple_status_get_attr_boolean            purple_status_get_attr_boolean
-#define purple_status_get_attr_int                purple_status_get_attr_int
-#define purple_status_get_attr_string             purple_status_get_attr_string
-#define purple_status_compare                     purple_status_compare
-
-#define purple_presence_new                purple_presence_new
-#define purple_presence_new_for_account    purple_presence_new_for_account
-#define purple_presence_new_for_conv       purple_presence_new_for_conv
-#define purple_presence_new_for_buddy      purple_presence_new_for_buddy
-#define purple_presence_destroy            purple_presence_destroy
-#define purple_presence_remove_buddy       purple_presence_remove_buddy
-#define purple_presence_add_status         purple_presence_add_status
-#define purple_presence_add_list           purple_presence_add_list
-#define purple_presence_set_status_active  purple_presence_set_status_active
-#define purple_presence_switch_status      purple_presence_switch_status
-#define purple_presence_set_idle           purple_presence_set_idle
-#define purple_presence_set_login_time     purple_presence_set_login_time
-#define purple_presence_get_context        purple_presence_get_context
-#define purple_presence_get_account        purple_presence_get_account
-#define purple_presence_get_conversation   purple_presence_get_conversation
-#define purple_presence_get_chat_user      purple_presence_get_chat_user
-#define purple_presence_get_buddies        purple_presence_get_buddies
-#define purple_presence_get_statuses       purple_presence_get_statuses
-#define purple_presence_get_status         purple_presence_get_status
-#define purple_presence_get_active_status  purple_presence_get_active_status
-#define purple_presence_is_available       purple_presence_is_available
-#define purple_presence_is_online          purple_presence_is_online
-#define purple_presence_is_status_active   purple_presence_is_status_active
-#define purple_presence_is_status_primitive_active \
+#define GaimStatusType  PurpleStatusType
+#define GaimStatusAttr  PurpleStatusAttr
+#define GaimPresence    PurplePresence
+#define GaimStatus      PurpleStatus
+
+#define GAIM_PRESENCE_CONTEXT_UNSET    PURPLE_PRESENCE_CONTEXT_UNSET
+#define GAIM_PRESENCE_CONTEXT_ACCOUNT  PURPLE_PRESENCE_CONTEXT_ACCOUNT
+#define GAIM_PRESENCE_CONTEXT_CONV     PURPLE_PRESENCE_CONTEXT_CONV
+#define GAIM_PRESENCE_CONTEXT_BUDDY    PURPLE_PRESENCE_CONTEXT_BUDDY
+#define GaimPresenceContext  PurplePresenceContext
+
+#define GAIM_STATUS_UNSET           PURPLE_STATUS_UNSET
+#define GAIM_STATUS_OFFLINE         PURPLE_STATUS_OFFLINE
+#define GAIM_STATUS_AVAILABLE       PURPLE_STATUS_AVAILABLE
+#define GAIM_STATUS_UNAVAILABLE     PURPLE_STATUS_UNAVAILABLE
+#define GAIM_STATUS_INVISIBLE       PURPLE_STATUS_INVISIBLE
+#define GAIM_STATUS_AWAY            PURPLE_STATUS_AWAY
+#define GAIM_STATUS_EXTENDED_AWAY   PURPLE_STATUS_EXTENDED_AWAY
+#define GAIM_STATUS_MOBILE          PURPLE_STATUS_MOBILE
+#define GAIM_STATUS_NUM_PRIMITIVES  PURPLE_STATUS_NUM_PRIMITIVES
+#define GaimStatusPrimitive  PurpleStatusPrimitive
+
+#define gaim_primitive_get_id_from_type    purple_primitive_get_id_from_type
+#define gaim_primitive_get_name_from_type  purple_primitive_get_name_from_type
+#define gaim_primitive_get_type_from_id    purple_primitive_get_type_from_id
+
+#define gaim_status_type_new_full          purple_status_type_new_full
+#define gaim_status_type_new               purple_status_type_new
+#define gaim_status_type_new_with_attrs    purple_status_type_new_with_attrs
+#define gaim_status_type_destroy           purple_status_type_destroy
+#define gaim_status_type_set_primary_attr  purple_status_type_set_primary_attr
+#define gaim_status_type_add_attr          purple_status_type_add_attr
+#define gaim_status_type_add_attrs         purple_status_type_add_attrs
+#define gaim_status_type_add_attrs_vargs   purple_status_type_add_attrs_vargs
+#define gaim_status_type_get_primitive     purple_status_type_get_primitive
+#define gaim_status_type_get_id            purple_status_type_get_id
+#define gaim_status_type_get_name          purple_status_type_get_name
+#define gaim_status_type_is_saveable       purple_status_type_is_saveable
+#define gaim_status_type_is_user_settable  purple_status_type_is_user_settable
+#define gaim_status_type_is_independent    purple_status_type_is_independent
+#define gaim_status_type_is_exclusive      purple_status_type_is_exclusive
+#define gaim_status_type_is_available      purple_status_type_is_available
+#define gaim_status_type_get_primary_attr  purple_status_type_get_primary_attr
+#define gaim_status_type_get_attr          purple_status_type_get_attr
+#define gaim_status_type_get_attrs         purple_status_type_get_attrs
+#define gaim_status_type_find_with_id      purple_status_type_find_with_id
+
+#define gaim_status_attr_new        purple_status_attr_new
+#define gaim_status_attr_destroy    purple_status_attr_destroy
+#define gaim_status_attr_get_id     purple_status_attr_get_id
+#define gaim_status_attr_get_name   purple_status_attr_get_name
+#define gaim_status_attr_get_value  purple_status_attr_get_value
+
+#define gaim_status_new                         purple_status_new
+#define gaim_status_destroy                     purple_status_destroy
+#define gaim_status_set_active                  purple_status_set_active
+#define gaim_status_set_active_with_attrs       purple_status_set_active_with_attrs
+#define gaim_status_set_active_with_attrs_list  purple_status_set_active_with_attrs_list
+#define gaim_status_set_attr_boolean            purple_status_set_attr_boolean
+#define gaim_status_set_attr_int                purple_status_set_attr_int
+#define gaim_status_set_attr_string             purple_status_set_attr_string
+#define gaim_status_get_type                    purple_status_get_type
+#define gaim_status_get_presence                purple_status_get_presence
+#define gaim_status_get_id                      purple_status_get_id
+#define gaim_status_get_name                    purple_status_get_name
+#define gaim_status_is_independent              purple_status_is_independent
+#define gaim_status_is_exclusive                purple_status_is_exclusive
+#define gaim_status_is_available                purple_status_is_available
+#define gaim_status_is_active                   purple_status_is_active
+#define gaim_status_is_online                   purple_status_is_online
+#define gaim_status_get_attr_value              purple_status_get_attr_value
+#define gaim_status_get_attr_boolean            purple_status_get_attr_boolean
+#define gaim_status_get_attr_int                purple_status_get_attr_int
+#define gaim_status_get_attr_string             purple_status_get_attr_string
+#define gaim_status_compare                     purple_status_compare
+
+#define gaim_presence_new                purple_presence_new
+#define gaim_presence_new_for_account    purple_presence_new_for_account
+#define gaim_presence_new_for_conv       purple_presence_new_for_conv
+#define gaim_presence_new_for_buddy      purple_presence_new_for_buddy
+#define gaim_presence_destroy            purple_presence_destroy
+#define gaim_presence_remove_buddy       purple_presence_remove_buddy
+#define gaim_presence_add_status         purple_presence_add_status
+#define gaim_presence_add_list           purple_presence_add_list
+#define gaim_presence_set_status_active  purple_presence_set_status_active
+#define gaim_presence_switch_status      purple_presence_switch_status
+#define gaim_presence_set_idle           purple_presence_set_idle
+#define gaim_presence_set_login_time     purple_presence_set_login_time
+#define gaim_presence_get_context        purple_presence_get_context
+#define gaim_presence_get_account        purple_presence_get_account
+#define gaim_presence_get_conversation   purple_presence_get_conversation
+#define gaim_presence_get_chat_user      purple_presence_get_chat_user
+#define gaim_presence_get_buddies        purple_presence_get_buddies
+#define gaim_presence_get_statuses       purple_presence_get_statuses
+#define gaim_presence_get_status         purple_presence_get_status
+#define gaim_presence_get_active_status  purple_presence_get_active_status
+#define gaim_presence_is_available       purple_presence_is_available
+#define gaim_presence_is_online          purple_presence_is_online
+#define gaim_presence_is_status_active   purple_presence_is_status_active
+#define gaim_presence_is_status_primitive_active \
 	purple_presence_is_status_primitive_active
-#define purple_presence_is_idle            purple_presence_is_idle
-#define purple_presence_get_idle_time      purple_presence_get_idle_time
-#define purple_presence_get_login_time     purple_presence_get_login_time
-#define purple_presence_compare            purple_presence_compare
-
-#define purple_status_get_handle  purple_status_get_handle
-#define purple_status_init        purple_status_init
-#define purple_status_uninit      purple_status_uninit
+#define gaim_presence_is_idle            purple_presence_is_idle
+#define gaim_presence_get_idle_time      purple_presence_get_idle_time
+#define gaim_presence_get_login_time     purple_presence_get_login_time
+#define gaim_presence_compare            purple_presence_compare
+
+#define gaim_status_get_handle  purple_status_get_handle
+#define gaim_status_init        purple_status_init
+#define gaim_status_uninit      purple_status_uninit
 
 /* from stringref.h */
 
-#define PurpleStringref  PurpleStringref
-
-#define purple_stringref_new        purple_stringref_new
-#define purple_stringref_new_noref  purple_stringref_new_noref
-#define purple_stringref_printf     purple_stringref_printf
-#define purple_stringref_ref        purple_stringref_ref
-#define purple_stringref_unref      purple_stringref_unref
-#define purple_stringref_value      purple_stringref_value
-#define purple_stringref_cmp        purple_stringref_cmp
-#define purple_stringref_len        purple_stringref_len
+#define GaimStringref  PurpleStringref
+
+#define gaim_stringref_new        purple_stringref_new
+#define gaim_stringref_new_noref  purple_stringref_new_noref
+#define gaim_stringref_printf     purple_stringref_printf
+#define gaim_stringref_ref        purple_stringref_ref
+#define gaim_stringref_unref      purple_stringref_unref
+#define gaim_stringref_value      purple_stringref_value
+#define gaim_stringref_cmp        purple_stringref_cmp
+#define gaim_stringref_len        purple_stringref_len
 
 /* from stun.h */
 
-#define PurpleStunNatDiscovery  PurpleStunNatDiscovery
-
-#define PURPLE_STUN_STATUS_UNDISCOVERED  PURPLE_STUN_STATUS_UNDISCOVERED
-#define PURPLE_STUN_STATUS_UNKNOWN       PURPLE_STUN_STATUS_UNKNOWN
-#define PURPLE_STUN_STATUS_DISCOVERING   PURPLE_STUN_STATUS_DISCOVERING
-#define PURPLE_STUN_STATUS_DISCOVERED    PURPLE_STUN_STATUS_DISCOVERED
-#define PurpleStunStatus  PurpleStunStatus
-
-#define PURPLE_STUN_NAT_TYPE_PUBLIC_IP             PURPLE_STUN_NAT_TYPE_PUBLIC_IP
-#define PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT           PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT
-#define PURPLE_STUN_NAT_TYPE_FULL_CONE             PURPLE_STUN_NAT_TYPE_FULL_CONE
-#define PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE       PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE
-#define PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE  PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE
-#define PURPLE_STUN_NAT_TYPE_SYMMETRIC             PURPLE_STUN_NAT_TYPE_SYMMETRIC
-#define PurpleStunNatType  PurpleStunNatType
-
-/* why didn't this have a Purple prefix before? */
+#define GaimStunNatDiscovery  PurpleStunNatDiscovery
+
+#define GAIM_STUN_STATUS_UNDISCOVERED  PURPLE_STUN_STATUS_UNDISCOVERED
+#define GAIM_STUN_STATUS_UNKNOWN       PURPLE_STUN_STATUS_UNKNOWN
+#define GAIM_STUN_STATUS_DISCOVERING   PURPLE_STUN_STATUS_DISCOVERING
+#define GAIM_STUN_STATUS_DISCOVERED    PURPLE_STUN_STATUS_DISCOVERED
+#define GaimStunStatus  PurpleStunStatus
+
+#define GAIM_STUN_NAT_TYPE_PUBLIC_IP             PURPLE_STUN_NAT_TYPE_PUBLIC_IP
+#define GAIM_STUN_NAT_TYPE_UNKNOWN_NAT           PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT
+#define GAIM_STUN_NAT_TYPE_FULL_CONE             PURPLE_STUN_NAT_TYPE_FULL_CONE
+#define GAIM_STUN_NAT_TYPE_RESTRICTED_CONE       PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE
+#define GAIM_STUN_NAT_TYPE_PORT_RESTRICTED_CONE  PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE
+#define GAIM_STUN_NAT_TYPE_SYMMETRIC             PURPLE_STUN_NAT_TYPE_SYMMETRIC
+#define GaimStunNatType  PurpleStunNatType
+
+/* why didn't this have a Gaim prefix before? */
 #define StunCallback  PurpleStunCallback
 
-#define purple_stun_discover  purple_stun_discover
-#define purple_stun_init      purple_stun_init
+#define gaim_stun_discover  purple_stun_discover
+#define gaim_stun_init      purple_stun_init
 
 /* from upnp.h */
 
 /* suggested rename: PurpleUPnpMappingHandle */
 #define UPnPMappingAddRemove  PurpleUPnPMappingAddRemove
 
-#define PurpleUPnPCallback  PurpleUPnPCallback
-
-#define purple_upnp_discover             purple_upnp_discover
-#define purple_upnp_get_public_ip        purple_upnp_get_public_ip
-#define purple_upnp_cancel_port_mapping  purple_upnp_cancel_port_mapping
-#define purple_upnp_set_port_mapping     purple_upnp_set_port_mapping
-
-#define purple_upnp_remove_port_mapping  purple_upnp_remove_port_mapping
+#define GaimUPnPCallback  PurpleUPnPCallback
+
+#define gaim_upnp_discover             purple_upnp_discover
+#define gaim_upnp_get_public_ip        purple_upnp_get_public_ip
+#define gaim_upnp_cancel_port_mapping  purple_upnp_cancel_port_mapping
+#define gaim_upnp_set_port_mapping     purple_upnp_set_port_mapping
+
+#define gaim_upnp_remove_port_mapping  purple_upnp_remove_port_mapping
 
 /* from util.h */
 
-#define PurpleUtilFetchUrlData  PurpleUtilFetchUrlData
-#define PurpleMenuAction        PurpleMenuAction
-
-#define PurpleInfoFieldFormatCallback  PurpleIntoFieldFormatCallback
-
-#define PurpleKeyValuePair  PurpleKeyValuePair
-
-#define purple_menu_action_new   purple_menu_action_new
-#define purple_menu_action_free  purple_menu_action_free
-
-#define purple_base16_encode   purple_base16_encode
-#define purple_base16_decode   purple_base16_decode
-#define purple_base64_encode   purple_base64_encode
-#define purple_base64_decode   purple_base64_decode
-#define purple_quotedp_decode  purple_quotedp_decode
-
-#define purple_mime_decode_field  purple_mime_deco_field
-
-#define purple_utf8_strftime      purple_utf8_strftime
-#define purple_date_format_short  purple_date_format_short
-#define purple_date_format_long   purple_date_format_long
-#define purple_date_format_full   purple_date_format_full
-#define purple_time_format        purple_time_format
-#define purple_time_build         purple_time_build
-
-#define PURPLE_NO_TZ_OFF  PURPLE_NO_TZ_OFF
-
-#define purple_str_to_time  purple_str_to_time
-
-#define purple_markup_find_tag            purple_markup_find_tag
-#define purple_markup_extract_info_field  purple_markup_extract_info_field
-#define purple_markup_html_to_xhtml       purple_markup_html_to_xhtml
-#define purple_markup_strip_html          purple_markup_strip_html
-#define purple_markup_linkify             purple_markup_linkify
-#define purple_markup_slice               purple_markup_slice
-#define purple_markup_get_tag_name        purple_markup_get_tag_name
-#define purple_unescape_html              purple_unescape_html
-
-#define purple_home_dir  purple_home_dir
-#define purple_user_dir  purple_user_dir
-
-#define purple_util_set_user_dir  purple_util_set_user_dir
-
-#define purple_build_dir  purple_build_dir
-
-#define purple_util_write_data_to_file  purple_util_write_data_to_file
-
-#define purple_util_read_xml_from_file  purple_util_read_xml_from_file
-
-#define purple_mkstemp  purple_mkstemp
-
-#define purple_program_is_valid  purple_program_is_valid
-
-#define purple_running_gnome  purple_running_gnome
-#define purple_running_kde    purple_running_kde
-#define purple_running_osx    purple_running_osx
-
-#define purple_fd_get_ip  purple_fd_get_ip
-
-#define purple_normalize         purple_normalize
-#define purple_normalize_nocase  purple_normalize_nocase
-
-#define purple_strdup_withhtml  purple_strdup_withhtml
-
-#define purple_str_has_prefix  purple_str_has_prefix
-#define purple_str_has_suffix  purple_str_has_suffix
-#define purple_str_add_cr      purple_str_add_cr
-#define purple_str_strip_char  purple_str_strip_char
-
-#define purple_util_chrreplace  purple_util_chrreplace
-
-#define purple_strreplace  purple_strreplace
-
-#define purple_utf8_ncr_encode  purple_utf8_ncr_encode
-#define purple_utf8_ncr_decode  purple_utf8_ncr_decode
-
-#define purple_strcasereplace  purple_strcasereplace
-#define purple_strcasestr      purple_strcasestr
-
-#define purple_str_size_to_units      purple_str_size_to_units
-#define purple_str_seconds_to_string  purple_str_seconds_to_string
-#define purple_str_binary_to_ascii    purple_str_binary_to_ascii
-
-
-#define purple_got_protocol_handler_uri  purple_got_protocol_handler_uri
-
-#define purple_url_parse  purple_url_parse
-
-#define PurpleUtilFetchUrlCallback  PurpleUtilFetchUrlCallback
-#define purple_util_fetch_url          purple_util_fetch_url
-#define purple_util_fetch_url_request  purple_util_fetch_url_request
-#define purple_util_fetch_url_cancel   purple_util_fetch_url_cancel
-
-#define purple_url_decode  purple_url_decode
-#define purple_url_encode  purple_url_encode
-
-#define purple_email_is_valid  purple_email_is_valid
-
-#define purple_uri_list_extract_uris       purple_uri_list_extract_uris
-#define purple_uri_list_extract_filenames  purple_uri_list_extract_filenames
-
-#define purple_utf8_try_convert  purple_utf8_try_convert
-#define purple_utf8_salvage      purple_utf8_salvage
-#define purple_utf8_strcasecmp   purple_utf8_strcasecmp
-#define purple_utf8_has_word     purple_utf8_has_word
-
-#define purple_print_utf8_to_console  purple_print_utf8_to_console
-
-#define purple_message_meify  purple_message_meify
-
-#define purple_text_strip_mnemonic  purple_text_strip_mnemonic
-
-#define purple_unescape_filename  purple_unescape_filename
-#define purple_escape_filename    purple_escape_filename
+#define GaimUtilFetchUrlData  PurpleUtilFetchUrlData
+#define GaimMenuAction        PurpleMenuAction
+
+#define GaimInfoFieldFormatCallback  PurpleIntoFieldFormatCallback
+
+#define GaimKeyValuePair  PurpleKeyValuePair
+
+#define gaim_menu_action_new   purple_menu_action_new
+#define gaim_menu_action_free  purple_menu_action_free
+
+#define gaim_base16_encode   purple_base16_encode
+#define gaim_base16_decode   purple_base16_decode
+#define gaim_base64_encode   purple_base64_encode
+#define gaim_base64_decode   purple_base64_decode
+#define gaim_quotedp_decode  purple_quotedp_decode
+
+#define gaim_mime_decode_field  purple_mime_deco_field
+
+#define gaim_utf8_strftime      purple_utf8_strftime
+#define gaim_date_format_short  purple_date_format_short
+#define gaim_date_format_long   purple_date_format_long
+#define gaim_date_format_full   purple_date_format_full
+#define gaim_time_format        purple_time_format
+#define gaim_time_build         purple_time_build
+
+#define GAIM_NO_TZ_OFF  PURPLE_NO_TZ_OFF
+
+#define gaim_str_to_time  purple_str_to_time
+
+#define gaim_markup_find_tag            purple_markup_find_tag
+#define gaim_markup_extract_info_field  purple_markup_extract_info_field
+#define gaim_markup_html_to_xhtml       purple_markup_html_to_xhtml
+#define gaim_markup_strip_html          purple_markup_strip_html
+#define gaim_markup_linkify             purple_markup_linkify
+#define gaim_markup_slice               purple_markup_slice
+#define gaim_markup_get_tag_name        purple_markup_get_tag_name
+#define gaim_unescape_html              purple_unescape_html
+
+#define gaim_home_dir  purple_home_dir
+#define gaim_user_dir  purple_user_dir
+
+#define gaim_util_set_user_dir  purple_util_set_user_dir
+
+#define gaim_build_dir  purple_build_dir
+
+#define gaim_util_write_data_to_file  purple_util_write_data_to_file
+
+#define gaim_util_read_xml_from_file  purple_util_read_xml_from_file
+
+#define gaim_mkstemp  purple_mkstemp
+
+#define gaim_program_is_valid  purple_program_is_valid
+
+#define gaim_running_gnome  purple_running_gnome
+#define gaim_running_kde    purple_running_kde
+#define gaim_running_osx    purple_running_osx
+
+#define gaim_fd_get_ip  purple_fd_get_ip
+
+#define gaim_normalize         purple_normalize
+#define gaim_normalize_nocase  purple_normalize_nocase
+
+#define gaim_strdup_withhtml  purple_strdup_withhtml
+
+#define gaim_str_has_prefix  purple_str_has_prefix
+#define gaim_str_has_suffix  purple_str_has_suffix
+#define gaim_str_add_cr      purple_str_add_cr
+#define gaim_str_strip_char  purple_str_strip_char
+
+#define gaim_util_chrreplace  purple_util_chrreplace
+
+#define gaim_strreplace  purple_strreplace
+
+#define gaim_utf8_ncr_encode  purple_utf8_ncr_encode
+#define gaim_utf8_ncr_decode  purple_utf8_ncr_decode
+
+#define gaim_strcasereplace  purple_strcasereplace
+#define gaim_strcasestr      purple_strcasestr
+
+#define gaim_str_size_to_units      purple_str_size_to_units
+#define gaim_str_seconds_to_string  purple_str_seconds_to_string
+#define gaim_str_binary_to_ascii    purple_str_binary_to_ascii
+
+
+#define gaim_got_protocol_handler_uri  purple_got_protocol_handler_uri
+
+#define gaim_url_parse  purple_url_parse
+
+#define GaimUtilFetchUrlCallback  PurpleUtilFetchUrlCallback
+#define gaim_util_fetch_url          purple_util_fetch_url
+#define gaim_util_fetch_url_request  purple_util_fetch_url_request
+#define gaim_util_fetch_url_cancel   purple_util_fetch_url_cancel
+
+#define gaim_url_decode  purple_url_decode
+#define gaim_url_encode  purple_url_encode
+
+#define gaim_email_is_valid  purple_email_is_valid
+
+#define gaim_uri_list_extract_uris       purple_uri_list_extract_uris
+#define gaim_uri_list_extract_filenames  purple_uri_list_extract_filenames
+
+#define gaim_utf8_try_convert  purple_utf8_try_convert
+#define gaim_utf8_salvage      purple_utf8_salvage
+#define gaim_utf8_strcasecmp   purple_utf8_strcasecmp
+#define gaim_utf8_has_word     purple_utf8_has_word
+
+#define gaim_print_utf8_to_console  purple_print_utf8_to_console
+
+#define gaim_message_meify  purple_message_meify
+
+#define gaim_text_strip_mnemonic  purple_text_strip_mnemonic
+
+#define gaim_unescape_filename  purple_unescape_filename
+#define gaim_escape_filename    purple_escape_filename
 
 /* from value.h */
 
-#define PURPLE_TYPE_UNKNOWN  PURPLE_TYPE_UNKNOWN
-#define PURPLE_TYPE_SUBTYPE  PURPLE_TYPE_SUBTYPE
-#define PURPLE_TYPE_CHAR     PURPLE_TYPE_CHAR
-#define PURPLE_TYPE_UCHAR    PURPLE_TYPE_UCHAR
-#define PURPLE_TYPE_BOOLEAN  PURPLE_TYPE_BOOLEAN
-#define PURPLE_TYPE_SHORT    PURPLE_TYPE_SHORT
-#define PURPLE_TYPE_USHORT   PURPLE_TYPE_USHORT
-#define PURPLE_TYPE_INT      PURPLE_TYPE_INT
-#define PURPLE_TYPE_UINT     PURPLE_TYPE_UINT
-#define PURPLE_TYPE_LONG     PURPLE_TYPE_LONG
-#define PURPLE_TYPE_ULONG    PURPLE_TYPE_ULONG
-#define PURPLE_TYPE_INT64    PURPLE_TYPE_INT64
-#define PURPLE_TYPE_UINT64   PURPLE_TYPE_UINT64
-#define PURPLE_TYPE_STRING   PURPLE_TYPE_STRING
-#define PURPLE_TYPE_OBJECT   PURPLE_TYPE_OBJECT
-#define PURPLE_TYPE_POINTER  PURPLE_TYPE_POINTER
-#define PURPLE_TYPE_ENUM     PURPLE_TYPE_ENUM
-#define PURPLE_TYPE_BOXED    PURPLE_TYPE_BOXED
-#define PurpleType  PurpleType
-
-
-#define PURPLE_SUBTYPE_UNKNOWN       PURPLE_SUBTYPE_UNKNOWN
-#define PURPLE_SUBTYPE_ACCOUNT       PURPLE_SUBTYPE_ACCOUNT
-#define PURPLE_SUBTYPE_BLIST         PURPLE_SUBTYPE_BLIST
-#define PURPLE_SUBTYPE_BLIST_BUDDY   PURPLE_SUBTYPE_BLIST_BUDDY
-#define PURPLE_SUBTYPE_BLIST_GROUP   PURPLE_SUBTYPE_BLIST_GROUP
-#define PURPLE_SUBTYPE_BLIST_CHAT    PURPLE_SUBTYPE_BLIST_CHAT
-#define PURPLE_SUBTYPE_BUDDY_ICON    PURPLE_SUBTYPE_BUDDY_ICON
-#define PURPLE_SUBTYPE_CONNECTION    PURPLE_SUBTYPE_CONNECTION
-#define PURPLE_SUBTYPE_CONVERSATION  PURPLE_SUBTYPE_CONVERSATION
-#define PURPLE_SUBTYPE_PLUGIN        PURPLE_SUBTYPE_PLUGIN
-#define PURPLE_SUBTYPE_BLIST_NODE    PURPLE_SUBTYPE_BLIST_NODE
-#define PURPLE_SUBTYPE_CIPHER        PURPLE_SUBTYPE_CIPHER
-#define PURPLE_SUBTYPE_STATUS        PURPLE_SUBTYPE_STATUS
-#define PURPLE_SUBTYPE_LOG           PURPLE_SUBTYPE_LOG
-#define PURPLE_SUBTYPE_XFER          PURPLE_SUBTYPE_XFER
-#define PURPLE_SUBTYPE_SAVEDSTATUS   PURPLE_SUBTYPE_SAVEDSTATUS
-#define PURPLE_SUBTYPE_XMLNODE       PURPLE_SUBTYPE_XMLNODE
-#define PURPLE_SUBTYPE_USERINFO      PURPLE_SUBTYPE_USERINFO
-#define PurpleSubType  PurpleSubType
-
-#define PurpleValue  PurpleValue
-
-#define purple_value_new                purple_value_new
-#define purple_value_new_outgoing       purple_value_new_outgoing
-#define purple_value_destroy            purple_value_destroy
-#define purple_value_dup                purple_value_dup
-#define purple_value_get_type           purple_value_get_type
-#define purple_value_get_subtype        purple_value_get_subtype
-#define purple_value_get_specific_type  purple_value_get_specific_type
-#define purple_value_is_outgoing        purple_value_is_outgoing
-#define purple_value_set_char           purple_value_set_char
-#define purple_value_set_uchar          purple_value_set_uchar
-#define purple_value_set_boolean        purple_value_set_boolean
-#define purple_value_set_short          purple_value_set_short
-#define purple_value_set_ushort         purple_value_set_ushort
-#define purple_value_set_int            purple_value_set_int
-#define purple_value_set_uint           purple_value_set_uint
-#define purple_value_set_long           purple_value_set_long
-#define purple_value_set_ulong          purple_value_set_ulong
-#define purple_value_set_int64          purple_value_set_int64
-#define purple_value_set_uint64         purple_value_set_uint64
-#define purple_value_set_string         purple_value_set_string
-#define purple_value_set_object         purple_value_set_object
-#define purple_value_set_pointer        purple_value_set_pointer
-#define purple_value_set_enum           purple_value_set_enum
-#define purple_value_set_boxed          purple_value_set_boxed
-#define purple_value_get_char           purple_value_get_char
-#define purple_value_get_uchar          purple_value_get_uchar
-#define purple_value_get_boolean        purple_value_get_boolean
-#define purple_value_get_short          purple_value_get_short
-#define purple_value_get_ushort         purple_value_get_ushort
-#define purple_value_get_int            purple_value_get_int
-#define purple_value_get_uint           purple_value_get_uint
-#define purple_value_get_long           purple_value_get_long
-#define purple_value_get_ulong          purple_value_get_ulong
-#define purple_value_get_int64          purple_value_get_int64
-#define purple_value_get_uint64         purple_value_get_uint64
-#define purple_value_get_string         purple_value_get_string
-#define purple_value_get_object         purple_value_get_object
-#define purple_value_get_pointer        purple_value_get_pointer
-#define purple_value_get_enum           purple_value_get_enum
-#define purple_value_get_boxed          purple_value_get_boxed
+#define GAIM_TYPE_UNKNOWN  PURPLE_TYPE_UNKNOWN
+#define GAIM_TYPE_SUBTYPE  PURPLE_TYPE_SUBTYPE
+#define GAIM_TYPE_CHAR     PURPLE_TYPE_CHAR
+#define GAIM_TYPE_UCHAR    PURPLE_TYPE_UCHAR
+#define GAIM_TYPE_BOOLEAN  PURPLE_TYPE_BOOLEAN
+#define GAIM_TYPE_SHORT    PURPLE_TYPE_SHORT
+#define GAIM_TYPE_USHORT   PURPLE_TYPE_USHORT
+#define GAIM_TYPE_INT      PURPLE_TYPE_INT
+#define GAIM_TYPE_UINT     PURPLE_TYPE_UINT
+#define GAIM_TYPE_LONG     PURPLE_TYPE_LONG
+#define GAIM_TYPE_ULONG    PURPLE_TYPE_ULONG
+#define GAIM_TYPE_INT64    PURPLE_TYPE_INT64
+#define GAIM_TYPE_UINT64   PURPLE_TYPE_UINT64
+#define GAIM_TYPE_STRING   PURPLE_TYPE_STRING
+#define GAIM_TYPE_OBJECT   PURPLE_TYPE_OBJECT
+#define GAIM_TYPE_POINTER  PURPLE_TYPE_POINTER
+#define GAIM_TYPE_ENUM     PURPLE_TYPE_ENUM
+#define GAIM_TYPE_BOXED    PURPLE_TYPE_BOXED
+#define GaimType  PurpleType
+
+
+#define GAIM_SUBTYPE_UNKNOWN       PURPLE_SUBTYPE_UNKNOWN
+#define GAIM_SUBTYPE_ACCOUNT       PURPLE_SUBTYPE_ACCOUNT
+#define GAIM_SUBTYPE_BLIST         PURPLE_SUBTYPE_BLIST
+#define GAIM_SUBTYPE_BLIST_BUDDY   PURPLE_SUBTYPE_BLIST_BUDDY
+#define GAIM_SUBTYPE_BLIST_GROUP   PURPLE_SUBTYPE_BLIST_GROUP
+#define GAIM_SUBTYPE_BLIST_CHAT    PURPLE_SUBTYPE_BLIST_CHAT
+#define GAIM_SUBTYPE_BUDDY_ICON    PURPLE_SUBTYPE_BUDDY_ICON
+#define GAIM_SUBTYPE_CONNECTION    PURPLE_SUBTYPE_CONNECTION
+#define GAIM_SUBTYPE_CONVERSATION  PURPLE_SUBTYPE_CONVERSATION
+#define GAIM_SUBTYPE_PLUGIN        PURPLE_SUBTYPE_PLUGIN
+#define GAIM_SUBTYPE_BLIST_NODE    PURPLE_SUBTYPE_BLIST_NODE
+#define GAIM_SUBTYPE_CIPHER        PURPLE_SUBTYPE_CIPHER
+#define GAIM_SUBTYPE_STATUS        PURPLE_SUBTYPE_STATUS
+#define GAIM_SUBTYPE_LOG           PURPLE_SUBTYPE_LOG
+#define GAIM_SUBTYPE_XFER          PURPLE_SUBTYPE_XFER
+#define GAIM_SUBTYPE_SAVEDSTATUS   PURPLE_SUBTYPE_SAVEDSTATUS
+#define GAIM_SUBTYPE_XMLNODE       PURPLE_SUBTYPE_XMLNODE
+#define GAIM_SUBTYPE_USERINFO      PURPLE_SUBTYPE_USERINFO
+#define GaimSubType  PurpleSubType
+
+#define GaimValue  PurpleValue
+
+#define gaim_value_new                purple_value_new
+#define gaim_value_new_outgoing       purple_value_new_outgoing
+#define gaim_value_destroy            purple_value_destroy
+#define gaim_value_dup                purple_value_dup
+#define gaim_value_get_type           purple_value_get_type
+#define gaim_value_get_subtype        purple_value_get_subtype
+#define gaim_value_get_specific_type  purple_value_get_specific_type
+#define gaim_value_is_outgoing        purple_value_is_outgoing
+#define gaim_value_set_char           purple_value_set_char
+#define gaim_value_set_uchar          purple_value_set_uchar
+#define gaim_value_set_boolean        purple_value_set_boolean
+#define gaim_value_set_short          purple_value_set_short
+#define gaim_value_set_ushort         purple_value_set_ushort
+#define gaim_value_set_int            purple_value_set_int
+#define gaim_value_set_uint           purple_value_set_uint
+#define gaim_value_set_long           purple_value_set_long
+#define gaim_value_set_ulong          purple_value_set_ulong
+#define gaim_value_set_int64          purple_value_set_int64
+#define gaim_value_set_uint64         purple_value_set_uint64
+#define gaim_value_set_string         purple_value_set_string
+#define gaim_value_set_object         purple_value_set_object
+#define gaim_value_set_pointer        purple_value_set_pointer
+#define gaim_value_set_enum           purple_value_set_enum
+#define gaim_value_set_boxed          purple_value_set_boxed
+#define gaim_value_get_char           purple_value_get_char
+#define gaim_value_get_uchar          purple_value_get_uchar
+#define gaim_value_get_boolean        purple_value_get_boolean
+#define gaim_value_get_short          purple_value_get_short
+#define gaim_value_get_ushort         purple_value_get_ushort
+#define gaim_value_get_int            purple_value_get_int
+#define gaim_value_get_uint           purple_value_get_uint
+#define gaim_value_get_long           purple_value_get_long
+#define gaim_value_get_ulong          purple_value_get_ulong
+#define gaim_value_get_int64          purple_value_get_int64
+#define gaim_value_get_uint64         purple_value_get_uint64
+#define gaim_value_get_string         purple_value_get_string
+#define gaim_value_get_object         purple_value_get_object
+#define gaim_value_get_pointer        purple_value_get_pointer
+#define gaim_value_get_enum           purple_value_get_enum
+#define gaim_value_get_boxed          purple_value_get_boxed
 
 /* from version.h */
 
-#define PURPLE_MAJOR_VERSION  PURPLE_MAJOR_VERSION
-#define PURPLE_MINOR_VERSION  PURPLE_MINOR_VERSION
-#define PURPLE_MICRO_VERSION  PURPLE_MICRO_VERSION
-
-#define PURPLE_VERSION_CHECK  PURPLE_VERSION_CHECK
+#define GAIM_MAJOR_VERSION  PURPLE_MAJOR_VERSION
+#define GAIM_MINOR_VERSION  PURPLE_MINOR_VERSION
+#define GAIM_MICRO_VERSION  PURPLE_MICRO_VERSION
+
+#define GAIM_VERSION_CHECK  PURPLE_VERSION_CHECK
 
 /* from whiteboard.h */
 
-#ifndef _PURPLE_WHITEBOARD_H_
-#define _PURPLE_WHITEBOARD_H_
-
-#define PurpleWhiteboardPrplOps  PurpleWhiteboardPrplOps
-#define PurpleWhiteboard         PurpleWhiteboard
-#define PurpleWhiteboardUiOps    PurpleWhiteboardUiOps
-
-#define purple_whiteboard_set_ui_ops    purple_whiteboard_set_ui_ops
-#define purple_whiteboard_set_prpl_ops  purple_whiteboard_set_prpl_ops
-
-#define purple_whiteboard_create             purple_whiteboard_create
-#define purple_whiteboard_destroy            purple_whiteboard_destroy
-#define purple_whiteboard_start              purple_whiteboard_start
-#define purple_whiteboard_get_session        purple_whiteboard_get_session
-#define purple_whiteboard_draw_list_destroy  purple_whiteboard_draw_list_destroy
-#define purple_whiteboard_get_dimensions     purple_whiteboard_get_dimensions
-#define purple_whiteboard_set_dimensions     purple_whiteboard_set_dimensions
-#define purple_whiteboard_draw_point         purple_whiteboard_draw_point
-#define purple_whiteboard_send_draw_list     purple_whiteboard_send_draw_list
-#define purple_whiteboard_draw_line          purple_whiteboard_draw_line
-#define purple_whiteboard_clear              purple_whiteboard_clear
-#define purple_whiteboard_send_clear         purple_whiteboard_send_clear
-#define purple_whiteboard_send_brush         purple_whiteboard_send_brush
-#define purple_whiteboard_get_brush          purple_whiteboard_get_brush
-#define purple_whiteboard_set_brush          purple_whiteboard_set_brush
-
-#endif /* _PURPLE_COMPAT_H_ */
+#define GaimWhiteboardPrplOps  PurpleWhiteboardPrplOps
+#define GaimWhiteboard         PurpleWhiteboard
+#define GaimWhiteboardUiOps    PurpleWhiteboardUiOps
+
+#define gaim_whiteboard_set_ui_ops    purple_whiteboard_set_ui_ops
+#define gaim_whiteboard_set_prpl_ops  purple_whiteboard_set_prpl_ops
+
+#define gaim_whiteboard_create             purple_whiteboard_create
+#define gaim_whiteboard_destroy            purple_whiteboard_destroy
+#define gaim_whiteboard_start              purple_whiteboard_start
+#define gaim_whiteboard_get_session        purple_whiteboard_get_session
+#define gaim_whiteboard_draw_list_destroy  purple_whiteboard_draw_list_destroy
+#define gaim_whiteboard_get_dimensions     purple_whiteboard_get_dimensions
+#define gaim_whiteboard_set_dimensions     purple_whiteboard_set_dimensions
+#define gaim_whiteboard_draw_point         purple_whiteboard_draw_point
+#define gaim_whiteboard_send_draw_list     purple_whiteboard_send_draw_list
+#define gaim_whiteboard_draw_line          purple_whiteboard_draw_line
+#define gaim_whiteboard_clear              purple_whiteboard_clear
+#define gaim_whiteboard_send_clear         purple_whiteboard_send_clear
+#define gaim_whiteboard_send_brush         purple_whiteboard_send_brush
+#define gaim_whiteboard_get_brush          purple_whiteboard_get_brush
+#define gaim_whiteboard_set_brush          purple_whiteboard_set_brush
+
+/* for static plugins */
+#define gaim_init_ssl_plugin			purple_init_ssl_plugin
+#define gaim_init_ssl_openssl_plugin	purple_init_ssl_openssl_plugin
+#define gaim_init_ssl_gnutls_plugin		purple_init_ssl_gnutls_plugin
+#define gaim_init_gg_plugin				purple_init_gg_plugin
+#define gaim_init_jabber_plugin			purple_init_jabber_plugin
+#define gaim_init_sametime_plugin		purple_init_sametime_plugin
+#define gaim_init_msn_plugin			purple_init_msn_plugin
+#define gaim_init_novell_plugin			purple_init_novell_plugin
+#define gaim_init_qq_plugin				purple_init_qq_plugin
+#define gaim_init_simple_plugin			purple_init_simple_plugin
+#define gaim_init_yahoo_plugin			purple_init_yahoo_plugin
+#define gaim_init_zephyr_plugin			purple_init_zephyr_plugin
+#define gaim_init_aim_plugin			purple_init_aim_plugin
+#define gaim_init_icq_plugin			purple_init_icq_plugin
+
+#endif /* _GAIM_COMPAT_H_ */
--- a/libpurple/gaim-notifications-example	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-#!/usr/bin/env python
-
-# This is a simple gaim notification server.
-# It shows notifications when your buddy signs on or you get an IM message.
-#
-# This script requires Python 2.4 and PyGTK bindings
-#
-# Note that all function names are resolved dynamically, no
-# gaim-specific library is needed.
-
-import dbus
-import dbus.glib
-import dbus.decorators
-import gobject
-import os
-
-def ensureimconversation(conversation, account, name):
-    if conversation != 0:
-        return conversation
-    else:
-        # 1 = GAIM_CONV_IM 
-        return gaim.GaimConversationNew(1, account, name)
-
-def receivedimmsg(account, name, message, conversation, flags):
-    buddy = gaim.GaimFindBuddy(account, name)
-    if buddy != 0:
-        alias = gaim.GaimBuddyGetAlias(buddy)
-    else:
-        alias = name
-
-    text = "%s says %s" % (alias, message)
-    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
-                      "'So what?','Show me',Close,Abuse", text)
-
-    if code == 101:                     # so what?
-        pass
-    else:
-        conversation = ensureimconversation(conversation, account, name)
-
-    if code == 102:                     # show me
-        window = gaim.GaimConversationGetWindow(conversation)
-        gaim.GaimConvWindowRaise(window)
-
-    if code == 103:                     # close 
-        gaim.GaimConversationDestroy(conversation)
-
-    if code == 104:                     # abuse
-        im = gaim.GaimConversationGetImData(conversation)
-        gaim.GaimConvImSend(im, "Go away you f...")
-                                 
-        
-def buddysignedon(buddyid):
-    alias = gaim.GaimBuddyGetAlias(buddyid)
-    text = "%s is online" % alias
-
-    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
-                      "'So what?','Let's talk'", text)
-
-    if code == 101:                     # so what?
-        pass
-
-    if code == 102:                     # talk
-        name = gaim.GaimBuddyGetName(buddyid)
-        account = gaim.GaimBuddyGetAccount(buddyid)
-        gaim.GaimConversationNew(1, account, name)
-    
-
-bus = dbus.SessionBus()
-obj = bus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
-gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
-
-bus.add_signal_receiver(receivedimmsg,
-                        dbus_interface = "net.sf.gaim.GaimInterface",
-                        signal_name = "ReceivedImMsg")
-
-bus.add_signal_receiver(buddysignedon,
-                        dbus_interface = "net.sf.gaim.GaimInterface",
-                        signal_name = "BuddySignedOn")
-
-print "This is a simple gaim notification server."
-print "It shows notifications when your buddy signs on or you get an IM message."
-
-loop = gobject.MainLoop()
-loop.run()
-
-
--- a/libpurple/gaim-remote	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-#!/usr/bin/python
-
-import dbus
-import re
-import urllib
-import sys
-
-import xml.dom.minidom 
-
-xml.dom.minidom.Element.all   = xml.dom.minidom.Element.getElementsByTagName
-
-obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
-gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
-
-class CheckedObject:
-    def __init__(self, obj):
-        self.obj = obj
-
-    def __getattr__(self, attr):
-        return CheckedAttribute(self, attr)
-
-class CheckedAttribute:
-    def __init__(self, cobj, attr):
-        self.cobj = cobj
-        self.attr = attr
-        
-    def __call__(self, *args):
-        result = self.cobj.obj.__getattr__(self.attr)(*args)
-        if result == 0:
-            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
-        return result
-            
-def show_help():
-    print """This program uses DBus to communicate with gaim.
-
-Usage:
-
-    %s "command1" "command2" ...
-
-Each command is of one of the three types:
-
-    [protocol:]commandname?param1=value1&param2=value2&...
-    FunctionName?param1=value1&param2=value2&...
-    FunctionName(value1,value2,...)
-
-The second and third form are provided for completeness but their use
-is not recommended; use gaim-send or gaim-send-async instead.  The
-second form uses introspection to find out the parameter names and
-their types, therefore it is rather slow.
-
-Examples of commands:
-
-    jabber:goim?screenname=testone@localhost&message=hi
-    jabber:gochat?room=TestRoom&server=conference.localhost
-    jabber:getinfo?screenname=testone@localhost
-    jabber:addbuddy?screenname=my friend
-
-    setstatus?status=away&message=don't disturb
-    quit
-
-    GaimAccountsFindConnected?name=&protocol=prpl-jabber
-    GaimAccountFindConnected(,prpl-jabber)
-""" % sys.argv[0]
-
-cgaim = CheckedObject(gaim)
-
-urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
-
-def extendlist(list, length, fill):
-    if len(list) < length:
-        return list + [fill] * (length - len(list))
-    else:
-        return list
-
-def convert(value):
-    try:
-        return int(value)
-    except:
-        return value
-
-def findaccount(accountname, protocolname):
-    try:
-        # prefer connected accounts
-        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
-        return account
-    except:
-        # try to get any account and connect it
-        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
-        gaim.GaimAccountSetStatusVargs(account, "online", 1)
-        gaim.GaimAccountConnect(account)
-        return account
-    
-
-def execute(uri):
-    match = re.match(urlregexp, uri)
-    protocol = match.group(2)
-    if protocol == "aim" or protocol == "icq":
-        protocol = "oscar"
-    if protocol is not None:
-        protocol = "prpl-" + protocol
-    command = match.group(5)
-    paramstring = match.group(7)
-    params = {}
-    if paramstring is not None:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=",1), 2, "")
-            params[key] = urllib.unquote(value)
-
-    accountname = params.get("account", "")
-
-    if command == "goim":
-        account = findaccount(accountname, protocol)
-        conversation = cgaim.GaimConversationNew(1, account, params["screenname"])
-        if "message" in params:
-            im = cgaim.GaimConversationGetImData(conversation)
-            gaim.GaimConvImSend(im, params["message"])
-        return None
-
-    elif command == "gochat":
-        account = findaccount(accountname, protocol)
-        connection = cgaim.GaimAccountGetConnection(account)
-        return gaim.ServJoinChat(connection, params)
-
-    elif command == "addbuddy":
-        account = findaccount(accountname, protocol)
-        return cgaim.GaimBlistRequestAddBuddy(account, params["screenname"],
-                                              params.get("group", ""), "")
-
-    elif command == "setstatus":
-        current = gaim.GaimSavedstatusGetCurrent()
-
-        if "status" in params:
-            status_id = params["status"]
-            status_type = gaim.GaimPrimitiveGetTypeFromId(status_id)
-        else:
-            status_type = gaim.GaimSavedstatusGetType(current)
-            status_id = gaim.GaimPrimitiveGetIdFromType(status_type)
-
-        if "message" in params:
-            message = params["message"];
-        else:
-            message = gaim.GaimSavedstatusGetMessage(current)
-
-        if "account" in params:
-            accounts = [cgaim.GaimAccountsFindAny(accountname, protocol)]
-
-            for account in accounts:
-                status = gaim.GaimAccountGetStatus(account, status_id)
-                type = gaim.GaimStatusGetType(status)
-                gaim.GaimSavedstatusSetSubstatus(current, account, type, message)
-                gaim.GaimSavedstatusActivateForAccount(current, account)
-        else:
-            accounts = gaim.GaimAccountsGetAllActive()
-            saved = gaim.GaimSavedstatusNew("", status_type)
-            gaim.GaimSavedstatusSetMessage(saved, message)
-            gaim.GaimSavedstatusActivate(saved)
-
-        return None
-
-    elif command == "getinfo":
-        account = findaccount(accountname, protocol)
-        connection = cgaim.GaimAccountGetConnection(account)
-        return gaim.ServGetInfo(connection, params["screenname"])
-
-    elif command == "quit":
-        return gaim.GaimCoreQuit()
-
-    elif command == "uri":
-        return None
-
-    else:
-        match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
-        if match is not None:
-            name = match.group(1)
-            argstr = match.group(2)
-            if argstr == "":
-                args = []
-            else:
-                args = argstr.split(",")
-            fargs = []
-            for arg in args:
-                fargs.append(convert(arg.strip()))
-            return gaim.__getattr__(name)(*fargs)
-        else:
-            # introspect the object to get parameter names and types
-            # this is slow because the entire introspection info must be downloaded
-            data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\
-                   Introspect()
-            introspect = xml.dom.minidom.parseString(data).documentElement
-            for method in introspect.all("method"):
-                if command == method.getAttribute("name"):
-                    methodparams = []
-                    for arg in method.all("arg"):
-                        if arg.getAttribute("direction") == "in":
-                            value = params[arg.getAttribute("name")]
-                            type = arg.getAttribute("type")
-                            if type == "s":
-                                methodparams.append(value)
-                            elif type == "i":
-                                methodparams.append(int(value))
-                            else:
-                                raise "Don't know how to handle type \"%s\"" % type
-                    return gaim.__getattr__(command)(*methodparams)
-            show_help()
-            raise "Unknown command: %s" % command
-
-if len(sys.argv) == 1:
-    show_help()
-
-for arg in sys.argv[1:]:
-    output = execute(arg)
-
-    if (output != None):
-        print output
-
--- a/libpurple/gaim-send	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-METHOD_NAME=$1
-
-if test -z "$METHOD_NAME" 
-then
-    cat <<EOF 
-This program calls gaim API functions using DBus and prints the return value.
-If you are not interested in the return value, use gaim-send-async.
-
-Usage:
-
-   $0 method-name type1:parameter1 type2:parameter2 ...
-
-This shell script just invokes dbus-send, see man dbus-send for how 
-to specify the parameters.  
-
-Examples:
-
-   $0 GaimAccountsFindConnected string: string:prpl-jabber
-   $0 GaimAccountsGetAll
-   $0 GaimCoreQuit
-
-Use dbus-viewer to get the list of supported functions and their parameters.
-EOF
-    exit 1
-fi
-
-shift
-dbus-send --dest=net.sf.gaim.GaimService --print-reply --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
-
-echo 
--- a/libpurple/gaim-send-async	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#!/bin/bash
-
-METHOD_NAME=$1
-
-if test -z "$METHOD_NAME" 
-then
-    cat <<EOF 
-This program calls gaim API functions using DBus.  As opposed to gaim-send, 
-it does not print the return value.
-
-Usage:
-
-   $0 method-name type1:parameter1 type2:parameter2 ...
-
-This shell script just invokes dbus-send, see man dbus-send for how 
-to specify the parameters.  
-
-Examples:
-
-   $0 GaimCoreQuit
-
-Use dbus-viewer to get the list of supported functions and their parameters.
-EOF
-    exit 1
-fi
-
-shift
-dbus-send --dest=net.sf.gaim.GaimService --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
-
-echo 
--- a/libpurple/gaim-url-handler	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-#!/usr/bin/python
-
-import dbus
-import re
-import sys
-import time
-import urllib
-
-obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
-gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
-
-class CheckedObject:
-    def __init__(self, obj):
-        self.obj = obj
-
-    def __getattr__(self, attr):
-        return CheckedAttribute(self, attr)
-
-class CheckedAttribute:
-    def __init__(self, cobj, attr):
-        self.cobj = cobj
-        self.attr = attr
-
-    def __call__(self, *args):
-        result = self.cobj.obj.__getattr__(self.attr)(*args)
-        if result == 0:
-            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
-        return result
-
-cgaim = CheckedObject(gaim)
-
-def extendlist(list, length, fill):
-    if len(list) < length:
-        return list + [fill] * (length - len(list))
-    else:
-        return list
-
-def convert(value):
-    try:
-        return int(value)
-    except:
-        return value
-
-def findaccount(protocolname, accountname=""):
-    try:
-        # prefer connected accounts
-        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
-        return account
-    except:
-        # try to get any account and connect it
-        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
-        gaim.GaimAccountSetStatusVargs(account, "online", 1)
-        gaim.GaimAccountConnect(account)
-        return account
-
-def goim(account, screenname, message=None):
-    # XXX: 1 == GAIM_CONV_TYPE_IM
-    conversation = cgaim.GaimConversationNew(1, account, screenname)
-    if message:
-        gaim.GaimConvSendConfirm(conversation, message)
-
-def gochat(account, params, message=None):
-    connection = cgaim.GaimAccountGetConnection(account)
-    gaim.ServJoinChat(connection, params)
-
-    if message != None:
-    	for i in range(20):
-            # XXX: 2 == GAIM_CONV_TYPE_CHAT
-            conversation = gaim.GaimFindConversationWithAccount(2, params.get("channel", params.get("room")), account)
-            if conversation:
-                gaim.GaimConvSendConfirm(conversation, message)
-                break
-            else:
-                time.sleep(0.5)
-
-def addbuddy(account, screenname, group="", alias=""):
-    cgaim.GaimBlistRequestAddBuddy(account, screenname, group, alias)
-
-
-def aim(uri):
-    protocol = "prpl-oscar"
-    match = re.match(r"^(aim|icq):([^?]*)(\?(.*))", uri)
-    if not match:
-        print "Invalid aim URI: %s" % uri
-        return
-
-    command = urllib.unquote_plus(match.group(2))
-    paramstring = match.group(4)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-    accountname = params.get("account", "")
-    screenname = params.get("screenname", "")
-
-    account = findaccount(protocol, accountname)
-
-    if command.lower() == "goim":
-        goim(account, screenname, params.get("message"))
-    elif command.lower() == "gochat":
-        gochat(account, params)
-    elif command.lower() == "addbuddy":
-        addbuddy(account, screenname, params.get("group", ""))
-
-def gg(uri):
-    protocol = "prpl-gg"
-    match = re.match(r"^gg:(.*)", uri)
-    if not match:
-        print "Invalid gg URI: %s" % uri
-        return
-
-    screenname = urllib.unquote_plus(match.group(1))
-    account = findaccount(protocol)
-    goim(account, screenname)
-
-def icq(uri):
-    aim(uri)
-
-def irc(uri):
-    protocol = "prpl-irc"
-    match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri)
-    if not match:
-        print "Invalid irc URI: %s" % uri
-        return
-
-    server = urllib.unquote_plus(match.group(2)) or ""
-    target = match.group(3) or ""
-    query = match.group(5) or ""
-
-    modifiers = {}
-    if target:
-        for modifier in target.split(",")[1:]:
-            modifiers[modifier] = True
-
-    isnick = modifiers.has_key("isnick")
-
-    paramstring = match.group(5)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-
-    account = findaccount(protocol)
-
-    if (target != ""):
-        if (isnick):
-            goim(account, urllib.unquote_plus(target.split(",")[0]), params.get("msg"))
-	else:
-            channel = urllib.unquote_plus(target.split(",")[0])
-            if channel[0] != "#":
-                channel = "#" + channel
-            gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
-
-def msnim(uri):
-    protocol = "prpl-msn"
-    match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
-    if not match:
-        print "Invalid msnim URI: %s" % uri
-        return
-
-    command = urllib.unquote_plus(match.group(1))
-    paramstring = match.group(3)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-    screenname = params.get("contact", "")
-
-    account = findaccount(protocol)
-
-    if command.lower() == "chat":
-        goim(account, screenname)
-    elif command.lower() == "add":
-        addbuddy(account, screenname)
-
-def sip(uri):
-    protocol = "prpl-simple"
-    match = re.match(r"^sip:(.*)", uri)
-    if not match:
-        print "Invalid sip URI: %s" % uri
-        return
-
-    screenname = urllib.unquote_plus(match.group(1))
-    account = findaccount(protocol)
-    goim(account, screenname)
-
-def xmpp(uri):
-    protocol = "prpl-jabber"
-    match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
-    if not match:
-        print "Invalid xmpp URI: %s" % uri
-        return
-
-    tmp = match.group(3)
-    if (tmp):
-        accountname = urllib.unquote_plus(tmp)
-    else:
-        accountname = ""
-
-    screenname = urllib.unquote_plus(match.group(5))
-
-    tmp = match.group(7)
-    if (tmp):
-        command = urllib.unquote_plus(tmp)
-    else:
-        command = ""
-
-    paramstring = match.group(9)
-    params = {}
-    if paramstring:
-        for param in paramstring.split(";"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-
-    account = findaccount(protocol, accountname)
-
-    if command.lower() == "message":
-        goim(account, screenname, params.get("body"))
-    elif command.lower() == "join":
-        room, server = screenname.split("@")
-        gochat(account, {"room": room, "server": server})
-    elif command.lower() == "roster":
-        addbuddy(account, screenname, params.get("group", ""), params.get("name", ""))
-    else:
-        goim(account, screenname)
-
-def ymsgr(uri):
-    protocol = "prpl-yahoo"
-    match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
-    if not match:
-        print "Invalid ymsgr URI: %s" % uri
-        return
-
-    command = urllib.unquote_plus(match.group(1))
-    screenname = urllib.unquote_plus(match.group(3))
-    paramstring = match.group(5)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-
-    account = findaccount(protocol)
-
-    if command.lower() == "sendim":
-        goim(account, screenname, params.get("m"))
-    elif command.lower() == "chat":
-        gochat(account, {"room": screenname})
-    elif command.lower() == "addfriend":
-        addbuddy(account, screenname)
-
-
-def main(argv=sys.argv):
-    if len(argv) != 2:
-        print "Usage: %s URI" % argv[0]
-        print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0]
-        return
-
-    uri = argv[1]
-    type = uri.split(":")[0]
-
-    if type == "aim":
-        aim(uri)
-    elif type == "gg":
-        gg(uri)
-    elif type == "icq":
-        icq(uri)
-    elif type == "irc":
-        irc(uri)
-    elif type == "msnim":
-        msnim(uri)
-    elif type == "sip":
-        sip(uri)
-    elif type == "xmpp":
-        xmpp(uri)
-    elif type == "ymsgr":
-        ymsgr(uri)
-    else:
-        print "Unkown protocol: %s" % type
-
-if __name__ == "__main__":
-    main()
--- a/libpurple/gaim.h	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * 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
- *
- */
-#ifndef _PURPLE_H_
-#define _PURPLE_H_
-
-#define XPATCH BAD /* Because Kalla Said So */
-
-#endif /* _PURPLE_H_ */
--- a/libpurple/gconf/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/gconf/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,8 +1,8 @@
 schemadir = @GCONF_SCHEMA_FILE_DIR@
 
-EXTRA_DIST = gaim.schemas.in
+EXTRA_DIST = purple.schemas.in
 
-schema_in_files = gaim.schemas.in
+schema_in_files = purple.schemas.in
 schema_DATA = $(schema_in_files:.schemas.in=.schemas)
 @INTLTOOL_SCHEMAS_RULE@
 
--- a/libpurple/gconf/gaim.schemas.in	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,276 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-  <schemalist>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/aim/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/aim/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "aim" URLs</short>
-        <long>True if the command specified in the "command" key should handle "aim" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/aim/command</key>
-      <applyto>/desktop/gnome/url-handlers/aim/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "aim" URLs</short>
-        <long>The command used to handle "aim" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/aim/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/aim/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/gg/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/gg/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "gg" URLs</short>
-        <long>True if the command specified in the "command" key should handle "gg" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/gg/command</key>
-      <applyto>/desktop/gnome/url-handlers/gg/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "gg" URLs</short>
-        <long>The command used to handle "gg" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/gg/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/gg/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/icq/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/icq/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "icq" URLs</short>
-        <long>True if the command specified in the "command" key should handle "icq" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/icq/command</key>
-      <applyto>/desktop/gnome/url-handlers/icq/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "icq" URLs</short>
-        <long>The command used to handle "icq" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/icq/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/icq/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/irc/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/irc/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "irc" URLs</short>
-        <long>True if the command specified in the "command" key should handle "irc" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/irc/command</key>
-      <applyto>/desktop/gnome/url-handlers/irc/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "irc" URLs</short>
-        <long>The command used to handle "irc" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/irc/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/irc/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/msnim/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/msnim/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "msnim" URLs</short>
-        <long>True if the command specified in the "command" key should handle "msnim" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/msnim/command</key>
-      <applyto>/desktop/gnome/url-handlers/msnim/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "msnim" URLs</short>
-        <long>The command used to handle "msnim" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/msnim/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/msnim/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/sip/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/sip/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "sip" URLs</short>
-        <long>True if the command specified in the "command" key should handle "sip" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/sip/command</key>
-      <applyto>/desktop/gnome/url-handlers/sip/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "sip" URLs</short>
-        <long>The command used to handle "sip" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/sip/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/sip/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/xmpp/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/xmpp/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "xmpp" URLs</short>
-        <long>True if the command specified in the "command" key should handle "xmpp" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/xmpp/command</key>
-      <applyto>/desktop/gnome/url-handlers/xmpp/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "xmpp" URLs</short>
-        <long>The command used to handle "xmpp" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/xmpp/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/xmpp/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/ymsgr/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/ymsgr/enabled</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "ymsgr" URLs</short>
-        <long>True if the command specified in the "command" key should handle "ymsgr" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/ymsgr/command</key>
-      <applyto>/desktop/gnome/url-handlers/ymsgr/command</applyto>
-      <owner>gaim</owner>
-      <type>string</type>
-      <default>gaim-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "ymsgr" URLs</short>
-        <long>The command used to handle "ymsgr" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/ymsgr/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/ymsgr/needs_terminal</applyto>
-      <owner>gaim</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-  </schemalist>
-</gconfschemafile>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/gconf/purple.schemas.in	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,276 @@
+<?xml version="1.0"?>
+<gconfschemafile>
+  <schemalist>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/aim/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/aim/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "aim" URLs</short>
+        <long>True if the command specified in the "command" key should handle "aim" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/aim/command</key>
+      <applyto>/desktop/gnome/url-handlers/aim/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "aim" URLs</short>
+        <long>The command used to handle "aim" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/aim/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/aim/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/gg/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/gg/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "gg" URLs</short>
+        <long>True if the command specified in the "command" key should handle "gg" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/gg/command</key>
+      <applyto>/desktop/gnome/url-handlers/gg/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "gg" URLs</short>
+        <long>The command used to handle "gg" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/gg/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/gg/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/icq/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/icq/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "icq" URLs</short>
+        <long>True if the command specified in the "command" key should handle "icq" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/icq/command</key>
+      <applyto>/desktop/gnome/url-handlers/icq/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "icq" URLs</short>
+        <long>The command used to handle "icq" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/icq/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/icq/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/irc/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/irc/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "irc" URLs</short>
+        <long>True if the command specified in the "command" key should handle "irc" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/irc/command</key>
+      <applyto>/desktop/gnome/url-handlers/irc/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "irc" URLs</short>
+        <long>The command used to handle "irc" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/irc/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/irc/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/msnim/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/msnim/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "msnim" URLs</short>
+        <long>True if the command specified in the "command" key should handle "msnim" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/msnim/command</key>
+      <applyto>/desktop/gnome/url-handlers/msnim/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "msnim" URLs</short>
+        <long>The command used to handle "msnim" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/msnim/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/msnim/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/sip/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/sip/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "sip" URLs</short>
+        <long>True if the command specified in the "command" key should handle "sip" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/sip/command</key>
+      <applyto>/desktop/gnome/url-handlers/sip/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "sip" URLs</short>
+        <long>The command used to handle "sip" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/sip/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/sip/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/xmpp/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/xmpp/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "xmpp" URLs</short>
+        <long>True if the command specified in the "command" key should handle "xmpp" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/xmpp/command</key>
+      <applyto>/desktop/gnome/url-handlers/xmpp/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "xmpp" URLs</short>
+        <long>The command used to handle "xmpp" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/xmpp/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/xmpp/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/ymsgr/enabled</key>
+      <applyto>/desktop/gnome/url-handlers/ymsgr/enabled</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Whether the specified command should handle "ymsgr" URLs</short>
+        <long>True if the command specified in the "command" key should handle "ymsgr" URLs.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/ymsgr/command</key>
+      <applyto>/desktop/gnome/url-handlers/ymsgr/command</applyto>
+      <owner>purple</owner>
+      <type>string</type>
+      <default>purple-url-handler "%s"</default>
+      <locale name="C">
+        <short>The handler for "ymsgr" URLs</short>
+        <long>The command used to handle "ymsgr" URLs, if enabled.</long>
+      </locale>
+    </schema>
+    <schema>
+      <key>/schemas/desktop/gnome/url-handlers/ymsgr/needs_terminal</key>
+      <applyto>/desktop/gnome/url-handlers/ymsgr/needs_terminal</applyto>
+      <owner>purple</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Run the command in a terminal</short>
+        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
+      </locale>
+    </schema>
+  </schemalist>
+</gconfschemafile>
--- a/libpurple/internal.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/internal.h	Mon Mar 26 01:55:33 2007 +0000
@@ -181,7 +181,7 @@
 #define purple_strlcpy(dest, src) g_strlcpy(dest, src, sizeof(dest))
 #define purple_strlcat(dest, src) g_strlcat(dest, src, sizeof(dest))
 
-#define PURPLE_WEBSITE "http://purple.sourceforge.net/"
+#define PURPLE_WEBSITE "http://pidgin.im/"
 
 #ifndef _WIN32
 /* Everything needs to include this, because
--- a/libpurple/log.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/log.c	Mon Mar 26 01:55:33 2007 +0000
@@ -638,7 +638,7 @@
 #else
 #error Unknown size of time_t
 #endif
-	                     purple_value_new(PURPLE_TYPE_STRING), 2,
+	                     purple_value_new(PURPLE_TYPE_STRING), 3,
 	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
 	                                    PURPLE_SUBTYPE_LOG),
 #if SIZEOF_TIME_T == 4
--- a/libpurple/nat-pmp.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/nat-pmp.c	Mon Mar 26 01:55:33 2007 +0000
@@ -31,14 +31,13 @@
 #include "nat-pmp.h"
 #include "debug.h"
 
+#include <arpa/inet.h>
+#include <netinet/in.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/sysctl.h>
 
 #include <net/route.h>
-#include <netinet/in.h>
-
-#include <arpa/inet.h>
 
 #include <netdb.h>
 #include <stdio.h>
@@ -47,26 +46,68 @@
 #include <err.h>
 
 #include <errno.h>
-#include <assert.h>
 #include <sys/types.h>
 #include <net/if.h>
 
 #ifdef NET_RT_DUMP2
+
+#define PMP_DEBUG	1
+
+typedef struct {
+	uint8_t	version;
+	uint8_t opcode;
+} PurplePmpIpRequest;
+
+typedef struct {
+	uint8_t		version;
+	uint8_t		opcode; // 128 + n
+	uint16_t	resultcode;
+	uint32_t	epoch;
+	uint32_t	address;
+} PurplePmpIpResponse;
+
+typedef struct {
+	uint8_t		version;
+	uint8_t		opcode;
+	char		reserved[2];
+	uint16_t	privateport;
+	uint16_t	publicport;
+	uint32_t	lifetime;
+} PurplePmpMapRequest;
+
+struct _PurplePmpMapResponse {
+	uint8_t		version;
+	uint8_t		opcode;
+	uint16_t	resultcode;
+	uint32_t	epoch;
+	uint16_t	privateport;
+	uint16_t	publicport;
+	uint32_t	lifetime;
+};
+
+typedef struct _PurplePmpMapResponse PurplePmpMapResponse;
+
 /*
  *	Thanks to R. Matthew Emerson for the fixes on this
  */
 
+#define PMP_MAP_OPCODE_UDP	1
+#define PMP_MAP_OPCODE_TCP	2
+
+#define PMP_VERSION			0
+#define PMP_PORT			5351
+#define PMP_TIMEOUT			250000	/* 250000 useconds */
+
 /* alignment constraint for routing socket */
-#define ROUNDUP(a)							\
-((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
-#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
+#define ROUNDUP(a)			((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
+#define ADVANCE(x, n)		(x += ROUNDUP((n)->sa_len))
 
 static void
 get_rtaddrs(int bitmask, struct sockaddr *sa, struct sockaddr *addrs[])
 {
 	int i;
-	
-	for (i = 0; i < RTAX_MAX; i++) 
+
+	for (i = 0; i < RTAX_MAX; i++)
 	{
 		if (bitmask & (1 << i)) 
 		{
@@ -84,10 +125,10 @@
 is_default_route(struct sockaddr *sa, struct sockaddr *mask)
 {
     struct sockaddr_in *sin;
-	
+
     if (sa->sa_family != AF_INET)
 		return 0;
-	
+
     sin = (struct sockaddr_in *)sa;
     if ((sin->sin_addr.s_addr == INADDR_ANY) &&
 		mask &&
@@ -98,6 +139,9 @@
 		return 0;
 }
 
+/*!
+ * The return sockaddr_in must be g_free()'d when no longer needed
+ */
 static struct sockaddr_in *
 default_gw()
 {
@@ -106,35 +150,38 @@
     char *buf, *next, *lim;
     struct rt_msghdr2 *rtm;
     struct sockaddr *sa;
-    struct sockaddr *rti_info[RTAX_MAX];
-	struct sockaddr_in *sin;
-	
+	struct sockaddr_in *sin = NULL;
+	gboolean found = FALSE;
+
     mib[0] = CTL_NET;
-    mib[1] = PF_ROUTE;
-    mib[2] = 0;
-    mib[3] = 0;
+    mib[1] = PF_ROUTE; /* entire routing table or a subset of it */
+    mib[2] = 0; /* protocol number - always 0 */
+    mib[3] = 0; /* address family - 0 for all addres families */
     mib[4] = NET_RT_DUMP2;
     mib[5] = 0;
-	
+
+	/* Determine the buffer side needed to get the full routing table */
     if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) 
 	{
-		err(1, "sysctl: net.route.0.0.dump estimate");
+		purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump estimate");
+		return NULL;
     }
-	
-    buf = malloc(needed);
-	
-    if (buf == 0) 
+
+    if (!(buf = malloc(needed)))
 	{
-		err(2, "malloc");
+		purple_debug_warning("nat-pmp", "malloc");
+		return NULL;
     }
-	
+
+	/* Read the routing table into buf */
     if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) 
 	{
-		err(1, "sysctl: net.route.0.0.dump");
+		purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump");
+		return NULL;
     }
-	
+
     lim = buf + needed;
-	
+
     for (next = buf; next < lim; next += rtm->rtm_msglen) 
 	{
 		rtm = (struct rt_msghdr2 *)next;
@@ -142,51 +189,46 @@
 		
 		if (sa->sa_family == AF_INET) 
 		{
-            sin = (struct sockaddr_in *)sa;
-			struct sockaddr addr, mask;
-			
-			get_rtaddrs(rtm->rtm_addrs, sa, rti_info);
-			bzero(&addr, sizeof(addr));
-			
-			if (rtm->rtm_addrs & RTA_DST)
-				bcopy(rti_info[RTAX_DST], &addr, rti_info[RTAX_DST]->sa_len);
-			
-			bzero(&mask, sizeof(mask));
-			
-			if (rtm->rtm_addrs & RTA_NETMASK)
-				bcopy(rti_info[RTAX_NETMASK], &mask, rti_info[RTAX_NETMASK]->sa_len);
-			
-			if (is_default_route(&addr, &mask)) 
+			sin = (struct sockaddr_in*) sa;
+
+			if ((rtm->rtm_flags & RTF_GATEWAY) && sin->sin_addr.s_addr == INADDR_ANY)
 			{
-				sin = (struct sockaddr_in *)rti_info[RTAX_GATEWAY];
-				break;
+				/* We found the default route. Now get the destination address and netmask. */
+	            struct sockaddr *rti_info[RTAX_MAX];
+				struct sockaddr addr, mask;
+
+				get_rtaddrs(rtm->rtm_addrs, sa, rti_info);
+				bzero(&addr, sizeof(addr));
+
+				if (rtm->rtm_addrs & RTA_DST)
+					bcopy(rti_info[RTAX_DST], &addr, rti_info[RTAX_DST]->sa_len);
+
+				bzero(&mask, sizeof(mask));
+
+				if (rtm->rtm_addrs & RTA_NETMASK)
+					bcopy(rti_info[RTAX_NETMASK], &mask, rti_info[RTAX_NETMASK]->sa_len);
+
+				if (rtm->rtm_addrs & RTA_GATEWAY &&
+					is_default_route(&addr, &mask)) 
+				{					
+					if (rti_info[RTAX_GATEWAY]) {
+						struct sockaddr_in *rti_sin = (struct sockaddr_in *)rti_info[RTAX_GATEWAY];
+						sin = g_new0(struct sockaddr_in, 1);
+						sin->sin_family = rti_sin->sin_family;
+						sin->sin_port = rti_sin->sin_port;
+						sin->sin_addr.s_addr = rti_sin->sin_addr.s_addr;
+						memcpy(sin, rti_info[RTAX_GATEWAY], sizeof(struct sockaddr_in));
+
+						purple_debug_info("nat-pmp", "found a default gateway");
+						found = TRUE;
+						break;
+					}
+				}
 			}
 		}
-		
-		rtm = (struct rt_msghdr2 *)next;
     }
-	
-    free(buf);
-	
-	return sin;
-}
 
-//!	double_timeout(struct timeval *) will handle doubling a timeout for backoffs required by NAT-PMP
-static void
-double_timeout(struct timeval *to)
-{
-	int second = 1000000; // number of useconds
-	
-	to->tv_sec = (to->tv_sec * 2);
-	to->tv_usec = (to->tv_usec * 2);
-	
-	// Overflow useconds if necessary
-	if (to->tv_usec >= second)
-	{
-		int overflow = (to->tv_usec / second);
-		to->tv_usec  = (to->tv_usec - (overflow * second));
-		to->tv_sec = (to->tv_sec + overflow);
-	}
+	return (found ? sin : NULL);
 }
 
 /*!
@@ -199,89 +241,88 @@
 purple_pmp_get_public_ip()
 {
 	struct sockaddr_in *gateway = default_gw();
-	
-	if (gateway == NULL)
+
+	if (!gateway)
 	{
 		purple_debug_info("nat-pmp", "Cannot request public IP from a NULL gateway!\n");
 		return NULL;
 	}
+
+	/* Default port for NAT-PMP is 5351 */
 	if (gateway->sin_port != PMP_PORT)
-	{
-		gateway->sin_port = htons(PMP_PORT); //	Default port for NAT-PMP is 5351
-	}
+		gateway->sin_port = htons(PMP_PORT);
 
 	int sendfd;
-	int req_attempts = 1;	
 	struct timeval req_timeout;
-	pmp_ip_request_t req;
-	pmp_ip_response_t resp;
+	PurplePmpIpRequest req;
+	PurplePmpIpResponse resp;
 	struct sockaddr_in *publicsockaddr = NULL;
 
 	req_timeout.tv_sec = 0;
 	req_timeout.tv_usec = PMP_TIMEOUT;
 
 	sendfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-	
-	//	Clean out both req and resp structures
-	bzero(&req, sizeof(pmp_ip_request_t));
-	bzero(&resp, sizeof(pmp_ip_response_t));
+
+	/* Clean out both req and resp structures */
+	bzero(&req, sizeof(PurplePmpIpRequest));
+	bzero(&resp, sizeof(PurplePmpIpResponse));
 	req.version = 0;
 	req.opcode	= 0;
-	
-	//	Attempt to contact NAT-PMP device 9 times as per: draft-cheshire-nat-pmp-02.txt  
-	while (req_attempts < 10)
-	{	
+
+	/* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time.
+	 * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds.
+	 * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes).
+	 * 
+	 * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present.
+	 * XXX Make this nonblocking.
+	 */
 #ifdef PMP_DEBUG
-		purple_debug_info("nat-pmp", "Attempting to retrieve the public ip address for the NAT device at: %s\n", inet_ntoa(gateway->sin_addr));
-		purple_debug_info("nat-pmp", "\tTimeout: %ds %dus, Request #: %d\n", req_timeout.tv_sec, req_timeout.tv_usec, req_attempts);
+	purple_debug_info("nat-pmp", "Attempting to retrieve the public ip address for the NAT device at: %s\n", inet_ntoa(gateway->sin_addr));
+	purple_debug_info("nat-pmp", "\tTimeout: %ds %dus\n", req_timeout.tv_sec, req_timeout.tv_usec);
 #endif
-		struct sockaddr_in addr;
-		socklen_t len = sizeof(struct sockaddr_in);
+	struct sockaddr_in addr;
+	socklen_t len = sizeof(struct sockaddr_in);
+
+	/* TODO: Non-blocking! */
+	if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0)
+	{
+		purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", strerror(errno));
+		g_free(gateway);
+		return NULL;
+	}
 
-		if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0)
+	if (setsockopt(sendfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) < 0)
+	{
+		purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", strerror(errno));
+		g_free(gateway);
+		return NULL;
+	}		
+
+	/* TODO: Non-blocking! */
+	if (recvfrom(sendfd, &resp, sizeof(PurplePmpIpResponse), 0, (struct sockaddr *)(&addr), &len) < 0)
+	{			
+		if (errno != EAGAIN)
 		{
-			purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", strerror(errno));
+			purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno));
+			g_free(gateway);
 			return NULL;
 		}
-		
-		if (setsockopt(sendfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) < 0)
-		{
-			purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", strerror(errno));
-			return NULL;
-		}		
-		
-		if (recvfrom(sendfd, &resp, sizeof(pmp_ip_response_t), 0, (struct sockaddr *)(&addr), &len) < 0)
-		{			
-			if ( (errno != EAGAIN) || (req_attempts == 9) )
-			{
-				purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno));
-				return NULL;
-			}
-			else
-			{
-				goto iterate;
-			}
-		}
-		
-		if (addr.sin_addr.s_addr != gateway->sin_addr.s_addr)
-		{
-			purple_debug_info("nat-pmp", "Response was not received from our gateway! Instead from: %s\n", inet_ntoa(addr.sin_addr));
-			goto iterate;
-		}
-		else
-		{
-			publicsockaddr = &addr;
-			break;
-		}
+	}
 
-iterate:
-		++req_attempts;
-		double_timeout(&req_timeout);
+	if (addr.sin_addr.s_addr == gateway->sin_addr.s_addr)
+		publicsockaddr = &addr;
+	else
+	{
+		purple_debug_info("nat-pmp", "Response was not received from our gateway! Instead from: %s\n", inet_ntoa(addr.sin_addr));
+		g_free(gateway);
+		return NULL;
 	}
-	
-	if (publicsockaddr == NULL)
+
+	if (!publicsockaddr) {
+		g_free(gateway);
 		return NULL;
-	
+	}
+
 #ifdef PMP_DEBUG
 	purple_debug_info("nat-pmp", "Response received from NAT-PMP device:\n");
 	purple_debug_info("nat-pmp", "version: %d\n", resp.version);
@@ -294,126 +335,128 @@
 #endif	
 
 	publicsockaddr->sin_addr.s_addr = resp.address;
-	
+
+	g_free(gateway);
+
 	return inet_ntoa(publicsockaddr->sin_addr);
 }
 
-/*!
- *	will return NULL on error, or a pointer to the pmp_map_response_t type
- */
-pmp_map_response_t *
-purple_pmp_create_map(uint8_t type, uint16_t privateport, uint16_t publicport, uint32_t lifetime)
+gboolean
+purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned short publicport, int lifetime)
 {
-	struct sockaddr_in *gateway = default_gw();
-	
-	if (gateway == NULL)
+	struct sockaddr_in *gateway;
+	gboolean success = TRUE;
+	int sendfd;
+	struct timeval req_timeout;
+	PurplePmpMapRequest req;
+	PurplePmpMapResponse *resp;
+
+	gateway = default_gw();
+
+	if (!gateway)
 	{
 		purple_debug_info("nat-pmp", "Cannot create mapping on a NULL gateway!\n");
-		return NULL;
-	}
-	if (gateway->sin_port != PMP_PORT)
-	{
-		gateway->sin_port = htons(PMP_PORT); //	Default port for NAT-PMP is 5351
+		return FALSE;
 	}
-		
-	int sendfd;
-	int req_attempts = 1;	
-	struct timeval req_timeout;
-	pmp_map_request_t req;
-	pmp_map_response_t *resp = (pmp_map_response_t *)(malloc(sizeof(pmp_map_response_t)));
-	
+
+	/* Default port for NAT-PMP is 5351 */
+	if (gateway->sin_port != PMP_PORT)
+		gateway->sin_port = htons(PMP_PORT);
+
+	resp = g_new0(PurplePmpMapResponse, 1);
+
 	req_timeout.tv_sec = 0;
 	req_timeout.tv_usec = PMP_TIMEOUT;
-	
+
 	sendfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-	
-	//	Clean out both req and resp structures
-	bzero(&req, sizeof(pmp_map_request_t));
-	bzero(resp, sizeof(pmp_map_response_t));
+
+	/* Set up the req */
+	bzero(&req, sizeof(PurplePmpMapRequest));
 	req.version = 0;
-	req.opcode	= type;	
+	req.opcode	= ((type == PURPLE_PMP_TYPE_UDP) ? PMP_MAP_OPCODE_UDP : PMP_MAP_OPCODE_TCP);	
 	req.privateport = htons(privateport); //	What a difference byte ordering makes...d'oh!
 	req.publicport = htons(publicport);
 	req.lifetime = htonl(lifetime);
-	
-	//	Attempt to contact NAT-PMP device 9 times as per: draft-cheshire-nat-pmp-02.txt  
-	while (req_attempts < 10)
-	{	
+
+	/* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time.
+	 * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds.
+	 * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes).
+	 * 
+	 * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present.
+	 * XXX Make this nonblocking.
+	 * XXX This code looks like the pmp_get_public_ip() code. Can it be consolidated?
+	 */
 #ifdef PMP_DEBUG
-		purple_debug_info("nat-pmp", "Attempting to create a NAT-PMP mapping the private port %d, and the public port %d\n", privateport, publicport);
-		purple_debug_info("nat-pmp", "\tTimeout: %ds %dus, Request #: %d\n", req_timeout.tv_sec, req_timeout.tv_usec, req_attempts);
+	purple_debug_info("nat-pmp", "Attempting to create a NAT-PMP mapping the private port %d, and the public port %d\n", privateport, publicport);
+	purple_debug_info("nat-pmp", "\tTimeout: %ds %dus\n", req_timeout.tv_sec, req_timeout.tv_usec);
 #endif
 
-		if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0)
-		{
-			purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP mapping request! (%s)\n", strerror(errno));
-			return NULL;
-		}
-		
-		if (setsockopt(sendfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) < 0)
-		{
+	/* TODO: Non-blocking! */
+	success = (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) >= 0);
+	if (!success)
+		purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP mapping request! (%s)\n", strerror(errno));
+
+	if (success)
+	{
+		success = (setsockopt(sendfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) >= 0);
+		if (!success)
 			purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", strerror(errno));
-			return NULL;
-		}		
-		
-		if (recvfrom(sendfd, resp, sizeof(pmp_map_response_t), 0, NULL, NULL) < 0)
-		{			
-			if ( (errno != EAGAIN) || (req_attempts == 9) )
-			{
-				purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno));
-				return NULL;
-			}
-			else
-			{
-				goto iterate;
-			}
-		}
-		
-		if (resp->opcode != (req.opcode + 128))
-		{
+	}
+
+	if (success)
+	{
+		/* The original code treats EAGAIN as a reason to iterate.. but I've removed iteration. This may be a problem */
+		/* TODO: Non-blocking! */
+		success = ((recvfrom(sendfd, resp, sizeof(PurplePmpMapResponse), 0, NULL, NULL) >= 0) ||
+				   (errno == EAGAIN));
+		if (!success)
+			purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno));
+	}
+
+	if (success)
+	{
+		success = (resp->opcode == (req.opcode + 128));
+		if (!success)
 			purple_debug_info("nat-pmp", "The opcode for the response from the NAT device does not match the request opcode!\n");
-			goto iterate;
-		}
-		
-		break;
-		
-iterate:
-		++req_attempts;
-		double_timeout(&req_timeout);
 	}
-	
+
 #ifdef PMP_DEBUG
-	purple_debug_info("nat-pmp", "Response received from NAT-PMP device:\n");
-	purple_debug_info("nat-pmp", "version: %d\n", resp->version);
-	purple_debug_info("nat-pmp", "opcode: %d\n", resp->opcode);
-	purple_debug_info("nat-pmp", "resultcode: %d\n", ntohs(resp->resultcode));
-	purple_debug_info("nat-pmp", "epoch: %d\n", ntohl(resp->epoch));
-	purple_debug_info("nat-pmp", "privateport: %d\n", ntohs(resp->privateport));
-	purple_debug_info("nat-pmp", "publicport: %d\n", ntohs(resp->publicport));
-	purple_debug_info("nat-pmp", "lifetime: %d\n", ntohl(resp->lifetime));
-#endif	
+	if (success)
+	{
+		purple_debug_info("nat-pmp", "Response received from NAT-PMP device:\n");
+		purple_debug_info("nat-pmp", "version: %d\n", resp->version);
+		purple_debug_info("nat-pmp", "opcode: %d\n", resp->opcode);
+		purple_debug_info("nat-pmp", "resultcode: %d\n", ntohs(resp->resultcode));
+		purple_debug_info("nat-pmp", "epoch: %d\n", ntohl(resp->epoch));
+		purple_debug_info("nat-pmp", "privateport: %d\n", ntohs(resp->privateport));
+		purple_debug_info("nat-pmp", "publicport: %d\n", ntohs(resp->publicport));
+		purple_debug_info("nat-pmp", "lifetime: %d\n", ntohl(resp->lifetime));
+	}
+#endif
 
-	return resp;
+	g_free(resp);
+	g_free(gateway);
+
+	/* XXX The private port may actually differ from the one we requested, according to the spec.
+	 * We don't handle that situation at present.
+	 *
+	 * TODO: Look at the result and verify it matches what we wanted; either return a failure if it doesn't,
+	 * or change network.c to know what to do if the desired private port shifts as a result of the nat-pmp operation.
+	 */
+	return success;
 }
 
-/*!
- *	pmp_destroy_map(uint8_t,uint16_t) 
- *	will return NULL on error, or a pointer to the pmp_map_response_t type
- */
-pmp_map_response_t *
-purple_pmp_destroy_map(uint8_t type, uint16_t privateport)
+gboolean
+purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport)
 {
-	pmp_map_response_t *response = NULL;
-	
-	if ((response = purple_pmp_create_map(type, privateport, 0, 0)) == NULL)
-	{
-		purple_debug_info("nat-pmp", "Failed to properly destroy mapping for %d!\n", privateport);
-		return NULL;
-	}
-	else
-	{
-		return response;
-	}
+	gboolean success;
+
+	success = purple_pmp_create_map(((type == PURPLE_PMP_TYPE_UDP) ? PMP_MAP_OPCODE_UDP : PMP_MAP_OPCODE_TCP),
+							privateport, 0, 0);
+	if (!success)
+		purple_debug_warning("nat-pmp", "Failed to properly destroy mapping for %d!\n", privateport);
+
+	return success;
 }
 #else /* #ifdef NET_RT_DUMP2 */
 char *
@@ -422,15 +465,15 @@
 	return NULL;
 }
 
-pmp_map_response_t *
-purple_pmp_create_map(uint8_t type, uint16_t privateport, uint16_t publicport, uint32_t lifetime)
+gboolean
+purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned short publicport, int lifetime)
 {
-	return NULL;
+	return FALSE;
 }
 
-pmp_map_response_t *
-purple_pmp_destroy_map(uint8_t type, uint16_t privateport)
+gboolean
+purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport)
 {
-	return NULL;
+	return FALSE;
 }
 #endif /* #ifndef NET_RT_DUMP2 */
--- a/libpurple/nat-pmp.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/nat-pmp.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /**
-* @file nat-pmp.h NAT-PMP Implementation
+ * @file nat-pmp.h NAT-PMP Implementation
  * @ingroup core
  *
  * purple
@@ -28,26 +28,13 @@
  * OF SUCH DAMAGE.
  */
 
-#ifndef _PMPMAPPER_H
-#define _PMPMAPPER_H
+#ifndef _PURPLE_NAT_PMP_H
+#define _PURPLE_NAT_PMP_H
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/socket.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <net/if.h>
-#include <net/route.h>
+#include <stdint.h>
+#include <glib.h>
 
-#define PMP_VERSION		0
-#define PMP_PORT		5351
-#define PMP_TIMEOUT		250000	//	250000 useconds
-#define PMP_LIFETIME	3600	//	3600 seconds
-
-#define PMP_MAP_UDP		1
-#define PMP_MAP_TCP		2
+#define PURPLE_PMP_LIFETIME	3600	/* 3600 seconds */
 
 /*
  *	uint8_t:	version, opcodes
@@ -55,40 +42,42 @@
  *	unint32_t:	epoch (seconds since mappings reset)
  */
 
-typedef struct {
-	uint8_t	version;
-	uint8_t opcode;
-} pmp_ip_request_t;
+typedef enum {
+	PURPLE_PMP_TYPE_UDP,
+	PURPLE_PMP_TYPE_TCP
+} PurplePmpType;
 
-typedef struct {
-	uint8_t		version;
-	uint8_t		opcode; // 128 + n
-	uint16_t	resultcode;
-	uint32_t	epoch;
-	uint32_t	address;
-} pmp_ip_response_t;
+/**
+ *
+ */
+
+/*
+ * TODO: This should probably cache the result of this lookup requests
+ *       so that subsequent calls to this function do not require a
+ *       round-trip exchange with the local router.
+ */
+char *purple_pmp_get_public_ip();
 
-typedef struct {
-	uint8_t		version;
-	uint8_t		opcode;
-	char		reserved[2];
-	uint16_t	privateport;
-	uint16_t	publicport;
-	uint32_t	lifetime;
-} pmp_map_request_t;
+/**
+ * Remove the NAT-PMP mapping for a specified type on a specified port
+ *
+ * @param type The PurplePmpType
+ * @param privateport The private port on which we are listening locally
+ * @param publicport The public port on which we are expecting a response
+ * @param lifetime The lifetime of the mapping. It is recommended that this be PURPLE_PMP_LIFETIME.
+ *
+ * @returns TRUE if succesful; FALSE if unsuccessful
+ */
+gboolean purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned short publicport, int lifetime);
 
-typedef struct {
-	uint8_t		version;
-	uint8_t		opcode;
-	uint16_t	resultcode;
-	uint32_t	epoch;
-	uint16_t	privateport;
-	uint16_t	publicport;
-	uint32_t	lifetime;
-} pmp_map_response_t;
-
-char *purple_pmp_get_public_ip();
-pmp_map_response_t *purple_pmp_create_map(uint8_t type, uint16_t privateport, uint16_t publicport, uint32_t lifetime);
-pmp_map_response_t *purple_pmp_destroy_map(uint8_t type, uint16_t privateport);
+/**
+ * Remove the NAT-PMP mapping for a specified type on a specified port
+ *
+ * @param type The PurplePmpType
+ * @param privateport The private port on which the mapping was previously made
+ *
+ * @returns TRUE if succesful; FALSE if unsuccessful
+ */
+gboolean purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport);
 	
 #endif
\ No newline at end of file
--- a/libpurple/network.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/network.c	Mon Mar 26 01:55:33 2007 +0000
@@ -47,6 +47,8 @@
 #include "stun.h"
 #include "upnp.h"
 
+/* #define ENABLE_NAT_PMP 1 */
+
 #ifdef ENABLE_NAT_PMP
 #include "nat-pmp.h"
 #endif
@@ -79,9 +81,6 @@
 	PurpleNetworkListenCallback cb;
 	gpointer cb_data;
 	UPnPMappingAddRemove *mapping_data;
-#ifdef ENABLE_NAT_PMP
-	gboolean has_pmp_mapping;
-#endif
 };
 
 #ifdef HAVE_LIBNM
@@ -200,7 +199,7 @@
 	  return ip;
 
 #ifdef ENABLE_NAT_PMP
-	/* Attempt to ge tthe IP from a NAT device using NAT-PMP */
+	/* Attempt to get the IP from a NAT device using NAT-PMP */
 	ip = purple_pmp_get_public_ip();
 	if (ip != NULL)
 		return ip;
@@ -251,6 +250,22 @@
 	purple_network_listen_cancel(listen_data);
 }
 
+#ifdef ENABLE_NAT_PMP
+static gboolean
+purple_network_finish_pmp_map_cb(gpointer data)
+{
+	PurpleNetworkListenData *listen_data;
+
+	listen_data = data;
+
+	if (listen_data->cb)
+		listen_data->cb(listen_data->listenfd, listen_data->cb_data);
+
+	purple_network_listen_cancel(listen_data);
+
+	return FALSE;
+}
+#endif
 
 static PurpleNetworkListenData *
 purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
@@ -338,7 +353,7 @@
 	actual_port = purple_network_get_port_from_fd(listenfd);
 
 	purple_debug_info("network", "Listening on port: %hu\n", actual_port);
-	
+
 	listen_data = g_new0(PurpleNetworkListenData, 1);
 	listen_data->listenfd = listenfd;
 	listen_data->adding = TRUE;
@@ -348,15 +363,22 @@
 
 #ifdef ENABLE_NAT_PMP
 	/* Attempt a NAT-PMP Mapping, which will return immediately */
-	listen_data->has_pmp_mapping = (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP),
-														actual_port, actual_port, PURPLE_PMP_LIFETIME) != NULL);	
+	if (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP),
+							  actual_port, actual_port, PURPLE_PMP_LIFETIME) != NULL)
+	{
+		purple_debug_info("network", "Created NAT-PMP mapping on port %i",actual_port);
+		/* We want to return listen_data now, and on the next run loop trigger the cb and destroy listen_data */
+		purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data);
+	}
+	else
 #endif
-	
-	/* Attempt a UPnP Mapping */
-	listen_data->mapping_data = purple_upnp_set_port_mapping(
-					actual_port,
-					(socket_type == SOCK_STREAM) ? "TCP" : "UDP",
-					purple_network_set_upnp_port_mapping_cb, listen_data);
+	{
+		/* Attempt a UPnP Mapping */
+		listen_data->mapping_data = purple_upnp_set_port_mapping(
+						 actual_port,
+						 (socket_type == SOCK_STREAM) ? "TCP" : "UDP",
+						 purple_network_set_upnp_port_mapping_cb, listen_data);
+	}
 
 	return listen_data;
 }
@@ -398,12 +420,6 @@
 	if (listen_data->mapping_data != NULL)
 		purple_upnp_cancel_port_mapping(listen_data->mapping_data);
 
-#ifdef ENABLE_NAT_PMP
-	if (listen_data->has_pmp_mapping)
-		purple_pmp_destroy_map(((listen_data->socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP),
-							 purple_network_get_port_from_fd(listen_data->listenfd));
-#endif
-
 	g_free(listen_data);
 }
 
--- a/libpurple/plugin.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugin.c	Mon Mar 26 01:55:33 2007 +0000
@@ -369,6 +369,20 @@
 		return plugin;
 	}
 
+	/*
+	 * Check to make sure a plugin has defined an id.
+	 * Not having this check caused purple_plugin_unload to
+	 * enter an infinite loop in certain situations by passing
+	 * purple_find_plugin_by_id a NULL value. -- ecoffey
+	 */
+	if (!plugin->info->id || !strcmp(plugin->info->id, ""))
+	{
+		plugin->error = g_strdup_printf(_("This plugin has not defined an ID."));
+		purple_debug_error("plugins", "%s is not loadable: info->id is not defined.\n", plugin->path);
+		plugin->unloadable = TRUE;
+		return plugin;
+	}
+
 	/* Really old plugins. */
 	if (plugin->info->magic != PURPLE_PLUGIN_MAGIC)
 	{
@@ -658,12 +672,10 @@
 		{
 			if (!purple_plugin_unload(dep_plugin))
 			{
-				char *translated_name = g_strdup(_(dep_plugin->info->name));
 				char *tmp;
 
 				tmp = g_strdup_printf(_("The dependent plugin %s failed to unload."),
-				                      translated_name);
-				g_free(translated_name);
+				                      _(dep_plugin->info->name));
 
 				purple_notify_error(NULL, NULL,
 				                  _("There were errors unloading the plugin."), tmp);
--- a/libpurple/plugins/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -100,10 +100,10 @@
 
 EXTRA_DIST = \
 	Makefile.mingw \
+	ciphertest.c \
 	dbus-buddyicons-example.py \
 	filectl.c \
 	fortuneprofile.pl \
-	gaim.pl \
 	ipc-test-client.c \
 	ipc-test-server.c \
 	pluginpref_example.c \
--- a/libpurple/plugins/codeinline.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/codeinline.c	Mon Mar 26 01:55:33 2007 +0000
@@ -75,7 +75,7 @@
      "Changes the formatting of any outgoing text such that "
      "anything underlined will be received green and monospace.",
      "Sean Egan <seanegan@gmail.com>",
-     "http://purple.sourceforge.net",
+     PURPLE_WEBSITE,
      plugin_load,
      NULL,
      NULL,
--- a/libpurple/plugins/gaim.pl	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-sub description {
-        my($a, $b, $c, $d, $e, $f) = @_;
-        ("Example", "1.0", "An example Gaim perl script that does nothing particularly useful:\n\t-Show a dialog on load\n\t-Set user idle for 6,000 seconds\n\t-Greets people signing on with \"Hello\"\n\t-Informs you when script has been loaded for one minute.", "Eric Warmenhoven &lt;eric\@warmenhoven.org>", "http://gaim.sf.net", "/dev/null");
-}
-
-$handle = GAIM::register("Example", "1.0", "goodbye", "");
-
-GAIM::print("Perl Says", "Handle $handle");
-		
-$ver = GAIM::get_info(0);
-@ids = GAIM::get_info(1);
-
-$msg = "Gaim $ver:";
-foreach $id (@ids) {
-	$pro = GAIM::get_info(7, $id);
-	$nam = GAIM::get_info(3, $id);
-	$msg .= "\n$nam using $pro";
-}
-
-
-GAIM::command("idle", 6000);
-
-GAIM::add_event_handler($handle, "event_buddy_signon", "echo_reply");
-GAIM::add_timeout_handler($handle, 60, "notify");
-
-sub echo_reply {
-	$index = $_[0];
-	$who = $_[1];
-	GAIM::print_to_conv($index, $who, "Hello", 0);
-}
-
-sub notify {
-	GAIM::print("1 minute", "gaim test has been loaded for 1 minute");
-}
-
-sub goodbye {
-	GAIM::print("You Bastard!", "You killed Kenny!");
-}
-
--- a/libpurple/plugins/mono/BooPlugin.boo	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/BooPlugin.boo	Mon Mar 26 01:55:33 2007 +0000
@@ -1,6 +1,6 @@
-import Gaim
+import Purple
 
-class BooPlugin(GaimPlugin):
+class BooPlugin(PurplePlugin):
 
 	def handle(*args as (object)):
 		b as Buddy
@@ -18,5 +18,5 @@
 		Debug.debug(Debug.INFO, "booplugin", "destroying...\n")
 		
 	override def Info():
-		return GaimPluginInfo("Boo Plugin", "0.1", "Test Boo Plugin", "Longer Description", "Eoin Coffey", "urled")
+		return PurplePluginInfo("mono-boo", "Boo Plugin", "0.1", "Test Boo Plugin", "Longer Description", "Eoin Coffey", "urled")
 		
--- a/libpurple/plugins/mono/GetBuddyBack.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/GetBuddyBack.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,8 +1,8 @@
-using Gaim;
+using Purple;
 
 public class GetBuddyBack : Plugin
 {
-	private static PluginInfo info = new PluginInfo("C# Get Buddy Back", "0.1", "Prints when a Buddy returns", "Longer Description", "Eoin Coffey", "urled");
+	private static PluginInfo info = new PluginInfo("mono-buddyback", "C# Get Buddy Back", "0.1", "Prints when a Buddy returns", "Longer Description", "Eoin Coffey", "urled");
 
 	public GetBuddyBack()
 		: base (info)
@@ -21,7 +21,7 @@
 		Debug.debug(Debug.INFO, "buddyback", "loading...\n");
 		
 		/*Signal.connect(BuddyList.GetHandle(), this, "buddy-back", new Signal.Handler(HandleSig));*/
-		/*BuddyList.OnBuddyBack.connect(this, new Signal.Handler(HandleSig));*/
+		BuddyList.OnBuddyStatusChanged.connect(this, new Signal.Handler(HandleSig));
 	}
 	
 	public override void Unload()
--- a/libpurple/plugins/mono/MPlugin.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/MPlugin.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,8 +1,8 @@
-using Gaim;
+using Purple;
 
 public class MPlugin : Plugin
 {
-	private static PluginInfo info = new PluginInfo("C# Plugin", "0.1", "Test C# Plugin", "Longer Description", "Eoin Coffey", "urled");
+	private static PluginInfo info = new PluginInfo("mono-mplugin", "C# Plugin", "0.1", "Test C# Plugin", "Longer Description", "Eoin Coffey", "urled");
 
 	public MPlugin()
 		: base(info)
--- a/libpurple/plugins/mono/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -12,8 +12,8 @@
 all: $(mono_SCRIPTS)
 
 SUFFIXES = .cs .dll
-.cs.dll: api/GaimAPI.dll $(mono_build_sources)
-	mcs -t:library -lib:./api -out:$@ -r:GaimAPI.dll $<
+.cs.dll: api/PurpleAPI.dll $(mono_build_sources)
+	mcs -t:library -lib:./api -out:$@ -r:PurpleAPI.dll $<
 
 clean-local:
 	rm -f $(mono_SCRIPTS)
--- a/libpurple/plugins/mono/api/BlistNode.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/BlistNode.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public abstract class BlistNode {
 	}
 }
--- a/libpurple/plugins/mono/api/Buddy.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Buddy.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public class Buddy : BlistNode {
 		private string name;
 		private string alias;
--- a/libpurple/plugins/mono/api/BuddyList.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/BuddyList.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	using System;
 	using System.Runtime.CompilerServices;
 
--- a/libpurple/plugins/mono/api/Contact.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Contact.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public class Contact : BlistNode {
 	}
 }
--- a/libpurple/plugins/mono/api/Debug.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Debug.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 using System;
 using System.Runtime.CompilerServices;
 
-namespace Gaim
+namespace Purple
 {
 	public class Debug
 	{
--- a/libpurple/plugins/mono/api/Event.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Event.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,6 +1,6 @@
 using System;
 
-namespace Gaim
+namespace Purple
 {
 	public class Event
 	{
--- a/libpurple/plugins/mono/api/GaimPlugin.cs	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-namespace Gaim {
-	public class PluginInfo {
-		private string name;
-		private string version;
-		private string summary;
-		private string description;
-		private string author;
-		private string homepage;
-		
-		public PluginInfo(string name, string version, string summary,
-						  string description, string author, string homepage)
-		{
-			this.name = name;
-			this.version = version;
-			this.summary = summary;
-			this.description = description;
-			this.author = author;
-			this.homepage = homepage;	
-		}
-
-		public string Name {
-			get { return name; }
-		}
-
-		public string Version {
-			get { return version; }
-		}
-
-		public string Summary {
-			get { return summary; }
-		}
-
-		public string Description {
-			get { return description; }
-		}
-
-		public string Author {
-			get { return author; }
-		}
-
-		public string Homepage {
-			get { return homepage; }
-		}
-	}
-	
-	abstract public class Plugin {
-		private PluginInfo info;
-
-		public Plugin(PluginInfo info) {
-			this.info = info;
-		}
-
-		public abstract void Load();
-		public abstract void Unload();
-		public abstract void Destroy();
-
-		public PluginInfo Info {
-			get { return info; }
-		}
-	}
-}
--- a/libpurple/plugins/mono/api/Group.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Group.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public class Group : BlistNode {
 	}
 }
--- a/libpurple/plugins/mono/api/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,5 @@
-monodir=$(libdir)/gaim
+monodir=$(libdir)/purple
+
 mono_sources = \
 	BlistNode.cs \
 	BuddyList.cs \
@@ -6,14 +7,14 @@
 	Contact.cs \
 	Debug.cs \
 	Event.cs \
-	GaimPlugin.cs \
+	PurplePlugin.cs \
 	Group.cs \
 	Signal.cs \
 	Status.cs
 
 EXTRA_DIST = $(mono_sources)
 
-mono_SCRIPTS = GaimAPI.dll
+mono_SCRIPTS = PurpleAPI.dll
 
 mono_build_sources = $(addprefix $(srcdir)/, $(mono_sources))
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/mono/api/PurplePlugin.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,67 @@
+namespace Purple {
+	public class PluginInfo {
+		private string id;
+		private string name;
+		private string version;
+		private string summary;
+		private string description;
+		private string author;
+		private string homepage;
+		
+		public PluginInfo(string id, string name, string version, string summary,
+						  string description, string author, string homepage)
+		{
+			this.id = id;
+			this.name = name;
+			this.version = version;
+			this.summary = summary;
+			this.description = description;
+			this.author = author;
+			this.homepage = homepage;	
+		}
+
+		public string Id {
+			get { return id; }
+		}
+
+		public string Name {
+			get { return name; }
+		}
+
+		public string Version {
+			get { return version; }
+		}
+
+		public string Summary {
+			get { return summary; }
+		}
+
+		public string Description {
+			get { return description; }
+		}
+
+		public string Author {
+			get { return author; }
+		}
+
+		public string Homepage {
+			get { return homepage; }
+		}
+	}
+	
+	abstract public class Plugin {
+		private PluginInfo info;
+
+		public Plugin(PluginInfo info) {
+			this.info = info;
+		}
+
+		public abstract void Load();
+		public abstract void Unload();
+		public abstract void Destroy();
+
+		public PluginInfo Info {
+			get { return info; }
+		}
+	}
+}
--- a/libpurple/plugins/mono/api/Signal.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Signal.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 using System;
 using System.Runtime.CompilerServices;
 
-namespace Gaim
+namespace Purple
 {
 	public class Signal
 	{
--- a/libpurple/plugins/mono/api/Status.cs	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/api/Status.cs	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim
+namespace Purple
 {
 	public class Status
 	{
--- a/libpurple/plugins/mono/loader/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/loader/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/purple
 
 plugin_LTLIBRARIES = mono.la
 
@@ -19,7 +19,7 @@
 AM_CPPFLAGS = \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
-	-I$(top_srcdir)/libgaim \
+	-I$(top_srcdir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(PLUGIN_CFLAGS) \
 	$(MONO_CFLAGS)
--- a/libpurple/plugins/mono/loader/mono-helper.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono-helper.c	Mon Mar 26 01:55:33 2007 +0000
@@ -84,10 +84,13 @@
 	total = mono_image_get_table_rows (image, MONO_TABLE_TYPEDEF);
 	for (i = 1; i <= total; ++i) {
 		klass = mono_class_get (image, MONO_TOKEN_TYPE_DEF | i);
+		
 		pklass = mono_class_get_parent(klass);
-		if (pklass) 
-			if (strcmp("PurplePlugin", mono_class_get_name(pklass)) == 0)
+		if (pklass) {
+		
+			if (strcmp("Plugin", mono_class_get_name(pklass)) == 0)
 				return klass;
+		}
 	}
 	
 	return NULL;
@@ -126,6 +129,18 @@
 	return mono_string_to_utf8(str);
 }
 
+MonoObject* ml_get_info_prop(MonoObject *obj)
+{
+	MonoClass *klass;
+	MonoProperty *prop;
+	
+	klass = mono_class_get_parent(mono_object_get_class(obj));
+	
+	prop = mono_class_get_property_from_name(klass, "Info");
+	
+	return mono_property_get_value(prop, obj, NULL, NULL);
+}
+
 gboolean ml_is_api_dll(MonoImage *image)
 {	
 	MonoClass *klass;
--- a/libpurple/plugins/mono/loader/mono-helper.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono-helper.h	Mon Mar 26 01:55:33 2007 +0000
@@ -40,6 +40,8 @@
 
 void ml_set_prop_string(MonoObject *obj, char *field, char *data);
 
+MonoObject* ml_get_info_prop(MonoObject *obj);
+
 gboolean ml_is_api_dll(MonoImage *image);
 
 MonoDomain* ml_get_domain(void);
--- a/libpurple/plugins/mono/loader/mono.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono.c	Mon Mar 26 01:55:33 2007 +0000
@@ -26,9 +26,8 @@
 {
 	MonoAssembly *assm;
 	MonoMethod *m = NULL;
-	MonoMethod *info_method = NULL;
 	MonoObject *plugin_info;
-	gboolean found_load = FALSE, found_unload = FALSE, found_destroy = FALSE, found_info = FALSE;
+	gboolean found_load = FALSE, found_unload = FALSE, found_destroy = FALSE;
 	gpointer iter = NULL;
 
 	PurplePluginInfo *info;
@@ -71,6 +70,7 @@
 	mono_runtime_object_init(mplug->obj);
 
 	while ((m = mono_class_get_methods(mplug->klass, &iter))) {
+		purple_debug_info("mono", "plugin method: %s\n", mono_method_get_name(m));
 		if (strcmp(mono_method_get_name(m), "Load") == 0) {
 			mplug->load = m;
 			found_load = TRUE;
@@ -80,22 +80,20 @@
 		} else if (strcmp(mono_method_get_name(m), "Destroy") == 0) {
 			mplug->destroy = m;
 			found_destroy = TRUE;
-		} else if (strcmp(mono_method_get_name(m), "Info") == 0) {
-			info_method = m;
-			found_info = TRUE;
 		}
 	}
 
-	if (!(found_load && found_unload && found_destroy && found_info)) {
+	if (!(found_load && found_unload && found_destroy)) {
 		purple_debug(PURPLE_DEBUG_ERROR, "mono", "did not find the required methods\n");
 		return FALSE;
 	}
-
-	plugin_info = ml_invoke(info_method, mplug->obj, NULL);
+	
+	plugin_info = ml_get_info_prop(mplug->obj);
 
 	/* now that the methods are filled out we can populate
 	   the info struct with all the needed info */
 
+	info->id = ml_get_prop_string(plugin_info, "Id");
 	info->name = ml_get_prop_string(plugin_info, "Name");
 	info->version = ml_get_prop_string(plugin_info, "Version");
 	info->summary = ml_get_prop_string(plugin_info, "Summary");
--- a/libpurple/plugins/perl/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -4,10 +4,10 @@
 perl_dirs = common
 
 plugin_LTLIBRARIES = perl.la
-hack_LTLIBRARIES = libgaimperl.la
+hack_LTLIBRARIES = libpurpleperl.la
 
 perl_la_LDFLAGS = -module -avoid-version
-perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS) libgaimperl.la
+perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS) libpurpleperl.la
 perl_la_SOURCES = \
 	perl.c \
 	perl-common.c \
@@ -18,11 +18,11 @@
 perl_la_DEPENDENCIES = \
 	.libs/libperl_orig.a \
 	.libs/DynaLoader.a \
-	libgaimperl.la
+	libpurpleperl.la
 
-libgaimperl_la_LDFLAGS = -module -avoid-version
-libgaimperl_la_LIBADD = $(GLIB_LIBS)
-libgaimperl_la_SOURCES = libgaimperl.c
+libpurpleperl_la_LDFLAGS = -module -avoid-version
+libpurpleperl_la_LIBADD = $(GLIB_LIBS)
+libpurpleperl_la_SOURCES = libpurpleperl.c
 
 .libs/libperl_orig.a:
 	@mkdir -p .libs
@@ -55,8 +55,6 @@
         common/Conversation.xs \
         common/Debug.xs \
         common/FT.xs \
-        common/Purple.pm \
-        common/Purple.xs \
         common/ImgStore.xs \
         common/Log.xs \
         common/Makefile.PL.in \
@@ -69,6 +67,7 @@
         common/Privacy.xs \
         common/Proxy.xs \
         common/Prpl.xs \
+        common/Purple.pm \
         common/Request.xs \
         common/Roomlist.xs \
         common/SSLConn.xs \
@@ -90,7 +89,7 @@
 	Makefile.mingw \
 	common/Makefile.mingw \
 	$(common_sources) \
-	libgaimperl.c
+	libpurpleperl.c
 
 common/Makefile: common/Makefile.PL
 	@if test "x${top_srcdir}" != "x${top_builddir}"; then \
--- a/libpurple/plugins/perl/libgaimperl.c	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-#include <gmodule.h>
-
-#ifdef  __SUNPRO_C
-#pragma init (my_init)
-void my_init(void);
-
-void my_init() {
-#else
-void __attribute__ ((constructor)) my_init(void);
-
-void __attribute__ ((constructor)) my_init() {
-#endif
-
-	/* Very evil hack...puts perl.so's symbols in the global table
-	 * but does not create a circular dependancy because g_module_open
-	 * will only open the library once. */
-	g_module_open("perl.so", 0);
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/perl/libpurpleperl.c	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,18 @@
+#include <gmodule.h>
+
+#ifdef  __SUNPRO_C
+#pragma init (my_init)
+void my_init(void);
+
+void my_init() {
+#else
+void __attribute__ ((constructor)) my_init(void);
+
+void __attribute__ ((constructor)) my_init() {
+#endif
+
+	/* Very evil hack...puts perl.so's symbols in the global table
+	 * but does not create a circular dependancy because g_module_open
+	 * will only open the library once. */
+	g_module_open("perl.so", 0);
+}
--- a/libpurple/plugins/ssl/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/plugins/ssl/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -26,7 +26,7 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DLIBDIR=\"$(libdir)/gaim/\" \
+	-DLIBDIR=\"$(libdir)/libpurple\" \
 	-I$(top_srcdir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
--- a/libpurple/prefs.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/prefs.c	Mon Mar 26 01:55:33 2007 +0000
@@ -87,9 +87,9 @@
 static struct
 purple_pref *find_pref(const char *name)
 {
-	if (!name || name[0] != '/')
-		return NULL;
-	else if (name[1] == '\0')
+	g_return_val_if_fail(name != NULL && name[0] == '/', NULL);
+
+	if (name[1] == '\0')
 		return &prefs;
 	else
 		return g_hash_table_lookup(prefs_hash, name);
--- a/libpurple/protocols/bonjour/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/bonjour/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -19,7 +19,7 @@
 
 if STATIC_BONJOUR
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES     = libbonjour.a
 libbonjour_a_SOURCES = $(BONJOURSOURCES)
 libbonjour_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/bonjour/bonjour.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/bonjour/bonjour.c	Mon Mar 26 01:55:33 2007 +0000
@@ -58,7 +58,7 @@
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	PurpleBuddyList *blist;
-	PurpleBlistNode *gnode, *cnode, *bnode;
+	PurpleBlistNode *gnode, *cnode, *cnodenext, *bnode, *bnodenext;
 	PurpleBuddy *buddy;
 
 	blist = purple_get_blist();
@@ -70,12 +70,14 @@
 	{
 		if (!PURPLE_BLIST_NODE_IS_GROUP(gnode))
 			continue;
-		for (cnode = gnode->child; cnode; cnode = cnode->next)
+		for (cnode = gnode->child; cnode; cnode = cnodenext)
 		{
+			cnodenext = cnode->next;
 			if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode))
 				continue;
-			for (bnode = cnode->child; bnode; bnode = bnode->next)
+			for (bnode = cnode->child; bnode; bnode = bnodenext)
 			{
+				bnodenext = bnode->next;
 				if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode))
 					continue;
 				buddy = (PurpleBuddy *)bnode;
--- a/libpurple/protocols/gg/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/gg/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -51,7 +51,7 @@
 
 if STATIC_GG
 
-st = -DGAIM_STATIC_PRPL $(GADU_CFLAGS)
+st = -DPURPLE_STATIC_PRPL $(GADU_CFLAGS)
 noinst_LIBRARIES = libgg.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/irc/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/irc/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -10,7 +10,7 @@
 
 if STATIC_IRC
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libirc.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/jabber/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -42,7 +42,7 @@
 
 if STATIC_JABBER
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libjabber.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/jabber/auth.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Mon Mar 26 01:55:33 2007 +0000
@@ -20,18 +20,20 @@
  */
 #include "internal.h"
 
+#include "account.h"
+#include "debug.h"
+#include "cipher.h"
+#include "conversation.h"
+#include "request.h"
+#include "sslconn.h"
+#include "util.h"
+#include "xmlnode.h"
+
 #include "jutil.h"
 #include "auth.h"
-#include "xmlnode.h"
 #include "jabber.h"
 #include "iq.h"
 
-#include "debug.h"
-#include "util.h"
-#include "cipher.h"
-#include "sslconn.h"
-#include "request.h"
-
 static void auth_old_result_cb(JabberStream *js, xmlnode *packet,
 		gpointer data);
 
--- a/libpurple/protocols/jabber/jabber.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Mon Mar 26 01:55:33 2007 +0000
@@ -25,6 +25,7 @@
 #include "blist.h"
 #include "cmds.h"
 #include "connection.h"
+#include "conversation.h"
 #include "debug.h"
 #include "dnssrv.h"
 #include "message.h"
@@ -36,6 +37,7 @@
 #include "server.h"
 #include "util.h"
 #include "version.h"
+#include "xmlnode.h"
 
 #include "auth.h"
 #include "buddy.h"
@@ -169,12 +171,16 @@
 
 void jabber_process_packet(JabberStream *js, xmlnode *packet)
 {
+	const char *xmlns;
+
 	purple_signal_emit(my_protocol, "jabber-receiving-xmlnode", js->gc, &packet);
 
 	/* if the signal leaves us with a null packet, we're done */
 	if(NULL == packet)
 		return;
 
+	xmlns = xmlnode_get_namespace(packet);
+
 	if(!strcmp(packet->name, "iq")) {
 		jabber_iq_parse(js, packet);
 	} else if(!strcmp(packet->name, "presence")) {
@@ -183,13 +189,13 @@
 		jabber_message_parse(js, packet);
 	} else if(!strcmp(packet->name, "stream:features")) {
 		jabber_stream_features_parse(js, packet);
-	} else if (!strcmp(packet->name, "features") && 
-		   !strcmp(xmlnode_get_namespace(packet), "http://etherx.jabber.org/streams")) {
+	} else if (!strcmp(packet->name, "features") &&
+		   !strcmp(xmlns, "http://etherx.jabber.org/streams")) {
 		jabber_stream_features_parse(js, packet);
-	} else if(!strcmp(packet->name, "stream:error")) {
-		jabber_stream_handle_error(js, packet);
-	} else if (!strcmp(packet->name, "error") &&
-		   !strcmp(xmlnode_get_namespace(packet), "http://etherx.jabber.org/streams")) {
+	} else if(!strcmp(packet->name, "stream:error") ||
+			 (!strcmp(packet->name, "error") &&
+				!strcmp(xmlns, "http://etherx.jabber.org/streams")))
+	{
 		jabber_stream_handle_error(js, packet);
 	} else if(!strcmp(packet->name, "challenge")) {
 		if(js->state == JABBER_STREAM_AUTHENTICATING)
@@ -1526,7 +1532,9 @@
 			js->gc->wants_to_die = TRUE;
 			text = _("Authentication Failure");
 		}
-	} else if(!strcmp(packet->name, "stream:error")) {
+	} else if(!strcmp(packet->name, "stream:error") ||
+			 (!strcmp(packet->name, "error") &&
+				!strcmp(xmlns, "http://etherx.jabber.org/streams"))) {
 		if(xmlnode_get_child(packet, "bad-format")) {
 			text = _("Bad Format");
 		} else if(xmlnode_get_child(packet, "bad-namespace-prefix")) {
--- a/libpurple/protocols/jabber/jutil.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Mon Mar 26 01:55:33 2007 +0000
@@ -19,8 +19,11 @@
  *
  */
 #include "internal.h"
+#include "account.h"
+#include "conversation.h"
 #include "server.h"
 #include "util.h"
+#include "xmlnode.h"
 
 #include "chat.h"
 #include "presence.h"
--- a/libpurple/protocols/jabber/jutil.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/jutil.h	Mon Mar 26 01:55:33 2007 +0000
@@ -22,11 +22,6 @@
 #ifndef _PURPLE_JABBER_JUTIL_H_
 #define _PURPLE_JABBER_JUTIL_H_
 
-#include "account.h"
-#include "conversation.h"
-#include "xmlnode.h"
-
-
 typedef struct _JabberID {
 	char *node;
 	char *domain;
--- a/libpurple/protocols/jabber/message.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/message.c	Mon Mar 26 01:55:33 2007 +0000
@@ -33,7 +33,7 @@
 
 void jabber_message_free(JabberMessage *jm)
 {
-        g_free(jm->from);
+	g_free(jm->from);
 	g_free(jm->to);
 	g_free(jm->id);
 	g_free(jm->subject);
--- a/libpurple/protocols/jabber/presence.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/jabber/presence.c	Mon Mar 26 01:55:33 2007 +0000
@@ -20,20 +20,22 @@
  */
 #include "internal.h"
 
+#include "account.h"
 #include "cipher.h"
+#include "conversation.h"
 #include "debug.h"
 #include "notify.h"
 #include "request.h"
 #include "server.h"
 #include "status.h"
 #include "util.h"
+#include "xmlnode.h"
 
 #include "buddy.h"
 #include "chat.h"
 #include "presence.h"
 #include "iq.h"
 #include "jutil.h"
-#include "xmlnode.h"
 
 
 static void chats_send_presence_foreach(gpointer key, gpointer val,
--- a/libpurple/protocols/msn/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/msn/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -69,7 +69,7 @@
 
 if STATIC_MSN
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libmsn.a
 libmsn_a_SOURCES = $(MSNSOURCES)
 libmsn_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/novell/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/novell/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -32,7 +32,7 @@
 
 if STATIC_NOVELL
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libnovell.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/oscar/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/oscar/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -51,7 +51,7 @@
 libicq_la_LDFLAGS = -module -avoid-version
 if STATIC_OSCAR
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES   = liboscar.a libaim.a libicq.a
 liboscar_a_SOURCES = $(OSCARSOURCES)
 liboscar_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/oscar/oscar.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Mon Mar 26 01:55:33 2007 +0000
@@ -60,7 +60,7 @@
 #define OSCAR_STATUS_ID_CUSTOM      "custom"
 #define OSCAR_STATUS_ID_MOBILE	    "mobile"
 
-#define AIMHASHDATA "http://purple.sourceforge.net/aim_data.php3"
+#define AIMHASHDATA "http://pidgin.im/aim_data.php3"
 
 #define OSCAR_CONNECT_STEPS 6
 
@@ -1593,7 +1593,7 @@
 	pos->modname = g_strdup(modname);
 
 	/* TODO: Keep track of this return value. */
-	if (purple_proxy_connect(NULL, pos->gc->account, "purple.sourceforge.net", 80,
+	if (purple_proxy_connect(NULL, pos->gc->account, "pidgin.im", 80,
 			straight_to_hell, pos) == NULL)
 	{
 		char buf[256];
--- a/libpurple/protocols/oscar/oscar_data.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/oscar/oscar_data.c	Mon Mar 26 01:55:33 2007 +0000
@@ -53,14 +53,14 @@
 	aim__registermodule(od, locate_modfirst);
 	aim__registermodule(od, buddylist_modfirst);
 	aim__registermodule(od, msg_modfirst);
-	aim__registermodule(od, adverts_modfirst);
-	aim__registermodule(od, invite_modfirst);
+	/* aim__registermodule(od, adverts_modfirst); */
+	/* aim__registermodule(od, invite_modfirst); */
 	aim__registermodule(od, admin_modfirst);
 	aim__registermodule(od, popups_modfirst);
 	aim__registermodule(od, bos_modfirst);
 	aim__registermodule(od, search_modfirst);
 	aim__registermodule(od, stats_modfirst);
-	aim__registermodule(od, translate_modfirst);
+	/* aim__registermodule(od, translate_modfirst); */
 	aim__registermodule(od, chatnav_modfirst);
 	aim__registermodule(od, chat_modfirst);
 	aim__registermodule(od, odir_modfirst);
--- a/libpurple/protocols/oscar/peer.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/oscar/peer.h	Mon Mar 26 01:55:33 2007 +0000
@@ -278,15 +278,4 @@
  */
 void peer_proxy_connection_established_cb(gpointer data, gint source, const gchar *error_message);
 
-#if 0
-int peer_oft_sendheader(OscarData *od, guint16 type, PeerConnection *peer_connection);
-guint32 peer_oft_checksum_chunk(const guint8 *buffer, int bufferlen, guint32 prevcheck);
-guint32 peer_oft_checksum_file(char *filename);
-int peer_oft_sendheader(OscarData *od, guint16 type, PeerConnection *peer_connection);
-PeerConnection *peer_oft_createinfo(OscarData *od, const guchar *cookie, const char *sn,
-	const char *ip, guint16 port, guint32 size, guint32 modtime, char *filename, int send_or_recv,
-	int method, int stage);
-int peer_oft_destroyinfo(PeerConnection *peer_connection);
-#endif
-
 #endif /* _PEER_H_ */
--- a/libpurple/protocols/qq/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/qq/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -77,7 +77,7 @@
 
 if STATIC_QQ
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libqq.a
 libqq_a_SOURCES  = $(QQSOURCES)
 libqq_a_CFLAGS   = $(AM_CFLAGS)
@@ -94,7 +94,6 @@
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
 	-DVERSION=\"$(VERSION)\" \
-	-DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/gaim/buddy_icons/qq\" \
+	-DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/purple/buddy_icons/qq\" \
 	$(DEBUG_CFLAGS) \
-	$(GLIB_CFLAGS) \
-	$(GAIM_CFLAGS)
+	$(GLIB_CFLAGS)
--- a/libpurple/protocols/sametime/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/sametime/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -12,7 +12,7 @@
 
 if STATIC_SAMETIME
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES   = libsametime.a
 libsametime_a_SOURCES = $(SAMETIMESOURCES)
 libsametime_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/silc/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/silc/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -6,26 +6,26 @@
 
 AM_CFLAGS = $(st)
 
-libsilcgaim_la_LDFLAGS = -module -avoid-version
+libsilcpurple_la_LDFLAGS = -module -avoid-version
 
 if STATIC_SILC
 
-st = -DGAIM_STATIC_PRPL $(SILC_CFLAGS)
-noinst_LIBRARIES = libsilcgaim.a
+st = -DPURPLE_STATIC_PRPL $(SILC_CFLAGS)
+noinst_LIBRARIES = libsilcpurple.a
 pkg_LTLIBRARIES =
 
-libsilcgaim_a_SOURCES = $(SILCSOURCES)
-libsilcgaim_a_CFLAGS  = $(AM_CFLAGS)
-libsilcgaim_a_LIBADD  = $(SILC_LIBS)
+libsilcpurple_a_SOURCES = $(SILCSOURCES)
+libsilcpurple_a_CFLAGS  = $(AM_CFLAGS)
+libsilcpurple_a_LIBADD  = $(SILC_LIBS)
 
 else
 
 st = $(SILC_CFLAGS)
-pkg_LTLIBRARIES = libsilcgaim.la
+pkg_LTLIBRARIES = libsilcpurple.la
 noinst_LIBRARIES =
 
-libsilcgaim_la_SOURCES = $(SILCSOURCES)
-libsilcgaim_la_LIBADD  = $(GLIB_LIBS) $(SILC_LIBS)
+libsilcpurple_la_SOURCES = $(SILCSOURCES)
+libsilcpurple_la_LIBADD  = $(GLIB_LIBS) $(SILC_LIBS)
 
 endif
 
--- a/libpurple/protocols/simple/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/simple/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -15,7 +15,7 @@
 
 if STATIC_MSN
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libsimple.a
 libsimple_a_SOURCES = $(SIMPLESOURCES)
 libsimple_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/toc/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/toc/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -12,7 +12,7 @@
 
 if STATIC_TOC
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libtoc.a
 libtoc_a_SOURCES = $(TOCSOURCES)
 libtoc_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/yahoo/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/yahoo/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -33,7 +33,7 @@
 
 if STATIC_YAHOO
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES   = libyahoo.a
 libyahoo_a_SOURCES = $(YAHOOSOURCES)
 libyahoo_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/yahoo/yahoo_packet.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_packet.c	Mon Mar 26 01:55:33 2007 +0000
@@ -161,6 +161,7 @@
 		}
 
 		if (accept) {
+			/* TODO: strstr() should not be used here because data isn't NULL terminated */
 			delimiter = (const guchar *)strstr((char *)&data[pos], "\xc0\x80");
 			if (delimiter == NULL)
 			{
--- a/libpurple/protocols/zephyr/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/protocols/zephyr/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -77,7 +77,7 @@
 
 if STATIC_ZEPHYR
 
-st = -DGAIM_STATIC_PRPL -Dlint
+st = -DPURPLE_STATIC_PRPL -Dlint
 noinst_LIBRARIES = libzephyr.a
 libzephyr_a_SOURCES = $(ZEPHYRSOURCES)
 libzephyr_a_CFLAGS  = $(AM_CFLAGS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-client-example.c	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,39 @@
+#define DBUS_API_SUBJECT_TO_CHANGE
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "purple-client.h"
+
+/*
+   This example demonstrates how to use libpurple-client to communicate
+   with purple.  The names and signatures of functions provided by
+   libpurple-client are the same as those in purple.  However, all
+   structures (such as PurpleAccount) are opaque, that is, you can only
+   use pointer to them.  In fact, these pointers DO NOT actually point
+   to anything, they are just integer identifiers of assigned to these
+   structures by purple.  So NEVER try to dereference these pointers.
+   Integer ids as disguised as pointers to provide type checking and
+   prevent mistakes such as passing an id of PurpleAccount when an id of
+   PurpleBuddy is expected.  According to glib manual, this technique is
+   portable.
+*/
+
+int main (int argc, char **argv)
+{
+	GList *alist, *node;
+
+	purple_init();
+
+	alist = purple_accounts_get_all();
+	for (node = alist; node != NULL; node = node->next)
+	{
+		PurpleAccount *account = (PurpleAccount*) node->data;
+		char *name = purple_account_get_username(account);
+		g_print("Name: %s\n", name);
+		g_free(name);
+	}
+	g_list_free(alist);
+
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-client.c	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,81 @@
+#define DBUS_API_SUBJECT_TO_CHANGE
+
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "dbus-purple.h"
+#include "purple-client-bindings.h"
+
+static DBusGConnection *bus;
+static DBusGProxy *purple_proxy;
+
+static GList *garray_int_to_glist(GArray *array)
+{
+	GList *list = NULL;
+	int i;
+
+	for (i = 0; i < array->len; i++)
+		list = g_list_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
+
+	g_array_free(array, TRUE);
+	return list;
+}
+
+static GSList *garray_int_to_gslist(GArray *array)
+{
+	GSList *list = NULL;
+	int i;
+
+	for (i = 0; i < array->len; i++)
+		list = g_slist_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
+
+	g_array_free(array, TRUE);
+	return list;
+}
+
+#include "purple-client-bindings.c"
+
+static void lose(const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
+static void lose_gerror(const char *prefix, GError *error) G_GNUC_NORETURN;
+
+static void
+lose(const char *str, ...)
+{
+	va_list args;
+
+	va_start(args, str);
+
+	vfprintf(stderr, str, args);
+	fputc('\n', stderr);
+
+	va_end(args);
+
+	exit(1);
+}
+
+static void
+lose_gerror(const char *prefix, GError *error)
+{
+	lose("%s: %s", prefix, error->message);
+}
+
+void purple_init(void)
+{
+	GError *error = NULL;
+
+	g_type_init ();
+
+	bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+	if (!bus)
+		lose_gerror ("Couldn't connect to session bus", error);
+
+	purple_proxy = dbus_g_proxy_new_for_name (bus,
+					DBUS_SERVICE_PURPLE,
+					DBUS_PATH_PURPLE,
+					DBUS_INTERFACE_PURPLE);
+
+	if (!purple_proxy)
+		lose_gerror ("Couldn't connect to the Purple Service", error);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-notifications-example	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+# This is a simple gaim notification server.
+# It shows notifications when your buddy signs on or you get an IM message.
+#
+# This script requires Python 2.4 and PyGTK bindings
+#
+# Note that all function names are resolved dynamically, no
+# gaim-specific library is needed.
+
+import dbus
+import dbus.glib
+import dbus.decorators
+import gobject
+import os
+
+def ensureimconversation(conversation, account, name):
+    if conversation != 0:
+        return conversation
+    else:
+        # 1 = GAIM_CONV_IM 
+        return gaim.GaimConversationNew(1, account, name)
+
+def receivedimmsg(account, name, message, conversation, flags):
+    buddy = gaim.GaimFindBuddy(account, name)
+    if buddy != 0:
+        alias = gaim.GaimBuddyGetAlias(buddy)
+    else:
+        alias = name
+
+    text = "%s says %s" % (alias, message)
+    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
+                      "'So what?','Show me',Close,Abuse", text)
+
+    if code == 101:                     # so what?
+        pass
+    else:
+        conversation = ensureimconversation(conversation, account, name)
+
+    if code == 102:                     # show me
+        window = gaim.GaimConversationGetWindow(conversation)
+        gaim.GaimConvWindowRaise(window)
+
+    if code == 103:                     # close 
+        gaim.GaimConversationDestroy(conversation)
+
+    if code == 104:                     # abuse
+        im = gaim.GaimConversationGetImData(conversation)
+        gaim.GaimConvImSend(im, "Go away you f...")
+                                 
+        
+def buddysignedon(buddyid):
+    alias = gaim.GaimBuddyGetAlias(buddyid)
+    text = "%s is online" % alias
+
+    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
+                      "'So what?','Let's talk'", text)
+
+    if code == 101:                     # so what?
+        pass
+
+    if code == 102:                     # talk
+        name = gaim.GaimBuddyGetName(buddyid)
+        account = gaim.GaimBuddyGetAccount(buddyid)
+        gaim.GaimConversationNew(1, account, name)
+    
+
+bus = dbus.SessionBus()
+obj = bus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
+gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
+
+bus.add_signal_receiver(receivedimmsg,
+                        dbus_interface = "net.sf.gaim.GaimInterface",
+                        signal_name = "ReceivedImMsg")
+
+bus.add_signal_receiver(buddysignedon,
+                        dbus_interface = "net.sf.gaim.GaimInterface",
+                        signal_name = "BuddySignedOn")
+
+print "This is a simple gaim notification server."
+print "It shows notifications when your buddy signs on or you get an IM message."
+
+loop = gobject.MainLoop()
+loop.run()
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-remote	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,215 @@
+#!/usr/bin/python
+
+import dbus
+import re
+import urllib
+import sys
+
+import xml.dom.minidom 
+
+xml.dom.minidom.Element.all   = xml.dom.minidom.Element.getElementsByTagName
+
+obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
+gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
+
+class CheckedObject:
+    def __init__(self, obj):
+        self.obj = obj
+
+    def __getattr__(self, attr):
+        return CheckedAttribute(self, attr)
+
+class CheckedAttribute:
+    def __init__(self, cobj, attr):
+        self.cobj = cobj
+        self.attr = attr
+        
+    def __call__(self, *args):
+        result = self.cobj.obj.__getattr__(self.attr)(*args)
+        if result == 0:
+            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
+        return result
+            
+def show_help():
+    print """This program uses DBus to communicate with gaim.
+
+Usage:
+
+    %s "command1" "command2" ...
+
+Each command is of one of the three types:
+
+    [protocol:]commandname?param1=value1&param2=value2&...
+    FunctionName?param1=value1&param2=value2&...
+    FunctionName(value1,value2,...)
+
+The second and third form are provided for completeness but their use
+is not recommended; use gaim-send or gaim-send-async instead.  The
+second form uses introspection to find out the parameter names and
+their types, therefore it is rather slow.
+
+Examples of commands:
+
+    jabber:goim?screenname=testone@localhost&message=hi
+    jabber:gochat?room=TestRoom&server=conference.localhost
+    jabber:getinfo?screenname=testone@localhost
+    jabber:addbuddy?screenname=my friend
+
+    setstatus?status=away&message=don't disturb
+    quit
+
+    GaimAccountsFindConnected?name=&protocol=prpl-jabber
+    GaimAccountFindConnected(,prpl-jabber)
+""" % sys.argv[0]
+
+cgaim = CheckedObject(gaim)
+
+urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
+
+def extendlist(list, length, fill):
+    if len(list) < length:
+        return list + [fill] * (length - len(list))
+    else:
+        return list
+
+def convert(value):
+    try:
+        return int(value)
+    except:
+        return value
+
+def findaccount(accountname, protocolname):
+    try:
+        # prefer connected accounts
+        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
+        return account
+    except:
+        # try to get any account and connect it
+        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
+        gaim.GaimAccountSetStatusVargs(account, "online", 1)
+        gaim.GaimAccountConnect(account)
+        return account
+    
+
+def execute(uri):
+    match = re.match(urlregexp, uri)
+    protocol = match.group(2)
+    if protocol == "aim" or protocol == "icq":
+        protocol = "oscar"
+    if protocol is not None:
+        protocol = "prpl-" + protocol
+    command = match.group(5)
+    paramstring = match.group(7)
+    params = {}
+    if paramstring is not None:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=",1), 2, "")
+            params[key] = urllib.unquote(value)
+
+    accountname = params.get("account", "")
+
+    if command == "goim":
+        account = findaccount(accountname, protocol)
+        conversation = cgaim.GaimConversationNew(1, account, params["screenname"])
+        if "message" in params:
+            im = cgaim.GaimConversationGetImData(conversation)
+            gaim.GaimConvImSend(im, params["message"])
+        return None
+
+    elif command == "gochat":
+        account = findaccount(accountname, protocol)
+        connection = cgaim.GaimAccountGetConnection(account)
+        return gaim.ServJoinChat(connection, params)
+
+    elif command == "addbuddy":
+        account = findaccount(accountname, protocol)
+        return cgaim.GaimBlistRequestAddBuddy(account, params["screenname"],
+                                              params.get("group", ""), "")
+
+    elif command == "setstatus":
+        current = gaim.GaimSavedstatusGetCurrent()
+
+        if "status" in params:
+            status_id = params["status"]
+            status_type = gaim.GaimPrimitiveGetTypeFromId(status_id)
+        else:
+            status_type = gaim.GaimSavedstatusGetType(current)
+            status_id = gaim.GaimPrimitiveGetIdFromType(status_type)
+
+        if "message" in params:
+            message = params["message"];
+        else:
+            message = gaim.GaimSavedstatusGetMessage(current)
+
+        if "account" in params:
+            accounts = [cgaim.GaimAccountsFindAny(accountname, protocol)]
+
+            for account in accounts:
+                status = gaim.GaimAccountGetStatus(account, status_id)
+                type = gaim.GaimStatusGetType(status)
+                gaim.GaimSavedstatusSetSubstatus(current, account, type, message)
+                gaim.GaimSavedstatusActivateForAccount(current, account)
+        else:
+            accounts = gaim.GaimAccountsGetAllActive()
+            saved = gaim.GaimSavedstatusNew("", status_type)
+            gaim.GaimSavedstatusSetMessage(saved, message)
+            gaim.GaimSavedstatusActivate(saved)
+
+        return None
+
+    elif command == "getinfo":
+        account = findaccount(accountname, protocol)
+        connection = cgaim.GaimAccountGetConnection(account)
+        return gaim.ServGetInfo(connection, params["screenname"])
+
+    elif command == "quit":
+        return gaim.GaimCoreQuit()
+
+    elif command == "uri":
+        return None
+
+    else:
+        match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
+        if match is not None:
+            name = match.group(1)
+            argstr = match.group(2)
+            if argstr == "":
+                args = []
+            else:
+                args = argstr.split(",")
+            fargs = []
+            for arg in args:
+                fargs.append(convert(arg.strip()))
+            return gaim.__getattr__(name)(*fargs)
+        else:
+            # introspect the object to get parameter names and types
+            # this is slow because the entire introspection info must be downloaded
+            data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\
+                   Introspect()
+            introspect = xml.dom.minidom.parseString(data).documentElement
+            for method in introspect.all("method"):
+                if command == method.getAttribute("name"):
+                    methodparams = []
+                    for arg in method.all("arg"):
+                        if arg.getAttribute("direction") == "in":
+                            value = params[arg.getAttribute("name")]
+                            type = arg.getAttribute("type")
+                            if type == "s":
+                                methodparams.append(value)
+                            elif type == "i":
+                                methodparams.append(int(value))
+                            else:
+                                raise "Don't know how to handle type \"%s\"" % type
+                    return gaim.__getattr__(command)(*methodparams)
+            show_help()
+            raise "Unknown command: %s" % command
+
+if len(sys.argv) == 1:
+    show_help()
+
+for arg in sys.argv[1:]:
+    output = execute(arg)
+
+    if (output != None):
+        print output
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-send	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+METHOD_NAME=$1
+
+if test -z "$METHOD_NAME" 
+then
+    cat <<EOF 
+This program calls gaim API functions using DBus and prints the return value.
+If you are not interested in the return value, use gaim-send-async.
+
+Usage:
+
+   $0 method-name type1:parameter1 type2:parameter2 ...
+
+This shell script just invokes dbus-send, see man dbus-send for how 
+to specify the parameters.  
+
+Examples:
+
+   $0 GaimAccountsFindConnected string: string:prpl-jabber
+   $0 GaimAccountsGetAll
+   $0 GaimCoreQuit
+
+Use dbus-viewer to get the list of supported functions and their parameters.
+EOF
+    exit 1
+fi
+
+shift
+dbus-send --dest=net.sf.gaim.GaimService --print-reply --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
+
+echo 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-send-async	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+METHOD_NAME=$1
+
+if test -z "$METHOD_NAME" 
+then
+    cat <<EOF 
+This program calls gaim API functions using DBus.  As opposed to gaim-send, 
+it does not print the return value.
+
+Usage:
+
+   $0 method-name type1:parameter1 type2:parameter2 ...
+
+This shell script just invokes dbus-send, see man dbus-send for how 
+to specify the parameters.  
+
+Examples:
+
+   $0 GaimCoreQuit
+
+Use dbus-viewer to get the list of supported functions and their parameters.
+EOF
+    exit 1
+fi
+
+shift
+dbus-send --dest=net.sf.gaim.GaimService --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
+
+echo 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-uninstalled.pc.in	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+Name: libpurple
+Description: libpurple is a GLib-based instant messenger library.
+Version: @VERSION@
+Requires: glib-2.0
+Cflags: -I${pc_top_builddir}/${pcfiledir}
+Libs: ${pc_top_builddir}/${pcfiledir}/libpurple.la
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-url-handler	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,285 @@
+#!/usr/bin/python
+
+import dbus
+import re
+import sys
+import time
+import urllib
+
+obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
+gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
+
+class CheckedObject:
+    def __init__(self, obj):
+        self.obj = obj
+
+    def __getattr__(self, attr):
+        return CheckedAttribute(self, attr)
+
+class CheckedAttribute:
+    def __init__(self, cobj, attr):
+        self.cobj = cobj
+        self.attr = attr
+
+    def __call__(self, *args):
+        result = self.cobj.obj.__getattr__(self.attr)(*args)
+        if result == 0:
+            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
+        return result
+
+cgaim = CheckedObject(gaim)
+
+def extendlist(list, length, fill):
+    if len(list) < length:
+        return list + [fill] * (length - len(list))
+    else:
+        return list
+
+def convert(value):
+    try:
+        return int(value)
+    except:
+        return value
+
+def findaccount(protocolname, accountname=""):
+    try:
+        # prefer connected accounts
+        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
+        return account
+    except:
+        # try to get any account and connect it
+        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
+        gaim.GaimAccountSetStatusVargs(account, "online", 1)
+        gaim.GaimAccountConnect(account)
+        return account
+
+def goim(account, screenname, message=None):
+    # XXX: 1 == GAIM_CONV_TYPE_IM
+    conversation = cgaim.GaimConversationNew(1, account, screenname)
+    if message:
+        gaim.GaimConvSendConfirm(conversation, message)
+
+def gochat(account, params, message=None):
+    connection = cgaim.GaimAccountGetConnection(account)
+    gaim.ServJoinChat(connection, params)
+
+    if message != None:
+    	for i in range(20):
+            # XXX: 2 == GAIM_CONV_TYPE_CHAT
+            conversation = gaim.GaimFindConversationWithAccount(2, params.get("channel", params.get("room")), account)
+            if conversation:
+                gaim.GaimConvSendConfirm(conversation, message)
+                break
+            else:
+                time.sleep(0.5)
+
+def addbuddy(account, screenname, group="", alias=""):
+    cgaim.GaimBlistRequestAddBuddy(account, screenname, group, alias)
+
+
+def aim(uri):
+    protocol = "prpl-oscar"
+    match = re.match(r"^(aim|icq):([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid aim URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(2))
+    paramstring = match.group(4)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    accountname = params.get("account", "")
+    screenname = params.get("screenname", "")
+
+    account = findaccount(protocol, accountname)
+
+    if command.lower() == "goim":
+        goim(account, screenname, params.get("message"))
+    elif command.lower() == "gochat":
+        gochat(account, params)
+    elif command.lower() == "addbuddy":
+        addbuddy(account, screenname, params.get("group", ""))
+
+def gg(uri):
+    protocol = "prpl-gg"
+    match = re.match(r"^gg:(.*)", uri)
+    if not match:
+        print "Invalid gg URI: %s" % uri
+        return
+
+    screenname = urllib.unquote_plus(match.group(1))
+    account = findaccount(protocol)
+    goim(account, screenname)
+
+def icq(uri):
+    aim(uri)
+
+def irc(uri):
+    protocol = "prpl-irc"
+    match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri)
+    if not match:
+        print "Invalid irc URI: %s" % uri
+        return
+
+    server = urllib.unquote_plus(match.group(2)) or ""
+    target = match.group(3) or ""
+    query = match.group(5) or ""
+
+    modifiers = {}
+    if target:
+        for modifier in target.split(",")[1:]:
+            modifiers[modifier] = True
+
+    isnick = modifiers.has_key("isnick")
+
+    paramstring = match.group(5)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol)
+
+    if (target != ""):
+        if (isnick):
+            goim(account, urllib.unquote_plus(target.split(",")[0]), params.get("msg"))
+	else:
+            channel = urllib.unquote_plus(target.split(",")[0])
+            if channel[0] != "#":
+                channel = "#" + channel
+            gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
+
+def msnim(uri):
+    protocol = "prpl-msn"
+    match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid msnim URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    screenname = params.get("contact", "")
+
+    account = findaccount(protocol)
+
+    if command.lower() == "chat":
+        goim(account, screenname)
+    elif command.lower() == "add":
+        addbuddy(account, screenname)
+
+def sip(uri):
+    protocol = "prpl-simple"
+    match = re.match(r"^sip:(.*)", uri)
+    if not match:
+        print "Invalid sip URI: %s" % uri
+        return
+
+    screenname = urllib.unquote_plus(match.group(1))
+    account = findaccount(protocol)
+    goim(account, screenname)
+
+def xmpp(uri):
+    protocol = "prpl-jabber"
+    match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
+    if not match:
+        print "Invalid xmpp URI: %s" % uri
+        return
+
+    tmp = match.group(3)
+    if (tmp):
+        accountname = urllib.unquote_plus(tmp)
+    else:
+        accountname = ""
+
+    screenname = urllib.unquote_plus(match.group(5))
+
+    tmp = match.group(7)
+    if (tmp):
+        command = urllib.unquote_plus(tmp)
+    else:
+        command = ""
+
+    paramstring = match.group(9)
+    params = {}
+    if paramstring:
+        for param in paramstring.split(";"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol, accountname)
+
+    if command.lower() == "message":
+        goim(account, screenname, params.get("body"))
+    elif command.lower() == "join":
+        room, server = screenname.split("@")
+        gochat(account, {"room": room, "server": server})
+    elif command.lower() == "roster":
+        addbuddy(account, screenname, params.get("group", ""), params.get("name", ""))
+    else:
+        goim(account, screenname)
+
+def ymsgr(uri):
+    protocol = "prpl-yahoo"
+    match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
+    if not match:
+        print "Invalid ymsgr URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    screenname = urllib.unquote_plus(match.group(3))
+    paramstring = match.group(5)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol)
+
+    if command.lower() == "sendim":
+        goim(account, screenname, params.get("m"))
+    elif command.lower() == "chat":
+        gochat(account, {"room": screenname})
+    elif command.lower() == "addfriend":
+        addbuddy(account, screenname)
+
+
+def main(argv=sys.argv):
+    if len(argv) != 2:
+        print "Usage: %s URI" % argv[0]
+        print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0]
+        return
+
+    uri = argv[1]
+    type = uri.split(":")[0]
+
+    if type == "aim":
+        aim(uri)
+    elif type == "gg":
+        gg(uri)
+    elif type == "icq":
+        icq(uri)
+    elif type == "irc":
+        irc(uri)
+    elif type == "msnim":
+        msnim(uri)
+    elif type == "sip":
+        sip(uri)
+    elif type == "xmpp":
+        xmpp(uri)
+    elif type == "ymsgr":
+        ymsgr(uri)
+    else:
+        print "Unkown protocol: %s" % type
+
+if __name__ == "__main__":
+    main()
--- a/libpurple/tests/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/tests/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -14,6 +14,7 @@
 check_libpurple_CFLAGS=\
         @CHECK_CFLAGS@ \
 		$(GLIB_CFLAGS) \
+		$(DEBUG_CFLAGS) \
 		-I.. \
 		-DBUILDDIR=\"$(top_builddir)\"
 
--- a/libpurple/tests/check_libpurple.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/tests/check_libpurple.c	Mon Mar 26 01:55:33 2007 +0000
@@ -3,6 +3,7 @@
 
 #include "../core.h"
 #include "../eventloop.h"
+#include "../util.h"
 
 #include "tests.h"
 
@@ -22,6 +23,7 @@
 	(guint (*)(guint))g_source_remove,
 	purple_check_input_add,
 	(guint (*)(guint))g_source_remove,
+	NULL
 };
 
 static void
--- a/libpurple/tests/test_cipher.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/tests/test_cipher.c	Mon Mar 26 01:55:33 2007 +0000
@@ -5,6 +5,8 @@
 
 #undef HAVE_DBUS
 
+#include "tests.h"
+
 #include "../cipher.h"
 #include "../signal.h"
 
@@ -15,7 +17,6 @@
 	PurpleCipher *cipher = NULL; \
 	PurpleCipherContext *context = NULL; \
 	gchar cdigest[33]; \
-	gchar *sdigest = NULL; \
 	gboolean ret = FALSE; \
 	\
 	cipher = purple_ciphers_find_cipher("md4"); \
@@ -79,7 +80,6 @@
 	PurpleCipher *cipher = NULL; \
 	PurpleCipherContext *context = NULL; \
 	gchar cdigest[33]; \
-	gchar *sdigest = NULL; \
 	gboolean ret = FALSE; \
 	\
 	cipher = purple_ciphers_find_cipher("md5"); \
@@ -142,7 +142,6 @@
 	PurpleCipher *cipher = NULL; \
 	PurpleCipherContext *context = NULL; \
 	gchar cdigest[41]; \
-	gchar *sdigest = NULL; \
 	gboolean ret = FALSE; \
 	\
 	cipher = purple_ciphers_find_cipher("sha1"); \
@@ -198,7 +197,7 @@
 cipher_suite(void) {
 	Suite *s = suite_create("Cipher Suite");
 	TCase *tc = NULL;
-	
+
 	/* md4 tests */
 	tc = tcase_create("MD4");
 	tcase_add_test(tc, test_md4_empty_string);
--- a/libpurple/tests/test_jabber_jutil.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/tests/test_jabber_jutil.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,9 @@
+#include <string.h>
+
 #include "tests.h"
+#include "../account.h"
+#include "../conversation.h"
+#include "../xmlnode.h"
 #include "../protocols/jabber/jutil.h"
 
 START_TEST(test_get_resource)
@@ -29,12 +34,14 @@
 
 START_TEST(test_nodeprep_validate)
 {
+	char *longnode;
+
 	fail_unless(jabber_nodeprep_validate(NULL));
 	fail_unless(jabber_nodeprep_validate("foo"));
 	fail_unless(jabber_nodeprep_validate("%d"));
 	fail_unless(jabber_nodeprep_validate("y\\z"));
 
-	char *longnode = g_strnfill(1023, 'a');
+	longnode = g_strnfill(1023, 'a');
 	fail_unless(jabber_nodeprep_validate(longnode));
 	g_free(longnode);
 }
--- a/libpurple/tests/test_util.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/tests/test_util.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,3 +1,5 @@
+#include <string.h>
+
 #include "tests.h"
 #include "../util.h"
 
--- a/libpurple/tests/tests.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/tests/tests.h	Mon Mar 26 01:55:33 2007 +0000
@@ -6,6 +6,7 @@
 
 /* define the test suites here */
 /* remember to add the suite to the runner in check_libpurple.c */
+Suite * master_suite(void);
 Suite * cipher_suite(void);
 Suite * jabber_jutil_suite(void);
 Suite * util_suite(void);
--- a/libpurple/util.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/util.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2184,8 +2184,8 @@
 #endif
 }
 
-/* returns a string of the form ~/.purple, where ~ is replaced by the user's home
- * dir. Note that there is no trailing slash after .purple. */
+/* returns a string of the form ~/.gaim, where ~ is replaced by the user's home
+ * dir. Note that there is no trailing slash after .gaim. */
 const char *
 purple_user_dir(void)
 {
@@ -2196,7 +2196,7 @@
 
 		if (hd) {
 			g_strlcpy((char*) &home_dir, hd, sizeof(home_dir));
-			g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".purple",
+			g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".gaim",
 					sizeof(home_dir));
 		}
 	}
--- a/libpurple/win32/libc_interface.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/win32/libc_interface.h	Mon Mar 26 01:55:33 2007 +0000
@@ -30,60 +30,52 @@
 #include <glib.h>
 
 /* sys/socket.h */
-int wpurple_socket(int namespace, int style, int protocol);
 #define socket( namespace, style, protocol ) \
 wpurple_socket( namespace, style, protocol )
 
-int wpurple_connect(int socket, struct sockaddr *addr, u_long length);
 #define connect( socket, addr, length ) \
 wpurple_connect( socket, addr, length )
 
-int wpurple_getsockopt(int socket, int level, int optname, void *optval, socklen_t *optlenptr);
 #define getsockopt( args... ) \
 wpurple_getsockopt( args )
 
-int wpurple_setsockopt(int socket, int level, int optname, const void *optval, socklen_t optlen);
 #define setsockopt( args... ) \
 wpurple_setsockopt( args )
 
-int wpurple_getsockname (int socket, struct sockaddr *addr, socklen_t *lenptr);
 #define getsockname( socket, addr, lenptr ) \
 wpurple_getsockname( socket, addr, lenptr )
 
-int wpurple_bind(int socket, struct sockaddr *addr, socklen_t length);
 #define bind( socket, addr, length ) \
 wpurple_bind( socket, addr, length )
 
-int wpurple_listen(int socket, unsigned int n);
 #define listen( socket, n ) \
 wpurple_listen( socket, n )
 
-int wpurple_sendto(int socket, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
 #define sendto(socket, buf, len, flags, to, tolen) \
 wpurple_sendto(socket, buf, len, flags, to, tolen)
 
+#define recv(fd, buf, len, flags) \
+wpurple_recv(fd, buf, len, flags)
+
+#define send(socket, buf, buflen, flags) \
+wpurple_send(socket, buf, buflen, flags)
+
 /* sys/ioctl.h */
-int wpurple_ioctl(int fd, int command, void* opt);
 #define ioctl( fd, command, val ) \
 wpurple_ioctl( fd, command, val )
 
 /* fcntl.h */
-int wpurple_fcntl(int socket, int command, int val);
 #define fcntl( fd, command, val ) \
 wpurple_fcntl( fd, command, val )
 
 /* arpa/inet.h */
-int wpurple_inet_aton(const char *name, struct in_addr *addr);
 #define inet_aton( name, addr ) \
 wpurple_inet_aton( name, addr )
 
-const char *
-wpurple_inet_ntop (int af, const void *src, char *dst, socklen_t cnt);
 #define inet_ntop( af, src, dst, cnt ) \
 wpurple_inet_ntop( af, src, dst, cnt )
 
 /* netdb.h */
-struct hostent* wpurple_gethostbyname(const char *name);
 #define gethostbyname( name ) \
 wpurple_gethostbyname( name )
 
@@ -92,7 +84,6 @@
 (unsigned int)ntohl( netlong )
 
 /* string.h */
-char* wpurple_strerror( int errornum );
 #define hstrerror( herror ) \
 wpurple_strerror( errno )
 #define strerror( errornum ) \
@@ -101,28 +92,16 @@
 #define bzero( dest, size ) memset( dest, 0, size )
 
 /* unistd.h */
-int wpurple_read(int fd, void *buf, unsigned int size);
 #define read( fd, buf, buflen ) \
 wpurple_read( fd, buf, buflen )
 
-int wpurple_write(int fd, const void *buf, unsigned int size);
 #define write( socket, buf, buflen ) \
 wpurple_write( socket, buf, buflen )
 
-int wpurple_recv(int fd, void *buf, size_t len, int flags);
-#define recv(fd, buf, len, flags) \
-wpurple_recv(fd, buf, len, flags)
-
-int wpurple_send(int fd, const void *buf, unsigned int size, int flags);
-#define send(socket, buf, buflen, flags) \
-wpurple_send(socket, buf, buflen, flags)
-
-int wpurple_close(int fd);
 #define close( fd ) \
 wpurple_close( fd )
 
 #if !GLIB_CHECK_VERSION(2,8,0)
-int wpurple_g_access(const gchar *filename, int mode);
 #define g_access( filename, mode) \
 wpurple_g_access( filename, mode )
 #endif
@@ -131,12 +110,10 @@
 #define sleep(x) Sleep((x)*1000)
 #endif
 
-int wpurple_gethostname(char *name, size_t size);
 #define gethostname( name, size ) \
 wpurple_gethostname( name, size )
 
 /* sys/time.h */
-int wpurple_gettimeofday(struct timeval *p, struct timezone *z);
 #define gettimeofday( timeval, timezone ) \
 wpurple_gettimeofday( timeval, timezone )
 
@@ -144,7 +121,6 @@
 #define snprintf _snprintf
 #define vsnprintf _vsnprintf
 
-int wpurple_rename(const char *oldname, const char *newname);
 #define rename( oldname, newname ) \
 wpurple_rename( oldname, newname )
 
@@ -157,13 +133,10 @@
 wpurple_rename(oldname, newname)
 #endif
 
-
 /* sys/stat.h */
-
 #define fchmod(a,b)
 
 /* time.h */
-struct tm *wpurple_localtime_r(const time_t *time, struct tm *resultp);
 #define localtime_r( time, resultp ) \
 wpurple_localtime_r( time, resultp )
 
--- a/libpurple/win32/libc_internal.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/win32/libc_internal.h	Mon Mar 26 01:55:33 2007 +0000
@@ -22,13 +22,40 @@
  */
 #ifndef _LIBC_INTERNAL_
 #define _LIBC_INTERNAL_
+#include <glib.h>
+
+
+/* sys/socket.h */
+int wpurple_socket(int namespace, int style, int protocol);
+int wpurple_connect(int socket, struct sockaddr *addr, u_long length);
+int wpurple_getsockopt(int socket, int level, int optname, void *optval, socklen_t *optlenptr);
+int wpurple_setsockopt(int socket, int level, int optname, const void *optval, socklen_t optlen);
+int wpurple_getsockname (int socket, struct sockaddr *addr, socklen_t *lenptr);
+int wpurple_bind(int socket, struct sockaddr *addr, socklen_t length);
+int wpurple_listen(int socket, unsigned int n);
+int wpurple_sendto(int socket, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
+int wpurple_recv(int fd, void *buf, size_t len, int flags);
+int wpurple_send(int fd, const void *buf, unsigned int size, int flags);
+
+/* arpa/inet.h */
+int wpurple_inet_aton(const char *name, struct in_addr *addr);
+const char *
+wpurple_inet_ntop (int af, const void *src, char *dst, socklen_t cnt);
+
+/* netdb.h */
+struct hostent* wpurple_gethostbyname(const char *name);
+
+/* string.h */
+char* wpurple_strerror( int errornum );
 
 /* fcntl.h */
+int wpurple_fcntl(int socket, int command, int val);
 #define F_SETFL 1
 #define O_NONBLOCK 1
 
-/* ioctl.h */
+/* sys/ioctl.h */
 #define SIOCGIFCONF 0x8912 /* get iface list */
+int wpurple_ioctl(int fd, int command, void* opt);
 
 /* net/if.h */
 struct ifreq
@@ -89,6 +116,24 @@
 	int tz_minuteswest;
 	int tz_dsttime;
 };
+int wpurple_gettimeofday(struct timeval *p, struct timezone *z);
+
+/* time.h */
+struct tm *wpurple_localtime_r(const time_t *time, struct tm *resultp);
 
 
+/* unistd.h */
+int wpurple_read(int fd, void *buf, unsigned int size);
+int wpurple_write(int fd, const void *buf, unsigned int size);
+int wpurple_close(int fd);
+int wpurple_gethostname(char *name, size_t size);
+
+
+#if !GLIB_CHECK_VERSION(2,8,0)
+int wpurple_g_access(const gchar *filename, int mode);
+#endif
+
+/* stdio.h */
+int wpurple_rename(const char *oldname, const char *newname);
+
 #endif /* _LIBC_INTERNAL_ */
--- a/libpurple/xmlnode.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/libpurple/xmlnode.c	Mon Mar 26 01:55:33 2007 +0000
@@ -27,6 +27,7 @@
  * write my own stuff.  Also, re-writing this lets me be as lightweight
  * as I want to be.  Thank you libxode for giving me a good starting point */
 
+#include "debug.h"
 #include "internal.h"
 
 #include <libxml/parser.h>
--- a/m4macros/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/m4macros/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-installed_m4=gaim.m4
+installed_m4=purple.m4
 
 EXTRA_DIST=$(installed_m4)
 
--- a/m4macros/gaim.m4	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-dnl ###########################################################################
-dnl # Configure paths for Gaim
-dnl # Gary Kramlich 2005
-dnl #
-dnl # Based off of glib-2.0.m4 by Owen Taylor
-dnl ###########################################################################
-
-dnl ###########################################################################
-dnl # AM_PATH_GAIM([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
-dnl #
-dnl # Test for gaim and define GAIM_CFLAGS, GAIM_LIBS, GAIM_DATADIR, and
-dnl # GAIM_LIBDIR
-dnl ###########################################################################
-AC_DEFUN([AM_PATH_GAIM],
-[dnl
-	AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-
-	no_gaim=""
-
-	if test x"$PKG_CONFIG" != x"no" ; then
-		if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-			:
-		else
-			echo "*** pkg-config is too old;  version 0.7 or newer is required."
-			no_gaim="yes"
-			PKG_CONFIG="no"
-		fi
-	else
-		no_gaim="yes"
-	fi
-
-	min_version=ifelse([$1], ,2.0.0,$1)
-	found_version=""
-	
-	AC_MSG_CHECKING(for gaim - version >= $min_version)
-
-	if test x"$no_gaim" = x"" ; then
-		GAIM_DATADIR=`$PKG_CONFIG --variable=datadir gaim`
-		GAIM_LIBDIR=`$PKG_CONFIG --variable=libdir gaim`
-
-		GAIM_CFLAGS=`$PKG_CONFIG --cflags gaim`
-		GAIM_LIBS=`$PKG_CONFIG --libs gaim`
-
-		gaim_version=`$PKG_CONFIG --modversion gaim`
-		gaim_major_version=`echo $gaim_version | cut -d. -f 1`
-		gaim_minor_version=`echo $gaim_version | cut -d. -f 2`
-		
-		dnl # stash the micro version in a temp variable.  Then stash
-		dnl # the numeric for it in gaim_micro_version and anything
-		dnl # else in gaim_extra_version.
-		gaim_micro_version_temp=`echo $gaim_version | cut -d. -f 3`
-		gaim_micro_version=`echo $gaim_micro_version_temp | sed 's/[[^0-9]]//g'`
-		gaim_extra_version=`echo $gaim_micro_version_temp | sed 's/[[0-9]]//g'`
-
-		dnl # get the major, minor, and macro that the user gave us
-		min_major_version=`echo $min_version | cut -d. -f 1`
-		min_minor_version=`echo $min_version | cut -d. -f 2`
-		min_micro_version=`echo $min_version | cut -d. -f 3`
-
-		dnl # check the users version against the version from pkg-config
-		if test $gaim_major_version -eq $min_major_version -a \
-			$gaim_minor_version -ge $min_minor_version -a \
-			$gaim_micro_version -ge $min_micro_version
-		then
-			:
-		else
-			no_gaim="yes"
-			found_version="$gaim_major_version.$gaim_minor_version.$gaim_micro_version$gaim_extra_version"
-		fi
-
-		dnl # Do we want a compile test here?
-	fi
-
-	if test x"$no_gaim" = x"" ; then
-		AC_MSG_RESULT(yes (version $gaim_major_version.$gaim_minor_version.$gaim_micro_version$gaim_extra_version))
-		ifelse([$2], , :, [$2])
-	else
-		AC_MSG_RESULT(no)
-		if test x"$PKG_CONFIG" = x"no" ; then
-			echo "*** A new enough version of pkg-config was not found."
-			echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-		fi
-
-		if test x"found_version" != x"" ; then
-			echo "*** A new enough version of gaim was not found."
-			echo "*** You have version $found_version"
-			echo "*** See http://gaim.sf.net/"
-		fi
-		
-		GAIM_CFLAGS=""
-		GAIM_LIBS=""
-		GAIM_DATADIR=""
-		GAIM_LIBDIR=""
-
-		ifelse([$3], , :, [$3])
-	fi
-
-	AC_SUBST(GAIM_CFLAGS)
-	AC_SUBST(GAIM_LIBS)
-	AC_SUBST(GAIM_DATADIR)
-	AC_SUBST(GAIM_LIBDIR)
-])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m4macros/purple.m4	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,102 @@
+dnl ###########################################################################
+dnl # Configure paths for libpurple
+dnl # Gary Kramlich 2005
+dnl #
+dnl # Based off of glib-2.0.m4 by Owen Taylor
+dnl ###########################################################################
+
+dnl ###########################################################################
+dnl # AM_PATH_PURPLE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl #
+dnl # Test for purple and define PURPLE_CFLAGS, PURPLE_LIBS, PURPLE_DATADIR, and
+dnl # PURPLE_LIBDIR
+dnl ###########################################################################
+AC_DEFUN([AM_PATH_PURPLE],
+[dnl
+	AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+	no_purple=""
+
+	if test x"$PKG_CONFIG" != x"no" ; then
+		if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
+			:
+		else
+			echo "*** pkg-config is too old;  version 0.7 or newer is required."
+			no_purple="yes"
+			PKG_CONFIG="no"
+		fi
+	else
+		no_purple="yes"
+	fi
+
+	min_version=ifelse([$1], ,2.0.0,$1)
+	found_version=""
+
+	AC_MSG_CHECKING(for purple - version >= $min_version)
+
+	if test x"$no_purple" = x"" ; then
+		PURPLE_DATADIR=`$PKG_CONFIG --variable=datadir purple`
+		PURPLE_LIBDIR=`$PKG_CONFIG --variable=libdir purple`
+
+		PURPLE_CFLAGS=`$PKG_CONFIG --cflags purple`
+		PURPLE_LIBS=`$PKG_CONFIG --libs purple`
+
+		purple_version=`$PKG_CONFIG --modversion purple`
+		purple_major_version=`echo $purple_version | cut -d. -f 1`
+		purple_minor_version=`echo $purple_version | cut -d. -f 2`
+
+		dnl # stash the micro version in a temp variable.  Then stash
+		dnl # the numeric for it in purple_micro_version and anything
+		dnl # else in purple_extra_version.
+		purple_micro_version_temp=`echo $purple_version | cut -d. -f 3`
+		purple_micro_version=`echo $purple_micro_version_temp | sed 's/[[^0-9]]//g'`
+		purple_extra_version=`echo $purple_micro_version_temp | sed 's/[[0-9]]//g'`
+
+		dnl # get the major, minor, and macro that the user gave us
+		min_major_version=`echo $min_version | cut -d. -f 1`
+		min_minor_version=`echo $min_version | cut -d. -f 2`
+		min_micro_version=`echo $min_version | cut -d. -f 3`
+
+		dnl # check the users version against the version from pkg-config
+		if test $purple_major_version -eq $min_major_version -a \
+			$purple_minor_version -ge $min_minor_version -a \
+			$purple_micro_version -ge $min_micro_version
+		then
+			:
+		else
+			no_purple="yes"
+			found_version="$purple_major_version.$purple_minor_version.$purple_micro_version$purple_extra_version"
+		fi
+
+		dnl # Do we want a compile test here?
+	fi
+
+	if test x"$no_purple" = x"" ; then
+		AC_MSG_RESULT(yes (version $purple_major_version.$purple_minor_version.$purple_micro_version$purple_extra_version))
+		ifelse([$2], , :, [$2])
+	else
+		AC_MSG_RESULT(no)
+		if test x"$PKG_CONFIG" = x"no" ; then
+			echo "*** A new enough version of pkg-config was not found."
+			echo "*** See http://www.freedesktop.org/software/pkgconfig/"
+		fi
+
+		if test x"found_version" != x"" ; then
+			echo "*** A new enough version of purple was not found."
+			echo "*** You have version $found_version"
+			echo "*** See http://pidgin.im/"
+		fi
+
+		PURPLE_CFLAGS=""
+		PURPLE_LIBS=""
+		PURPLE_DATADIR=""
+		PURPLE_LIBDIR=""
+
+		ifelse([$3], , :, [$3])
+	fi
+
+	AC_SUBST(PURPLE_CFLAGS)
+	AC_SUBST(PURPLE_LIBS)
+	AC_SUBST(PURPLE_DATADIR)
+	AC_SUBST(PURPLE_LIBDIR)
+])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin.apspec.in	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,69 @@
+# -*-shell-script-*-
+
+[Meta]
+RootName: @pidgin.im/pidgin:$SOFTWAREVERSION
+DisplayName: Pidgin Internet Messenger
+ShortName: Pidgin
+Maintainer: The Pidgin Developers
+URL: http://pidgin.im/
+Packager: Tim Ringenbach <marv_sf@users.sourceforge.net>
+Summary: A GTK+ based multiprotocol instant messaging client
+SoftwareVersion: @VERSION@
+InterfaceVersion: 2.0
+PackageVersion: 1
+
+[Description]
+Pidgin allows you to talk to anyone using a variety of messaging protocols,
+including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, Jabber,
+Gadu-Gadu, and Zephyr. These protocols are implemented using a
+modular, easy to use design. To use a protocol, just add an account using the
+account editor.
+
+Pidgin supports many common features of other clients, as well as many unique
+features, such as perl scripting, TCL scripting and C plugins.
+
+Pidgin is NOT affiliated with or endorsed by America Online, Inc., Microsoft
+Corporation, Yahoo! Inc., or ICQ Inc.
+
+[BuildPrepare]
+APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-gtktest --disable-glibtest --disable-vv  --disable-fortify
+#APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-vv
+
+
+[BuildUnprepare]
+unprepareBuild
+
+[Imports]
+rm -rf include
+rm -rf lib/pkgconfig
+find -name '*.la' | xargs rm
+echo '*' | import
+
+[Prepare]
+# Dependency checking
+require @gtk.org/gtk 2.2
+require @68k.org/libaudiofile 0.0
+require @xiph.org/libao 2.0
+require @gtkspell.sourceforge.net/gtkspell 0.0
+require @gnutls.org/gnutls 11.0 || { require @mozilla.org/nspr 4 && require @mozilla.org/nss 3; }
+
+[Install]
+# Put your installation script here
+installExe ./bin/*
+installLib ./lib/libpurple-remote.so.0.0.0
+# do the plugins
+copyFiles ./lib/pidgin "$PREFIX/lib"
+installMan 1 ./man/man1/pidgin.1
+installDesktop "Networking/Instant Messaging" ./share/applications/pidgin.desktop
+installLocale ./share/locale
+copyFiles ./share/pixmaps "$PREFIX/share"
+copyFiles ./share/sounds "$PREFIX/share"
+installIcon ./share/pixmaps/pidgin.png
+# install and fix the .pc file
+# move this to the -devel package when I make one
+# copyFile ./lib/pkgconfig/pidgin.pc "$PREFIX/lib/pkgconfig/pidgin.pc"
+# safeSed "$PREFIX/lib/pkgconfig/pidgin.pc" "s|prefix=/usr/local|prefix=$PREFIX|"
+
+[Uninstall]
+# Usually just the following line is enough to uninstall everything
+uninstallFromLog
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin.spec.in	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,495 @@
+# Older RPM doesn't define these by default
+%{!?perl_vendorlib: %define perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib)}
+%{!?perl_vendorarch: %define perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)}
+%{!?perl_archlib: %define perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib)}
+
+# When not doing betas comment this out
+# NOTE: %defines in spec files are evaluated in comments so the correct
+#       way to comment it out is to replace the % with #
+#define beta 7
+
+%if 0%{?beta}
+%define pidginver %(echo "@VERSION@"|sed -e 's/dev//; s/beta.*//')
+%else
+%define pidginver @VERSION@
+%endif
+
+Summary:    A GTK+ based multiprotocol instant messaging client
+Name:       @PACKAGE@
+Version:    %pidginver
+Release:    0%{?beta:.beta%{beta}}
+Epoch:      0
+License:    GPL
+Group:      Applications/Internet
+URL:        http://pidgin.im/
+Packager:   %{packager}
+Source:     %{name}-@VERSION@.tar.bz2
+BuildRoot:  %{_tmppath}/%{name}-%{version}-root
+
+# Generic build requirements
+BuildRequires: libtool, pkgconfig, intltool, gettext, libxml2-devel
+%{?_with_avahi:BuildRequires: avahi-compat-howl-devel}
+%{!?_without_gtkspell:BuildRequires: gtkspell-devel}
+%{?_with_howl:BuildRequires: howl-devel}
+%{?_with_meanwhile:BuildRequires: meanwhile-devel}
+%{?_with_mono:BuildRequires: mono-devel}
+%{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2}
+%{?_with_silc:BuildRequires: /usr/include/silc/silcclient.h}
+%{?_with_tcl:BuildRequires: tcl, tk, /usr/include/tcl.h}
+%{!?_without_text:BuildRequires: ncurses-devel}
+
+%if "%{_vendor}" == "suse"
+# For SuSE:
+BuildRequires: gnutls-devel
+%{?_with_dbus:BuildRequires: dbus-1-devel >= 0.35}
+%{!?_without_gstreamer:BuildRequires: gstreamer010-devel >= 0.10}
+%else
+%{?_with_dbus:BuildRequires: dbus-devel >= 0.35}
+%{!?_without_gstreamer:BuildRequires: gstreamer-devel >= 0.10}
+%endif
+
+# Mandrake 10.1 and lower || Mandrake 10.2 (and higher?)
+%if "%{_vendor}" == "MandrakeSoft" || "%{_vendor}" == "Mandrakesoft" || "%{_vendor}" == "Mandriva"
+# For Mandrake/Mandriva:
+BuildRequires: libgtk+2.0_0-devel, libnss3-devel, perl-devel
+Obsoletes:  libgaim-remote0
+%else
+# For SuSE, Red Hat, Fedora and others:
+BuildRequires: gtk2-devel
+%if "%{_vendor}" != "suse"
+# For Red Hat, Fedora and others:
+# let's assume RH & FC1 are the only brain-dead distros missing the
+# perl-XML-Parser dependency on intltool and that other RH/FC releases
+# don't care if we specify it here
+BuildRequires: perl-XML-Parser
+BuildRequires: mozilla-nss-devel
+%endif
+%endif
+
+# For some reason perl isn't always automatically detected as a requirement :(
+Requires: perl
+# Gadu-Gadu support was split out temporarily (only as gaim)
+Provides: gaim-gadugadu = %{epoch}:%{version}-%{release}
+
+%package devel
+Summary:    Development headers, documentation, and libraries for Pidgin
+Group:      Applications/Internet
+Requires:   pkgconfig, pidgin = %{epoch}:%{version}
+
+%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
+%package bonjour
+Summary:    Bonjour plugin for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_meanwhile:1}
+%package meanwhile
+Summary:    Lotus Sametime plugin for Pidgin using the Meanwhile library
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_mono:1}
+%package mono
+Summary:    Mono .NET plugin support for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_silc:1}
+%package silc
+Summary:    SILC (Secure Internet Live Conferencing) plugin for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_tcl:1}
+%package tcl
+Summary:    Tcl scripting support for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{!?_without_text:1}
+%package -n finch
+Summary:    A text-based user interface for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%description
+Pidgin allows you to talk to anyone using a variety of messaging
+protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu,
+ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and
+Zephyr.  These protocols are implemented using a modular, easy to
+use design.  To use a protocol, just add an account using the
+account editor.
+
+Pidgin supports many common features of other clients, as well as many
+unique features, such as perl scripting, TCL scripting and C plugins.
+
+Pidgin is not affiliated with or endorsed by America Online, Inc.,
+Microsoft Corporation, Yahoo! Inc., or ICQ Inc.
+
+%description devel
+The pidgin-devel package contains the header files, developer
+documentation, and libraries required for development of Pidgin scripts
+and plugins.
+
+%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
+%description bonjour
+Bonjour plugin for Pidgin.
+%endif
+
+%if 0%{?_with_meanwhile:1}
+%description meanwhile
+Lotus Sametime plugin for Pidgin using the Meanwhile library.
+%endif
+
+%if 0%{?_with_mono:1}
+%description mono
+Mono plugin loader for Pidgin.  This package will allow you to write or
+use Pidgin plugins written in the .NET programming language.
+%endif
+
+%if 0%{?_with_silc:1}
+%description silc
+SILC (Secure Internet Live Conferencing) plugin for Pidgin.
+%endif
+
+%if 0%{!?without_text:1}
+%description -n finch
+A text-based user interface for Pidgin.  This can be run from a
+standard text console or from a terminal within X Windows.  It
+uses ncurses and our homegrown gnt library for drawing windows
+and text.
+%endif
+
+%if 0%{?_with_tcl:1}
+%description tcl
+Tcl plugin loader for Pidgin.  This package will allow you to write or
+use Pidgin plugins written in the Tcl programming language.
+%endif
+
+%prep
+%setup -q -n %{name}-@VERSION@
+
+%build
+CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} \
+                                    --bindir=%{_bindir} \
+                                    --datadir=%{_datadir} \
+                                    --includedir=%{_includedir} \
+                                    --libdir=%{_libdir} \
+                                    --mandir=%{_mandir} \
+                                    --sysconfdir=%{_sysconfdir} \
+                                    --disable-schemas-install \
+                                    %{!?_with_dbus:--disable-dbus} \
+                                    %{?_without_gstreamer:--disable-gstreamer} \
+                                    %{?_without_gtkspell:--disable-gtkspell} \
+                                    %{?_with_mono:--enable-mono} \
+                                    %{?_with_perlmakehack:--with-perl-lib=%{buildroot}%{_prefix}} \
+                                    %{!?_with_perlmakehack:--with-perl-lib=%{_prefix}} \
+                                    %{?_with_sasl:--enable-cyrus-sasl} \
+                                    %{?_with_silc:--with-silc-includes=%{_includedir}/silc} \
+                                    %{?_with_silc:--with-silc-libs=%{_libdir}/silc} \
+                                    %{!?_with_tcl:--disable-tcl} \
+                                    %{?_without_text:--disable-consoleui}
+
+make %{?_smp_mflags}
+
+%install
+rm -rf %{buildroot}
+%if 0%{?_with_perlmakehack:1}
+make prefix=%{buildroot}%{_prefix} bindir=%{buildroot}%{_bindir} \
+     datadir=%{buildroot}%{_datadir} includedir=%{buildroot}%{_includedir} \
+     libdir=%{buildroot}%{_libdir} mandir=%{buildroot}%{_mandir} \
+     sysconfdir=%{buildroot}%{_sysconfdir} \
+     install
+%else
+make DESTDIR=$RPM_BUILD_ROOT install
+%endif
+
+# Delete files that we don't want to put in any of the RPMs
+rm -f $RPM_BUILD_ROOT%{_libdir}/finch/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod
+find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
+find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';'
+# do we want to ship the nullclient ?
+rm -f $RPM_BUILD_ROOT%{_bindir}/nullclient
+
+%if 0%{!?_with_howl:1} && 0%{!?_with_avahi:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libbonjour.so
+%endif
+
+%if 0%{!?_with_meanwhile:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsametime.so
+%endif
+
+%if 0%{!?_with_mono:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/mono.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.dll
+%endif
+
+%if 0%{!?_with_silc:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsilcpurple.so
+%endif
+
+%if 0%{!?_with_tcl:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/tcl.so
+%endif
+
+%if 0%{?_without_text:1}
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/finch.*
+rm -rf $RPM_BUILD_ROOT%{_bindir}/finch
+rm -f $RPM_BUILD_ROOT%{_libdir}/libgnt.so.*
+%endif
+
+%find_lang %{name}
+
+find $RPM_BUILD_ROOT%{_libdir}/pidgin $RPM_BUILD_ROOT%{_libdir}/libpurple -xtype f -print | \
+        sed "s@^$RPM_BUILD_ROOT@@g" | \
+        grep -v /libbonjour.so | \
+        grep -v /libsilcpurple.so | \
+        grep -v /libsametime.so | \
+        grep -v /mono.so | \
+        grep -v /tcl.so | \
+        grep -v ".dll$" | \
+        grep -v ".tcl$" > %{name}-%{version}-coreplugins
+
+# files -f file can only take one filename :(
+cat %{name}.lang >> %{name}-%{version}-coreplugins
+
+%clean
+rm -rf %{buildroot}
+
+%pre
+if [ "$1" -gt 1 -a -n "`which gconftool-2 2>/dev/null`" ]; then
+    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+    gconftool-2 --makefile-uninstall-rule \
+        %{_sysconfdir}/gconf/schemas/gaim.schemas >/dev/null || :
+    killall -HUP gconfd-2 || :
+fi
+
+%post
+if [ -n "`which gconftool-2 2>/dev/null`" ]; then
+    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+    gconftool-2 --makefile-install-rule \
+        %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
+    killall -HUP gconfd-2 || :
+fi
+/sbin/ldconfig
+
+%preun
+if [ "$1" -eq 0 -a -n "`which gconftool-2 2>/dev/null`" ]; then
+    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+    gconftool-2 --makefile-uninstall-rule \
+      %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
+    killall -HUP gconfd-2 || :
+fi
+
+%postun -p /sbin/ldconfig
+
+%files -f %{name}-%{version}-coreplugins
+%defattr(-, root, root)
+
+%doc AUTHORS
+%doc COPYING
+%doc COPYRIGHT
+%doc ChangeLog
+%doc NEWS
+%doc README
+%doc README.SVN
+%doc doc/FAQ
+%doc doc/the_penguin.txt
+%doc %{_mandir}/man1/pidgin.*
+%doc %{_mandir}/man3*/*
+
+%dir %{_libdir}/pidgin
+%dir %{_libdir}/libpurple
+%attr(755, root, root) %{perl_vendorarch}/Purple*
+%attr(755, root, root) %{perl_vendorarch}/auto/Purple
+
+%{_bindir}/pidgin
+%{_datadir}/pixmaps/*
+%dir %{_datadir}/sounds/pidgin
+%{_datadir}/sounds/pidgin/*
+%{_datadir}/applications/*
+%{_libdir}/libpurple.so.*
+%{_sysconfdir}/gconf/schemas/gaim.schemas
+
+%if 0%{?_with_dbus:1}
+%{_bindir}/purple-client-example
+%{_bindir}/purple-remote
+%{_bindir}/purple-send
+%{_bindir}/purple-send-async
+%{_bindir}/purple-url-handler
+%{_libdir}/libpurple-client.so.*
+%{_datadir}/dbus-1/services/gaim.service
+%doc README.dbus
+%doc libpurple/purple-notifications-example
+%endif
+
+%files devel
+%defattr(-, root, root)
+
+%doc ChangeLog.API
+%doc HACKING
+%doc PLUGIN_HOWTO
+%doc PROGRAMMING_NOTES
+
+%dir %{_includedir}/finch
+%dir %{_includedir}/gnt
+%dir %{_includedir}/libpurple
+%dir %{_includedir}/pidgin
+%{_includedir}/finch/*.h
+%{_includedir}/gnt/*.h
+%{_includedir}/libpurple/*.h
+%{_includedir}/pidgin/*.h
+%{_libdir}/libpurple.so
+%{_libdir}/libgnt.so
+%{_libdir}/pkgconfig/purple.pc
+%{_libdir}/pkgconfig/pidgin.pc
+%{_libdir}/pkgconfig/gnt.pc
+%{_datadir}/aclocal/pidgin.m4
+%if 0%{?_with_dbus:1}
+%{_libdir}/libpurple-client.so
+%endif
+
+%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
+%files bonjour
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/libbonjour.*
+%endif
+
+%if 0%{?_with_meanwhile:1}
+%files meanwhile
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/libsametime.*
+%endif
+
+%if 0%{?_with_mono:1}
+%files mono
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/mono.so
+%{_libdir}/libpurple/*.dll
+%endif
+
+%if 0%{?_with_silc:1}
+%files silc
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/libsilcpurple.*
+%endif
+
+%if 0%{?_with_tcl:1}
+%files tcl
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/tcl.so
+%endif
+
+%if 0%{!?_without_text:1}
+%files -n finch
+%defattr(-, root, root)
+
+%doc %{_mandir}/man1/finch.*
+%{_bindir}/finch
+%{_libdir}/finch/*.so
+%{_libdir}/libgnt.so.*
+%endif
+
+%changelog
+* Sat Mar 24 2007 Stu Tomlinson <stu@nosnilmot.com>
+- Update to reflect renaming to pidgin/libpurple
+
+* Sun Oct  1 2006 Stu Tomlinson <stu@nosnilmot.com>
+- We can build with internal gadu gadu again, so bring it back into the
+  main package
+- Deal with gconf schame uninstallation on package upgrade and removal
+
+* Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com>
+- Make the gstreamer-devel dependency overridable with '--without-gstreamer'
+  to allow building on older distributions without suitable gstreamer
+
+* Tue Aug 15 2006 Mark Doliner <thekingant@users.sourceforge.net>
+- Add a BuildRequire for gstreamer-devel
+- Remove the BuildRequires for audiofile-devel and libao-devel
+
+* Mon May 8 2006 Mark Doliner <thekingant@users.sourceforge.net>
+- Add --with avahi option to compile the gaim-bonjour package against
+  Avahi's Howl compatibility layer
+
+* Wed Mar 29 2006 Stu Tomlinson <stu@nosnilmot.com>
+- Source RPM uses tar.bz2 now to save space
+- Update BuildRequires for new intltool dependencies
+- Add a --with perlmakehack option to allow builds to succeed on RH9
+- Add a --with gadugadu to build (separate) gaim-gadugadu package
+
+* Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Add support for beta versions so the subsequent releases are seen as newer
+  by RPM
+- Split of sametime support to gaim-meanwhile
+- Use make DESTDIR=... instead of overloading prefix etc. when installing
+- Default build to include cyrus-sasl support in Jabber
+- Add --with dbus to build with DBUS support
+
+* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net>
+- Added obsoletes gaim-meanwhile
+
+* Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Add separate gaim-bonjour package if built with --with-howl
+- Add separate gaim-mono package if built with --with-mono
+- Exclude some unwanted perl files
+
+* Sat Aug 20 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Include libgaimperl.so
+- Include gaim.m4 in gaim-devel
+
+* Thu Apr 28 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Use perl_vendorlib & perl_archlib for better 64bit compat (Jeff Mahoney)
+- Clean up Requires, most should be auto-detected
+- Restore gtkspell-devel build requirement (and add --without gtkspell option)
+- Fix Tcl build requirements to work across more distros
+- Fix SILC build requirements to work across more distros
+
+* Mon Oct 11 2004 John Jolly <john.jolly@gmail.com>
+- Added if "%{_vendor}" == "suse" to handle GnuTLS libraries for SuSE
+
+* Sat Oct  2 2004 Stu Tomlinson <stu@nosnilmot.com>
+- If --with tcl or silc are not specified, make sure the plugins don't
+  exist to prevent RPM complaining about unpackaged files
+
+* Tue Jun 29 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Change Tcl to use --with tcl, the same as SILC, and build a gaim-tcl
+  package if specified.
+
+* Thu Jun 24 2004 Mark Doliner <thekingant@users.sourceforge.net>
+- Add --with silc rebuild option for compiling a separate gaim-silc
+  RPM containing the silc protocol plugin (Stu Tomlinson).
+
+* Wed Jun 23 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Moved gaim headers and a pkgconfig configuration file into the
+  gaim-devel RPM (Stu Tomlinson).
+
+* Thu Jan 15 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Removed the manual strip command, as it seems to be unwarranted if
+  the necessary programs are properly installed.  (For me, this was
+  elfutils.)
+
+* Sun Jul 20 2003 Bjoern Voigt <bjoern@cs.tu-berlin.de>
+- Added pkgconfig build dependency.
+- if "%{_vendor}" != "MandrakeSoft" now also works with rpm 3.x.
+- Added Gaim-specific directories to list of Gaim's files.
+
+* Wed Jul 16 2003 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Complete spec file rewrite to take advantage of "new" RPM features
+  and make things prettier.
+- Use system-supplied %%{_prefix}, %%{_datadir}, etc. rather than
+  attempt to define our own.
--- a/pidgin/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -4,6 +4,7 @@
 		getopt1.c \
 		Makefile.mingw \
 		pidgin.pc.in \
+		pidgin-uninstalled.pc.in \
 		win32/IdleTracker/Makefile.mingw \
 		win32/IdleTracker/idletrack.c \
 		win32/IdleTracker/idletrack.h \
--- a/pidgin/getopt.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/getopt.c	Mon Mar 26 01:55:33 2007 +0000
@@ -3,7 +3,7 @@
    "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
    before changing it!
 
-   Purple is the legal property of its developers, whose names are too numerous
+   Pidgin is the legal property of its developers, whose names are too numerous
    to list here.  Please refer to the COPYRIGHT file distributed with this
    source distribution.
 
--- a/pidgin/getopt1.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/getopt1.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Purple is the legal property of its developers, whose names are too numerous
+   Pidgin is the legal property of its developers, whose names are too numerous
    to list here.  Please refer to the COPYRIGHT file distributed with this
    source distribution.
 
--- a/pidgin/gtkaccount.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkaccount.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkaccount.c GTK+ Account Editor UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkaccount.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkaccount.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkaccount.h GTK+ Account Editor UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkblist.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkblist.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkblist.c GTK+ BuddyList API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -2279,6 +2279,7 @@
 	else
 		tmp = g_markup_escape_text(purple_chat_get_name((PurpleChat*)node), -1);
 	node_name = g_strdup_printf("<span size='x-large' weight='bold'>%s</span>", tmp);
+	g_free(tmp);
 
 	pango_layout_set_markup(td->layout, tooltip_text, -1);
 	pango_layout_set_wrap(td->layout, PANGO_WRAP_WORD);
--- a/pidgin/gtkblist.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkblist.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkblist.h GTK+ Buddy List API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkcellrendererexpander.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkcellrendererexpander.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkcellrendererexpander.c GTK+ Cell Renderer Expander
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkcellrendererprogress.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkcellrendererprogress.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkcellrendererprogress.c GTK+ Cell Renderer Progress
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkconn.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkconn.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkconn.c GTK+ Connection API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkconn.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkconn.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
  * @file gtkconn.h GTK+ Connection API
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkconv.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkconv.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkconv.c GTK+ Conversation API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -3488,7 +3488,7 @@
 	g_object_unref(pixbuf);
 
 	if (flags && purple_conv_chat_is_user_ignored(chat, name)) {
-		filename = g_build_filename(DATADIR, "pixmaps", "purple", "status", "default", "ignored.png", NULL);
+		filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "default", "ignored.png", NULL);
 		pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 		g_free(filename);
 		scale2 = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR);
@@ -7043,9 +7043,9 @@
  * @file gtkconvwin.c GTK+ Conversation Window API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkconv.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkconv.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkconv.h GTK+ Conversation API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkconvwin.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkconvwin.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkconvwin.h GTK+ Conversation Window API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdebug.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkdebug.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkdebug.c GTK+ Debug API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkdebug.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkdebug.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkdebug.h GTK+ Debug API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdialogs.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkdialogs.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkdialogs.c GTK+ Dialogs
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -162,7 +162,7 @@
 	{N_("Italian"),             "it", "Claudio Satriano", "satriano@na.infn.it"},
 	{N_("Japanese"),            "ja", "Takashi Aihana", "aihana@gnome.gr.jp"},
 	{N_("Georgian"),            "ka", "Ubuntu Georgian Translators", "alexander.didebulidze@stusta.mhn.de"},
-	{N_("Kannada"),             "kn", "Kannada Translation team" "translation@sampada.info"},
+	{N_("Kannada"),             "kn", "Kannada Translation team", "translation@sampada.info"},
 	{N_("Korean"),              "ko", "Kyung-uk Son", "vvs740@chol.com"},
 	{N_("Kurdish"),             "ku", "Erdal Ronahi", "erdal.ronahi@gmail.com"},
 	{N_("Kurdish"),             "ku", "Amed Ç. Jiyan", "amedcj@hotmail.com"},
@@ -332,7 +332,7 @@
 	/* Generate a logo with a version number */
 	logo = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 	gtk_widget_realize(logo);
-	filename = g_build_filename(DATADIR, "pixmaps", "purple", "logo.png", NULL);
+	filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "logo.png", NULL);
 	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 	g_free(filename);
 	pidgin_logo_versionize(&pixbuf, logo);
--- a/pidgin/gtkdialogs.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkdialogs.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
  * @defgroup gtkui GTK+ User Interface
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdnd-hints.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkdnd-hints.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkdnd-hints.c GTK+ Drag-and-Drop arrow hints
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -122,7 +122,7 @@
 	for (i = 0; hint_windows[i].filename != NULL; i++) {
 		gchar *fname;
 
-		fname = g_build_filename(DATADIR, "pixmaps", "purple",
+		fname = g_build_filename(DATADIR, "pixmaps", "pidgin",
 								 hint_windows[i].filename, NULL);
 
 		hint_windows[i].widget = dnd_hints_init_window(fname);
--- a/pidgin/gtkeventloop.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkeventloop.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtk_eventloop.c Purple Event Loop API (gtk implementation)
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkeventloop.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkeventloop.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkeventloop.h Pidgin GTK+ Event Loop Implementation
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkft.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkft.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkft.c GTK+ File Transfer UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkft.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkft.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkft.h GTK+ File Transfer UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkidle.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkidle.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkidle.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkidle.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkidle.h GTK+ Idle API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkimhtml.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkimhtml.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkimhtml.c GTK+ IMHtml
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkimhtmltoolbar.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkimhtmltoolbar.c GTK+ IMHtml Toolbar
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtklog.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtklog.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtklog.c GTK+ Log viewer
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtklog.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtklog.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtklog.h GTK+ Log viewer
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkmain.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkmain.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkmenutray.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkmenutray.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /*
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtknickcolors.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtknickcolors.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtknickcolors.h GTK+ Conversation API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
--- a/pidgin/gtknotify.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtknotify.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtknotify.c GTK+ Notification API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtknotify.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtknotify.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtknotify.h GTK+ Notification API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkplugin.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkplugin.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkplugin.c GTK+ Plugins support
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkplugin.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkplugin.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkplugin.h GTK+ Plugin API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkpluginpref.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkpluginpref.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkpluginpref.c GTK+ Plugin preferences
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkpluginpref.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkpluginpref.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkpluginpref.h GTK+ Plugin Preferences
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkpounce.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkpounce.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkpounce.c GTK+ Buddy Pounce API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkpounce.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkpounce.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkpounce.h GTK+ Buddy Pounce API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkprefs.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkprefs.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkprefs.c GTK+ Preferences
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkprefs.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkprefs.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkprefs.h GTK+ Preferences
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkprivacy.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkprivacy.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkprivacy.c GTK+ Privacy UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkprivacy.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkprivacy.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkprivacy.h GTK+ Privacy UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkrequest.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkrequest.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkrequest.c GTK+ Request API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkrequest.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkrequest.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkrequest.h GTK+ Request API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkroomlist.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkroomlist.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkroomlist.c GTK+ Room List UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkroomlist.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkroomlist.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkroomlist.h GTK+ Room List UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksavedstatuses.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksavedstatuses.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtksavedstatus.c GTK+ Saved Status Editor UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtksavedstatuses.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksavedstatuses.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtksavedstatuses.h GTK+ Saved Status Editor UI
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkscrollbook.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkscrollbook.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkscrollbook.c GTK+ Scrolling notebook widget 
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkscrollbook.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkscrollbook.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkscrollbook  GTK+ Scrolling notebook Widget
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksession.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksession.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtksession.c X Windows session management API
  * @ingroup gtkui
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtksession.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksession.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtksession.h X Windows session management API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksound.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksound.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtksound.c GTK+ Sound
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -529,7 +529,7 @@
 		char *filename = g_strdup(purple_prefs_get_path(file_pref));
 		if(!filename || !strlen(filename)) {
 			g_free(filename);
-			filename = g_build_filename(DATADIR, "sounds", "purple", sounds[event].def, NULL);
+			filename = g_build_filename(DATADIR, "sounds", "pidgin", sounds[event].def, NULL);
 		}
 
 		purple_sound_play_file(filename, NULL);
--- a/pidgin/gtksound.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksound.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtksound.h GTK+ Sound API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksourceiter.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtksourceiter.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- 
  *  gtksourceiter.c
  *
- *  Purple is the legal property of its developers, whose names are too numerous
+ *  Pidgin is the legal property of its developers, whose names are too numerous
  *  to list here.  Please refer to the COPYRIGHT file distributed with this
  *  source distribution.
  *
--- a/pidgin/gtkstatusbox.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkstatusbox.c GTK+ Status Selection Widget
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -298,23 +298,22 @@
 
 static void
 statusbox_got_url(PurpleUtilFetchUrlData *url_data, gpointer user_data,
-                const gchar *themedata, size_t len, const gchar *error_message, 
-		PidginStatusBox *status_box)
+                const gchar *themedata, size_t len, const gchar *error_message)
 {
-        FILE *f;
-        gchar *path;
+	FILE *f;
+	gchar *path;
 
-        if ((error_message != NULL) || (len == 0))
-                return;
+	if ((error_message != NULL) || (len == 0))
+		return;
 
-        f = purple_mkstemp(&path, TRUE);
-        fwrite(themedata, len, 1, f);
-        fclose(f);
+	f = purple_mkstemp(&path, TRUE);
+	fwrite(themedata, len, 1, f);
+	fclose(f);
 
-	icon_choose_cb(path, status_box);
+	icon_choose_cb(path, user_data);
 
-        g_unlink(path);
-        g_free(path);
+	g_unlink(path);
+	g_free(path);
 }
 
 
@@ -322,7 +321,7 @@
 statusbox_uri_handler(const char *proto, const char *cmd, GHashTable *params, void *data)
 {
 	const char *src;
-printf("%s %s\n", proto, cmd);
+
 	if (g_ascii_strcasecmp(proto, "aim"))
 		return FALSE;
 
--- a/pidgin/gtkstatusbox.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkstatusbox.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkstatusbox.c GTK+ Status Selection Widget
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkthemes.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkthemes.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
- * Themes for Purple
+ * Themes for Pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -264,7 +264,7 @@
 	int l;
 
 	char* probedirs[3];
-	probedirs[0] = g_build_filename(DATADIR, "pixmaps", "purple", "smileys", NULL);
+	probedirs[0] = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", NULL);
 	probedirs[1] = g_build_filename(purple_user_dir(), "smileys", NULL);
 	probedirs[2] = 0;
 	for (l=0; probedirs[l]; l++) {
--- a/pidgin/gtkthemes.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkthemes.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkthemes.h GTK+ Smiley Theme API
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkutils.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkutils.c	Mon Mar 26 01:55:33 2007 +0000
@@ -2,9 +2,9 @@
  * @file gtkutils.c GTK+ utility functions
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkutils.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkutils.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkutils.h GTK+ utility functions
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkwhiteboard.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkwhiteboard.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/gtkwhiteboard.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/gtkwhiteboard.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /**
  * @file gtkwhiteboard.h The PidginWhiteboard frontend object
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pidgin-uninstalled.pc.in	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+Name: Pidgin
+Description: Pidgin is a GTK2-based instant messenger application.
+Version: @VERSION@
+Requires: gtk+-2.0 purple
+Cflags: -I${pc_top_builddir}/${pcfiledir}
--- a/pidgin/pidgin.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pidgin.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file pidgin.h UI definitions and includes
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/pidgin.pc.in	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pidgin.pc.in	Mon Mar 26 01:55:33 2007 +0000
@@ -4,10 +4,10 @@
 includedir=@includedir@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
- 
+
 Name: Pidgin
 Description: Pidgin is a GTK2-based instant messenger application.
 Version: @VERSION@
-Requires: glib-2.0 gtk+-2.0 purple
+Requires: gtk+-2.0 purple
 Cflags: -I${includedir}/pidgin
 
--- a/pidgin/pidginstock.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pidginstock.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,10 +1,10 @@
 /**
- * @file purplestock.c GTK+ Stock resources
+ * @file pidginstock.c GTK+ Stock resources
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
@@ -81,7 +81,7 @@
 	{ PIDGIN_STOCK_OPEN_MAIL,       NULL,      GTK_STOCK_JUMP_TO          },
 	{ PIDGIN_STOCK_SIGN_ON,         NULL,      GTK_STOCK_EXECUTE          },
 	{ PIDGIN_STOCK_SIGN_OFF,        NULL,      GTK_STOCK_CLOSE            },
-	{ PIDGIN_STOCK_TYPED,           "purple",    "typed.png"                },
+	{ PIDGIN_STOCK_TYPED,           "pidgin",  "typed.png"                },
 	{ PIDGIN_STOCK_UPLOAD,          NULL,      GTK_STOCK_GO_UP            },
 };
 
@@ -183,11 +183,11 @@
 	if (base == NULL)
 		return NULL;
 
-	if (!strcmp(dir, "purple"))
-		filename = g_build_filename(DATADIR, "pixmaps", "purple", base, NULL);
+	if (!strcmp(dir, "pidgin"))
+		filename = g_build_filename(DATADIR, "pixmaps", "pidgin", base, NULL);
 	else
 	{
-		filename = g_build_filename(DATADIR, "pixmaps", "purple", dir,
+		filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir,
 									base, NULL);
 	}
 
--- a/pidgin/pidginstock.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pidginstock.h	Mon Mar 26 01:55:33 2007 +0000
@@ -2,7 +2,7 @@
  * @file gtkstock.h GTK+ Stock resources
  * @ingroup gtkui
  *
- * purple
+ * pidgin
  *
  * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/pixmaps/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -9,8 +9,8 @@
 		connect.png			\
 		edit.png			\
 		pidgin.png			\
-		gaim.svg			\
-		info.png 			\
+		pidgin.svg			\
+		info.png			\
 		insert-image.png		\
 		insert-image-small.png		\
 		insert-link-small.png		\
@@ -23,7 +23,7 @@
 		pause.png			\
 		phone.png		        \
 		send-im.png			\
-		status-online.png  		\
+		status-online.png		\
 		status-offline.png		\
 		status-away.png			\
 		status-invisible.png		\
@@ -46,20 +46,23 @@
 		text_smaller.png		\
 		typed.png			\
 		typing.png			\
+		window-icon.png			\
 		Makefile.mingw			\
-		gaim.ico			
+		pidgin.ico
 
 
-gaimbuttonpixdir = $(datadir)/pixmaps/gaim/buttons
-gaimbuttonpix_DATA = about_menu.png accounts.png change-bgcolor-small.png change-fgcolor-small.png edit.png info.png insert-image-small.png insert-link-small.png insert-smiley-small.png pause.png text_bigger.png text_normal.png text_smaller.png send-im.png
+pidginbuttonpixdir = $(datadir)/pixmaps/pidgin/buttons
+pidginbuttonpix_DATA = about_menu.png accounts.png change-bgcolor-small.png change-fgcolor-small.png edit.png info.png insert-image-small.png insert-link-small.png insert-smiley-small.png pause.png text_bigger.png text_normal.png text_smaller.png send-im.png
 
-gaimiconpixdir = $(datadir)/pixmaps/pidgin/icons
-gaimiconpix_DATA = window-icon.png
+pidginiconpixdir = $(datadir)/pixmaps/pidgin/icons
+pidginiconpix_DATA = window-icon.png
 
-gaimdistpixdir = $(datadir)/pixmaps/gaim
-gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png insert-image.png
+pidgindistpixdir = $(datadir)/pixmaps/pidgin
+pidgindistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png insert-image.png
 
 
 distpixmapdir = $(datadir)/pixmaps
-distpixmap_DATA = pidgin.png gaim.svg
+distpixmap_DATA = pidgin.png pidgin.svg
 
+
+
--- a/pidgin/pixmaps/buddy_icons/qq/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/buddy_icons/qq/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -100,6 +100,6 @@
 	qq_99.png \
 	qq_100.png
 
-qqbuddyiconspixdir = $(datadir)/pixmaps/gaim/buddy_icons/qq
+qqbuddyiconspixdir = $(datadir)/pixmaps/purple/buddy_icons/qq
 
 qqbuddyiconspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/emblems/16/scalable/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/emblems/16/scalable/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,9 +1,8 @@
-EXTRA_DIST = 	aol-client.svg \
+EXTRA_DIST =	aol-client.svg \
 		blocked.svg \
 		bot.svg \
 		external.svg \
 		female.svg \
-		founder.svg \
 		free-for-chat.svg \
 		game.svg \
 		male.svg \
--- a/pidgin/pixmaps/emotes/default/22/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -163,7 +163,7 @@
 		yawn.png \
 		yin-yang.png
 
-pidginsmileypixdir = $(datadir)/pixmaps/gaim/smileys/default
+pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/default
 pidginsmileypix_DATA = \
         $(SMILEYS) \
         theme
--- a/pidgin/pixmaps/emotes/default/22/theme	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/theme	Mon Mar 26 01:55:33 2007 +0000
@@ -234,7 +234,7 @@
 cowboy.png		<):)
 dance.png		\\:D/ \\:d/
 rose.png		@};-
-don't-know.png		:-L :-l
+dont-know.png		:-L :-l
 ghost.png		8-X 8-x
 hug-left.png		>:D< >:d<
 hypnotized.png		@-)
--- a/pidgin/pixmaps/emotes/none/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/emotes/none/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
-gaimsmileypixdir = $(datadir)/pixmaps/gaim/smileys/none
-gaimsmileypix_DATA = theme 
+pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/none
+pidginsmileypix_DATA = theme
 
-EXTRA_DIST = $(gaimsmileypix_DATA) \
+EXTRA_DIST = $(pidginsmileypix_DATA) \
 	Makefile.mingw
Binary file pidgin/pixmaps/gaim.ico has changed
Binary file pidgin/pixmaps/gaim.png has changed
--- a/pidgin/pixmaps/gaim.svg	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="38.400002pt"
-   height="38.400002pt"
-   id="svg1494"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   sodipodi:docbase="/home/dude/code-gaim-head/pixmaps"
-   sodipodi:docname="gaim.svg"
-   inkscape:export-filename="/opt/kde/share/apps/kxdocker/themes/icons/gaim.png"
-   inkscape:export-xdpi="256.16339"
-   inkscape:export-ydpi="256.16339"
-   version="1.0">
-  <defs
-     id="defs1496">
-    <linearGradient
-       id="linearGradient2102">
-      <stop
-         style="stop-color:#f8f0b6;stop-opacity:1;"
-         offset="0"
-         id="stop2104" />
-      <stop
-         id="stop2110"
-         offset="0.5"
-         style="stop-color:#e5bb13;stop-opacity:1;" />
-      <stop
-         style="stop-color:#bf5600;stop-opacity:1;"
-         offset="1"
-         id="stop2106" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2094">
-      <stop
-         style="stop-color:#de8b02;stop-opacity:1;"
-         offset="0"
-         id="stop2096" />
-      <stop
-         style="stop-color:#de8b02;stop-opacity:0;"
-         offset="1"
-         id="stop2098" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2102"
-       id="radialGradient2108"
-       cx="-9.9956121"
-       cy="1019.0612"
-       fx="-9.9956121"
-       fy="1019.0612"
-       r="8.5848799"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.199386,1.136882,-0.809907,-0.854435,803.3602,1901.146)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2102"
-       id="linearGradient4718"
-       x1="14.143999"
-       y1="1024.514"
-       x2="29.989687"
-       y2="1039.6663"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-0.126267,-0.631345)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2102"
-       id="radialGradient1334"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.199386,1.136882,-0.809907,-0.854435,803.3602,1901.146)"
-       cx="-9.9956121"
-       cy="1019.0612"
-       fx="-9.9956121"
-       fy="1019.0612"
-       r="8.5848799" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2102"
-       id="linearGradient1338"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,1.03334,-0.126267,-1037.821)"
-       x1="14.143999"
-       y1="1024.514"
-       x2="29.989687"
-       y2="1039.6663" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2102"
-       id="linearGradient3107"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,1.03334,-0.126267,-1037.821)"
-       x1="14.143999"
-       y1="1024.514"
-       x2="29.989687"
-       y2="1039.6663" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2102"
-       id="radialGradient3109"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.199386,1.136882,-0.809907,-0.854435,803.3602,1901.146)"
-       cx="-9.9956121"
-       cy="1019.0612"
-       fx="-9.9956121"
-       fy="1019.0612"
-       r="8.5848799" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="26.602156"
-     inkscape:cy="30.958631"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     gridempspacing="20"
-     inkscape:grid-bbox="false"
-     inkscape:showpageshadow="false"
-     inkscape:window-width="750"
-     inkscape:window-height="542"
-     inkscape:window-x="382"
-     inkscape:window-y="54" />
-  <metadata
-     id="metadata1499">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g3988">
-      <path
-         id="path4728"
-         d="M 25.009137,4.2393924 C 19.333416,4.2394904 14.702823,8.8679822 14.702823,14.541064 C 14.702823,17.243438 15.81669,19.665705 17.52479,21.500873 C 17.329683,21.473305 17.235059,21.469478 17.034013,21.439555 C 16.523458,21.370778 16.065243,21.688953 15.899092,21.8994 C 15.73294,22.110144 15.671117,22.278306 15.62303,22.420665 C 15.526854,22.705286 15.479403,22.958412 15.438988,23.279138 C 15.358159,23.920589 15.329513,24.778472 15.316294,25.793237 C 15.289857,27.822764 15.393381,30.518957 15.62303,33.335531 C 15.852678,36.152107 16.203578,39.0716 16.727278,41.521631 C 17.250977,43.971958 17.775769,45.916815 19.058468,47.101802 C 19.281272,47.311072 19.581153,47.419878 19.886654,47.408301 C 20.192154,47.396822 20.477799,47.265942 20.684166,47.040384 C 23.06267,44.419541 24.879957,42.814736 26.297427,41.950966 C 27.714896,41.087097 28.627332,40.950036 29.456803,41.123103 C 31.115744,41.469241 32.957983,43.674779 36.051617,46.028661 C 36.476845,46.371069 37.075037,46.379507 37.493274,46.028661 C 37.91151,45.677816 38.032943,45.065701 37.769336,44.587606 C 36.43377,42.035341 35.339621,37.876802 34.886022,34.500601 C 34.659222,32.812501 34.584551,31.284223 34.671307,30.330877 C 34.695959,30.059992 34.724591,29.996711 34.763327,29.840321 C 35.069106,29.92558 35.339187,30.002303 35.836902,30.177628 C 36.574995,30.437425 37.425896,30.750498 38.260113,31.0361 C 39.094329,31.321604 39.886506,31.556777 40.591303,31.679906 C 40.943701,31.741421 41.276753,31.815691 41.695551,31.741225 C 41.90495,31.704041 42.174465,31.611326 42.431716,31.404017 C 42.539588,31.316894 42.565086,31.165214 42.646431,31.0361 L 42.677104,31.066711 C 42.70801,31.028252 42.682559,30.960064 42.707778,30.913461 C 42.78144,30.768453 42.904108,30.659943 42.922493,30.514835 L 42.769125,30.484126 C 42.807857,30.244637 42.923381,30.005344 42.861146,29.840321 C 42.742477,29.525581 42.606772,29.39833 42.493063,29.288446 C 42.265645,29.068579 42.066122,28.963306 41.818245,28.79789 C 41.322492,28.46706 40.657411,28.027816 39.855137,27.418154 C 38.250589,26.19922 36.126138,24.249556 34.18053,20.948999 C 33.97327,20.594523 33.570312,20.457952 33.168303,20.458443 C 34.401302,18.763376 35.284778,16.795659 35.284778,14.541064 C 35.284778,8.8679822 30.68486,4.2394904 25.009137,4.2393924 z "
-         style="fill:#000000;fill-opacity:0.3137255;stroke:none;stroke-width:0.91975927;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <g
-         id="g3086">
-        <path
-           style="fill:url(#linearGradient3107);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.71700001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           d="M 30.94516,19.174802 C 27.976637,20.120205 25.443829,21.972053 14.316353,20.259499 C 13.294668,20.117208 14.007054,42.055016 17.330403,45.2283 C 27.180184,34.007881 28.517649,39.260245 34.559917,44.013092 C 31.608553,38.182368 30.17769,26.236441 32.19516,26.555743 C 33.792426,26.808498 39.55591,29.603992 39.69516,28.468145 C 40.10545,27.940935 35.082679,26.431019 30.94516,19.174802 z "
-           id="path2112"
-           sodipodi:nodetypes="ccccscc" />
-        <path
-           sodipodi:type="arc"
-           style="fill:url(#radialGradient3109);fill-opacity:1;stroke:#000000;stroke-width:0.64874142;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path1364"
-           sodipodi:cx="-6.875"
-           sodipodi:cy="1021.1964"
-           sodipodi:rx="8.125"
-           sodipodi:ry="8.125"
-           d="M 1.25 1021.1964 A 8.125 8.125 0 1 1  -15,1021.1964 A 8.125 8.125 0 1 1  1.25 1021.1964 z"
-           transform="matrix(1.087241,0,0,1.12349,30.06407,-1135.503)" />
-      </g>
-    </g>
-  </g>
-</svg>
Binary file pidgin/pixmaps/pidgin.ico has changed
Binary file pidgin/pixmaps/pidgin.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/pidgin.svg	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="38.400002pt"
+   height="38.400002pt"
+   id="svg1494"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/home/dude/code-gaim-head/pixmaps"
+   sodipodi:docname="gaim.svg"
+   inkscape:export-filename="/opt/kde/share/apps/kxdocker/themes/icons/gaim.png"
+   inkscape:export-xdpi="256.16339"
+   inkscape:export-ydpi="256.16339"
+   version="1.0">
+  <defs
+     id="defs1496">
+    <linearGradient
+       id="linearGradient2102">
+      <stop
+         style="stop-color:#f8f0b6;stop-opacity:1;"
+         offset="0"
+         id="stop2104" />
+      <stop
+         id="stop2110"
+         offset="0.5"
+         style="stop-color:#e5bb13;stop-opacity:1;" />
+      <stop
+         style="stop-color:#bf5600;stop-opacity:1;"
+         offset="1"
+         id="stop2106" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2094">
+      <stop
+         style="stop-color:#de8b02;stop-opacity:1;"
+         offset="0"
+         id="stop2096" />
+      <stop
+         style="stop-color:#de8b02;stop-opacity:0;"
+         offset="1"
+         id="stop2098" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2102"
+       id="radialGradient2108"
+       cx="-9.9956121"
+       cy="1019.0612"
+       fx="-9.9956121"
+       fy="1019.0612"
+       r="8.5848799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.199386,1.136882,-0.809907,-0.854435,803.3602,1901.146)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2102"
+       id="linearGradient4718"
+       x1="14.143999"
+       y1="1024.514"
+       x2="29.989687"
+       y2="1039.6663"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-0.126267,-0.631345)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2102"
+       id="radialGradient1334"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.199386,1.136882,-0.809907,-0.854435,803.3602,1901.146)"
+       cx="-9.9956121"
+       cy="1019.0612"
+       fx="-9.9956121"
+       fy="1019.0612"
+       r="8.5848799" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2102"
+       id="linearGradient1338"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.03334,-0.126267,-1037.821)"
+       x1="14.143999"
+       y1="1024.514"
+       x2="29.989687"
+       y2="1039.6663" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2102"
+       id="linearGradient3107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.03334,-0.126267,-1037.821)"
+       x1="14.143999"
+       y1="1024.514"
+       x2="29.989687"
+       y2="1039.6663" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2102"
+       id="radialGradient3109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.199386,1.136882,-0.809907,-0.854435,803.3602,1901.146)"
+       cx="-9.9956121"
+       cy="1019.0612"
+       fx="-9.9956121"
+       fy="1019.0612"
+       r="8.5848799" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="26.602156"
+     inkscape:cy="30.958631"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     gridempspacing="20"
+     inkscape:grid-bbox="false"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="750"
+     inkscape:window-height="542"
+     inkscape:window-x="382"
+     inkscape:window-y="54" />
+  <metadata
+     id="metadata1499">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g3988">
+      <path
+         id="path4728"
+         d="M 25.009137,4.2393924 C 19.333416,4.2394904 14.702823,8.8679822 14.702823,14.541064 C 14.702823,17.243438 15.81669,19.665705 17.52479,21.500873 C 17.329683,21.473305 17.235059,21.469478 17.034013,21.439555 C 16.523458,21.370778 16.065243,21.688953 15.899092,21.8994 C 15.73294,22.110144 15.671117,22.278306 15.62303,22.420665 C 15.526854,22.705286 15.479403,22.958412 15.438988,23.279138 C 15.358159,23.920589 15.329513,24.778472 15.316294,25.793237 C 15.289857,27.822764 15.393381,30.518957 15.62303,33.335531 C 15.852678,36.152107 16.203578,39.0716 16.727278,41.521631 C 17.250977,43.971958 17.775769,45.916815 19.058468,47.101802 C 19.281272,47.311072 19.581153,47.419878 19.886654,47.408301 C 20.192154,47.396822 20.477799,47.265942 20.684166,47.040384 C 23.06267,44.419541 24.879957,42.814736 26.297427,41.950966 C 27.714896,41.087097 28.627332,40.950036 29.456803,41.123103 C 31.115744,41.469241 32.957983,43.674779 36.051617,46.028661 C 36.476845,46.371069 37.075037,46.379507 37.493274,46.028661 C 37.91151,45.677816 38.032943,45.065701 37.769336,44.587606 C 36.43377,42.035341 35.339621,37.876802 34.886022,34.500601 C 34.659222,32.812501 34.584551,31.284223 34.671307,30.330877 C 34.695959,30.059992 34.724591,29.996711 34.763327,29.840321 C 35.069106,29.92558 35.339187,30.002303 35.836902,30.177628 C 36.574995,30.437425 37.425896,30.750498 38.260113,31.0361 C 39.094329,31.321604 39.886506,31.556777 40.591303,31.679906 C 40.943701,31.741421 41.276753,31.815691 41.695551,31.741225 C 41.90495,31.704041 42.174465,31.611326 42.431716,31.404017 C 42.539588,31.316894 42.565086,31.165214 42.646431,31.0361 L 42.677104,31.066711 C 42.70801,31.028252 42.682559,30.960064 42.707778,30.913461 C 42.78144,30.768453 42.904108,30.659943 42.922493,30.514835 L 42.769125,30.484126 C 42.807857,30.244637 42.923381,30.005344 42.861146,29.840321 C 42.742477,29.525581 42.606772,29.39833 42.493063,29.288446 C 42.265645,29.068579 42.066122,28.963306 41.818245,28.79789 C 41.322492,28.46706 40.657411,28.027816 39.855137,27.418154 C 38.250589,26.19922 36.126138,24.249556 34.18053,20.948999 C 33.97327,20.594523 33.570312,20.457952 33.168303,20.458443 C 34.401302,18.763376 35.284778,16.795659 35.284778,14.541064 C 35.284778,8.8679822 30.68486,4.2394904 25.009137,4.2393924 z "
+         style="fill:#000000;fill-opacity:0.3137255;stroke:none;stroke-width:0.91975927;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <g
+         id="g3086">
+        <path
+           style="fill:url(#linearGradient3107);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.71700001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 30.94516,19.174802 C 27.976637,20.120205 25.443829,21.972053 14.316353,20.259499 C 13.294668,20.117208 14.007054,42.055016 17.330403,45.2283 C 27.180184,34.007881 28.517649,39.260245 34.559917,44.013092 C 31.608553,38.182368 30.17769,26.236441 32.19516,26.555743 C 33.792426,26.808498 39.55591,29.603992 39.69516,28.468145 C 40.10545,27.940935 35.082679,26.431019 30.94516,19.174802 z "
+           id="path2112"
+           sodipodi:nodetypes="ccccscc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient3109);fill-opacity:1;stroke:#000000;stroke-width:0.64874142;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path1364"
+           sodipodi:cx="-6.875"
+           sodipodi:cy="1021.1964"
+           sodipodi:rx="8.125"
+           sodipodi:ry="8.125"
+           d="M 1.25 1021.1964 A 8.125 8.125 0 1 1  -15,1021.1964 A 8.125 8.125 0 1 1  1.25 1021.1964 z"
+           transform="matrix(1.087241,0,0,1.12349,30.06407,-1135.503)" />
+      </g>
+    </g>
+  </g>
+</svg>
Binary file pidgin/pixmaps/status/16/extended-away.png has changed
--- a/pidgin/pixmaps/status/16/scalable/extended-away.svg	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/status/16/scalable/extended-away.svg	Mon Mar 26 01:55:33 2007 +0000
@@ -7,64 +7,43 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg1307"
+   width="16px"
+   height="16px"
+   id="svg4245"
    sodipodi:version="0.32"
-   inkscape:version="0.43"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/status/16/scalable"
-   sodipodi:docname="extended-away16.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/16/extended-away16.png"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/home/hbons/GUI/Tango/Gaim Refresh/status/16/scalable"
+   sodipodi:docname="extended-away.svg"
+   inkscape:export-filename="/home/hbons/GUI/Tango/Gaim Refresh/status/16/extended-away.png"
    inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   version="1.0">
+   inkscape:export-ydpi="90">
   <defs
-     id="defs1309">
+     id="defs4247">
     <linearGradient
        inkscape:collect="always"
-       id="linearGradient2442">
+       id="linearGradient2260">
       <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
+         style="stop-color:#555753;stop-opacity:1;"
          offset="0"
-         id="stop2444" />
+         id="stop2262" />
       <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
+         style="stop-color:#555753;stop-opacity:0;"
          offset="1"
-         id="stop2446" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2442"
-       id="linearGradient2448"
-       x1="10.900227"
-       y1="1.087356"
-       x2="10.900227"
-       y2="13.256169"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3816">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3818" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3820" />
+         id="stop2264" />
     </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3816"
-       id="radialGradient3822"
-       cx="31.112698"
-       cy="19.008621"
-       fx="31.112698"
-       fy="19.008621"
-       r="8.6620579"
-       gradientUnits="userSpaceOnUse" />
+       xlink:href="#linearGradient2260"
+       id="radialGradient5300"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.626667,0,6.566431)"
+       cx="11.756953"
+       cy="17.588654"
+       fx="11.756953"
+       fy="17.588654"
+       r="6.3436799" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -73,22 +52,19 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="16.972694"
-     inkscape:cx="15.724166"
-     inkscape:cy="-0.97602541"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8"
+     inkscape:cy="9.6246122"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
      inkscape:document-units="px"
-     fill="#2e3436"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
+     inkscape:window-width="872"
+     inkscape:window-height="626"
+     inkscape:window-x="129"
+     inkscape:window-y="124" />
   <metadata
-     id="metadata1312">
+     id="metadata4250">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -103,51 +79,74 @@
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
     <path
-       style="fill:#edd400;fill-opacity:1;fill-rule:evenodd;stroke:#c17d11;stroke-width:1.00000072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 1.5079961,1.5000003 C 5.0370281,1.5000003 10.399967,1.5212401 14.500178,1.5212401 C 14.500178,3.8385333 14.225973,13.758289 15.175749,14.479828 C 11.677997,14.563183 1.5234897,14.507938 1.5234897,14.507938 C 1.5234897,10.371395 1.5079961,6.6344739 1.5079961,1.5000003 z "
-       id="path1416"
-       sodipodi:nodetypes="ccccc" />
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient5300);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.81530744;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5131"
+       sodipodi:cx="11.756953"
+       sodipodi:cy="17.588654"
+       sodipodi:rx="6.3436799"
+       sodipodi:ry="3.9753728"
+       d="M 18.100633 17.588654 A 6.3436799 3.9753728 0 1 1  5.4132733,17.588654 A 6.3436799 3.9753728 0 1 1  18.100633 17.588654 z"
+       transform="matrix(-1.024642,0,0,0.754646,19.54667,-0.273206)" />
     <path
-       transform="matrix(1.005455,0,0,1.005455,-4.232987e-2,-4.232986e-2)"
-       style="opacity:0.7;fill:url(#linearGradient2448);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99457532;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 13.46875,2.53125 C 9.5070111,2.5350904 7.0635138,2.5586596 2.53125,2.5625 C 2.5389468,3.7783222 2.5860533,9.9621186 2.59375,13.46875 C 4.1909687,13.464896 7.7856328,13.441354 13.791041,13.4375 C 13.146458,9.8976478 13.46875,5.4097022 13.46875,2.53125 z "
-       id="path1418"
-       sodipodi:nodetypes="ccccc" />
+       transform="matrix(-1.708738,0,0,1.647118,-1.878642,-0.867731)"
+       style="fill:#fce94f;fill-opacity:1;stroke:#ce5c00;stroke-width:0.59607363;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -9,3.2233667 L -7.134588,1.4374993 L -2.89508,1.4374993 C -2.3096744,1.4374993 -1.9824877,1.8329068 -1.9824877,2.3263196 L -1.9824877,9.3300741 L -9,9.3300741 L -9,3.2233667 z "
+       id="rect5097"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       transform="matrix(-1.398059,0,0,1.342047,-8.253506e-2,0.574281)"
+       style="opacity:0.5625;fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:0.7300511;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -8.9656284,3.1521999 L -7.1361003,1.4267646 L -1.8535964,1.4374993 L -1.8535964,9.6313422 L -9,9.6313422 L -8.9656284,3.1521999 z "
+       id="rect5099"
+       sodipodi:nodetypes="cccccc" />
     <rect
-       style="opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2304"
-       width="8"
-       height="1"
-       x="4"
-       y="7"
-       rx="0.5"
-       ry="0.5" />
+       style="opacity:0.4;fill:#ce5c00;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5988"
+       width="2.9375007"
+       height="3.6875"
+       x="23"
+       y="2.5624993"
+       transform="matrix(-0.340425,0,0,0.813559,17.82977,0.918776)" />
     <rect
-       style="opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2306"
-       width="6"
-       height="1"
-       x="4"
-       y="9"
-       rx="0.5"
-       ry="0.5" />
+       style="opacity:0.4;fill:#ce5c00;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5990"
+       width="2.9375007"
+       height="3.6875"
+       x="23"
+       y="2.5624993"
+       transform="matrix(-6.824498e-8,0.340421,0.542373,-4.516053e-7,8.610169,-2.826144)" />
+    <rect
+       style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7300"
+       width="6.4375"
+       height="1.9999993"
+       x="1"
+       y="0"
+       transform="matrix(0.932039,0,0,0.5,3.067962,8.999992)" />
     <rect
-       style="opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2308"
-       width="4"
-       height="1"
-       x="4"
-       y="5"
-       rx="0.5"
-       ry="0.5" />
+       style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7302"
+       width="6.4375"
+       height="1.9999993"
+       x="1"
+       y="0"
+       transform="matrix(0.776699,0,0,0.5,3.223302,6.999992)" />
     <rect
-       style="opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2311"
-       width="4"
-       height="1"
-       x="4"
-       y="11"
-       rx="0.5"
-       ry="0.5" />
+       style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7304"
+       width="6.4375"
+       height="1.9999993"
+       x="1"
+       y="0"
+       transform="matrix(0.621359,0,0,0.5,3.378642,4.999992)" />
+    <rect
+       style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4265"
+       width="6.4375"
+       height="1.9999993"
+       x="1"
+       y="0"
+       transform="matrix(0.776699,0,0,0.5,3.223302,10.99999)" />
   </g>
 </svg>
--- a/pidgin/pixmaps/status/default/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/status/default/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -42,6 +42,6 @@
 	yahoo.png \
 	zephyr.png
 
-gaimstatuspixdir = $(datadir)/pixmaps/gaim/status/default
+pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/default
 
-gaimstatuspix_DATA = $(EXTRA_DIST)
+pidginstatuspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/tray/16/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/tray/16/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -6,13 +6,7 @@
 		tray-offline.png \
 		tray-online.png
 
-EXTRA_DIST = 	tray-away.ico \
-		tray-busy.ico \
-		tray-connecting.ico \
-		tray-extended-away.ico \
-		tray-message.ico \
-		tray-offline.ico \
-		tray-online.ico 
+EXTRA_DIST = $(TRAY_ICONS)
 
 pidgintraypixdir = $(datadir)/pixmaps/pidgin/tray/16
 pidgintraypix_DATA = $(TRAY_ICONS)
--- a/pidgin/pixmaps/tray/22/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/pixmaps/tray/22/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -6,13 +6,14 @@
 		tray-offline.png \
 		tray-online.png
 
-EXTRA_DIST = 	tray-away.ico \
+EXTRA_DIST =	$(TRAY_ICONS) \
+		tray-away.ico \
 		tray-busy.ico \
-		tray-connecting.ico \
 		tray-extended-away.ico \
 		tray-message.ico \
 		tray-offline.ico \
-		tray-online.ico 
+		tray-online.ico
+#		tray-connecting.ico
 
 pidgintraypixdir = $(datadir)/pixmaps/pidgin/tray/22
 pidgintraypix_DATA = $(TRAY_ICONS)
--- a/pidgin/plugins/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -28,11 +28,11 @@
 
 convcolors_la_LDFLAGS       = -module -avoid-version
 extplacement_la_LDFLAGS     = -module -avoid-version
-gaimrc_la_LDFLAGS           = -module -avoid-version
 history_la_LDFLAGS          = -module -avoid-version
 iconaway_la_LDFLAGS         = -module -avoid-version
 markerline_la_LDFLAGS       = -module -avoid-version
 notify_la_LDFLAGS           = -module -avoid-version
+pidginrc_la_LDFLAGS           = -module -avoid-version
 relnot_la_LDFLAGS           = -module -avoid-version
 spellchk_la_LDFLAGS         = -module -avoid-version
 timestamp_la_LDFLAGS        = -module -avoid-version
@@ -44,11 +44,11 @@
 plugin_LTLIBRARIES = \
 	convcolors.la       \
 	extplacement.la     \
-	gaimrc.la           \
 	history.la          \
 	iconaway.la         \
 	markerline.la       \
 	notify.la           \
+	pidginrc.la           \
 	relnot.la           \
 	spellchk.la         \
 	timestamp.la        \
@@ -57,11 +57,11 @@
 
 convcolors_la_SOURCES       = convcolors.c
 extplacement_la_SOURCES     = extplacement.c
-gaimrc_la_SOURCES           = gaimrc.c
 history_la_SOURCES          = history.c
 iconaway_la_SOURCES         = iconaway.c
 markerline_la_SOURCES       = markerline.c
 notify_la_SOURCES           = notify.c
+pidginrc_la_SOURCES         = pidginrc.c
 relnot_la_SOURCES           = relnot.c
 spellchk_la_SOURCES         = spellchk.c
 timestamp_la_SOURCES        = timestamp.c
@@ -70,11 +70,11 @@
 
 convcolors_la_LIBADD        = $(GTK_LIBS)
 extplacement_la_LIBADD      = $(GTK_LIBS)
-gaimrc_la_LIBADD            = $(GTK_LIBS)
 history_la_LIBADD           = $(GTK_LIBS)
 iconaway_la_LIBADD          = $(GTK_LIBS)
 markerline_la_LIBADD        = $(GTK_LIBS)
 notify_la_LIBADD            = $(GTK_LIBS)
+pidginrc_la_LIBADD          = $(GTK_LIBS)
 relnot_la_LIBADD            = $(GLIB_LIBS)
 spellchk_la_LIBADD          = $(GTK_LIBS)
 timestamp_la_LIBADD         = $(GTK_LIBS)
--- a/pidgin/plugins/crazychat/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/crazychat/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,8 +1,8 @@
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/pidgin
 
 if ENABLE_DEBUG
 DEBUG_CPPFLAGS = -g -pg
-# DEBUG_CPPFLAGS = -D_DEBUG_ -g -pg 
+# DEBUG_CPPFLAGS = -D_DEBUG_ -g -pg
 DEBUG_LFLAGS = -pg
 else
 DEBUG_CPPFLAGS = -O2
@@ -18,7 +18,7 @@
 endif
 
 crazychat_la_LDFLAGS = -module -avoid-version $(GTK_LIBS) $(DEBUG_LFLAGS)
-crazychat_la_SOURCES = cc_gaim_plugin.c cc_gtk_gl.c cc_gtk_gl.h \
+crazychat_la_SOURCES = cc_pidgin_plugin.c cc_gtk_gl.c cc_gtk_gl.h \
 	cc_interface.h crazychat.c crazychat.h util.h\
 	cc_network.c cc_network.h filter.c filter.h\
 	cc_output.c face.c face.h doggy.c doggy.h glm.h glm.c sharky.h sharky.c models.h models.c
@@ -31,9 +31,9 @@
 #$(GTKGLEXT_CFLAGS) \
 #-I$(top_srcdir)/include
 
-AM_CPPFLAGS = -DGAIM_PLUGINS \
-	-I$(top_srcdir)/libgaim \
-	-I$(top_srcdir)/gtk \
+AM_CPPFLAGS = -DPURPLE_PLUGINS \
+	-I$(top_srcdir)/libpurple \
+	-I$(top_srcdir)/pidgin \
 	$(GTK_CFLAGS) \
 	$(GTKGLEXT_CFLAGS) \
 	$(DEBUG_CPPFLAGS) \
--- a/pidgin/plugins/crazychat/cc_gaim_plugin.c	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,485 +0,0 @@
-#include <stdio.h>
-#include <assert.h>
-
-#include "internal.h"
-#include "plugin.h"
-#include "gtkplugin.h"
-#include "gtkblist.h"
-#include "gtkutils.h"
-#include "connection.h"
-#include "conversation.h"
-#include "network.h"
-
-#include <gtk/gtkgl.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
-
-#include "crazychat.h"
-#include "cc_network.h"
-#include "cc_interface.h"
-#include "cc_gtk_gl.h"
-#include "util.h"
-
-/* --- begin type and global variable definitions --- */
-
-static struct crazychat cc_info;
-
-/* --- begin function declarations --- */
-
-/**
- * Called by purple plugin to start CrazyChat
- * @param cc	the crazychat struct
- */
-static void cc_init(struct crazychat *cc);
-
-/**
- * Called by purple plugin to destroy CrazyChat
- * @param cc	the crazychat struct
- */
-static void cc_destroy(struct crazychat *cc);
-
-
-/**
- * Buddy menu drawing callback.  Adds a CrazyChat menuitem.
- * @param menu	the buddy menu widget
- * @param b	the buddy whose menu this is
- */
-static gboolean cc_buddy_menu(GtkWidget *menu, PurpleBuddy *b);
-
-/**
- * Buddy menu callback.  Initiates the CrazyChat session.
- * @param item	the gtk buddy menu item
- * @param b	the buddy whose menu the item was in
- */
-static void cc_menu_cb(GtkMenuItem *item, PurpleBuddy *b);
-
-/**
- * IM callback.  Handles receiving a CrazyChat session request.
- * @param account	the account we received the IM on
- * @param sender	the buddy who we received the message from
- * @param message	the message we received
- * @param flags		IM flags
- * @param data		user data
- */
-static gboolean receive_im_cb(PurpleAccount *account, char **sender,
-		char **message,	int *flags, void *data);
-
-/**
- * Displaying IM callback.  Drops CrazyChat messages from IM window.
- * @param account	the account we are displaying the IM on
- * @param conv		the conversation we are displaying the IM on
- * @param message	the message we are displaying
- * @param data		user data
- */
-static gboolean display_im_cb(PurpleAccount *account, const char *who, char **message,
-			PurpleConnection *conv, PurpleMessageFlags flags, void *data);
-
-/**
- * Callback for CrazyChat plugin configuration frame
- * @param plugin	the plugin data
- * @return	the configuration frame
- */
-static GtkWidget *get_config_frame(PurplePlugin *plugin);
-
-/**
- * TCP port callback.  Changes the port used to listen for new CC sessions
- * @param spin		the spinner button whose value changed
- * @param data		user data
- */
-static void tcp_port_cb(GtkSpinButton *spin, struct crazychat *cc);
-
-/**
- * UDP port callback.  Changes the port used to send/recv CC session frames
- * @param spin		the spinner button whose value changed
- * @param data		user data
- */
-static void udp_port_cb(GtkSpinButton *spin, struct crazychat *cc);
-
-/**
- * Features enabling/disabling callback.  Initializes the input processing
- * or shuts it down.
- * @param data		user data
- */
-static void features_enable_cb(struct crazychat *cc);
-
-/**
- * User signed on callback.  Now we have a buddy list to connect a signal
- * handler to.
- * @param gc		the purple connection we are signed on
- * @param plugin	our plugin struct
- */
-static gboolean cc_signed_on(PurpleConnection *gc, void *plugin);
-
-/**
- * Plugin loading callback.  If a buddy list exists, connect our buddy menu
- * drawing callback to the signal handler, otherwise, connect a signed on
- * signal handler so we know when we get a buddy list.
- * @param plugin	our plugin struct
- */
-static gboolean plugin_load(PurplePlugin *plugin);
-
-/**
- * Plugin unloading callback.  Disconnect all handlers and free data.
- * @param plugin	our plugin struct
- */
-static gboolean plugin_unload(PurplePlugin *plugin);
-
-
-/* --- end function declarations --- */
-
-
-#define CRAZYCHAT_PLUGIN_ID "gtk-crazychat"
-
-static PidginPluginUiInfo ui_info = {
-	get_config_frame				/**< get_config_frame */
-};
-
-static PurplePluginInfo info = {
-	2,						  /**< api_version    */
-	PURPLE_PLUGIN_STANDARD,				  /**< type           */
-	PIDGIN_PLUGIN_TYPE,				  /**< ui_requirement */
-	0,						  /**< flags          */
-	NULL,						  /**< dependencies   */
-	PURPLE_PRIORITY_DEFAULT,				  /**< priority       */
-
-	CRAZYCHAT_PLUGIN_ID,				  /**< id             */
-	N_("Crazychat"),				  /**< name           */
-	VERSION,					  /**< version        */
-							  /**  summary        */
-	N_("Plugin to establish a Crazychat session."),
-							  /**  description    */
-	N_("Uses Purple to obtain buddy ips to connect for a Crazychat session"),
-	"\n"
-	"William Chan <chanman@stanford.edu>\n"
-	"Ian Spiro <ispiro@stanford.edu>\n"
-	"Charlie Stockman<stockman@stanford.edu>\n"
-	"Steve Yelderman<scy@stanford.edu>",		  /**< author         */
-	PURPLE_WEBSITE,					  /**< homepage       */
-
-	plugin_load,					  /**< load           */
-	plugin_unload,					  /**< unload         */
-	NULL,						  /**< destroy        */
-
-	&ui_info,					  /**< ui_info        */
-	&cc_info					  /**< extra_info     */
-};
-
-/* --- end plugin struct definition --- */
-
-static void cc_init(struct crazychat *cc)
-{
-	/* initialize main crazychat thread */
-	
-	assert(cc);
-	memset(cc, 0, sizeof(*cc));
-
-	/* initialize network configuration */
-	cc->tcp_port = DEFAULT_CC_PORT;
-	cc->udp_port = DEFAULT_CC_PORT;
-
-	/* disable input subsystem */
-	//cc->features_state = 0;
-
-	/* initialize input subsystem */
-	cc->features_state = 1;
-	cc->input_data = init_input(cc);
-}
-
-static void cc_destroy(struct crazychat *cc)
-{
-	assert(cc);
-
-	if (cc->features_state) {
-		destroy_input(cc->input_data);
-	}
-	memset(cc, 0, sizeof(*cc));
-}
-
-static gboolean cc_buddy_menu(GtkWidget *menu, PurpleBuddy *b)
-{
-	GtkWidget *menuitem;
-
-	menuitem = gtk_menu_item_new_with_mnemonic("CrazyChat");
-	g_signal_connect(G_OBJECT(menuitem), "activate",
-			G_CALLBACK(cc_menu_cb), b);
-	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
-	return FALSE;
-}
-
-static void cc_menu_cb(GtkMenuItem *item, PurpleBuddy *b)
-{
-	assert(item);
-	assert(b);
-
-	/* send the invite */
-	cc_net_send_invite(&cc_info, b->name, b->account);
-}
-
-static gboolean receive_im_cb(PurpleAccount *account, char **sender,
-		char **message,	int *flags, void *data)
-{
-	struct crazychat *cc;
-
-	cc = (struct crazychat*)data;
-	assert(cc);
-	if (!strncmp(*message, CRAZYCHAT_INVITE_CODE,
-				strlen(CRAZYCHAT_INVITE_CODE))) {
-		Debug(*message);
-		char *split = strchr(*message, '!');
-		assert(split);
-		*split = 0;
-		split++;
-		cc_net_recv_invite(account, cc, *sender,
-				&(*message)[strlen(CRAZYCHAT_INVITE_CODE)],
-				split);
-		return TRUE;
-	} else if (!strncmp(*message, CRAZYCHAT_ACCEPT_CODE,
-				strlen(CRAZYCHAT_ACCEPT_CODE))) {
-		cc_net_recv_accept(account, cc, *sender,
-				&(*message)[strlen(CRAZYCHAT_ACCEPT_CODE)]);
-		return TRUE;
-	} else if (!strncmp(*message, CRAZYCHAT_READY_CODE,
-				strlen(CRAZYCHAT_READY_CODE))) {
-		cc_net_recv_ready(account, cc, *sender);
-		return TRUE;
-	}
-	
-	return FALSE;
-}
-
-static gboolean display_im_cb(PurpleAccount *account, PurpleConversation *conv,
-		char **message, void *data)
-{
-	struct crazychat *cc;
-
-	cc = (struct crazychat*)data;
-	assert(cc);
-	if (!strncmp(*message, CRAZYCHAT_INVITE_CODE,
-				strlen(CRAZYCHAT_INVITE_CODE))) {
-		return TRUE;
-	} else if (!strncmp(*message, CRAZYCHAT_ACCEPT_CODE,
-				strlen(CRAZYCHAT_ACCEPT_CODE))) {
-		return TRUE;
-	} else if (!strncmp(*message, CRAZYCHAT_READY_CODE,
-				strlen(CRAZYCHAT_READY_CODE))) {
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-static GtkWidget *get_config_frame(PurplePlugin *plugin)
-{
-	GtkWidget *ret;
-	GtkWidget *frame;
-	GtkWidget *vbox, *hbox;
-	GtkWidget *drawing_area;
-	GtkWidget *label;
-	GtkAdjustment *adj;
-	GtkWidget *spinner;
-	GtkWidget *button, *button1, *button2;
-	GSList *group;
-	struct draw_info *info;
-	struct crazychat *cc;
-
-	cc = (struct crazychat*)plugin->info->extra_info;
-	assert(cc);
-
-	/* create widgets */
-
-	/* creating the config frame */
-	ret = gtk_vbox_new(FALSE, 18);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
-
-	/* make the network configuration frame */
-	frame = pidgin_make_frame(ret, _("Network Configuration"));
-	gtk_widget_show(frame);
-
-	/* add boxes for packing purposes */
-	vbox = gtk_vbox_new(FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(frame), vbox, TRUE, TRUE, 0);
-	gtk_widget_show(vbox);
-
-	/* add widgets to row 1 */
-	hbox = gtk_hbox_new(FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
-	gtk_widget_show(hbox);
-	label = gtk_label_new(_("TCP port"));
-	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 15);
-	gtk_widget_show(label);
-	adj = (GtkAdjustment*)gtk_adjustment_new(DEFAULT_CC_PORT, 1,
-			G_MAXUSHORT, 1, 1000, 0);
-	spinner = gtk_spin_button_new(adj, 1, 0);
-	g_signal_connect(G_OBJECT(spinner), "value_changed",
-			G_CALLBACK(tcp_port_cb), cc);
-	gtk_box_pack_start(GTK_BOX(hbox), spinner, FALSE, FALSE, 0);
-	gtk_widget_show(spinner);
-	label = gtk_label_new(_("UDP port"));
-	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 15);
-	gtk_widget_show(label);
-	adj = (GtkAdjustment*)gtk_adjustment_new(DEFAULT_CC_PORT, 1,
-			G_MAXUSHORT, 1, 1000, 0);
-	spinner = gtk_spin_button_new(adj, 1, 0);
-	g_signal_connect(G_OBJECT(spinner), "value_changed",
-			G_CALLBACK(udp_port_cb), cc);
-	gtk_box_pack_start(GTK_BOX(hbox), spinner, FALSE, FALSE, 0);
-	gtk_widget_show(spinner);
-
-	/* make the feature configuration frame */
-	frame = pidgin_make_frame(ret, _("Feature Calibration"));
-	gtk_widget_show(frame);
-
-	/* add hbox for packing purposes */
-	hbox = gtk_hbox_new(TRUE, 40);
-	gtk_box_pack_start(GTK_BOX(frame), hbox, TRUE, TRUE, 0);
-	gtk_widget_show(hbox);
-
-	/* add feature calibration options */
-
-	/* add vbox for packing purposes */
-	vbox = gtk_vbox_new(TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
-	gtk_widget_show(vbox);
-
-	/* add enabled / disabled */
-	button1 = gtk_radio_button_new_with_label(NULL, _("Enabled"));
-	gtk_box_pack_start(GTK_BOX(vbox), button1, TRUE, TRUE, 0);
-	gtk_widget_show(button1);
-	
-	group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1));
-	button2 = gtk_radio_button_new_with_label(group, _("Disabled"));
-	gtk_box_pack_start(GTK_BOX(vbox), button2, TRUE, TRUE, 0);
-	gtk_widget_show(button2);
-
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button1),
-			cc->features_state);
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2),
-			!cc->features_state);
-	g_signal_connect_swapped(G_OBJECT(button1), "toggled",
-			G_CALLBACK(features_enable_cb), cc);
-
-	/* add vbox for packing purposes */
-	vbox = gtk_vbox_new(TRUE, 0);
-	gtk_box_pack_end(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
-	gtk_widget_show(vbox);
-
-	/* add calibrate button */
-	button = gtk_button_new_with_label("Calibrate");
-	gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, FALSE, 0);
-	gtk_widget_show(button);
-	
-	gtk_widget_show(ret);
-	
-	return ret;
-}
-
-static void tcp_port_cb(GtkSpinButton *spin, struct crazychat *cc)
-{
-	assert(spin);
-	assert(cc);
-	cc->tcp_port = gtk_spin_button_get_value_as_int(spin);
-	Debug("New tcp port: %d\n", cc->tcp_port);
-}
-
-static void udp_port_cb(GtkSpinButton *spin, struct crazychat *cc)
-{
-	assert(spin);
-	assert(cc);
-	cc->udp_port = gtk_spin_button_get_value_as_int(spin);
-	Debug("New udp port: %d\n", cc->udp_port);
-}
-
-static void features_enable_cb(struct crazychat *cc)
-{
-	Debug("Changing features state\n");
-	cc->features_state = !cc->features_state;
-	if (cc->features_state) {
-		cc->input_data = init_input(cc);
-	} else {
-		if (cc->input_data) {
-			gtk_widget_destroy(cc->input_data->widget);
-		}
-	}
-}
-
-static gboolean cc_signed_on(PurpleConnection *gc, void *plugin)
-{
-	struct crazychat *extra;
-	void *conv_handle;
-
-	assert(plugin);
-	extra = (struct crazychat*)((PurplePlugin*)plugin)->info->extra_info;
-	purple_signal_disconnect
-	    (purple_connections_get_handle(), "signed-on",
-	     plugin, PURPLE_CALLBACK(cc_signed_on));
-	purple_signal_connect(PIDGIN_BLIST
-			    (purple_get_blist()),
-			    "drawing-menu", plugin,
-			    PURPLE_CALLBACK(cc_buddy_menu), NULL);
-	conv_handle = purple_conversations_get_handle();
-	purple_signal_connect(conv_handle, "received-im-msg", plugin,
-		PURPLE_CALLBACK(receive_im_cb), extra);
-	purple_signal_connect(conv_handle, "displaying-im-msg", plugin,
-		PURPLE_CALLBACK(display_im_cb), extra);
-	return FALSE;
-}
-
-static gboolean plugin_load(PurplePlugin *plugin)
-{
-	PurpleBuddyList *buddy_list;
-	void *conv_handle;
-
-	if (cc_init_gtk_gl())
-		return FALSE;
-
-	cc_init(&cc_info);
-	buddy_list = purple_get_blist();
-	if (buddy_list) {
-		purple_signal_connect(PIDGIN_BLIST
-				    (buddy_list),
-				    "drawing-menu", plugin,
-				    PURPLE_CALLBACK(cc_buddy_menu), NULL);
-		conv_handle = purple_conversations_get_handle();
-		purple_signal_connect(conv_handle, "received-im-msg", plugin,
-			PURPLE_CALLBACK(receive_im_cb), &cc_info);
-		purple_signal_connect(conv_handle, "displaying-im-msg", plugin,
-			PURPLE_CALLBACK(display_im_cb), &cc_info);
-	} else {
-		purple_signal_connect
-		    (purple_connections_get_handle(), "signed-on",
-		     plugin, PURPLE_CALLBACK(cc_signed_on), plugin);
-	}
-
-	Debug("CrazyChat plugin loaded.\n");
-	
-	return TRUE;
-}
-
-static gboolean plugin_unload(PurplePlugin *plugin)
-{
-	void *conv_handle;
-	struct crazychat *extra;
-	assert(plugin);
-	extra = (struct crazychat*) plugin->info->extra_info;
-	cc_destroy(extra);
-	conv_handle = purple_conversations_get_handle();
-	purple_signal_disconnect(PIDGIN_BLIST
-			       (purple_get_blist()),
-			       "drawing-menu", plugin,
-			       PURPLE_CALLBACK(cc_buddy_menu));
-	purple_signal_disconnect(conv_handle, "received-im", plugin,
-			       PURPLE_CALLBACK(receive_im_cb));
-	purple_signal_disconnect(conv_handle, "displaying-im-msg", plugin,
-			       PURPLE_CALLBACK(display_im_cb));
-	Debug("CrazyChat plugin unloaded.\n");
-	return TRUE;
-}
-
-static void init_plugin(PurplePlugin *plugin)
-{
-	gtk_gl_init(NULL, NULL);
-	memset(&cc_info, 0, sizeof(cc_info));
-	Debug("CrazyChat plugin initialized\n");
-}
-
-PURPLE_INIT_PLUGIN(crazychat, init_plugin, info)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/plugins/crazychat/cc_pidgin_plugin.c	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,485 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include "internal.h"
+#include "plugin.h"
+#include "gtkplugin.h"
+#include "gtkblist.h"
+#include "gtkutils.h"
+#include "connection.h"
+#include "conversation.h"
+#include "network.h"
+
+#include <gtk/gtkgl.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#include "crazychat.h"
+#include "cc_network.h"
+#include "cc_interface.h"
+#include "cc_gtk_gl.h"
+#include "util.h"
+
+/* --- begin type and global variable definitions --- */
+
+static struct crazychat cc_info;
+
+/* --- begin function declarations --- */
+
+/**
+ * Called by purple plugin to start CrazyChat
+ * @param cc	the crazychat struct
+ */
+static void cc_init(struct crazychat *cc);
+
+/**
+ * Called by purple plugin to destroy CrazyChat
+ * @param cc	the crazychat struct
+ */
+static void cc_destroy(struct crazychat *cc);
+
+
+/**
+ * Buddy menu drawing callback.  Adds a CrazyChat menuitem.
+ * @param menu	the buddy menu widget
+ * @param b	the buddy whose menu this is
+ */
+static gboolean cc_buddy_menu(GtkWidget *menu, PurpleBuddy *b);
+
+/**
+ * Buddy menu callback.  Initiates the CrazyChat session.
+ * @param item	the gtk buddy menu item
+ * @param b	the buddy whose menu the item was in
+ */
+static void cc_menu_cb(GtkMenuItem *item, PurpleBuddy *b);
+
+/**
+ * IM callback.  Handles receiving a CrazyChat session request.
+ * @param account	the account we received the IM on
+ * @param sender	the buddy who we received the message from
+ * @param message	the message we received
+ * @param flags		IM flags
+ * @param data		user data
+ */
+static gboolean receive_im_cb(PurpleAccount *account, char **sender,
+		char **message,	int *flags, void *data);
+
+/**
+ * Displaying IM callback.  Drops CrazyChat messages from IM window.
+ * @param account	the account we are displaying the IM on
+ * @param conv		the conversation we are displaying the IM on
+ * @param message	the message we are displaying
+ * @param data		user data
+ */
+static gboolean display_im_cb(PurpleAccount *account, const char *who, char **message,
+			PurpleConnection *conv, PurpleMessageFlags flags, void *data);
+
+/**
+ * Callback for CrazyChat plugin configuration frame
+ * @param plugin	the plugin data
+ * @return	the configuration frame
+ */
+static GtkWidget *get_config_frame(PurplePlugin *plugin);
+
+/**
+ * TCP port callback.  Changes the port used to listen for new CC sessions
+ * @param spin		the spinner button whose value changed
+ * @param data		user data
+ */
+static void tcp_port_cb(GtkSpinButton *spin, struct crazychat *cc);
+
+/**
+ * UDP port callback.  Changes the port used to send/recv CC session frames
+ * @param spin		the spinner button whose value changed
+ * @param data		user data
+ */
+static void udp_port_cb(GtkSpinButton *spin, struct crazychat *cc);
+
+/**
+ * Features enabling/disabling callback.  Initializes the input processing
+ * or shuts it down.
+ * @param data		user data
+ */
+static void features_enable_cb(struct crazychat *cc);
+
+/**
+ * User signed on callback.  Now we have a buddy list to connect a signal
+ * handler to.
+ * @param gc		the purple connection we are signed on
+ * @param plugin	our plugin struct
+ */
+static gboolean cc_signed_on(PurpleConnection *gc, void *plugin);
+
+/**
+ * Plugin loading callback.  If a buddy list exists, connect our buddy menu
+ * drawing callback to the signal handler, otherwise, connect a signed on
+ * signal handler so we know when we get a buddy list.
+ * @param plugin	our plugin struct
+ */
+static gboolean plugin_load(PurplePlugin *plugin);
+
+/**
+ * Plugin unloading callback.  Disconnect all handlers and free data.
+ * @param plugin	our plugin struct
+ */
+static gboolean plugin_unload(PurplePlugin *plugin);
+
+
+/* --- end function declarations --- */
+
+
+#define CRAZYCHAT_PLUGIN_ID "gtk-crazychat"
+
+static PidginPluginUiInfo ui_info = {
+	get_config_frame				/**< get_config_frame */
+};
+
+static PurplePluginInfo info = {
+	2,						  /**< api_version    */
+	PURPLE_PLUGIN_STANDARD,				  /**< type           */
+	PIDGIN_PLUGIN_TYPE,				  /**< ui_requirement */
+	0,						  /**< flags          */
+	NULL,						  /**< dependencies   */
+	PURPLE_PRIORITY_DEFAULT,				  /**< priority       */
+
+	CRAZYCHAT_PLUGIN_ID,				  /**< id             */
+	N_("Crazychat"),				  /**< name           */
+	VERSION,					  /**< version        */
+							  /**  summary        */
+	N_("Plugin to establish a Crazychat session."),
+							  /**  description    */
+	N_("Uses Purple to obtain buddy ips to connect for a Crazychat session"),
+	"\n"
+	"William Chan <chanman@stanford.edu>\n"
+	"Ian Spiro <ispiro@stanford.edu>\n"
+	"Charlie Stockman<stockman@stanford.edu>\n"
+	"Steve Yelderman<scy@stanford.edu>",		  /**< author         */
+	PURPLE_WEBSITE,					  /**< homepage       */
+
+	plugin_load,					  /**< load           */
+	plugin_unload,					  /**< unload         */
+	NULL,						  /**< destroy        */
+
+	&ui_info,					  /**< ui_info        */
+	&cc_info					  /**< extra_info     */
+};
+
+/* --- end plugin struct definition --- */
+
+static void cc_init(struct crazychat *cc)
+{
+	/* initialize main crazychat thread */
+	
+	assert(cc);
+	memset(cc, 0, sizeof(*cc));
+
+	/* initialize network configuration */
+	cc->tcp_port = DEFAULT_CC_PORT;
+	cc->udp_port = DEFAULT_CC_PORT;
+
+	/* disable input subsystem */
+	//cc->features_state = 0;
+
+	/* initialize input subsystem */
+	cc->features_state = 1;
+	cc->input_data = init_input(cc);
+}
+
+static void cc_destroy(struct crazychat *cc)
+{
+	assert(cc);
+
+	if (cc->features_state) {
+		destroy_input(cc->input_data);
+	}
+	memset(cc, 0, sizeof(*cc));
+}
+
+static gboolean cc_buddy_menu(GtkWidget *menu, PurpleBuddy *b)
+{
+	GtkWidget *menuitem;
+
+	menuitem = gtk_menu_item_new_with_mnemonic("CrazyChat");
+	g_signal_connect(G_OBJECT(menuitem), "activate",
+			G_CALLBACK(cc_menu_cb), b);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+	return FALSE;
+}
+
+static void cc_menu_cb(GtkMenuItem *item, PurpleBuddy *b)
+{
+	assert(item);
+	assert(b);
+
+	/* send the invite */
+	cc_net_send_invite(&cc_info, b->name, b->account);
+}
+
+static gboolean receive_im_cb(PurpleAccount *account, char **sender,
+		char **message,	int *flags, void *data)
+{
+	struct crazychat *cc;
+
+	cc = (struct crazychat*)data;
+	assert(cc);
+	if (!strncmp(*message, CRAZYCHAT_INVITE_CODE,
+				strlen(CRAZYCHAT_INVITE_CODE))) {
+		Debug(*message);
+		char *split = strchr(*message, '!');
+		assert(split);
+		*split = 0;
+		split++;
+		cc_net_recv_invite(account, cc, *sender,
+				&(*message)[strlen(CRAZYCHAT_INVITE_CODE)],
+				split);
+		return TRUE;
+	} else if (!strncmp(*message, CRAZYCHAT_ACCEPT_CODE,
+				strlen(CRAZYCHAT_ACCEPT_CODE))) {
+		cc_net_recv_accept(account, cc, *sender,
+				&(*message)[strlen(CRAZYCHAT_ACCEPT_CODE)]);
+		return TRUE;
+	} else if (!strncmp(*message, CRAZYCHAT_READY_CODE,
+				strlen(CRAZYCHAT_READY_CODE))) {
+		cc_net_recv_ready(account, cc, *sender);
+		return TRUE;
+	}
+	
+	return FALSE;
+}
+
+static gboolean display_im_cb(PurpleAccount *account, PurpleConversation *conv,
+		char **message, void *data)
+{
+	struct crazychat *cc;
+
+	cc = (struct crazychat*)data;
+	assert(cc);
+	if (!strncmp(*message, CRAZYCHAT_INVITE_CODE,
+				strlen(CRAZYCHAT_INVITE_CODE))) {
+		return TRUE;
+	} else if (!strncmp(*message, CRAZYCHAT_ACCEPT_CODE,
+				strlen(CRAZYCHAT_ACCEPT_CODE))) {
+		return TRUE;
+	} else if (!strncmp(*message, CRAZYCHAT_READY_CODE,
+				strlen(CRAZYCHAT_READY_CODE))) {
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+static GtkWidget *get_config_frame(PurplePlugin *plugin)
+{
+	GtkWidget *ret;
+	GtkWidget *frame;
+	GtkWidget *vbox, *hbox;
+	GtkWidget *drawing_area;
+	GtkWidget *label;
+	GtkAdjustment *adj;
+	GtkWidget *spinner;
+	GtkWidget *button, *button1, *button2;
+	GSList *group;
+	struct draw_info *info;
+	struct crazychat *cc;
+
+	cc = (struct crazychat*)plugin->info->extra_info;
+	assert(cc);
+
+	/* create widgets */
+
+	/* creating the config frame */
+	ret = gtk_vbox_new(FALSE, 18);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
+
+	/* make the network configuration frame */
+	frame = pidgin_make_frame(ret, _("Network Configuration"));
+	gtk_widget_show(frame);
+
+	/* add boxes for packing purposes */
+	vbox = gtk_vbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(frame), vbox, TRUE, TRUE, 0);
+	gtk_widget_show(vbox);
+
+	/* add widgets to row 1 */
+	hbox = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+	gtk_widget_show(hbox);
+	label = gtk_label_new(_("TCP port"));
+	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 15);
+	gtk_widget_show(label);
+	adj = (GtkAdjustment*)gtk_adjustment_new(DEFAULT_CC_PORT, 1,
+			G_MAXUSHORT, 1, 1000, 0);
+	spinner = gtk_spin_button_new(adj, 1, 0);
+	g_signal_connect(G_OBJECT(spinner), "value_changed",
+			G_CALLBACK(tcp_port_cb), cc);
+	gtk_box_pack_start(GTK_BOX(hbox), spinner, FALSE, FALSE, 0);
+	gtk_widget_show(spinner);
+	label = gtk_label_new(_("UDP port"));
+	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 15);
+	gtk_widget_show(label);
+	adj = (GtkAdjustment*)gtk_adjustment_new(DEFAULT_CC_PORT, 1,
+			G_MAXUSHORT, 1, 1000, 0);
+	spinner = gtk_spin_button_new(adj, 1, 0);
+	g_signal_connect(G_OBJECT(spinner), "value_changed",
+			G_CALLBACK(udp_port_cb), cc);
+	gtk_box_pack_start(GTK_BOX(hbox), spinner, FALSE, FALSE, 0);
+	gtk_widget_show(spinner);
+
+	/* make the feature configuration frame */
+	frame = pidgin_make_frame(ret, _("Feature Calibration"));
+	gtk_widget_show(frame);
+
+	/* add hbox for packing purposes */
+	hbox = gtk_hbox_new(TRUE, 40);
+	gtk_box_pack_start(GTK_BOX(frame), hbox, TRUE, TRUE, 0);
+	gtk_widget_show(hbox);
+
+	/* add feature calibration options */
+
+	/* add vbox for packing purposes */
+	vbox = gtk_vbox_new(TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+	gtk_widget_show(vbox);
+
+	/* add enabled / disabled */
+	button1 = gtk_radio_button_new_with_label(NULL, _("Enabled"));
+	gtk_box_pack_start(GTK_BOX(vbox), button1, TRUE, TRUE, 0);
+	gtk_widget_show(button1);
+	
+	group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1));
+	button2 = gtk_radio_button_new_with_label(group, _("Disabled"));
+	gtk_box_pack_start(GTK_BOX(vbox), button2, TRUE, TRUE, 0);
+	gtk_widget_show(button2);
+
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button1),
+			cc->features_state);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2),
+			!cc->features_state);
+	g_signal_connect_swapped(G_OBJECT(button1), "toggled",
+			G_CALLBACK(features_enable_cb), cc);
+
+	/* add vbox for packing purposes */
+	vbox = gtk_vbox_new(TRUE, 0);
+	gtk_box_pack_end(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+	gtk_widget_show(vbox);
+
+	/* add calibrate button */
+	button = gtk_button_new_with_label("Calibrate");
+	gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, FALSE, 0);
+	gtk_widget_show(button);
+	
+	gtk_widget_show(ret);
+	
+	return ret;
+}
+
+static void tcp_port_cb(GtkSpinButton *spin, struct crazychat *cc)
+{
+	assert(spin);
+	assert(cc);
+	cc->tcp_port = gtk_spin_button_get_value_as_int(spin);
+	Debug("New tcp port: %d\n", cc->tcp_port);
+}
+
+static void udp_port_cb(GtkSpinButton *spin, struct crazychat *cc)
+{
+	assert(spin);
+	assert(cc);
+	cc->udp_port = gtk_spin_button_get_value_as_int(spin);
+	Debug("New udp port: %d\n", cc->udp_port);
+}
+
+static void features_enable_cb(struct crazychat *cc)
+{
+	Debug("Changing features state\n");
+	cc->features_state = !cc->features_state;
+	if (cc->features_state) {
+		cc->input_data = init_input(cc);
+	} else {
+		if (cc->input_data) {
+			gtk_widget_destroy(cc->input_data->widget);
+		}
+	}
+}
+
+static gboolean cc_signed_on(PurpleConnection *gc, void *plugin)
+{
+	struct crazychat *extra;
+	void *conv_handle;
+
+	assert(plugin);
+	extra = (struct crazychat*)((PurplePlugin*)plugin)->info->extra_info;
+	purple_signal_disconnect
+	    (purple_connections_get_handle(), "signed-on",
+	     plugin, PURPLE_CALLBACK(cc_signed_on));
+	purple_signal_connect(PIDGIN_BLIST
+			    (purple_get_blist()),
+			    "drawing-menu", plugin,
+			    PURPLE_CALLBACK(cc_buddy_menu), NULL);
+	conv_handle = purple_conversations_get_handle();
+	purple_signal_connect(conv_handle, "received-im-msg", plugin,
+		PURPLE_CALLBACK(receive_im_cb), extra);
+	purple_signal_connect(conv_handle, "displaying-im-msg", plugin,
+		PURPLE_CALLBACK(display_im_cb), extra);
+	return FALSE;
+}
+
+static gboolean plugin_load(PurplePlugin *plugin)
+{
+	PurpleBuddyList *buddy_list;
+	void *conv_handle;
+
+	if (cc_init_gtk_gl())
+		return FALSE;
+
+	cc_init(&cc_info);
+	buddy_list = purple_get_blist();
+	if (buddy_list) {
+		purple_signal_connect(PIDGIN_BLIST
+				    (buddy_list),
+				    "drawing-menu", plugin,
+				    PURPLE_CALLBACK(cc_buddy_menu), NULL);
+		conv_handle = purple_conversations_get_handle();
+		purple_signal_connect(conv_handle, "received-im-msg", plugin,
+			PURPLE_CALLBACK(receive_im_cb), &cc_info);
+		purple_signal_connect(conv_handle, "displaying-im-msg", plugin,
+			PURPLE_CALLBACK(display_im_cb), &cc_info);
+	} else {
+		purple_signal_connect
+		    (purple_connections_get_handle(), "signed-on",
+		     plugin, PURPLE_CALLBACK(cc_signed_on), plugin);
+	}
+
+	Debug("CrazyChat plugin loaded.\n");
+	
+	return TRUE;
+}
+
+static gboolean plugin_unload(PurplePlugin *plugin)
+{
+	void *conv_handle;
+	struct crazychat *extra;
+	assert(plugin);
+	extra = (struct crazychat*) plugin->info->extra_info;
+	cc_destroy(extra);
+	conv_handle = purple_conversations_get_handle();
+	purple_signal_disconnect(PIDGIN_BLIST
+			       (purple_get_blist()),
+			       "drawing-menu", plugin,
+			       PURPLE_CALLBACK(cc_buddy_menu));
+	purple_signal_disconnect(conv_handle, "received-im", plugin,
+			       PURPLE_CALLBACK(receive_im_cb));
+	purple_signal_disconnect(conv_handle, "displaying-im-msg", plugin,
+			       PURPLE_CALLBACK(display_im_cb));
+	Debug("CrazyChat plugin unloaded.\n");
+	return TRUE;
+}
+
+static void init_plugin(PurplePlugin *plugin)
+{
+	gtk_gl_init(NULL, NULL);
+	memset(&cc_info, 0, sizeof(cc_info));
+	Debug("CrazyChat plugin initialized\n");
+}
+
+PURPLE_INIT_PLUGIN(crazychat, init_plugin, info)
--- a/pidgin/plugins/extplacement.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/extplacement.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
  * Extra conversation placement options for Purple
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/plugins/gaimrc.c	Mon Mar 26 01:11:46 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,676 +0,0 @@
-/**
- * @file purplerc.c Purple gtk resource control plugin.
- *
- * Copyright (C) 2005 Etan Reisner <deryni@eden.rutgers.edu>
- *
- * 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 "internal.h"
-#include "gtkplugin.h"
-#include "gtkprefs.h"
-#include "gtkutils.h"
-#include "util.h"
-#include "version.h"
-
-static guint pref_callback;
-
-static const char *color_prefs[] = {
-	"/plugins/gtk/purplerc/color/GtkWidget::cursor-color",
-	"/plugins/gtk/purplerc/color/GtkWidget::secondary-cursor-color",
-	"/plugins/gtk/purplerc/color/GtkIMHtml::hyperlink-color"
-};
-static const char *color_prefs_set[] = {
-	"/plugins/gtk/purplerc/set/color/GtkWidget::cursor-color",
-	"/plugins/gtk/purplerc/set/color/GtkWidget::secondary-cursor-color",
-	"/plugins/gtk/purplerc/set/color/GtkIMHtml::hyperlink-color"
-};
-static const char *color_names[] = {
-	N_("Cursor Color"),
-	N_("Secondary Cursor Color"),
-	N_("Hyperlink Color")
-};
-static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)];
-
-static const char *widget_size_prefs[] = {
-	"/plugins/gtk/purplerc/size/GtkTreeView::expander_size",
-	"/plugins/gtk/purplerc/size/GtkTreeView::horizontal_separator"
-};
-static const char *widget_size_prefs_set[] = {
-	"/plugins/gtk/purplerc/set/size/GtkTreeView::expander_size",
-	"/plugins/gtk/purplerc/set/size/GtkTreeView::horizontal_separator"
-};
-static const char *widget_size_names[] = {
-	N_("GtkTreeView Expander Size"),
-	N_("GtkTreeView Horizontal Separation")
-};
-static GtkWidget *widget_size_widgets[G_N_ELEMENTS(widget_size_prefs)];
-
-static const char *font_prefs[] = {
-	"/plugins/gtk/purplerc/font/*pidgin_conv_entry",
-	"/plugins/gtk/purplerc/font/*pidgin_conv_imhtml",
-	"/plugins/gtk/purplerc/font/*pidginlog_imhtml",
-	"/plugins/gtk/purplerc/font/*pidginrequest_imhtml",
-	"/plugins/gtk/purplerc/font/*pidginnotify_imhtml",
-};
-static const char *font_prefs_set[] = {
-	"/plugins/gtk/purplerc/set/font/*pidgin_conv_entry",
-	"/plugins/gtk/purplerc/set/font/*pidgin_conv_imhtml",
-	"/plugins/gtk/purplerc/set/font/*pidginlog_imhtml",
-	"/plugins/gtk/purplerc/set/font/*pidginrequest_imhtml",
-	"/plugins/gtk/purplerc/set/font/*pidginnotify_imhtml",
-};
-static const char *font_names[] = {
-	N_("Conversation Entry"),
-	N_("Conversation History"),
-	N_("Log Viewer"),
-	N_("Request Dialog"),
-	N_("Notify Dialog")
-};
-static GtkWidget *font_widgets[G_N_ELEMENTS(font_prefs)];
-
-static const char *widget_bool_prefs[] = {
-	"/plugins/gtk/purplerc/bool/GtkTreeView::indent_expanders",
-};
-static const char *widget_bool_prefs_set[] = {
-	"/plugins/gtk/purplerc/set/bool/GtkTreeView::indent_expanders",
-};
-static const char *widget_bool_names[] = {
-	N_("GtkTreeView Indent Expanders"),
-};
-static GtkWidget *widget_bool_widgets[G_N_ELEMENTS(widget_bool_prefs)];
-
-static void
-purplerc_make_changes()
-{
-	int i;
-	char *prefbase = NULL;
-#if GTK_CHECK_VERSION(2,4,0)
-	GtkSettings *setting = NULL;
-#endif
-	GString *style_string = g_string_new("");
-
-	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {
-		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
-
-		if (pref != NULL && strcmp(pref, ""))
-			g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref);
-	}
-
-	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {
-		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");
-
-		if (pref != NULL && strcmp(pref, ""))
-			g_string_append_printf(style_string, "gtk-key-theme-name = \"%s\"\n", pref);
-	}
-
-	g_string_append(style_string, "style \"purplerc_style\" {\n");
-
-	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
-		if (purple_prefs_get_bool(color_prefs_set[i])) {
-			const char *pref;
-
-			prefbase = g_path_get_basename(color_prefs[i]);
-			pref = purple_prefs_get_string(color_prefs[i]);
-
-			if (pref != NULL && strcmp(pref, ""))
-			    g_string_append_printf(style_string,
-			                           "%s = \"%s\"\n",
-			                           prefbase, pref);
-			g_free(prefbase);
-		}
-	}
-
-	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
-		if (purple_prefs_get_bool(widget_size_prefs_set[i])) {
-			prefbase = g_path_get_basename(widget_size_prefs[i]);
-			g_string_append_printf(style_string,
-			                       "%s = %d\n", prefbase,
-			                       purple_prefs_get_int(widget_size_prefs[i]));
-			g_free(prefbase);
-		}
-	}
-
-	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
-		if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {
-			prefbase = g_path_get_basename(widget_bool_prefs[i]);
-			g_string_append_printf(style_string,
-			                       "%s = %d\n", prefbase,
-			                       purple_prefs_get_bool(widget_bool_prefs[i]));
-			g_free(prefbase);
-		}
-	}
-
-	g_string_append(style_string, "}");
-	g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");
-
-	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
-		if (purple_prefs_get_bool(font_prefs_set[i])) {
-			const char *pref;
-
-			prefbase = g_path_get_basename(font_prefs[i]);
-			pref = purple_prefs_get_string(font_prefs[i]);
-
-			if (pref != NULL && strcmp(pref, ""))
-				g_string_append_printf(style_string,
-				                       "style \"%s_style\"\n"
-				                       "{font_name = \"%s\"}\n"
-				                       "widget \"%s\""
-				                       "style \"%s_style\"\n",
-				                       prefbase, pref,
-				                       prefbase, prefbase);
-			g_free(prefbase);
-		}
-	}
-
-	gtk_rc_parse_string(style_string->str);
-	g_string_free(style_string, TRUE);
-
-#if GTK_CHECK_VERSION(2,4,0)
-	setting = gtk_settings_get_default();
-	gtk_rc_reset_styles(setting);
-#endif
-}
-
-static void
-purplerc_write(GtkWidget *widget, gpointer data)
-{
-	int i;
-	GString *style_string = g_string_new("");
-	char *prefbase = NULL;
-
-	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {
-		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
-
-		if (pref != NULL && strcmp(pref, ""))
-			g_string_append_printf(style_string,
-			                       "gtk-font-name = \"%s\"\n",
-			                       pref);
-	}
-
-	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {
-		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");
-
-		if (pref != NULL && strcmp(pref, ""))
-			g_string_append_printf(style_string,
-			                       "gtk-key-theme-name = \"%s\"\n",
-			                       pref);
-	}
-
-	g_string_append(style_string, "style \"purplerc_style\" {\n");
-
-	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
-		if (purple_prefs_get_bool(color_prefs_set[i])) {
-			const char *pref;
-
-			prefbase = g_path_get_basename(color_prefs[i]);
-			pref = purple_prefs_get_string(color_prefs[i]);
-
-			if (pref != NULL && strcmp(pref, ""))
-			    g_string_append_printf(style_string,
-			                           "%s = \"%s\"\n",
-			                           prefbase, pref);
-			g_free(prefbase);
-		}
-	}
-
-	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
-		if (purple_prefs_get_bool(widget_size_prefs_set[i])) {
-			prefbase = g_path_get_basename(widget_size_prefs[i]);
-			g_string_append_printf(style_string,
-			                       "%s = %d\n", prefbase,
-			                       purple_prefs_get_int(widget_size_prefs[i]));
-			g_free(prefbase);
-		}
-	}
-
-	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
-		if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {
-			prefbase = g_path_get_basename(widget_bool_prefs[i]);
-			g_string_append_printf(style_string,
-			                       "%s = %d\n", prefbase,
-			                       purple_prefs_get_bool(widget_bool_prefs[i]));
-			g_free(prefbase);
-		}
-	}
-
-	g_string_append(style_string, "}");
-	g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");
-
-	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
-		if (purple_prefs_get_bool(font_prefs_set[i])) {
-			const char *pref;
-
-			prefbase = g_path_get_basename(font_prefs[i]);
-			pref = purple_prefs_get_string(font_prefs[i]);
-
-			if (pref != NULL && strcmp(pref, ""))
-				g_string_append_printf(style_string,
-				                       "style \"%s_style\"\n"
-				                       "{font_name = \"%s\"}\n"
-				                       "widget \"%s\""
-				                       "style \"%s_style\"\n",
-				                       prefbase, pref,
-				                       prefbase, prefbase);
-			g_free(prefbase);
-		}
-	}
-
-	purple_util_write_data_to_file("gtkrc-2.0", style_string->str, -1);
-
-	g_string_free(style_string, TRUE);
-}
-
-static void
-purplerc_reread(GtkWidget *widget, gpointer data)
-{
-	gtk_rc_reparse_all();
-	/* I don't know if this is necessary but if not it shouldn't hurt. */
-	purplerc_make_changes();
-}
-
-static void
-purplerc_pref_changed_cb(const char *name, PurplePrefType type,
-                       gconstpointer value, gpointer data)
-{
-	purplerc_make_changes();
-}
-
-static void
-purplerc_color_response(GtkDialog *color_dialog, gint response, gpointer data)
-{
-	int subscript = GPOINTER_TO_INT(data);
-
-	if (response == GTK_RESPONSE_OK) {
-		GtkWidget *colorsel = GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel;
-		GdkColor color;
-		char colorstr[8];
-
-		gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(colorsel), &color);
-
-		g_snprintf(colorstr, sizeof(colorstr), "#%02X%02X%02X",
-		           color.red/256, color.green/256, color.blue/256);
-
-		purple_prefs_set_string(color_prefs[subscript], colorstr);
-	}
-	gtk_widget_destroy(GTK_WIDGET(color_dialog));
-}
-
-static void
-purplerc_set_color(GtkWidget *widget, gpointer data)
-{
-	GtkWidget *color_dialog = NULL;
-	GdkColor color;
-	char title[128];
-	const char *pref = NULL;
-	int subscript = GPOINTER_TO_INT(data);
-
-	g_snprintf(title, sizeof(title), _("Select Color for %s"),
-	           _(color_names[GPOINTER_TO_INT(data)]));
-	color_dialog = gtk_color_selection_dialog_new(_("Select Color"));
-	g_signal_connect(G_OBJECT(color_dialog), "response",
-	                 G_CALLBACK(purplerc_color_response), data);
-
-	pref = purple_prefs_get_string(color_prefs[subscript]);
-
-	if (pref != NULL && strcmp(pref, "")) {
-		if (gdk_color_parse(pref, &color)) {
-			gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel), &color);
-		}
-	}
-
-	gtk_window_present(GTK_WINDOW(color_dialog));
-}
-
-static void
-purplerc_font_response(GtkDialog *font_dialog, gint response, gpointer data)
-{
-	int subscript = GPOINTER_TO_INT(data);
-
-	if (response == GTK_RESPONSE_OK) {
-		char *fontname = NULL;
-
-		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
-
-		purple_prefs_set_string(font_prefs[subscript], fontname);
-		g_free(fontname);
-	}
-	gtk_widget_destroy(GTK_WIDGET(font_dialog));
-}
-
-static void
-purplerc_set_font(GtkWidget *widget, gpointer data)
-{
-	GtkWidget *font_dialog = NULL;
-	char title[128];
-	const char *pref = NULL;
-	int subscript = GPOINTER_TO_INT(data);
-
-	g_snprintf(title, sizeof(title), _("Select Font for %s"),
-	           _(font_names[subscript]));
-	font_dialog = gtk_font_selection_dialog_new(title);
-	g_signal_connect(G_OBJECT(font_dialog), "response",
-	                 G_CALLBACK(purplerc_font_response), data);
-
-	pref = purple_prefs_get_string(font_prefs[subscript]);
-
-	if (pref != NULL && strcmp(pref, "")) {
-		gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font_dialog)->fontsel), pref);
-	}
-
-	gtk_window_present(GTK_WINDOW(font_dialog));
-}
-
-static void
-purplerc_font_response_special(GtkDialog *font_dialog, gint response,
-                             gpointer data)
-{
-	if (response == GTK_RESPONSE_OK) {
-		char *fontname = NULL;
-
-		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
-
-		purple_prefs_set_string("/plugins/gtk/purplerc/gtk-font-name",
-		                      fontname);
-		g_free(fontname);
-	}
-	gtk_widget_destroy(GTK_WIDGET(font_dialog));
-}
-
-static void
-purplerc_set_font_special(GtkWidget *widget, gpointer data)
-{
-	GtkWidget *font_dialog = NULL;
-	const char *pref = NULL;
-
-	font_dialog = gtk_font_selection_dialog_new(_("Select Interface Font"));
-	g_signal_connect(G_OBJECT(font_dialog), "response",
-	                 G_CALLBACK(purplerc_font_response_special), NULL);
-
-	pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
-
-	if (pref != NULL && strcmp(pref, "")) {
-		gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font_dialog)->fontsel), pref);
-	}
-
-	gtk_window_present(GTK_WINDOW(font_dialog));
-}
-
-static gboolean
-purplerc_plugin_load(PurplePlugin *plugin)
-{
-	purplerc_make_changes();
-
-	pref_callback = purple_prefs_connect_callback(plugin, "/plugins/gtk/purplerc",
-	                                            purplerc_pref_changed_cb, NULL);
-
-	return TRUE;
-}
-
-static gboolean
-purplerc_plugin_unload(PurplePlugin *plugin)
-{
-	purple_prefs_disconnect_callback(pref_callback);
-
-	return TRUE;
-}
-
-static GtkWidget *
-purplerc_get_config_frame(PurplePlugin *plugin)
-{
-	/* Note: Intentionally not using the size group argument to the
-	 * pidgin_prefs_labeled_* functions they only add the text label to
-	 * the size group not the whole thing, which isn't what I want. */
-	int i;
-	char *tmp;
-	GtkWidget *check = NULL, *widget = NULL;
-	GtkSizeGroup *labelsg = NULL, *widgetsg = NULL;
-	GtkWidget *ret = NULL, *frame = NULL, *hbox = NULL, *vbox = NULL;
-
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
-
-	labelsg  = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-	widgetsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-	frame = pidgin_make_frame(ret, _("General"));
-	/* interface font */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
-
-	check = pidgin_prefs_checkbox(_("GTK+ Interface Font"),
-	                                "/plugins/gtk/purplerc/set/gtk-font-name",
-	                                hbox);
-	gtk_size_group_add_widget(labelsg, check);
-
-	widget = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT,
-	                                       PIDGIN_BUTTON_HORIZONTAL);
-	gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
-	gtk_size_group_add_widget(widgetsg, widget);
-	gtk_widget_set_sensitive(widget,
-	                         purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name"));
-	g_signal_connect(G_OBJECT(check), "toggled",
-	                 G_CALLBACK(pidgin_toggle_sensitive), widget);
-	g_signal_connect(G_OBJECT(widget), "clicked",
-	                 G_CALLBACK(purplerc_set_font_special), NULL);
-
-	/* key theme name */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
-
-	check = pidgin_prefs_checkbox(_("GTK+ Text Shortcut Theme"),
-	                                "/plugins/gtk/purplerc/set/gtk-key-theme-name",
-	                                hbox);
-	gtk_size_group_add_widget(labelsg, check);
-
-	widget = pidgin_prefs_labeled_entry(hbox, "",
-	                                      "/plugins/gtk/purplerc/gtk-key-theme-name",
-	                                      NULL);
-	/*
-	gtk_size_group_add_widget(widgetsg, widget);
-	*/
-	gtk_widget_set_sensitive(widget,
-	                         purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name"));
-	g_signal_connect(G_OBJECT(check), "toggled",
-	                 G_CALLBACK(pidgin_toggle_sensitive), widget);
-
-	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
-
-		check = pidgin_prefs_checkbox(_(widget_bool_names[i]),
-		                                widget_bool_prefs_set[i], hbox);
-		gtk_size_group_add_widget(labelsg, check);
-
-		widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox);
-		/*
-		gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]);
-		*/
-		gtk_widget_set_sensitive(widget_bool_widgets[i],
-		                         purple_prefs_get_bool(widget_bool_prefs_set[i]));
-		g_signal_connect(G_OBJECT(check), "toggled",
-		                 G_CALLBACK(pidgin_toggle_sensitive),
-		                 widget_bool_widgets[i]);
-	}
-
-	frame = pidgin_make_frame(ret, _("Interface colors"));
-	/* imhtml stuff */
-	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
-
-		check = pidgin_prefs_checkbox(_(color_names[i]),
-		                                color_prefs_set[i], hbox);
-		gtk_size_group_add_widget(labelsg, check);
-
-		color_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_COLOR, PIDGIN_BUTTON_HORIZONTAL);
-		gtk_size_group_add_widget(widgetsg, color_widgets[i]);
-		gtk_box_pack_start(GTK_BOX(hbox), color_widgets[i], FALSE,
-		                   FALSE, 0);
-		gtk_widget_set_sensitive(color_widgets[i],
-		                         purple_prefs_get_bool(color_prefs_set[i]));
-		g_signal_connect(G_OBJECT(check), "toggled",
-		                 G_CALLBACK(pidgin_toggle_sensitive),
-		                 color_widgets[i]);
-		g_signal_connect(G_OBJECT(color_widgets[i]), "clicked",
-		                 G_CALLBACK(purplerc_set_color),
-		                 GINT_TO_POINTER(i));
-	}
-
-	frame = pidgin_make_frame(ret, _("Widget Sizes"));
-	/* widget size stuff */
-	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
-
-		check = pidgin_prefs_checkbox(_(widget_size_names[i]),
-		                                widget_size_prefs_set[i], hbox);
-		gtk_size_group_add_widget(labelsg, check);
-
-		widget_size_widgets[i] = pidgin_prefs_labeled_spin_button(hbox, "", widget_size_prefs[i], 0, 50, NULL);
-		/*
-		gtk_size_group_add_widget(widgetsg, widget_size_widgets[i]);
-		*/
-		gtk_widget_set_sensitive(widget_size_widgets[i],
-		                         purple_prefs_get_bool(widget_size_prefs_set[i]));
-		g_signal_connect(G_OBJECT(check), "toggled",
-		                 G_CALLBACK(pidgin_toggle_sensitive),
-		                 widget_size_widgets[i]);
-	}
-
-	frame = pidgin_make_frame(ret, _("Fonts"));
-	/* imhtml font stuff */
-	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
-
-		check = pidgin_prefs_checkbox(_(font_names[i]),
-		                                font_prefs_set[i], hbox);
-		gtk_size_group_add_widget(labelsg, check);
-
-		font_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT, PIDGIN_BUTTON_HORIZONTAL);
-		gtk_size_group_add_widget(widgetsg, font_widgets[i]);
-		gtk_box_pack_start(GTK_BOX(hbox), font_widgets[i], FALSE,
-		                   FALSE, 0);
-		gtk_widget_set_sensitive(font_widgets[i],
-		                         purple_prefs_get_bool(font_prefs_set[i]));
-		g_signal_connect(G_OBJECT(check), "toggled",
-		                 G_CALLBACK(pidgin_toggle_sensitive),
-		                 font_widgets[i]);
-		g_signal_connect(G_OBJECT(font_widgets[i]), "clicked",
-		                 G_CALLBACK(purplerc_set_font), GINT_TO_POINTER(i));
-	}
-
-	frame = pidgin_make_frame(ret, _("Tools"));
-
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-	gtk_box_pack_start(GTK_BOX(frame), vbox, FALSE, FALSE, 0);
-
-	tmp = g_strdup_printf(_("Write settings to %s%sgtkrc-2.0"), purple_user_dir(), G_DIR_SEPARATOR_S);
-	check = gtk_button_new_with_label(tmp);
-	g_free(tmp);
-	gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
-	gtk_size_group_add_widget(labelsg, check);
-	g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_write),
-	                 NULL);
-
-	check = gtk_button_new_with_label(_("Re-read gtkrc files"));
-	gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
-	gtk_size_group_add_widget(labelsg, check);
-	g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_reread),
-	                 NULL);
-
-	gtk_widget_show_all(ret);
-	return ret;
-}
-
-static PidginPluginUiInfo purplerc_ui_info =
-{
-	purplerc_get_config_frame,
-	0 /* page_num (Reserved) */
-};
-
-static PurplePluginInfo purplerc_info =
-{
-	PURPLE_PLUGIN_MAGIC,
-	PURPLE_MAJOR_VERSION,
-	PURPLE_MINOR_VERSION,
-	PURPLE_PLUGIN_STANDARD,
-	PIDGIN_PLUGIN_TYPE,
-	0,
-	NULL,
-	PURPLE_PRIORITY_DEFAULT,
-	"purplerc",
-	N_(PIDGIN_NAME " GTK+ Theme Control"),
-	VERSION,
-	N_("Provides access to commonly used gtkrc settings."),
-	N_("Provides access to commonly used gtkrc settings."),
-	"Etan Reisner <deryni@eden.rutgers.edu>",
-	PURPLE_WEBSITE,
-	purplerc_plugin_load,
-	purplerc_plugin_unload,
-	NULL,
-	&purplerc_ui_info,
-	NULL,
-	NULL,
-	NULL
-};
-
-static void
-purplerc_init(PurplePlugin *plugin)
-{
-	int i;
-
-	purple_prefs_add_none("/plugins");
-	purple_prefs_add_none("/plugins/gtk");
-	purple_prefs_add_none("/plugins/gtk/purplerc");
-	purple_prefs_add_none("/plugins/gtk/purplerc/set");
-
-	purple_prefs_add_string("/plugins/gtk/purplerc/gtk-font-name", "");
-	purple_prefs_add_bool("/plugins/gtk/purplerc/set/gtk-font-name", FALSE);
-
-	purple_prefs_add_string("/plugins/gtk/purplerc/gtk-key-theme-name", "");
-	purple_prefs_add_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name", FALSE);
-
-	purple_prefs_add_none("/plugins/gtk/purplerc/color");
-	purple_prefs_add_none("/plugins/gtk/purplerc/set/color");
-	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
-		purple_prefs_add_string(color_prefs[i], "");
-		purple_prefs_add_bool(color_prefs_set[i], FALSE);
-	}
-
-	purple_prefs_add_none("/plugins/gtk/purplerc/size");
-	purple_prefs_add_none("/plugins/gtk/purplerc/set/size");
-	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
-		purple_prefs_add_int(widget_size_prefs[i], 0);
-		purple_prefs_add_bool(widget_size_prefs_set[i], FALSE);
-	}
-
-	purple_prefs_add_none("/plugins/gtk/purplerc/font");
-	purple_prefs_add_none("/plugins/gtk/purplerc/set/font");
-	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
-		purple_prefs_add_string(font_prefs[i], "");
-		purple_prefs_add_bool(font_prefs_set[i], FALSE);
-	}
-
-	purple_prefs_add_none("/plugins/gtk/purplerc/bool");
-	purple_prefs_add_none("/plugins/gtk/purplerc/set/bool");
-	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
-		purple_prefs_add_bool(widget_bool_prefs[i], TRUE);
-		purple_prefs_add_bool(widget_bool_prefs_set[i], FALSE);
-	}
-}
-
-PURPLE_INIT_PLUGIN(purplerc, purplerc_init, purplerc_info)
--- a/pidgin/plugins/gevolution/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/gevolution/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/pidgin
 
 gevolution_la_LDFLAGS = -module -avoid-version
 
--- a/pidgin/plugins/iconaway.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/iconaway.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,6 +1,6 @@
 /* purple
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/plugins/pidginrc.c	Mon Mar 26 01:55:33 2007 +0000
@@ -0,0 +1,676 @@
+/**
+ * @file purplerc.c Purple gtk resource control plugin.
+ *
+ * Copyright (C) 2005 Etan Reisner <deryni@eden.rutgers.edu>
+ *
+ * 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 "internal.h"
+#include "gtkplugin.h"
+#include "gtkprefs.h"
+#include "gtkutils.h"
+#include "util.h"
+#include "version.h"
+
+static guint pref_callback;
+
+static const char *color_prefs[] = {
+	"/plugins/gtk/purplerc/color/GtkWidget::cursor-color",
+	"/plugins/gtk/purplerc/color/GtkWidget::secondary-cursor-color",
+	"/plugins/gtk/purplerc/color/GtkIMHtml::hyperlink-color"
+};
+static const char *color_prefs_set[] = {
+	"/plugins/gtk/purplerc/set/color/GtkWidget::cursor-color",
+	"/plugins/gtk/purplerc/set/color/GtkWidget::secondary-cursor-color",
+	"/plugins/gtk/purplerc/set/color/GtkIMHtml::hyperlink-color"
+};
+static const char *color_names[] = {
+	N_("Cursor Color"),
+	N_("Secondary Cursor Color"),
+	N_("Hyperlink Color")
+};
+static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)];
+
+static const char *widget_size_prefs[] = {
+	"/plugins/gtk/purplerc/size/GtkTreeView::expander_size",
+	"/plugins/gtk/purplerc/size/GtkTreeView::horizontal_separator"
+};
+static const char *widget_size_prefs_set[] = {
+	"/plugins/gtk/purplerc/set/size/GtkTreeView::expander_size",
+	"/plugins/gtk/purplerc/set/size/GtkTreeView::horizontal_separator"
+};
+static const char *widget_size_names[] = {
+	N_("GtkTreeView Expander Size"),
+	N_("GtkTreeView Horizontal Separation")
+};
+static GtkWidget *widget_size_widgets[G_N_ELEMENTS(widget_size_prefs)];
+
+static const char *font_prefs[] = {
+	"/plugins/gtk/purplerc/font/*pidgin_conv_entry",
+	"/plugins/gtk/purplerc/font/*pidgin_conv_imhtml",
+	"/plugins/gtk/purplerc/font/*pidginlog_imhtml",
+	"/plugins/gtk/purplerc/font/*pidginrequest_imhtml",
+	"/plugins/gtk/purplerc/font/*pidginnotify_imhtml",
+};
+static const char *font_prefs_set[] = {
+	"/plugins/gtk/purplerc/set/font/*pidgin_conv_entry",
+	"/plugins/gtk/purplerc/set/font/*pidgin_conv_imhtml",
+	"/plugins/gtk/purplerc/set/font/*pidginlog_imhtml",
+	"/plugins/gtk/purplerc/set/font/*pidginrequest_imhtml",
+	"/plugins/gtk/purplerc/set/font/*pidginnotify_imhtml",
+};
+static const char *font_names[] = {
+	N_("Conversation Entry"),
+	N_("Conversation History"),
+	N_("Log Viewer"),
+	N_("Request Dialog"),
+	N_("Notify Dialog")
+};
+static GtkWidget *font_widgets[G_N_ELEMENTS(font_prefs)];
+
+static const char *widget_bool_prefs[] = {
+	"/plugins/gtk/purplerc/bool/GtkTreeView::indent_expanders",
+};
+static const char *widget_bool_prefs_set[] = {
+	"/plugins/gtk/purplerc/set/bool/GtkTreeView::indent_expanders",
+};
+static const char *widget_bool_names[] = {
+	N_("GtkTreeView Indent Expanders"),
+};
+static GtkWidget *widget_bool_widgets[G_N_ELEMENTS(widget_bool_prefs)];
+
+static void
+purplerc_make_changes()
+{
+	int i;
+	char *prefbase = NULL;
+#if GTK_CHECK_VERSION(2,4,0)
+	GtkSettings *setting = NULL;
+#endif
+	GString *style_string = g_string_new("");
+
+	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {
+		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
+
+		if (pref != NULL && strcmp(pref, ""))
+			g_string_append_printf(style_string, "gtk-font-name = \"%s\"\n", pref);
+	}
+
+	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {
+		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");
+
+		if (pref != NULL && strcmp(pref, ""))
+			g_string_append_printf(style_string, "gtk-key-theme-name = \"%s\"\n", pref);
+	}
+
+	g_string_append(style_string, "style \"purplerc_style\" {\n");
+
+	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
+		if (purple_prefs_get_bool(color_prefs_set[i])) {
+			const char *pref;
+
+			prefbase = g_path_get_basename(color_prefs[i]);
+			pref = purple_prefs_get_string(color_prefs[i]);
+
+			if (pref != NULL && strcmp(pref, ""))
+			    g_string_append_printf(style_string,
+			                           "%s = \"%s\"\n",
+			                           prefbase, pref);
+			g_free(prefbase);
+		}
+	}
+
+	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
+		if (purple_prefs_get_bool(widget_size_prefs_set[i])) {
+			prefbase = g_path_get_basename(widget_size_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "%s = %d\n", prefbase,
+			                       purple_prefs_get_int(widget_size_prefs[i]));
+			g_free(prefbase);
+		}
+	}
+
+	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
+		if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {
+			prefbase = g_path_get_basename(widget_bool_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "%s = %d\n", prefbase,
+			                       purple_prefs_get_bool(widget_bool_prefs[i]));
+			g_free(prefbase);
+		}
+	}
+
+	g_string_append(style_string, "}");
+	g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");
+
+	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
+		if (purple_prefs_get_bool(font_prefs_set[i])) {
+			const char *pref;
+
+			prefbase = g_path_get_basename(font_prefs[i]);
+			pref = purple_prefs_get_string(font_prefs[i]);
+
+			if (pref != NULL && strcmp(pref, ""))
+				g_string_append_printf(style_string,
+				                       "style \"%s_style\"\n"
+				                       "{font_name = \"%s\"}\n"
+				                       "widget \"%s\""
+				                       "style \"%s_style\"\n",
+				                       prefbase, pref,
+				                       prefbase, prefbase);
+			g_free(prefbase);
+		}
+	}
+
+	gtk_rc_parse_string(style_string->str);
+	g_string_free(style_string, TRUE);
+
+#if GTK_CHECK_VERSION(2,4,0)
+	setting = gtk_settings_get_default();
+	gtk_rc_reset_styles(setting);
+#endif
+}
+
+static void
+purplerc_write(GtkWidget *widget, gpointer data)
+{
+	int i;
+	GString *style_string = g_string_new("");
+	char *prefbase = NULL;
+
+	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")) {
+		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
+
+		if (pref != NULL && strcmp(pref, ""))
+			g_string_append_printf(style_string,
+			                       "gtk-font-name = \"%s\"\n",
+			                       pref);
+	}
+
+	if (purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")) {
+		const char *pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-key-theme-name");
+
+		if (pref != NULL && strcmp(pref, ""))
+			g_string_append_printf(style_string,
+			                       "gtk-key-theme-name = \"%s\"\n",
+			                       pref);
+	}
+
+	g_string_append(style_string, "style \"purplerc_style\" {\n");
+
+	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
+		if (purple_prefs_get_bool(color_prefs_set[i])) {
+			const char *pref;
+
+			prefbase = g_path_get_basename(color_prefs[i]);
+			pref = purple_prefs_get_string(color_prefs[i]);
+
+			if (pref != NULL && strcmp(pref, ""))
+			    g_string_append_printf(style_string,
+			                           "%s = \"%s\"\n",
+			                           prefbase, pref);
+			g_free(prefbase);
+		}
+	}
+
+	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
+		if (purple_prefs_get_bool(widget_size_prefs_set[i])) {
+			prefbase = g_path_get_basename(widget_size_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "%s = %d\n", prefbase,
+			                       purple_prefs_get_int(widget_size_prefs[i]));
+			g_free(prefbase);
+		}
+	}
+
+	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
+		if (purple_prefs_get_bool(widget_bool_prefs_set[i])) {
+			prefbase = g_path_get_basename(widget_bool_prefs[i]);
+			g_string_append_printf(style_string,
+			                       "%s = %d\n", prefbase,
+			                       purple_prefs_get_bool(widget_bool_prefs[i]));
+			g_free(prefbase);
+		}
+	}
+
+	g_string_append(style_string, "}");
+	g_string_append(style_string, "widget_class \"*\" style \"purplerc_style\"\n");
+
+	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
+		if (purple_prefs_get_bool(font_prefs_set[i])) {
+			const char *pref;
+
+			prefbase = g_path_get_basename(font_prefs[i]);
+			pref = purple_prefs_get_string(font_prefs[i]);
+
+			if (pref != NULL && strcmp(pref, ""))
+				g_string_append_printf(style_string,
+				                       "style \"%s_style\"\n"
+				                       "{font_name = \"%s\"}\n"
+				                       "widget \"%s\""
+				                       "style \"%s_style\"\n",
+				                       prefbase, pref,
+				                       prefbase, prefbase);
+			g_free(prefbase);
+		}
+	}
+
+	purple_util_write_data_to_file("gtkrc-2.0", style_string->str, -1);
+
+	g_string_free(style_string, TRUE);
+}
+
+static void
+purplerc_reread(GtkWidget *widget, gpointer data)
+{
+	gtk_rc_reparse_all();
+	/* I don't know if this is necessary but if not it shouldn't hurt. */
+	purplerc_make_changes();
+}
+
+static void
+purplerc_pref_changed_cb(const char *name, PurplePrefType type,
+                       gconstpointer value, gpointer data)
+{
+	purplerc_make_changes();
+}
+
+static void
+purplerc_color_response(GtkDialog *color_dialog, gint response, gpointer data)
+{
+	int subscript = GPOINTER_TO_INT(data);
+
+	if (response == GTK_RESPONSE_OK) {
+		GtkWidget *colorsel = GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel;
+		GdkColor color;
+		char colorstr[8];
+
+		gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(colorsel), &color);
+
+		g_snprintf(colorstr, sizeof(colorstr), "#%02X%02X%02X",
+		           color.red/256, color.green/256, color.blue/256);
+
+		purple_prefs_set_string(color_prefs[subscript], colorstr);
+	}
+	gtk_widget_destroy(GTK_WIDGET(color_dialog));
+}
+
+static void
+purplerc_set_color(GtkWidget *widget, gpointer data)
+{
+	GtkWidget *color_dialog = NULL;
+	GdkColor color;
+	char title[128];
+	const char *pref = NULL;
+	int subscript = GPOINTER_TO_INT(data);
+
+	g_snprintf(title, sizeof(title), _("Select Color for %s"),
+	           _(color_names[GPOINTER_TO_INT(data)]));
+	color_dialog = gtk_color_selection_dialog_new(_("Select Color"));
+	g_signal_connect(G_OBJECT(color_dialog), "response",
+	                 G_CALLBACK(purplerc_color_response), data);
+
+	pref = purple_prefs_get_string(color_prefs[subscript]);
+
+	if (pref != NULL && strcmp(pref, "")) {
+		if (gdk_color_parse(pref, &color)) {
+			gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_dialog)->colorsel), &color);
+		}
+	}
+
+	gtk_window_present(GTK_WINDOW(color_dialog));
+}
+
+static void
+purplerc_font_response(GtkDialog *font_dialog, gint response, gpointer data)
+{
+	int subscript = GPOINTER_TO_INT(data);
+
+	if (response == GTK_RESPONSE_OK) {
+		char *fontname = NULL;
+
+		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
+
+		purple_prefs_set_string(font_prefs[subscript], fontname);
+		g_free(fontname);
+	}
+	gtk_widget_destroy(GTK_WIDGET(font_dialog));
+}
+
+static void
+purplerc_set_font(GtkWidget *widget, gpointer data)
+{
+	GtkWidget *font_dialog = NULL;
+	char title[128];
+	const char *pref = NULL;
+	int subscript = GPOINTER_TO_INT(data);
+
+	g_snprintf(title, sizeof(title), _("Select Font for %s"),
+	           _(font_names[subscript]));
+	font_dialog = gtk_font_selection_dialog_new(title);
+	g_signal_connect(G_OBJECT(font_dialog), "response",
+	                 G_CALLBACK(purplerc_font_response), data);
+
+	pref = purple_prefs_get_string(font_prefs[subscript]);
+
+	if (pref != NULL && strcmp(pref, "")) {
+		gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font_dialog)->fontsel), pref);
+	}
+
+	gtk_window_present(GTK_WINDOW(font_dialog));
+}
+
+static void
+purplerc_font_response_special(GtkDialog *font_dialog, gint response,
+                             gpointer data)
+{
+	if (response == GTK_RESPONSE_OK) {
+		char *fontname = NULL;
+
+		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(font_dialog));
+
+		purple_prefs_set_string("/plugins/gtk/purplerc/gtk-font-name",
+		                      fontname);
+		g_free(fontname);
+	}
+	gtk_widget_destroy(GTK_WIDGET(font_dialog));
+}
+
+static void
+purplerc_set_font_special(GtkWidget *widget, gpointer data)
+{
+	GtkWidget *font_dialog = NULL;
+	const char *pref = NULL;
+
+	font_dialog = gtk_font_selection_dialog_new(_("Select Interface Font"));
+	g_signal_connect(G_OBJECT(font_dialog), "response",
+	                 G_CALLBACK(purplerc_font_response_special), NULL);
+
+	pref = purple_prefs_get_string("/plugins/gtk/purplerc/gtk-font-name");
+
+	if (pref != NULL && strcmp(pref, "")) {
+		gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font_dialog)->fontsel), pref);
+	}
+
+	gtk_window_present(GTK_WINDOW(font_dialog));
+}
+
+static gboolean
+purplerc_plugin_load(PurplePlugin *plugin)
+{
+	purplerc_make_changes();
+
+	pref_callback = purple_prefs_connect_callback(plugin, "/plugins/gtk/purplerc",
+	                                            purplerc_pref_changed_cb, NULL);
+
+	return TRUE;
+}
+
+static gboolean
+purplerc_plugin_unload(PurplePlugin *plugin)
+{
+	purple_prefs_disconnect_callback(pref_callback);
+
+	return TRUE;
+}
+
+static GtkWidget *
+purplerc_get_config_frame(PurplePlugin *plugin)
+{
+	/* Note: Intentionally not using the size group argument to the
+	 * pidgin_prefs_labeled_* functions they only add the text label to
+	 * the size group not the whole thing, which isn't what I want. */
+	int i;
+	char *tmp;
+	GtkWidget *check = NULL, *widget = NULL;
+	GtkSizeGroup *labelsg = NULL, *widgetsg = NULL;
+	GtkWidget *ret = NULL, *frame = NULL, *hbox = NULL, *vbox = NULL;
+
+	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
+
+	labelsg  = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+	widgetsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+	frame = pidgin_make_frame(ret, _("General"));
+	/* interface font */
+	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
+
+	check = pidgin_prefs_checkbox(_("GTK+ Interface Font"),
+	                                "/plugins/gtk/purplerc/set/gtk-font-name",
+	                                hbox);
+	gtk_size_group_add_widget(labelsg, check);
+
+	widget = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT,
+	                                       PIDGIN_BUTTON_HORIZONTAL);
+	gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
+	gtk_size_group_add_widget(widgetsg, widget);
+	gtk_widget_set_sensitive(widget,
+	                         purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name"));
+	g_signal_connect(G_OBJECT(check), "toggled",
+	                 G_CALLBACK(pidgin_toggle_sensitive), widget);
+	g_signal_connect(G_OBJECT(widget), "clicked",
+	                 G_CALLBACK(purplerc_set_font_special), NULL);
+
+	/* key theme name */
+	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
+
+	check = pidgin_prefs_checkbox(_("GTK+ Text Shortcut Theme"),
+	                                "/plugins/gtk/purplerc/set/gtk-key-theme-name",
+	                                hbox);
+	gtk_size_group_add_widget(labelsg, check);
+
+	widget = pidgin_prefs_labeled_entry(hbox, "",
+	                                      "/plugins/gtk/purplerc/gtk-key-theme-name",
+	                                      NULL);
+	/*
+	gtk_size_group_add_widget(widgetsg, widget);
+	*/
+	gtk_widget_set_sensitive(widget,
+	                         purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name"));
+	g_signal_connect(G_OBJECT(check), "toggled",
+	                 G_CALLBACK(pidgin_toggle_sensitive), widget);
+
+	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
+		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
+
+		check = pidgin_prefs_checkbox(_(widget_bool_names[i]),
+		                                widget_bool_prefs_set[i], hbox);
+		gtk_size_group_add_widget(labelsg, check);
+
+		widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox);
+		/*
+		gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]);
+		*/
+		gtk_widget_set_sensitive(widget_bool_widgets[i],
+		                         purple_prefs_get_bool(widget_bool_prefs_set[i]));
+		g_signal_connect(G_OBJECT(check), "toggled",
+		                 G_CALLBACK(pidgin_toggle_sensitive),
+		                 widget_bool_widgets[i]);
+	}
+
+	frame = pidgin_make_frame(ret, _("Interface colors"));
+	/* imhtml stuff */
+	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
+		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
+
+		check = pidgin_prefs_checkbox(_(color_names[i]),
+		                                color_prefs_set[i], hbox);
+		gtk_size_group_add_widget(labelsg, check);
+
+		color_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_COLOR, PIDGIN_BUTTON_HORIZONTAL);
+		gtk_size_group_add_widget(widgetsg, color_widgets[i]);
+		gtk_box_pack_start(GTK_BOX(hbox), color_widgets[i], FALSE,
+		                   FALSE, 0);
+		gtk_widget_set_sensitive(color_widgets[i],
+		                         purple_prefs_get_bool(color_prefs_set[i]));
+		g_signal_connect(G_OBJECT(check), "toggled",
+		                 G_CALLBACK(pidgin_toggle_sensitive),
+		                 color_widgets[i]);
+		g_signal_connect(G_OBJECT(color_widgets[i]), "clicked",
+		                 G_CALLBACK(purplerc_set_color),
+		                 GINT_TO_POINTER(i));
+	}
+
+	frame = pidgin_make_frame(ret, _("Widget Sizes"));
+	/* widget size stuff */
+	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
+		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
+
+		check = pidgin_prefs_checkbox(_(widget_size_names[i]),
+		                                widget_size_prefs_set[i], hbox);
+		gtk_size_group_add_widget(labelsg, check);
+
+		widget_size_widgets[i] = pidgin_prefs_labeled_spin_button(hbox, "", widget_size_prefs[i], 0, 50, NULL);
+		/*
+		gtk_size_group_add_widget(widgetsg, widget_size_widgets[i]);
+		*/
+		gtk_widget_set_sensitive(widget_size_widgets[i],
+		                         purple_prefs_get_bool(widget_size_prefs_set[i]));
+		g_signal_connect(G_OBJECT(check), "toggled",
+		                 G_CALLBACK(pidgin_toggle_sensitive),
+		                 widget_size_widgets[i]);
+	}
+
+	frame = pidgin_make_frame(ret, _("Fonts"));
+	/* imhtml font stuff */
+	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
+		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+		gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
+
+		check = pidgin_prefs_checkbox(_(font_names[i]),
+		                                font_prefs_set[i], hbox);
+		gtk_size_group_add_widget(labelsg, check);
+
+		font_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT, PIDGIN_BUTTON_HORIZONTAL);
+		gtk_size_group_add_widget(widgetsg, font_widgets[i]);
+		gtk_box_pack_start(GTK_BOX(hbox), font_widgets[i], FALSE,
+		                   FALSE, 0);
+		gtk_widget_set_sensitive(font_widgets[i],
+		                         purple_prefs_get_bool(font_prefs_set[i]));
+		g_signal_connect(G_OBJECT(check), "toggled",
+		                 G_CALLBACK(pidgin_toggle_sensitive),
+		                 font_widgets[i]);
+		g_signal_connect(G_OBJECT(font_widgets[i]), "clicked",
+		                 G_CALLBACK(purplerc_set_font), GINT_TO_POINTER(i));
+	}
+
+	frame = pidgin_make_frame(ret, _("Tools"));
+
+	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	gtk_box_pack_start(GTK_BOX(frame), vbox, FALSE, FALSE, 0);
+
+	tmp = g_strdup_printf(_("Write settings to %s%sgtkrc-2.0"), purple_user_dir(), G_DIR_SEPARATOR_S);
+	check = gtk_button_new_with_label(tmp);
+	g_free(tmp);
+	gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
+	gtk_size_group_add_widget(labelsg, check);
+	g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_write),
+	                 NULL);
+
+	check = gtk_button_new_with_label(_("Re-read gtkrc files"));
+	gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
+	gtk_size_group_add_widget(labelsg, check);
+	g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_reread),
+	                 NULL);
+
+	gtk_widget_show_all(ret);
+	return ret;
+}
+
+static PidginPluginUiInfo purplerc_ui_info =
+{
+	purplerc_get_config_frame,
+	0 /* page_num (Reserved) */
+};
+
+static PurplePluginInfo purplerc_info =
+{
+	PURPLE_PLUGIN_MAGIC,
+	PURPLE_MAJOR_VERSION,
+	PURPLE_MINOR_VERSION,
+	PURPLE_PLUGIN_STANDARD,
+	PIDGIN_PLUGIN_TYPE,
+	0,
+	NULL,
+	PURPLE_PRIORITY_DEFAULT,
+	"purplerc",
+	N_(PIDGIN_NAME " GTK+ Theme Control"),
+	VERSION,
+	N_("Provides access to commonly used gtkrc settings."),
+	N_("Provides access to commonly used gtkrc settings."),
+	"Etan Reisner <deryni@eden.rutgers.edu>",
+	PURPLE_WEBSITE,
+	purplerc_plugin_load,
+	purplerc_plugin_unload,
+	NULL,
+	&purplerc_ui_info,
+	NULL,
+	NULL,
+	NULL
+};
+
+static void
+purplerc_init(PurplePlugin *plugin)
+{
+	int i;
+
+	purple_prefs_add_none("/plugins");
+	purple_prefs_add_none("/plugins/gtk");
+	purple_prefs_add_none("/plugins/gtk/purplerc");
+	purple_prefs_add_none("/plugins/gtk/purplerc/set");
+
+	purple_prefs_add_string("/plugins/gtk/purplerc/gtk-font-name", "");
+	purple_prefs_add_bool("/plugins/gtk/purplerc/set/gtk-font-name", FALSE);
+
+	purple_prefs_add_string("/plugins/gtk/purplerc/gtk-key-theme-name", "");
+	purple_prefs_add_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name", FALSE);
+
+	purple_prefs_add_none("/plugins/gtk/purplerc/color");
+	purple_prefs_add_none("/plugins/gtk/purplerc/set/color");
+	for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) {
+		purple_prefs_add_string(color_prefs[i], "");
+		purple_prefs_add_bool(color_prefs_set[i], FALSE);
+	}
+
+	purple_prefs_add_none("/plugins/gtk/purplerc/size");
+	purple_prefs_add_none("/plugins/gtk/purplerc/set/size");
+	for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) {
+		purple_prefs_add_int(widget_size_prefs[i], 0);
+		purple_prefs_add_bool(widget_size_prefs_set[i], FALSE);
+	}
+
+	purple_prefs_add_none("/plugins/gtk/purplerc/font");
+	purple_prefs_add_none("/plugins/gtk/purplerc/set/font");
+	for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) {
+		purple_prefs_add_string(font_prefs[i], "");
+		purple_prefs_add_bool(font_prefs_set[i], FALSE);
+	}
+
+	purple_prefs_add_none("/plugins/gtk/purplerc/bool");
+	purple_prefs_add_none("/plugins/gtk/purplerc/set/bool");
+	for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) {
+		purple_prefs_add_bool(widget_bool_prefs[i], TRUE);
+		purple_prefs_add_bool(widget_bool_prefs_set[i], FALSE);
+	}
+}
+
+PURPLE_INIT_PLUGIN(purplerc, purplerc_init, purplerc_info)
--- a/pidgin/plugins/raw.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/raw.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,7 +1,7 @@
 /*
  * Purple - Send raw data across the connections of some protocols.
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/plugins/relnot.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/relnot.c	Mon Mar 26 01:55:33 2007 +0000
@@ -96,7 +96,7 @@
 {
 	int last_check = purple_prefs_get_int("/plugins/gtk/relnot/last_check");
 	if(!last_check || time(NULL) - last_check > MIN_CHECK_INTERVAL) {
-		char *url = g_strdup_printf("http://purple.sourceforge.net/version.php?version=%s&build=%s", purple_core_get_version(),
+		char *url = g_strdup_printf("http://pidgin.im/version.php?version=%s&build=%s", purple_core_get_version(),
 #ifdef _WIN32
 				"purple-win32"
 #else
--- a/pidgin/plugins/spellchk.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/spellchk.c	Mon Mar 26 01:55:33 2007 +0000
@@ -5,7 +5,7 @@
  * Richard Laager ("rlaager") in April 2005--you may want to contact
  * them if you have questions.
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/plugins/timestamp_format.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/plugins/timestamp_format.c	Mon Mar 26 01:55:33 2007 +0000
@@ -131,13 +131,13 @@
 	PURPLE_PLUGIN_MAGIC,
 	PURPLE_MAJOR_VERSION,
 	PURPLE_MINOR_VERSION,
-	PURPLE_PLUGIN_STANDARD,                             /**< type           */
+	PURPLE_PLUGIN_STANDARD,                           /**< type           */
 	PIDGIN_PLUGIN_TYPE,                               /**< ui_requirement */
 	0,                                                /**< flags          */
 	NULL,                                             /**< dependencies   */
-	PURPLE_PRIORITY_DEFAULT,                            /**< priority       */
+	PURPLE_PRIORITY_DEFAULT,                          /**< priority       */
 
-	NULL,                                             /**< id             */
+	"core-timestamp_format",                          /**< id             */
 	N_("Message Timestamp Formats"),                  /**< name           */
 	VERSION,                                          /**< version        */
 	                                                  /**  summary        */
@@ -147,7 +147,7 @@
 	   "conversation and logging message timestamp "
 	   "formats."),
 	"Richard Laager <rlaager@pidgin.im>",             /**< author         */
-	PURPLE_WEBSITE,                                     /**< homepage       */
+	PURPLE_WEBSITE,                                   /**< homepage       */
 
 	plugin_load,                                      /**< load           */
 	plugin_unload,                                    /**< unload         */
--- a/pidgin/sounds/Makefile.am	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/sounds/Makefile.am	Mon Mar 26 01:55:33 2007 +0000
@@ -1,4 +1,4 @@
-soundsdir =	$(datadir)/sounds/gaim
+soundsdir =	$(datadir)/sounds/pidgin
 sounds_DATA =	\
 		alert.wav \
 		login.wav \
--- a/pidgin/win32/pidgin_exe_rc.rc.in	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/win32/pidgin_exe_rc.rc.in	Mon Mar 26 01:55:33 2007 +0000
@@ -33,4 +33,4 @@
     END
   END
 
-PURPLE_ICON			ICON PIXMAPDIR "gaim.ico"
+PURPLE_ICON			ICON PIXMAPDIR "pidgin.ico"
--- a/pidgin/win32/winpidgin.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/win32/winpidgin.c	Mon Mar 26 01:55:33 2007 +0000
@@ -5,7 +5,7 @@
  *  Description: Entry point for win32 pidgin, and various win32 dependant
  *  routines.
  *
- * Purple is the legal property of its developers, whose names are too numerous
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
--- a/pidgin/win32/wspell.c	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/win32/wspell.c	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /*
- * purple
+ * pidgin
  *
  * File: wspell.c
  * Date: March, 2003
--- a/pidgin/win32/wspell.h	Mon Mar 26 01:11:46 2007 +0000
+++ b/pidgin/win32/wspell.h	Mon Mar 26 01:55:33 2007 +0000
@@ -1,5 +1,5 @@
 /*
- * purple
+ * pidgin
  *
  * File: wspell.h
  *
--- a/po/POTFILES.in	Mon Mar 26 01:11:46 2007 +0000
+++ b/po/POTFILES.in	Mon Mar 26 01:55:33 2007 +0000
@@ -1,12 +1,13 @@
-pidgin.desktop.in
+finch/finch.c
 finch/gntaccount.c
 finch/gntblist.c
 finch/gntconn.c
 finch/gntconv.c
 finch/gntdebug.c
-finch/gntgaim.c
+finch/gntft.c
 finch/gntnotify.c
 finch/gntplugin.c
+finch/gntpounce.c
 finch/gntprefs.c
 finch/gntrequest.c
 finch/gntstatus.c
@@ -25,76 +26,19 @@
 finch/libgnt/gnttree.c
 finch/libgnt/gntutils.c
 finch/libgnt/gntwidget.c
+finch/plugins/gntclipboard.c
 finch/plugins/gntgf.c
 finch/plugins/gnthistory.c
 finch/plugins/lastlog.c
-pidgin/eggtrayicon.c
-pidgin/gaimcombobox.c
-pidgin/gaimstock.c
-pidgin/gtkaccount.c
-pidgin/gtkblist.c
-pidgin/gtkcellview.c
-pidgin/gtkconn.c
-pidgin/gtkconv.c
-pidgin/gtkdebug.c
-pidgin/gtkdialogs.c
-pidgin/gtkdocklet.c
-pidgin/gtkexpander.c
-pidgin/gtkft.c
-pidgin/gtkimhtml.c
-pidgin/gtkimhtmltoolbar.c
-pidgin/gtklog.c
-pidgin/gtkmain.c
-pidgin/gtknotify.c
-pidgin/gtkplugin.c
-pidgin/gtkpounce.c
-pidgin/gtkprefs.c
-pidgin/gtkprivacy.c
-pidgin/gtkrequest.c
-pidgin/gtkroomlist.c
-pidgin/gtksavedstatuses.c
-pidgin/gtksound.c
-pidgin/gtkstatusbox.c
-pidgin/gtkutils.c
-pidgin/gtkwhiteboard.c
-pidgin/plugins/cap/cap.c
-pidgin/plugins/contact_priority.c
-pidgin/plugins/convcolors.c
-pidgin/plugins/extplacement.c
-pidgin/plugins/gaiminc.c
-pidgin/plugins/gaimrc.c
-pidgin/plugins/gestures/gestures.c
-pidgin/plugins/gevolution/add_buddy_dialog.c
-pidgin/plugins/gevolution/assoc-buddy.c
-pidgin/plugins/gevolution/eds-utils.c
-pidgin/plugins/gevolution/gevolution.c
-pidgin/plugins/gevolution/gevo-util.c
-pidgin/plugins/gevolution/new_person_dialog.c
-pidgin/plugins/gtk-signals-test.c
-pidgin/plugins/history.c
-pidgin/plugins/iconaway.c
-pidgin/plugins/mailchk.c
-pidgin/plugins/markerline.c
-pidgin/plugins/musicmessaging/musicmessaging.c
-pidgin/plugins/notify.c
-pidgin/plugins/raw.c
-pidgin/plugins/relnot.c
-pidgin/plugins/spellchk.c
-pidgin/plugins/ticker/ticker.c
-pidgin/plugins/timestamp.c
-pidgin/plugins/timestamp_format.c
-pidgin/plugins/xmppconsole.c
-pidgin/plugins/win32/transparency/win2ktrans.c
-pidgin/plugins/win32/winprefs/winprefs.c
 libpurple/account.c
 libpurple/blist.c
 libpurple/connection.c
 libpurple/conversation.c
+libpurple/dbus-server.c
 libpurple/desktopitem.c
-libpurple/dbus-server.c
 libpurple/dnsquery.c
 libpurple/ft.c
-libpurple/gconf/gaim.schemas.in
+libpurple/gconf/purple.schemas.in
 libpurple/log.c
 libpurple/plugin.c
 libpurple/plugins/autoaccept.c
@@ -106,6 +50,7 @@
 libpurple/plugins/idle.c
 libpurple/plugins/ipc-test-client.c
 libpurple/plugins/ipc-test-server.c
+libpurple/plugins/joinpart.c
 libpurple/plugins/log_reader.c
 libpurple/plugins/mono/loader/mono.c
 libpurple/plugins/newline.c
@@ -201,5 +146,62 @@
 libpurple/server.c
 libpurple/status.c
 libpurple/util.c
-
- 	  	 
+pidgin.desktop.in
+pidgin/eggtrayicon.c
+pidgin/gtkaccount.c
+pidgin/gtkblist.c
+pidgin/gtkcellview.c
+pidgin/gtkconn.c
+pidgin/gtkconv.c
+pidgin/gtkdebug.c
+pidgin/gtkdialogs.c
+pidgin/gtkdocklet.c
+pidgin/gtkexpander.c
+pidgin/gtkft.c
+pidgin/gtkimhtml.c
+pidgin/gtkimhtmltoolbar.c
+pidgin/gtklog.c
+pidgin/gtkmain.c
+pidgin/gtknotify.c
+pidgin/gtkplugin.c
+pidgin/gtkpounce.c
+pidgin/gtkprefs.c
+pidgin/gtkprivacy.c
+pidgin/gtkrequest.c
+pidgin/gtkroomlist.c
+pidgin/gtksavedstatuses.c
+pidgin/gtksound.c
+pidgin/gtkstatusbox.c
+pidgin/gtkutils.c
+pidgin/gtkwhiteboard.c
+pidgin/pidgincombobox.c
+pidgin/pidginstock.c
+pidgin/plugins/cap/cap.c
+pidgin/plugins/contact_priority.c
+pidgin/plugins/convcolors.c
+pidgin/plugins/extplacement.c
+pidgin/plugins/gaiminc.c
+pidgin/plugins/gestures/gestures.c
+pidgin/plugins/gevolution/add_buddy_dialog.c
+pidgin/plugins/gevolution/assoc-buddy.c
+pidgin/plugins/gevolution/eds-utils.c
+pidgin/plugins/gevolution/gevolution.c
+pidgin/plugins/gevolution/gevo-util.c
+pidgin/plugins/gevolution/new_person_dialog.c
+pidgin/plugins/gtk-signals-test.c
+pidgin/plugins/history.c
+pidgin/plugins/iconaway.c
+pidgin/plugins/mailchk.c
+pidgin/plugins/markerline.c
+pidgin/plugins/musicmessaging/musicmessaging.c
+pidgin/plugins/notify.c
+pidgin/plugins/pidginrc.c
+pidgin/plugins/raw.c
+pidgin/plugins/relnot.c
+pidgin/plugins/spellchk.c
+pidgin/plugins/ticker/ticker.c
+pidgin/plugins/timestamp.c
+pidgin/plugins/timestamp_format.c
+pidgin/plugins/win32/transparency/win2ktrans.c
+pidgin/plugins/win32/winprefs/winprefs.c
+pidgin/plugins/xmppconsole.c
--- a/po/ta.po	Mon Mar 26 01:11:46 2007 +0000
+++ b/po/ta.po	Mon Mar 26 01:55:33 2007 +0000
@@ -8,7 +8,7 @@
 # drtvasudevan <agnihot3@gmail.com>, 2006.
 msgid ""
 msgstr ""
-"Project-Id-Version: gaimta\n"
+"Project-Id-Version: ta\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-10-04 19:30+0000\n"
 "PO-Revision-Date: 2006-11-28 22:37+0530\n"
@@ -7670,7 +7670,7 @@
 #: ../src/protocols/msn/msn.c:1555
 #, c-format
 msgid "%s<b>General</b><br>%s"
-msgstr "s<b> பொது</b><br> s"
+msgstr "%s<b> பொது</b><br> s %s"
 
 #: ../src/protocols/msn/msn.c:1564
 #: ../src/protocols/yahoo/yahoo_profile.c:1061
@@ -7759,11 +7759,6 @@
 msgid "Notes"
 msgstr "குறிப்புகள்"
 
-#: ../src/protocols/msn/msn.c:1599
-#, c-format
-msgid "<br><b>Personal</b><br>%s"
-msgstr "<br><b> தனிப்பட்ட</b><br> s"
-
 #: ../src/protocols/msn/msn.c:1606
 #: ../src/protocols/silc/ops.c:1044
 msgid "Job Title"
@@ -7823,12 +7818,12 @@
 #: ../src/protocols/msn/msn.c:1623
 #, c-format
 msgid "<br><b>Business</b><br>%s"
-msgstr "<br><b> தொழில்</b><br> s"
+msgstr "<br><b> தொழில்</b><br> s>%s"
 
 #: ../src/protocols/msn/msn.c:1634
 #, c-format
 msgid "<hr><b>Contact Info</b>%s%s"
-msgstr "<hr><b> தொடர்பு தகவல்</b> s s"
+msgstr "<hr><b> தொடர்பு தகவல்</b> s s%s%s"
 
 #: ../src/protocols/msn/msn.c:1693
 #: ../src/protocols/msn/msn.c:1699
@@ -9607,7 +9602,7 @@
 #: ../src/protocols/sametime/sametime.c:1268
 #, c-format
 msgid "<b>Notes Group ID:</b> %s<br>"
-msgstr "<b> குறிப்புகள் குழு அடையாளம்</b> s<br>"
+msgstr "<b> குறிப்புகள் குழு அடையாளம்</b> s<br></b>%s<br>"
 
 #: ../src/protocols/sametime/sametime.c:1270
 #, c-format
@@ -9809,7 +9804,7 @@
 #: ../src/protocols/sametime/sametime.c:4088
 #, c-format
 msgid "<b>User ID:</b> %s<br>"
-msgstr "<b> பயனர் அடையாளம்</b> s<br>"
+msgstr "<b> பயனர் அடையாளம்</b> s<br%s<br>"
 
 #: ../src/protocols/sametime/sametime.c:4094
 #, c-format