changeset 9594:15d09e546cee

[gaim-migrate @ 10437] I changed the 2 preferences dealing with auto-responses. It's a drop down box. Check it out. I also made Gaim not load .gaimrc committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 25 Jul 2004 22:13:03 +0000
parents a64febebdd1e
children 7541a9bee2cd
files src/Makefile.am src/dialogs.c src/gaim.h src/gaimrc.c src/main.c src/prefs.c src/server.c
diffstat 7 files changed, 57 insertions(+), 1625 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile.am	Sun Jul 25 17:52:22 2004 +0000
+++ b/src/Makefile.am	Sun Jul 25 22:13:03 2004 +0000
@@ -143,7 +143,6 @@
 	dialogs.c \
 	dnd-hints.c \
 	gaim-disclosure.c \
-	gaimrc.c \
 	gtkaccount.c \
 	gtkcellrendererprogress.c \
 	gtkblist.c \
--- a/src/dialogs.c	Sun Jul 25 17:52:22 2004 +0000
+++ b/src/dialogs.c	Sun Jul 25 22:13:03 2004 +0000
@@ -588,6 +588,17 @@
 	away_mess_destroy(NULL, ca);
 }
 
+static gint sort_awaymsg_list(gconstpointer a, gconstpointer b)
+{
+	struct away_message *msg_a;
+	struct away_message *msg_b;
+
+	msg_a = (struct away_message *)a;
+	msg_b = (struct away_message *)b;
+
+	return (strcmp(msg_a->name, msg_b->name));
+}
+
 static struct away_message *save_away_message(struct create_away *ca)
 {
 	struct away_message *am;
--- a/src/gaim.h	Sun Jul 25 17:52:22 2004 +0000
+++ b/src/gaim.h	Sun Jul 25 22:13:03 2004 +0000
@@ -43,9 +43,6 @@
 extern void show_confirm_del_blist_chat(GaimChat *);
 extern void show_confirm_del_contact(GaimContact *);
 
-/* Functions in gaimrc.c */
-extern gint sort_awaymsg_list(gconstpointer, gconstpointer);
-
 /* Functions in idle.c */
 extern gint check_idle(gpointer);
 
--- a/src/gaimrc.c	Sun Jul 25 17:52:22 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1597 +0,0 @@
-/*
- * gaim
- *
- * Gaim 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
- *
- */
-#include "gtkinternal.h"
-
-#include "account.h"
-#include "debug.h"
-#include "log.h"
-#include "notify.h"
-#include "pounce.h"
-#include "prefs.h"
-#include "proxy.h"
-#include "prpl.h"
-#include "sound.h"
-#include "status.h"
-#include "ui.h"
-#include "util.h"
-
-#include "gaim.h"
-
-#include "gtkpounce.h"
-#include "gtksound.h"
-#include "gtkplugin.h"
-#include "gtkutils.h"
-
-/* for people like myself, who are too lazy to add an away msg :) */
-#define BORING_DEFAULT_AWAY_MSG _("sorry, i ran out for a while. bbl")
-#define MAX_VALUES 10
-
-/* We're going to ignore strikethough and assume "custom font"
-   means to send custom formatting */
-#define OPT_FONT_BOLD			0x00000001
-#define OPT_FONT_ITALIC			0x00000002
-#define OPT_FONT_UNDERLINE		0x00000008
-#define OPT_FONT_FACE			0x00000020
-
-#define OPT_MISC_DEBUG			0x00000001
-#define OPT_MISC_BROWSER_POPUP		0x00000002
-#define OPT_MISC_BUDDY_TICKER		0x00000004
-#define OPT_MISC_STEALTH_TYPING		0x00000010
-#define OPT_MISC_USE_SERVER_ALIAS	0x00000020
-
-#define OPT_LOG_CONVOS			0x00000001
-#define OPT_LOG_STRIP_HTML		0x00000002
-#define OPT_LOG_INDIVIDUAL		0x00000040
-#define OPT_LOG_CHATS			0x00000100
-#define OPT_LOG_BUDDY_SIGNON            0x00000004
-#define OPT_LOG_BUDDY_IDLE		0x00000008
-#define OPT_LOG_BUDDY_AWAY		0x00000010
-#define OPT_LOG_MY_SIGNON		0x00000020
-
-#define OPT_BLIST_SHOW_GRPNUM		0x00000008
-#define OPT_BLIST_SHOW_PIXMAPS		0x00000010
-#define OPT_BLIST_SHOW_IDLETIME		0x00000020
-#define OPT_BLIST_SHOW_BUTTON_XPM	0x00000040
-#define OPT_BLIST_NO_BUTTON_TEXT	0x00000080
-#define OPT_BLIST_NO_MT_GRP		0x00000100
-#define OPT_BLIST_SHOW_WARN		0x00000200
-#define OPT_BLIST_GREY_IDLERS		0x00000400
-#define OPT_BLIST_POPUP                 0x00001000
-#define OPT_BLIST_SHOW_ICONS            0x00002000
-#define OPT_BLIST_SHOW_OFFLINE          0x00004000
-
-#define OPT_CONVO_ENTER_SENDS		0x00000001
-#define OPT_CONVO_SEND_LINKS		0x00000002
-#define OPT_CONVO_CHECK_SPELLING	0x00000004
-#define OPT_CONVO_CTL_CHARS		0x00000008
-#define OPT_CONVO_CTL_SMILEYS		0x00000010
-#define OPT_CONVO_ESC_CAN_CLOSE		0x00000020
-#define OPT_CONVO_CTL_ENTER		0x00000040
-#define OPT_CONVO_F2_TOGGLES		0x00000080
-#define OPT_CONVO_SHOW_TIME		0x00000100
-#define OPT_CONVO_IGNORE_COLOUR		0x00000200
-#define OPT_CONVO_SHOW_SMILEY		0x00000400
-#define OPT_CONVO_IGNORE_FONTS		0x00000800
-#define OPT_CONVO_IGNORE_SIZES		0x00001000
-#define OPT_CONVO_COMBINE		0x00002000
-#define OPT_CONVO_CTL_W_CLOSES          0x00004000
-#define OPT_CONVO_NO_X_ON_TAB		0x00008000
-
-#define OPT_IM_POPUP			0x00000001
-#define OPT_IM_LOGON			0x00000002
-#define OPT_IM_BUTTON_TEXT		0x00000004
-#define OPT_IM_BUTTON_XPM		0x00000008
-#define OPT_IM_ONE_WINDOW		0x00000010
-#define OPT_IM_SIDE_TAB			0x00000020
-#define OPT_IM_BR_TAB			0x00000040
-#define OPT_IM_HIDE_ICONS		0x00000080
-#define OPT_IM_NO_ANIMATION		0x00000100
-#define OPT_IM_ALIAS_TAB		0x00002000
-#define OPT_IM_POPDOWN			0x00004000
-
-#define OPT_CHAT_ONE_WINDOW		0x00000001
-#define OPT_CHAT_BUTTON_TEXT		0x00000002
-#define OPT_CHAT_BUTTON_XPM		0x00000004
-#define OPT_CHAT_LOGON			0x00000008
-#define OPT_CHAT_POPUP			0x00000010
-#define OPT_CHAT_SIDE_TAB		0x00000020
-#define OPT_CHAT_BR_TAB			0x00000040
-#define OPT_CHAT_OLD_STYLE_TAB		0x00000100
-#define OPT_CHAT_COLORIZE               0x00000200
-
-#define OPT_SOUND_LOGIN			0x00000001
-#define OPT_SOUND_LOGOUT		0x00000002
-#define OPT_SOUND_RECV			0x00000004
-#define OPT_SOUND_SEND			0x00000008
-#define OPT_SOUND_FIRST_RCV		0x00000010
-#define OPT_SOUND_WHEN_AWAY		0x00000020
-#define OPT_SOUND_SILENT_SIGNON		0x00000040
-#define OPT_SOUND_THROUGH_GNOME		0x00000080
-#define OPT_SOUND_CHAT_JOIN		0x00000100
-#define OPT_SOUND_CHAT_SAY		0x00000200
-#define OPT_SOUND_BEEP			0x00000400
-#define OPT_SOUND_CHAT_PART		0x00000800
-#define OPT_SOUND_CHAT_YOU_SAY		0x00001000
-#define OPT_SOUND_NORMAL		0x00002000
-#define OPT_SOUND_NAS			0x00004000
-#define OPT_SOUND_ARTS			0x00008000
-#define OPT_SOUND_ESD			0x00010000
-#define OPT_SOUND_CMD			0x00020000
-#define OPT_SOUND_CHAT_NICK             0x00040000
-
-#define OPT_AWAY_BACK_ON_IM		0x00000002
-#define OPT_AWAY_AUTO			0x00000008
-#define OPT_AWAY_NO_AUTO_RESP		0x00000010
-#define OPT_AWAY_QUEUE			0x00000020
-#define OPT_AWAY_IDLE_RESP		0x00000040
-#define OPT_AWAY_QUEUE_UNREAD		0x00000080
-#define OPT_AWAY_DELAY_IN_USE		0x00000100
-
-#define OPT_ACCT_AUTO		0x00000001
-/*#define OPT_ACCT_KEEPALV	0x00000002 this shouldn't be optional */
-#define OPT_ACCT_REM_PASS	0x00000004
-#define OPT_ACCT_MAIL_CHECK      0x00000008
-
-#define IDLE_NONE        0
-#define IDLE_GAIM        1
-#define IDLE_SCREENSAVER 2
-
-#define BROWSER_NETSCAPE              0
-#define BROWSER_KONQ                  1
-#define BROWSER_MANUAL                2
-/*#define BROWSER_INTERNAL              3*/
-#define BROWSER_GNOME                 4
-#define BROWSER_OPERA                 5 
-#define BROWSER_GALEON                6
-#define BROWSER_MOZILLA               7
-
-
-static guint misc_options;
-static guint logging_options;
-static guint blist_options;
-static guint convo_options;
-static guint im_options;
-static guint chat_options;
-static guint font_options;
-static guint sound_options;
-static guint away_options;
-static guint is_loading_prefs = 0;
-static guint request_save_prefs = 0;
-static guint is_saving_prefs = 0;
-static guint request_load_prefs = 0;
-static guint prefs_initial_load = 0;
-guint proxy_info_is_from_gaimrc = 1; /* Only save proxy info if it
-				      * was loaded from the file
-				      * or otherwise explicitly requested */
-
-struct parse {
-	char option[256];
-	char value[MAX_VALUES][4096];
-};
-
-/*
- * This is absolutely necessary, unfortunately. It is used to grab
- * the information on the pounce, so that we can then later register
- * them. The reason we do this (well, one of them) is because the buddy
- * list isn't processed yet.
- *
- *  -- ChipX86
- */
-struct pounce_placeholder
-{
-	char name[80];
-	char message[2048];
-	char command[2048];
-	char sound[2048];
-	char pouncer[80];
-
-	int protocol;
-	int options;
-};
-
-static GList *buddy_pounces = NULL;
-
-static struct parse *parse_line(char *line, struct parse *p)
-{
-	char *c = line;
-	int inopt = 1, inval = 0, curval = -1;
-	int optlen = 0, vallen = 0, last_non_space = 0;
-	int x;
-
-	for (x = 0; x < MAX_VALUES; x++) {
-		p->value[x][0] = 0;
-	}
-
-	while (*c) {
-		if (*c == '\t') {
-			c++;
-			continue;
-		}
-
-		if (inopt) {
-			if ((*c < 'a' || *c > 'z') && *c != '_' && (*c < 'A' || *c > 'Z')) {
-				inopt = 0;
-				p->option[optlen] = 0;
-				c++;
-				continue;
-			}
-
-			p->option[optlen] = *c;
-			optlen++;
-			c++;
-			continue;
-		} else if (inval) {
-			if (*c == '\\') {
-				/* if we have a \ take the char after it literally.. */
-				c++;
-				p->value[curval][vallen] = *c;
-
-				vallen++;
-				last_non_space = vallen;
-				c++;
-				continue;
-			} else if (*c == '}') {
-				/* } that isn't escaped should end this chunk of data, and
-				 * should have a space before it.. */
-				p->value[curval][last_non_space] = 0;
-				inval = 0;
-				c++;
-				continue;
-			} else {
-				p->value[curval][vallen] = *c;
-
-				vallen++;
-				if (isspace(*c))
-					last_non_space = vallen - 1;
-				else
-					last_non_space = vallen;
-				c++;
-				continue;
-			}
-		} else if (*c == '{') {
-			/* i really don't think this if ever succeeds, but i'm
-			 * not brave enough to take it out... */ 
-			if (*(c - 1) == '\\') {
-				p->value[curval][vallen] = *c;
-				c++;
-				continue;
-			} else {
-				/* { that isn't escaped should signify the start of a
-				 * piece of data and should have a space after it.. */
-				curval++;
-				vallen = 0;
-				last_non_space = vallen;
-				inval = 1;
-				c++;
-				while (*c && isspace(*c))
-				  c++;
-				continue;
-			}
-		}
-		c++;
-	}
-
-	return p;
-}
-
-
-static int gaimrc_parse_tag(FILE *f)
-{
-	char buf[2048];
-	char tag[256];
-	buf[0] = '#';
-
-	while (buf[0] == '#' && !feof(f))
-		fgets(buf, sizeof(buf), f);
-
-	if (feof(f))
-		return -1;
-
-	if (sscanf(buf, "%s {", tag) != 1)
-		return -1;
-
-	if (!strcmp(tag, "users")) {
-		return 0;
-	} else if (!strcmp(tag, "options")) {
-		return 1;
-	} else if (!strcmp(tag, "away")) {
-		return 2;
-	} else if (!strcmp(tag, "plugins")) {
-		return 3;
-	} else if (!strcmp(tag, "pounce")) {
-		return 4;
-	} else if (!strcmp(tag, "sound_files")) {
-		return 6;
-	} else if (!strcmp(tag, "proxy")) {
-		return 7;
-	} else if (!strcmp(tag, "wgaim")) {
-		return 8;
-	}
-	return -1;
-}
-
-static void gaimrc_read_away(FILE *f)
-{
-	struct parse parse_buffer;
-	struct parse *p;
-	char buf[4096];
-	struct away_message *a;
-
-	buf[0] = 0;
-
-	while (buf[0] != '}') {
-		if (!fgets(buf, sizeof(buf), f))
-			return;
-
-		if (buf[0] == '}') {
-			gaim_status_sync();
-			return;
-		}
-
-		p = parse_line(buf, &parse_buffer);
-		if (!strcmp(p->option, "message")) {
-			a = g_new0(struct away_message, 1);
-
-			g_snprintf(a->name, sizeof(a->name), "%s", p->value[0]);
-			g_snprintf(a->message, sizeof(a->message), "%s", p->value[1]);
-			away_messages = g_slist_insert_sorted(away_messages, a, sort_awaymsg_list);
-		}
-		/* auto { time } { default message } */
-		else if (!strcmp(p->option, "auto")) {
-			struct away_message *default_away;
-			gaim_prefs_set_int("/core/away/mins_before_away",
-					atoi(p->value[0]));
-			default_away = g_slist_nth_data(away_messages, atoi(p->value[1]));
-			if (default_away)
-				gaim_prefs_set_string("/core/away/default_message",
-						default_away->name);
-		}
-	}
-	if (!away_messages) {
-		a = g_new0(struct away_message, 1);
-		g_snprintf(a->name, sizeof(a->name), _("boring default"));
-		g_snprintf(a->message, sizeof(a->message), "%s", _(BORING_DEFAULT_AWAY_MSG));
-		away_messages = g_slist_append(away_messages, a);
-	}
-	gaim_status_sync();
-}
-
-/*
- * This is temporary, and we're using it to translate the new event
- * and action values into the old ones. We're also adding entries for
- * new types, but if you go and use an older gaim, these will be nuked.
- * When we have a better prefs system, this can go away.
- *
- *   -- ChipX86
- */
-typedef enum
-{
-	GAIM_GTKPOUNCE_NONE       = 0x00, /**< No action.          */
-	GAIM_GTKPOUNCE_OPEN_WIN   = 0x01, /**< Open an IM window.  */
-	GAIM_GTKPOUNCE_POPUP      = 0x02, /**< Popup notification. */
-	GAIM_GTKPOUNCE_SEND_MSG   = 0x04, /**< Send a message.     */
-	GAIM_GTKPOUNCE_EXEC_CMD   = 0x08, /**< Execute a command.  */
-	GAIM_GTKPOUNCE_PLAY_SOUND = 0x10  /**< Play a sound.       */
-
-} GaimGtkPounceAction;
-
-static int pounce_evt_trans_table[] =
-{
-	0x010, GAIM_POUNCE_SIGNON,
-	0x020, GAIM_POUNCE_AWAY_RETURN,
-	0x040, GAIM_POUNCE_IDLE_RETURN,
-	0x080, GAIM_POUNCE_TYPING,
-	/* 0x100, save, is handled separately. */
-	0x400, GAIM_POUNCE_SIGNOFF,
-	0x800, GAIM_POUNCE_AWAY,
-	0x1000, GAIM_POUNCE_IDLE,
-	0x2000, GAIM_POUNCE_TYPING_STOPPED
-};
-
-static int pounce_act_trans_table[] =
-{
-	0x001, GAIM_GTKPOUNCE_OPEN_WIN,
-	0x002, GAIM_GTKPOUNCE_SEND_MSG,
-	0x004, GAIM_GTKPOUNCE_EXEC_CMD,
-	0x008, GAIM_GTKPOUNCE_PLAY_SOUND,
-	/* 0x100, save, is handled separately. */
-	0x200, GAIM_GTKPOUNCE_POPUP
-};
-
-static int pounce_evt_trans_table_size =
-	(sizeof(pounce_evt_trans_table) / sizeof(*pounce_evt_trans_table));
-
-static int pounce_act_trans_table_size =
-	(sizeof(pounce_act_trans_table) / sizeof(*pounce_act_trans_table));
-
-static void
-old_pounce_opts_to_new(int opts, GaimPounceEvent *events,
-					   GaimGtkPounceAction *actions)
-{
-	int i;
-
-	*events = 0;
-	*actions = 0;
-
-	/* First, convert events */
-	for (i = 0; i < pounce_evt_trans_table_size; i += 2)
-	{
-		int evt = pounce_evt_trans_table[i];
-
-		if ((opts & evt) == evt)
-			*events |= pounce_evt_trans_table[i + 1];
-	}
-
-	for (i = 0; i < pounce_act_trans_table_size; i += 2)
-	{
-		int act = pounce_act_trans_table[i];
-
-		if ((opts & act) == act)
-			*actions |= pounce_act_trans_table[i + 1];
-	
-	}
-}
-
-static void
-gaimrc_read_pounce(FILE *f)
-{
-	struct parse parse_buffer;
-	struct parse *p;
-	char buf[4096];
-	struct pounce_placeholder *b;
-
-	buf[0] = 0;
-
-	while (buf[0] != '}') {
-		if (!fgets(buf, sizeof(buf), f))
-			return;
-
-		if (buf[0] == '}')
-			return;
-
-		p = parse_line(buf, &parse_buffer);
-		if (!strcmp(p->option, "entry")) {
-			b = g_new0(struct pounce_placeholder, 1);
-
-			g_snprintf(b->name, sizeof(b->name), "%s", p->value[0]);
-			g_snprintf(b->message, sizeof(b->message), "%s", p->value[1]);
-			g_snprintf(b->command, sizeof(b->command), "%s", p->value[2]);
-
-			b->options = atoi(p->value[3]);
-
-			g_snprintf(b->pouncer, sizeof(b->pouncer), "%s", p->value[4]);
-			b->protocol = atoi(p->value[5]);
-
-			g_snprintf(b->sound, sizeof(b->sound), "%s", p->value[6]);
-
-			buddy_pounces = g_list_append(buddy_pounces, b);
-		}
-	}
-}
-
-static void gaimrc_read_plugins(FILE *f)
-{
-	struct parse parse_buffer;
-	struct parse *p;
-	char buf[4096];
-
-	buf[0] = 0;
-
-	while (buf[0] != '}') {
-		if (!fgets(buf, sizeof(buf), f))
-			break;
-
-		if (buf[0] == '}')
-			break;
-
-		p = parse_line(buf, &parse_buffer);
-		if (!strcmp(p->option, "plugin")) {
-			gaim_plugin_load(gaim_plugin_probe(p->value[0]));
-		}
-	}
-	gaim_gtk_plugins_save();
-}
-
-static GaimAccount *gaimrc_read_user(FILE *f)
-{
-	struct parse parse_buffer;
-	struct parse *p;
-	GaimAccount *account;
-	int i;
-	char buf[4096];
-	char user_info[2048];
-	int flags;
-	char *tmp;
-	const char *protocol_id;
-
-	if (!fgets(buf, sizeof(buf), f))
-		return NULL;
-
-	p = parse_line(buf, &parse_buffer);
-
-	if (strcmp(p->option, "ident"))
-		return NULL;
-
-	account = gaim_account_new(p->value[0], NULL);
-
-	gaim_account_set_password(account, p->value[1]);
-	gaim_account_set_remember_password(account, TRUE);
-
-	gaim_accounts_add(account);
-
-	if (!fgets(buf, sizeof(buf), f))
-		return account;
-
-	if (strcmp(buf, "\t\tuser_info {\n")) {
-		return account;
-	}
-
-	if (!fgets(buf, sizeof(buf), f))
-		return account;
-
-	*user_info = '\0';
-
-	while (strncmp(buf, "\t\t}", 3)) {
-		if (strlen(buf) > 3)
-			strcat(user_info, buf + 3);
-
-		if (!fgets(buf, sizeof(buf), f)) {
-			gaim_account_set_user_info(account, user_info);
-
-			return account;
-		}
-	}
-
-	if ((i = strlen(user_info)))
-		user_info[i - 1] = '\0';
-
-	if (*user_info != '.')
-		gaim_account_set_user_info(account, user_info);
-
-	if (!fgets(buf, sizeof(buf), f)) {
-		return account;
-	}
-
-	if (!strcmp(buf, "\t}")) {
-		return account;
-	}
-
-	p = parse_line(buf, &parse_buffer);
-
-	if (strcmp(p->option, "user_opts"))
-		return account;
-
-	flags = atoi(p->value[0]);
-
-	if (flags & OPT_ACCT_AUTO)
-		gaim_account_set_auto_login(account, GAIM_GTK_UI, TRUE);
-
-	if (flags & OPT_ACCT_MAIL_CHECK)
-		gaim_account_set_check_mail(account, TRUE);
-
-	if (!(flags & OPT_ACCT_REM_PASS))
-		gaim_account_set_remember_password(account, FALSE);
-
-	/* convert the old GaimProtocol to the protocol_id */
-	switch(atoi(p->value[1])) {
-		case 0:	tmp = g_strdup("prpl-toc");	break;
-		case 1: tmp = g_strdup("prpl-oscar");	break;
-		case 2: tmp = g_strdup("prpl-yahoo");	break;
-		case 3: tmp = g_strdup("prpl-icq");	break;
-		case 4: tmp = g_strdup("prpl-msn");	break;
-		case 5: tmp = g_strdup("prpl-irc");	break;
-		case 8: tmp = g_strdup("prpl-jabber");	break;
-		case 9: tmp = g_strdup("prpl-napster");	break;
-		case 10:tmp = g_strdup("prpl-zephyr");	break;
-		case 11:tmp = g_strdup("prpl-gg");	break;
-		case 16:tmp = g_strdup("prpl-moo");	break;
-		case 18:tmp = g_strdup("prpl-trepia");	break;
-		case 21:tmp = g_strdup("prpl-blogger");	break;
-		default:
-			tmp = NULL;
-	}
-	if (tmp) {
-		gaim_account_set_protocol_id(account, tmp);
-		g_free(tmp);
-	}
-
-	if (!fgets(buf, sizeof(buf), f))
-		return account;
-
-	if (!strcmp(buf, "\t}"))
-		return account;
-
-	p = parse_line(buf, &parse_buffer);
-
-	if (strcmp(p->option, "proto_opts"))
-		return account;
-
-	/* I hate this part. We must convert the protocol options. */
-	protocol_id = gaim_account_get_protocol_id(account);
-
-	/* TOC */
-	if (protocol_id) {	
-		if (strcmp(protocol_id, "prpl-toc") == 0) {
-			if (*p->value[0] == '\0')
-				gaim_account_set_string(account, "server", "toc.oscar.aol.com");
-			else
-				gaim_account_set_string(account, "server", p->value[0]);
-
-			if (*p->value[1] == '\0')
-				gaim_account_set_int(account, "port", 9898);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[1]));
-
-		/* OSCAR */
-		} else if (strcmp(protocol_id, "prpl-oscar") == 0) {
-			if (*p->value[0] == '\0')
-				gaim_account_set_string(account, "server",
-				       	"login.oscar.aol.com");
-			else
-				gaim_account_set_string(account, "server", p->value[0]);
-
-			if (*p->value[1] == '\0')
-				gaim_account_set_int(account, "port", 5190);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[1]));
-
-		/* Jabber */
-		} else if (strcmp(protocol_id, "prpl-jabber") == 0) {
-			if (*p->value[0] == '\0')
-				gaim_account_set_int(account, "port", 5222);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[0]));
-
-			if (*p->value[1] != '\0')
-				gaim_account_set_string(account, "connect_server", p->value[1]);
-
-		/* Napster */
-		} else if (strcmp(protocol_id, "prpl-napster") == 0) {
-			if (*p->value[3] == '\0')
-				gaim_account_set_string(account, "server", "64.124.41.187");
-			else
-				gaim_account_set_string(account, "server", p->value[3]);
-
-			if (*p->value[4] == '\0')
-				gaim_account_set_int(account, "port", 8888);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[4]));
-
-		/* Yahoo! */
-		} else if (strcmp(protocol_id, "prpl-yahoo") == 0) {
-			if (*p->value[3] == '\0')
-				gaim_account_set_string(account, "server", "scs.yahoo.com");
-			else
-				gaim_account_set_string(account, "server", p->value[3]);
-
-			if (*p->value[4] == '\0')
-				gaim_account_set_int(account, "port", 5050);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[4]));
-
-		/* MSN */
-		} else if (strcmp(protocol_id, "prpl-msn") == 0) {
-			if (*p->value[3] == '\0')
-				gaim_account_set_string(account, "server",
-				       "messenger.hotmail.com");
-			else
-				gaim_account_set_string(account, "server", p->value[3]);
-
-			if (*p->value[4] == '\0')
-				gaim_account_set_int(account, "port", 1863);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[4]));
-
-		/* IRC */
-		} else if (strcmp(protocol_id, "prpl-irc") == 0) {
-			if (*p->value[0] != '\0' &&
-				strchr(gaim_account_get_username(account), '@') == NULL) {
-
-				tmp = g_strdup_printf("%s@%s",
-					gaim_account_get_username(account),
-					(!strcmp(p->value[0], "irc.openprojects.net")
-					 ? "irc.freenode.net" : p->value[0]));
-				gaim_account_set_username(account, tmp);
-				g_free(tmp);
-			}
-
-			if (*p->value[1] == '\0')
-				gaim_account_set_int(account, "port", 6667);
-			else
-				gaim_account_set_int(account, "port", atoi(p->value[1]));
-
-			if (*p->value[2] == '\0')
-				gaim_account_set_string(account, "charset", "ISO-8859-1");
-			else
-				gaim_account_set_string(account, "charset", p->value[2]);
-		}
-	}
-
-	if (!fgets(buf, sizeof(buf), f))
-		return account;
-
-	if (!strcmp(buf, "\t}"))
-		return account;
-
-	p = parse_line(buf, &parse_buffer);
-
-	if (strcmp(p->option, "iconfile"))
-		return account;
-
-	if (*p->value[0] != '\n' && *p->value[0] != '\0')
-		gaim_account_set_buddy_icon(account, p->value[0]);
-
-	if (!fgets(buf, sizeof(buf), f))
-		return account;
-
-	if (!strcmp(buf, "\t}"))
-		return account;
-
-	p = parse_line(buf, &parse_buffer);
-
-	if (strcmp(p->option, "alias"))
-		return account;
-
-	if (*p->value[0] != '\n' && *p->value[0] != '\0')
-		gaim_account_set_alias(account, p->value[0]);
-
-	if (!fgets(buf, sizeof(buf), f))
-		return account;
-
-	if (!strcmp(buf, "\t}"))
-		return account;
-
-	p = parse_line(buf, &parse_buffer);
-
-	if (strcmp(p->option, "proxy_opts"))
-		return account;
-
-	if(atoi(p->value[0]) != GAIM_PROXY_USE_GLOBAL) {
-		GaimProxyInfo *info;
-
-		info = gaim_proxy_info_new();
-		gaim_proxy_info_set_type(info, atoi(p->value[0]));
-		gaim_proxy_info_set_host(info, p->value[1]);
-		gaim_proxy_info_set_port(info, atoi(p->value[2]));
-		gaim_proxy_info_set_username(info, p->value[3]);
-		gaim_proxy_info_set_password(info, p->value[4]);
-
-		gaim_account_set_proxy_info(account, info);
-	}
-
-	return account;
-
-}
-
-static void gaimrc_read_users(FILE *f)
-{
-	char buf[2048];
-	GaimAccount *account = NULL;
-	struct parse parse_buffer;
-	struct parse *p=NULL;
-
-	buf[0] = 0;
-
-	while (fgets(buf, sizeof(buf), f)) {
-		if (buf[0] == '#')
-			continue;
-		else if(buf[0] == '}')
-			break;
-
-		p = parse_line(buf, &parse_buffer);
-
-		if (strcmp(p->option, "user")==0 ||
-		    strcmp(p->option, "current_user")==0) {
-			if((account=gaimrc_read_user(f))==NULL) {
-				gaim_debug(GAIM_DEBUG_ERROR, "gaimrc",
-						   "Error reading in users from .gaimrc\n");
-				return;
-			}
-		}
-	}
-}
-
-struct replace {
-	int old;
-	guint *val;
-	int new;
-};
-
-#define OPT_GEN_ENTER_SENDS     0x00000001
-#define OPT_GEN_LOG_ALL         0x00000004
-#define OPT_GEN_STRIP_HTML      0x00000008
-#define OPT_GEN_POPUP_WINDOWS   0x00000020
-#define OPT_GEN_SEND_LINKS      0x00000040
-#define OPT_GEN_DEBUG           0x00000100
-#define OPT_GEN_BROWSER_POPUP   0x00000800
-#define OPT_GEN_CHECK_SPELLING  0x00008000
-#define OPT_GEN_POPUP_CHAT      0x00010000
-#define OPT_GEN_BACK_ON_IM      0x00020000
-#define OPT_GEN_CTL_CHARS       0x00080000
-#define OPT_GEN_CTL_SMILEYS     0x00200000
-#define OPT_GEN_AUTO_AWAY       0x00800000
-#define OPT_GEN_ESC_CAN_CLOSE   0x01000000
-#define OPT_GEN_CTL_ENTER       0x02000000
-#define OPT_GEN_F2_TOGGLES      0x04000000
-#define OPT_GEN_NO_AUTO_RESP    0x08000000
-#define OPT_GEN_QUEUE_WHEN_AWAY 0x10000000
-
-#define OPT_DISP_SHOW_TIME        0x00000001
-#define OPT_DISP_SHOW_GRPNUM      0x00000002
-#define OPT_DISP_SHOW_IDLETIME    0x00000008
-#define OPT_DISP_SHOW_BUTTON_XPM  0x00000010
-#define OPT_DISP_IGNORE_COLOUR    0x00000020
-#define OPT_DISP_SHOW_LOGON       0x00000040
-#define OPT_DISP_SHOW_SMILEY      0x00000100
-#define OPT_DISP_CHAT_LOGON       0x00000800
-#define OPT_DISP_NO_BUTTONS       0x00002000
-#define OPT_DISP_CONV_BUTTON_TEXT 0x00004000
-#define OPT_DISP_CHAT_BUTTON_TEXT 0x00008000
-#define OPT_DISP_NO_MT_GRP        0x00040000
-#define OPT_DISP_CONV_BUTTON_XPM  0x00080000
-#define OPT_DISP_CHAT_BUTTON_XPM  0x00100000
-#define OPT_DISP_SHOW_WARN        0x00200000
-#define OPT_DISP_IGNORE_FONTS     0x00400000
-#define OPT_DISP_IGNORE_SIZES     0x00800000
-#define OPT_DISP_ONE_CHAT_WINDOW  0x02000000
-#define OPT_DISP_CONV_SIDE_TAB    0x04000000
-#define OPT_DISP_CONV_BR_TAB      0x08000000
-
-static void gaimrc_read_options(FILE *f)
-{
-	char buf[2048];
-	struct parse parse_buffer;
-	struct parse *p;
-	gboolean read_logging = FALSE, read_general = FALSE;
-	int general_options = 0, display_options = 0;
-
-	buf[0] = 0;
-
-	while (buf[0] != '}') {
-		if (buf[0] == '#')
-			continue;
-
-		if (!fgets(buf, sizeof(buf), f))
-			return;
-
-		p = parse_line(buf, &parse_buffer);
-
-		/* XXX: what are we going to do about ancient prefs? */
-		if (!strcmp(p->option, "general_options")) {
-			general_options = atoi(p->value[0]);
-			read_general = TRUE;
-			gaim_prefs_set_bool("/gaim/gtk/conversations/enter_sends",
-					general_options & OPT_GEN_ENTER_SENDS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/im/raise_on_events",
-					general_options & OPT_GEN_POPUP_WINDOWS);
-			gaim_prefs_set_bool("/gaim/gtk/debug/enabled",
-					general_options & OPT_GEN_DEBUG);
-#ifndef _WIN32
-			gaim_prefs_set_int("/gaim/gtk/browsers/place",
-					(general_options & OPT_GEN_BROWSER_POPUP) ? 
-					GAIM_BROWSER_NEW_WINDOW : GAIM_BROWSER_DEFAULT );
-#endif
-			gaim_prefs_set_bool("/gaim/gtk/conversations/spellecheck",
-					general_options & OPT_GEN_CHECK_SPELLING);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/chat/raise_on_events",
-					general_options & OPT_GEN_POPUP_CHAT);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/html_shortcuts",
-					general_options & OPT_GEN_CTL_CHARS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/smiley_shortcuts",
-					general_options & OPT_GEN_CTL_SMILEYS);
-			gaim_prefs_set_bool("/core/away/away_when_idle",
-					general_options & OPT_GEN_AUTO_AWAY);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/escape_closes",
-					general_options & OPT_GEN_ESC_CAN_CLOSE);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ctrl_enter_sends",
-					general_options & OPT_GEN_CTL_ENTER);
-			gaim_prefs_set_bool("/core/away/auto_response/enabled",
-					!(general_options & OPT_GEN_NO_AUTO_RESP));
-			gaim_prefs_set_bool("/gaim/gtk/away/queu_messages",
-					general_options & OPT_AWAY_QUEUE);
-		} else if (!strcmp(p->option, "display_options")) {
-			display_options = atoi(p->value[0]);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/show_timestamps",
-					display_options & OPT_DISP_SHOW_TIME);
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_idle_time",
-					display_options & OPT_DISP_SHOW_IDLETIME);
-			gaim_prefs_set_int("/gaim/gtk/blist/button_style",
-					((display_options & OPT_DISP_SHOW_BUTTON_XPM)
-					 ? ((display_options & OPT_DISP_NO_BUTTONS)
-						 ? GAIM_BUTTON_IMAGE : GAIM_BUTTON_TEXT_IMAGE)
-					 : ((display_options & OPT_DISP_NO_BUTTONS)
-						 ? GAIM_BUTTON_NONE : GAIM_BUTTON_TEXT)));
-#if 1 /* PREFSLASH04 */
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ignore_colors",
-								display_options & OPT_DISP_IGNORE_COLOUR);
-#endif
-			gaim_prefs_set_int("/gaim/gtk/conversations/im/button_type",
-					((display_options & OPT_DISP_CONV_BUTTON_XPM)
-					 ? ((display_options & OPT_DISP_CONV_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT_IMAGE : GAIM_BUTTON_IMAGE)
-					 : ((display_options & OPT_DISP_CONV_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT : GAIM_BUTTON_NONE)));
-			gaim_prefs_set_int("/gaim/gtk/conversations/chat/button_type",
-					((display_options & OPT_DISP_CHAT_BUTTON_XPM)
-					 ? ((display_options & OPT_DISP_CHAT_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT_IMAGE : GAIM_BUTTON_IMAGE)
-					 : ((display_options & OPT_DISP_CHAT_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT : GAIM_BUTTON_NONE)));
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_warning_level",
-					display_options & OPT_DISP_SHOW_WARN);
-#if 1 /* PREFSLASH04 */
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ignore_fonts",
-								display_options & OPT_DISP_IGNORE_FONTS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ignore_font_sizes",
-								display_options & OPT_DISP_IGNORE_SIZES);
-#endif
-			gaim_prefs_set_int("/gaim/gtk/conversations/tab_side",
-					((display_options & OPT_DISP_CONV_SIDE_TAB)
-					 ? ((display_options & OPT_DISP_CONV_BR_TAB)
-						 ? GTK_POS_RIGHT : GTK_POS_LEFT)
-					 : ((display_options & OPT_DISP_CONV_BR_TAB)
-						 ? GTK_POS_BOTTOM : GTK_POS_TOP)));
-		} else if (!strcmp(p->option, "misc_options")) {
-			misc_options = atoi(p->value[0]);
-			gaim_prefs_set_bool("/gaim/gtk/debug/enabled",
-					misc_options & OPT_MISC_DEBUG);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/im/send_typing",
-					!(misc_options & OPT_MISC_STEALTH_TYPING));
-			gaim_prefs_set_bool("/gaim/gtk/buddies/use_server_alias",
-					misc_options & OPT_MISC_USE_SERVER_ALIAS);
-		} else if (!strcmp(p->option, "logging_options")) {
-			logging_options = atoi(p->value[0]);
-			read_logging = TRUE;
-			gaim_prefs_set_bool("/core/logging/log_ims",
-					logging_options & OPT_LOG_CONVOS);
-			gaim_prefs_set_bool("/core/logging/log_chats",
-					logging_options & OPT_LOG_CHATS);
-		} else if (!strcmp(p->option, "blist_options")) {
-			blist_options = atoi(p->value[0]);
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_idle_time",
-					blist_options & OPT_BLIST_SHOW_IDLETIME);
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_empty_groups",
-					!(blist_options & OPT_BLIST_NO_MT_GRP));
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_warning_level",
-					blist_options & OPT_BLIST_SHOW_WARN);
-			gaim_prefs_set_bool("/gaim/gtk/blist/grey_idle_buddies",
-					blist_options & OPT_BLIST_GREY_IDLERS);
-			gaim_prefs_set_bool("/gaim/gtk/blist/raise_on_events",
-					blist_options & OPT_BLIST_POPUP);
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_buddy_icons",
-					blist_options & OPT_BLIST_SHOW_ICONS);
-			gaim_prefs_set_bool("/gaim/gtk/blist/show_offline_buddies",
-					blist_options & OPT_BLIST_SHOW_OFFLINE);
-			gaim_prefs_set_int("/gaim/gtk/blist/button_style",
-					((blist_options & OPT_BLIST_SHOW_BUTTON_XPM)
-					 ? ((blist_options & OPT_BLIST_NO_BUTTON_TEXT)
-						 ? GAIM_BUTTON_IMAGE : GAIM_BUTTON_TEXT_IMAGE)
-					 : ((blist_options & OPT_BLIST_NO_BUTTON_TEXT)
-						 ? GAIM_BUTTON_NONE : GAIM_BUTTON_TEXT)));
-		} else if (!strcmp(p->option, "convo_options")) {
-			convo_options = atoi(p->value[0]);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/enter_sends",
-					convo_options & OPT_CONVO_ENTER_SENDS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/spellcheck",
-					convo_options & OPT_CONVO_CHECK_SPELLING);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/html_shortcuts",
-					convo_options & OPT_CONVO_CTL_CHARS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/smiley_shortcuts",
-					convo_options & OPT_CONVO_CTL_SMILEYS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/escape_closes",
-					convo_options & OPT_CONVO_ESC_CAN_CLOSE);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ctrl_enter_sends",
-					convo_options & OPT_CONVO_CTL_ENTER);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/show_timestamps",
-					convo_options & OPT_CONVO_SHOW_TIME);
-#if 1 /* PREFSLASH04 */
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ignore_colors",
-								convo_options & OPT_CONVO_IGNORE_COLOUR);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ignore_fonts",
-								convo_options & OPT_CONVO_IGNORE_FONTS);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/ignore_font_sizes",
-								convo_options & OPT_CONVO_IGNORE_SIZES);
-#endif
-			gaim_prefs_set_bool("/gaim/gtk/conversations/close_on_tabs",
-					!(convo_options & OPT_CONVO_NO_X_ON_TAB));
-		} else if (!strcmp(p->option, "im_options")) {
-			im_options = atoi(p->value[0]);
-
-			gaim_prefs_set_bool("/gaim/gtk/conversations/im/raise_on_events",
-					im_options & OPT_IM_POPUP);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/im/button_type",
-					((im_options & OPT_IM_BUTTON_XPM)
-					 ? ((im_options & OPT_IM_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT_IMAGE : GAIM_BUTTON_IMAGE)
-					 : ((im_options & OPT_IM_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT : GAIM_BUTTON_NONE)));
-			gaim_prefs_set_int("/gaim/gtk/conversations/tab_side",
-					((im_options & OPT_IM_SIDE_TAB)
-					 ? ((im_options & OPT_IM_BR_TAB)
-						 ? GTK_POS_RIGHT : GTK_POS_LEFT)
-					 : ((im_options & OPT_IM_BR_TAB)
-						 ? GTK_POS_BOTTOM : GTK_POS_TOP)));
-			gaim_prefs_set_bool("/gaim/gtk/conversations/im/show_buddy_icons",
-					!(im_options & OPT_IM_HIDE_ICONS));
-			gaim_prefs_set_bool("/gaim/gtk/conversations/im/animate_buddy_icons",
-					!(im_options & OPT_IM_NO_ANIMATION));
-			gaim_prefs_set_bool("/core/conversations/use_alias_for_title",
-					im_options & OPT_IM_ALIAS_TAB);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/tabs",
-					im_options & OPT_IM_ONE_WINDOW);
-
-		} else if (!strcmp(p->option, "conv_placement")) {
-			switch(atoi(p->value[0])) {
-				case 1:
-					gaim_prefs_set_string("/gaim/gtk/conversations/placement",
-							"new");
-				break;
-				case 2:
-					gaim_prefs_set_string("/gaim/gtk/conversations/placement",
-							"group");
-				break;
-				case 3:
-					gaim_prefs_set_string("/gaim/gtk/conversations/placement",
-							"account");
-				break;
-				case 0:
-				default:
-					gaim_prefs_set_string("/gaim/gtk/conversations/placement",
-							"last");
-				break;
-			}
-		} else if (!strcmp(p->option, "chat_options")) {
-			chat_options = atoi(p->value[0]);
-
-			gaim_prefs_set_bool("/gaim/gtk/conversations/chat/button_type",
-					((chat_options & OPT_CHAT_BUTTON_XPM)
-					 ? ((chat_options & OPT_CHAT_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT_IMAGE : GAIM_BUTTON_IMAGE)
-					 : ((chat_options & OPT_CHAT_BUTTON_TEXT)
-						 ? GAIM_BUTTON_TEXT : GAIM_BUTTON_NONE)));
-			gaim_prefs_set_bool("/gaim/gtk/conversations/chat/raise_on_events",
-					chat_options & OPT_CHAT_POPUP);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/chat/color_nicks",
-					chat_options & OPT_CHAT_COLORIZE);
-
-		} else if (!strcmp(p->option, "font_options")) {
-			font_options = atoi(p->value[0]);
-
-			gaim_prefs_set_bool("/gaim/gtk/conversations/send_bold",
-					font_options & OPT_FONT_BOLD);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/send_italic",
-					font_options & OPT_FONT_ITALIC);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/send_underline",
-					font_options & OPT_FONT_UNDERLINE);
-			gaim_prefs_set_bool("/gaim/gtk/conversations/send_formatting",
-					font_options & OPT_FONT_FACE);
-
-		} else if (!strcmp(p->option, "sound_options")) {
-			sound_options = atoi(p->value[0]);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/login",
-					sound_options & OPT_SOUND_LOGIN);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/logout",
-					sound_options & OPT_SOUND_LOGOUT);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/im_recv",
-					sound_options & OPT_SOUND_RECV);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/send_im",
-					sound_options & OPT_SOUND_SEND);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/first_im_recv",
-					sound_options & OPT_SOUND_FIRST_RCV);
-			gaim_prefs_set_bool("/core/sound/when_away",
-					sound_options & OPT_SOUND_WHEN_AWAY);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/join_chat",
-					sound_options & OPT_SOUND_CHAT_JOIN);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/chat_msg_recv",
-					sound_options & OPT_SOUND_CHAT_SAY);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/left_chat",
-					sound_options & OPT_SOUND_CHAT_PART);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/send_chat_msg",
-					sound_options & OPT_SOUND_CHAT_YOU_SAY);
-			gaim_prefs_set_bool("/gaim/gtk/sound/enabled/nick_said",
-					sound_options & OPT_SOUND_CHAT_NICK);
-			if(sound_options & OPT_SOUND_NAS) {
-				gaim_prefs_set_string("/gaim/gtk/sound/method", "nas");
-			} else if(!(sound_options & OPT_SOUND_NORMAL)) {
-				if(sound_options & OPT_SOUND_ESD)
-					gaim_prefs_set_string("/gaim/gtk/sound/method", "esd");
-				else if(sound_options & OPT_SOUND_ARTS)
-					gaim_prefs_set_string("/gaim/gtk/sound/method", "arts");
-				else if(sound_options & OPT_SOUND_CMD)
-					gaim_prefs_set_string("/gaim/gtk/sound/method", "custom");
-				else if(sound_options & OPT_SOUND_BEEP)
-					gaim_prefs_set_string("/gaim/gtk/sound/method", "beep");
-			}
-		} else if (!strcmp(p->option, "away_options")) {
-			away_options = atoi(p->value[0]);
-			gaim_prefs_set_bool("/core/away/away_when_idle",
-					away_options & OPT_AWAY_AUTO);
-			gaim_prefs_set_bool("/core/away/auto_response/enabled",
-					!(away_options & OPT_AWAY_NO_AUTO_RESP));
-			gaim_prefs_set_bool("/gaim/gtk/away/queue_messages",
-					away_options & OPT_AWAY_QUEUE);
-			gaim_prefs_set_bool("/core/away/auto_response/idle_only",
-					away_options & OPT_AWAY_IDLE_RESP);
-			gaim_prefs_set_bool("/plugins/gtk/docklet/queue_messages",
-					away_options & OPT_AWAY_QUEUE_UNREAD);
-		} else if (!strcmp(p->option, "font_face")) {
-			gaim_prefs_set_string("/gaim/gtk/conversations/font_face",
-								  p->value[0]);
-		} else if (!strcmp(p->option, "font_size")) {
-			gaim_prefs_set_int("/gaim/gtk/conversations/font_size", atoi(p->value[0]));
-		} else if (!strcmp(p->option, "foreground")) {
-			char buf[14];
-
-			g_snprintf(buf, sizeof(buf), "#%04x%04x%04x",
-					   atoi(p->value[0]), atoi(p->value[1]), atoi(p->value[2]));
-			gaim_prefs_set_string("/gaim/gtk/conversations/fgcolor", buf);
-
-		} else if (!strcmp(p->option, "background")) {
-			char buf[14];
-
-			g_snprintf(buf, sizeof(buf), "#%04x%04x%04x",
-					   atoi(p->value[0]), atoi(p->value[1]), atoi(p->value[2]));
-			gaim_prefs_set_string("/gaim/gtk/conversations/bgcolor", buf);
-
-		} else if (!strcmp(p->option, "report_idle")) {
-			switch(atoi(p->value[0])) {
-				case IDLE_SCREENSAVER:
-					gaim_prefs_set_string("/gaim/gtk/idle/reporting_method",
-							"system");
-					break;
-				case IDLE_GAIM:
-					gaim_prefs_set_string("/gaim/gtk/idle/reporting_method",
-							"gaim");
-					break;
-				default:
-					gaim_prefs_set_string("/gaim/gtk/idle/reporting_method",
-							"none");
-					break;
-			}
-		} else if (!strcmp(p->option, "web_browser")) {
-			switch(atoi(p->value[0])) {
-				case BROWSER_NETSCAPE:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"netscape");
-					break;
-				case BROWSER_KONQ:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"kfmclient");
-					break;
-				case BROWSER_MANUAL:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"manual");
-					break;
-				case BROWSER_GNOME:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"gnome");
-					break;
-				case BROWSER_OPERA:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"opera");
-					break;
-				case BROWSER_GALEON:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"galeon");
-					break;
-				case BROWSER_MOZILLA:
-				default:
-					gaim_prefs_set_string("/gaim/gtk/browsers/browser",
-							"mozilla");
-					break;
-			}
-		} else if (!strcmp(p->option, "web_command")) {
-			gaim_prefs_set_string("/gaim/gtk/browsers/command", p->value[0]);
-		} else if (!strcmp(p->option, "smiley_theme")) {
-			gaim_prefs_set_string("/gaim/gtk/smileys/theme", p->value[0]);
-		} else if (!strcmp(p->option, "conv_size")) {
-			gaim_prefs_set_int("/gaim/gtk/conversations/im/default_width",
-					atoi(p->value[0]));
-			gaim_prefs_set_int("/gaim/gtk/conversations/im/default_height",
-					atoi(p->value[1]));
-			gaim_prefs_set_int("/gaim/gtk/conversations/im/entry_height",
-					atoi(p->value[2]));
-		} else if (!strcmp(p->option, "buddy_chat_size")) {
-			gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_width",
-					atoi(p->value[0]));
-			gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_height",
-					atoi(p->value[1]));
-			gaim_prefs_set_int("/gaim/gtk/conversations/chat/entry_height",
-					atoi(p->value[2]));
-		} else if (!strcmp(p->option, "blist_pos")) {
-			gaim_prefs_set_int("/gaim/gtk/blist/x", atoi(p->value[0]));
-			gaim_prefs_set_int("/gaim/gtk/blist/y", atoi(p->value[1]));
-			gaim_prefs_set_int("/gaim/gtk/blist/width", atoi(p->value[2]));
-			gaim_prefs_set_int("/gaim/gtk/blist/height", atoi(p->value[3]));
-		} else if (!strcmp(p->option, "sort_method")) {
-			if(!strcmp(p->value[0], _("Alphabetical")))
-				gaim_prefs_set_string("/gaim/gtk/blist/sort_type", "alphabetical");
-			else if(!strcmp(p->value[0], _("By status")))
-				gaim_prefs_set_string("/gaim/gtk/blist/sort_type", "status");
-			else if(!strcmp(p->value[0], _("By log size")))
-				gaim_prefs_set_string("/gaim/gtk/blist/sort_type", "log_size");
-			else
-				gaim_prefs_set_string("/gaim/gtk/blist/sort_type", "none");
-		}
-
-	}
-
-	if (read_general) {
-		if (!read_logging) {
-			logging_options = 0;
-			gaim_prefs_set_bool("/core/logging/log_ims",
-					general_options & OPT_GEN_LOG_ALL);
-			gaim_prefs_set_bool("/core/logging/log_chats",
-					general_options & OPT_GEN_LOG_ALL);
-		}
-	}
-
-	if (misc_options & OPT_MISC_BUDDY_TICKER) {
-		if (gaim_plugins_enabled()) {
-			gchar* buf;
-
-			buf = g_strconcat(LIBDIR, G_DIR_SEPARATOR_S, 
-#ifndef _WIN32
-					  "ticker.so",
-#else
-					  "ticker.dll",
-#endif
-					  NULL);
-
-			gaim_plugin_load(gaim_plugin_probe(buf));
-			g_free(buf);
-		}
-
-		misc_options &= ~OPT_MISC_BUDDY_TICKER;
-	}
-}
-
-static void gaimrc_read_sounds(FILE *f)
-{
-	int i;
-	char buf[2048];
-	struct parse parse_buffer;
-	struct parse *p;
-	char *pref_name;
-
-	buf[0] = 0;
-
-	for(i=0; i<GAIM_NUM_SOUNDS; i++) {
-		pref_name = g_strdup_printf("/gaim/gtk/sound/file/%s",
-				gaim_gtk_sound_get_event_option(i));
-		gaim_prefs_set_string(pref_name, "");
-		g_free(pref_name);
-	}
-
-	while (buf[0] != '}') {
-		if (buf[0] == '#')
-			continue;
-
-		if (!fgets(buf, sizeof(buf), f))
-			return;
-
-		p = parse_line(buf, &parse_buffer);
-#ifndef _WIN32
-		if (!strcmp(p->option, "sound_cmd")) {
-			gaim_prefs_set_string("/gaim/gtk/sound/command", p->value[0]);
-		} else
-#endif
-		if (!strncmp(p->option, "sound", strlen("sound"))) {
-			i = p->option[strlen("sound")] - 'A';
-
-			pref_name = g_strdup_printf("/gaim/gtk/sound/file/%s",
-					gaim_gtk_sound_get_event_option(i));
-			gaim_prefs_set_string(pref_name, p->value[0]);
-			g_free(pref_name);
-		}
-	}
-}
-
-static void gaimrc_read_proxy(FILE *f)
-{
-	char buf[2048];
-	struct parse parse_buffer;
-	struct parse *p;
-	GaimProxyInfo *info;
-
-	info = gaim_global_proxy_get_info();
-
-	buf[0] = 0;
-	gaim_debug(GAIM_DEBUG_MISC, "gaimrc", "gaimrc_read_proxy\n");
-
-	while (buf[0] != '}') {
-		if (buf[0] == '#')
-			continue;
-
-		if (!fgets(buf, sizeof(buf), f))
-			return;
-
-		p = parse_line(buf, &parse_buffer);
-
-		if (!strcmp(p->option, "host")) {
-			gaim_proxy_info_set_host(info, p->value[0]);
-			gaim_debug(GAIM_DEBUG_MISC, "gaimrc",
-					   "Set proxyhost %s\n", p->value[0]);
-		} else if (!strcmp(p->option, "port")) {
-			gaim_proxy_info_set_port(info, atoi(p->value[0]));
-		} else if (!strcmp(p->option, "type")) {
-			gaim_proxy_info_set_type(info, atoi(p->value[0]));
-		} else if (!strcmp(p->option, "user")) {
-			gaim_proxy_info_set_username(info, p->value[0]);
-		} else if (!strcmp(p->option, "pass")) {
-			gaim_proxy_info_set_password(info, p->value[0]);
-		}
-	}
-}
-
-static void set_defaults()
-{
-#if 0
-	int i;
-	struct away_message *a;
-
-	misc_options =
-		OPT_MISC_USE_SERVER_ALIAS;
-
-	logging_options = 0;
-
-	blist_options =
-		OPT_BLIST_SHOW_GRPNUM |
-		OPT_BLIST_SHOW_PIXMAPS |
-		OPT_BLIST_SHOW_IDLETIME |
-		OPT_BLIST_GREY_IDLERS |
-		OPT_BLIST_SHOW_BUTTON_XPM |
-		OPT_BLIST_SHOW_ICONS;
-
-	convo_options =
-		OPT_CONVO_ENTER_SENDS |
-		OPT_CONVO_SEND_LINKS |
-		OPT_CONVO_CTL_CHARS |
-		OPT_CONVO_CTL_SMILEYS |
-		OPT_CONVO_SHOW_TIME |
-		OPT_CONVO_SHOW_SMILEY |
-		OPT_CONVO_CHECK_SPELLING;
-
-	conv_placement_option = 0;
-
-	im_options =
-		OPT_IM_LOGON |
-		OPT_IM_BUTTON_XPM |
-		OPT_IM_ONE_WINDOW ;
-
-	chat_options =
-		OPT_CHAT_LOGON |
-		OPT_CHAT_BUTTON_XPM |
-		OPT_CHAT_ONE_WINDOW;
-
-	font_options = 0;
-
-	away_options =
-		OPT_AWAY_BACK_ON_IM;
-
-	for (i = 0; i < GAIM_NUM_SOUNDS; i++)
-		gaim_sound_set_event_file(i, NULL);
-
-	font_options = 0;
-	/* Enable all of the sound players that might be available.  The first
-	   available one will be used. */
-	sound_options =
-	    OPT_SOUND_LOGIN |
-	    OPT_SOUND_LOGOUT |
-	    OPT_SOUND_RECV |
-	    OPT_SOUND_SEND |
-	    OPT_SOUND_SILENT_SIGNON |
-	    OPT_SOUND_NORMAL |
-		OPT_SOUND_NAS;
-
-#ifdef USE_SCREENSAVER
-	report_idle = IDLE_SCREENSAVER;
-#else
-	report_idle = IDLE_GAIM;
-#endif
-	web_browser = BROWSER_NETSCAPE;
-	g_snprintf(web_command, sizeof(web_command), "xterm -e lynx %%s");
-
-	auto_away = 10;
-	a = g_new0(struct away_message, 1);
-	g_snprintf(a->name, sizeof(a->name), _("boring default"));
-	g_snprintf(a->message, sizeof(a->message), "%s", _(BORING_DEFAULT_AWAY_MSG));
-	away_messages = g_slist_append(away_messages, a);
-	default_away = a;
-
-	blist_pos.width = 0;
-	blist_pos.height = 0;
-	blist_pos.x = 0;
-	blist_pos.y = 0;
-
-	conv_size.width = 320;
-	conv_size.height = 175;
-	conv_size.entry_height = 50;
-
-	buddy_chat_size.width = 320;
-	buddy_chat_size.height = 160;
-	buddy_chat_size.entry_height = 50;
-#endif
-}
-
-void load_prefs()
-{
-	FILE *f;
-	char buf[1024];
-	int ver = 0;
-
-	gaim_debug(GAIM_DEBUG_INFO, "gaimrc", "Loading preferences.\n");
-
-	if (is_saving_prefs) {
-		request_load_prefs = 1;
-		gaim_debug(GAIM_DEBUG_INFO, "gaimrc",
-				   "Currently saving. Will request load.\n");
-		return;
-	}
-
-	if (gaim_home_dir())
-		g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S ".gaimrc", gaim_home_dir());
-	else {
-		set_defaults();
-		return;
-	}
-
-	if ((f = fopen(buf, "r"))) {
-		is_loading_prefs = 1;
-		gaim_debug(GAIM_DEBUG_MISC, "gaimrc", "start load_prefs\n");
-		fgets(buf, sizeof(buf), f);
-		sscanf(buf, "# .gaimrc v%d", &ver);
-		if ((ver <= 3) || (buf[0] != '#'))
-			set_defaults();
-
-		while (!feof(f)) {
-			int tag = gaimrc_parse_tag(f);
-			gaim_debug(GAIM_DEBUG_MISC, "gaimrc",
-					   "starting read tag %d\n", tag);
-			switch (tag) {
-			case -1:
-				/* Do nothing--either EOF or empty line */
-				break;
-			case 0:
-				gaimrc_read_users(f);
-				break;
-			case 1:
-				gaimrc_read_options(f);
-				break;
-			case 2:
-				gaimrc_read_away(f);
-				break;
-			case 3:
-				if (gaim_plugins_enabled())
-					gaimrc_read_plugins(f);
-				break;
-			case 4:
-				gaimrc_read_pounce(f);
-				break;
-			case 6:
-				gaimrc_read_sounds(f);
-				break;
-			case 7:
-				gaimrc_read_proxy(f);
-				break;
-			default:
-				/* NOOP */
-				break;
-			}
-			gaim_debug(GAIM_DEBUG_MISC, "gaimrc",
-					   "ending read tag %d\n", tag);
-		}
-		fclose(f);
-		is_loading_prefs = 0;
-		gaim_debug(GAIM_DEBUG_MISC, "gaimrc", "end load_prefs\n");
-		if (request_save_prefs) {
-			gaim_debug(GAIM_DEBUG_INFO, "gaimrc",
-					   "Saving preferences on request\n");
-			request_save_prefs = 0;
-		}
-	} else {
-		set_defaults();
-	}
-
-	prefs_initial_load = 1;
-}
-
-void save_prefs()
-{
-	gaim_debug(GAIM_DEBUG_INFO, "gaimrc", "save_prefs() called. Rejected!\n");
-}
-
-
-/*
- * This function is called by g_slist_insert_sorted to compare the item
- * being compared to the rest of the items on the list.
- */
-gint sort_awaymsg_list(gconstpointer a, gconstpointer b)
-{
-	struct away_message *msg_a;
-	struct away_message *msg_b;
-
-	msg_a = (struct away_message *)a;
-	msg_b = (struct away_message *)b;
-
-	return (strcmp(msg_a->name, msg_b->name));
-
-}
-
-void
-load_pounces()
-{
-	GList *l;
-	struct pounce_placeholder *ph;
-	GaimPounce *pounce;
-	GaimAccount *account;
-
-	for (l = buddy_pounces; l != NULL; l = l->next) {
-		GaimPounceEvent events = GAIM_POUNCE_NONE;
-		GaimGtkPounceAction actions = GAIM_GTKPOUNCE_NONE;
-		char buf[3];
-
-		ph = (struct pounce_placeholder *)l->data;
-
-		g_snprintf(buf, sizeof(buf), "%d", ph->protocol);
-		account = gaim_accounts_find(ph->pouncer, buf);
-		if (account == NULL)
-			continue;
-
-		old_pounce_opts_to_new(ph->options, &events, &actions);
-
-		pounce = gaim_pounce_new(GAIM_GTK_UI, account, ph->name, events);
-
-		gaim_pounce_action_set_enabled(pounce, "open-window",
-			(actions & GAIM_GTKPOUNCE_OPEN_WIN));
-		gaim_pounce_action_set_enabled(pounce, "popup-notify",
-			(actions & GAIM_GTKPOUNCE_POPUP));
-		gaim_pounce_action_set_enabled(pounce, "send-message",
-			(actions & GAIM_GTKPOUNCE_SEND_MSG));
-		gaim_pounce_action_set_enabled(pounce, "execute-command",
-			(actions & GAIM_GTKPOUNCE_EXEC_CMD));
-		gaim_pounce_action_set_enabled(pounce, "play-sound",
-			(actions & GAIM_GTKPOUNCE_PLAY_SOUND));
-
-		gaim_pounce_action_set_attribute(pounce, "send-message", "message",
-			(*ph->message == '\0' ? NULL : ph->message));
-		gaim_pounce_action_set_attribute(pounce, "execute-command", "command",
-			(*ph->sound == '\0' ? NULL : ph->message));
-		gaim_pounce_action_set_attribute(pounce, "play-sound", "filename",
-			(*ph->sound == '\0' ? NULL : ph->message));
-
-		gaim_pounce_set_save(pounce, (ph->options & 0x100));
-
-		g_free(ph);
-	}
-
-	g_list_free(buddy_pounces);
-	buddy_pounces = NULL;
-
-	/* 
-	 * < ChipX86|Coding> why do we save prefs just after reading them?
-	 * <      faceprint> ChipX86|Coding: because we're cool like that
-	 * <SeanEgan|Coding> damn straight
-	 */
-	/* save_prefs(); -- I like the above comment :( */
-}
--- a/src/main.c	Sun Jul 25 17:52:22 2004 +0000
+++ b/src/main.c	Sun Jul 25 22:13:03 2004 +0000
@@ -70,9 +70,6 @@
 # include <gdk/gdkx.h>
 #endif
 
-extern void load_prefs();
-extern void load_pounces();
-
 static GtkWidget *name;
 static GtkWidget *pass;
 
@@ -480,6 +477,7 @@
 gaim_gtk_quit(void)
 {
 	/* XXX? */
+	/* YYY is there an XXX here? */
 
 	/* captain's log, stardate... */
 	/* LOG system_log(log_quit, NULL, NULL, OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); */
@@ -611,6 +609,7 @@
 	int opt, opt_user = 0;
 	int i;
 	gboolean gui_check;
+	gchar *gaimrc, *accountsxml;
 
 	struct option long_options[] = {
 		{"acct", no_argument, NULL, 'a'},
@@ -839,12 +838,17 @@
 
 	gaim_plugins_probe(NULL);
 
-	/* we only read ~/.gaimrc (load_prefs()) if there is no accounts.xml
-	 * since prefs.xml existed alongside ~/.gaim in 0.64 */
-	if (!gaim_accounts_load()) {
-		load_prefs();
-		gaim_prefs_sync();
+	/* XXX - Remove this check.  Maybe in 2005.  --KingAnt, 25 Jul 2004 */
+	gaimrc = g_build_filename(gaim_home_dir(), ".gaimrc", NULL);
+	accountsxml = g_build_filename(gaim_user_dir(), "accounts.xml", NULL);
+	if (g_file_test(gaimrc, G_FILE_TEST_EXISTS) &&
+		!g_file_test(accountsxml, G_FILE_TEST_EXISTS)) {
+		gaim_notify_error(NULL, NULL, _("Unable to load preferences"), _("Gaim was not able to load your preferences because they are stored in an old format that is no longer used.  Please reconfigure your settings using the Preferences window."));
 	}
+	g_free(gaimrc);
+	g_free(accountsxml);
+
+	gaim_accounts_load();
 
 	gaim_set_blist(gaim_blist_new());
 	gaim_blist_load();
@@ -860,7 +864,6 @@
 	gaim_pounces_load();
 	gaim_status_load();
 
-	load_pounces();
 	ui_main();
 
 #ifdef USE_SM
--- a/src/prefs.c	Sun Jul 25 17:52:22 2004 +0000
+++ b/src/prefs.c	Sun Jul 25 22:13:03 2004 +0000
@@ -112,10 +112,21 @@
 	gaim_prefs_add_string("/core/away/default_message",
 			_("Slightly less boring default"));
 
-	/* Away -> Auto Response */
-	gaim_prefs_add_none("/core/away/auto_response");
-	gaim_prefs_add_bool("/core/away/auto_response/enabled", TRUE);
-	gaim_prefs_add_bool("/core/away/auto_response/idle_only", FALSE);
+	/* Away -> Auto-Reply */
+	if (!gaim_prefs_exists("/core/away/auto_response/enabled") ||
+		!gaim_prefs_exists("/core/away/auto_response/idle_only")) {
+		gaim_prefs_add_string("/core/away/auto_reply", "awayidle");
+	} else {
+		if (!gaim_prefs_get_bool("/core/away/auto_response/enabled")) {
+			gaim_prefs_add_string("/core/away/auto_reply", "never");
+		} else {
+			if (gaim_prefs_get_bool("/core/away/auto_response/idle_only")) {
+				gaim_prefs_add_string("/core/away/auto_reply", "awayidle");
+			} else {
+				gaim_prefs_add_string("/core/away/auto_reply", "away");
+			}
+		}
+	}
 
 	/* Buddies */
 	gaim_prefs_add_none("/core/buddies");
@@ -499,16 +510,13 @@
 	}
 }
 
-gpointer gaim_prefs_get_generic(const char *name) {
+gboolean gaim_prefs_exists(const char *name) {
 	struct gaim_pref *pref = find_pref(name);
 
-	if(!pref) {
-		gaim_debug(GAIM_DEBUG_ERROR, "prefs",
-				"gaim_prefs_get_generic: Unknown pref %s\n", name);
-		return NULL;
-	}
+	if (pref != NULL)
+		return TRUE;
 
-	return pref->value.generic;
+	return FALSE;
 }
 
 GaimPrefType gaim_prefs_get_type(const char *name) {
@@ -983,8 +991,11 @@
 
 void gaim_prefs_update_old() {
 	/* Remove some no-longer-used prefs */
+	gaim_prefs_remove("/core/away/auto_response/enabled");
+	gaim_prefs_remove("/core/away/auto_response/idle_only");
 	gaim_prefs_remove("/core/away/auto_response/in_active_conv");
 	gaim_prefs_remove("/core/away/auto_response/sec_before_resend");
+	gaim_prefs_remove("/core/away/auto_response");
 	gaim_prefs_remove("/core/conversations/away_back_on_send");
 	gaim_prefs_remove("/core/conversations/send_urls_as_links");
 	gaim_prefs_remove("/core/conversations/im/show_login");
--- a/src/server.c	Sun Jul 25 17:52:22 2004 +0000
+++ b/src/server.c	Sun Jul 25 22:13:03 2004 +0000
@@ -260,6 +260,7 @@
 	GaimConversation *c;
 	int val = -EINVAL;
 	GaimPluginProtocolInfo *prpl_info = NULL;
+	const gchar *auto_reply_pref;
 
 	if (gc != NULL && gc->prpl != NULL)
 		prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
@@ -272,8 +273,13 @@
 	if (!(imflags & GAIM_CONV_IM_AUTO_RESP))
 		serv_touch_idle(gc);
 
+	/*
+	 * XXX - If "only auto-reply when away & idle" is set, then shouldn't
+	 * this only reset lar->sent if we're away AND idle?
+	 */
+	auto_reply_pref = gaim_prefs_get_string("/core/away/auto_reply");
 	if (gc->away &&	(gc->flags & GAIM_CONNECTION_AUTO_RESP) &&
-		gaim_prefs_get_bool("/core/away/auto_response/enabled")) {
+		strcmp(auto_reply_pref, "never")) {
 
 		struct last_auto_response *lar;
 		lar = get_last_auto_response(gc, name);
@@ -897,6 +903,7 @@
 		const char *alias = b ? gaim_get_buddy_alias(b) : name;
 		int row;
 		struct last_auto_response *lar;
+		const gchar *auto_reply_pref;
 
 		/*
 		 * Either we're going to queue it or not. Because of the way
@@ -972,16 +979,17 @@
 		 * Don't autorespond if:
 		 *
 		 *  - it's not supported on this connection
+		 *  - or the away message is empty
 		 *  - or it's disabled
-		 *  - or the away message is empty
 		 *  - or we're not idle and the 'only auto respond if idle' pref
 		 *    is set
 		 */
+		auto_reply_pref = gaim_prefs_get_string("/core/away/auto_reply");
 		if (!(gc->flags & GAIM_CONNECTION_AUTO_RESP) ||
-			!gaim_prefs_get_bool("/core/away/auto_response/enabled") ||
 			*gc->away == '\0' ||
+			!strcmp(auto_reply_pref, "never") ||
 			(!gc->is_idle &&
-			 gaim_prefs_get_bool("/core/away/auto_response/idle_only"))) {
+			 !strcmp(auto_reply_pref, "awayidle"))) {
 
 			g_free(name);
 			g_free(message);