gnome-mud r715 - in trunk: . src



Author: lharris
Date: Thu Feb  5 19:19:17 2009
New Revision: 715
URL: http://svn.gnome.org/viewvc/gnome-mud?rev=715&view=rev

Log:
Mud Connections fixes.


Modified:
   trunk/ChangeLog
   trunk/INSTALL
   trunk/src/mud-connections.c
   trunk/src/mud-regex.c
   trunk/src/mud-telnet-handlers.c
   trunk/src/mud-telnet-msp.c
   trunk/src/mud-telnet.c

Modified: trunk/INSTALL
==============================================================================
--- trunk/INSTALL	(original)
+++ trunk/INSTALL	Thu Feb  5 19:19:17 2009
@@ -1,16 +1,19 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
 
-This file is free documentation; the Free Software Foundation gives
+   This file is free documentation; the Free Software Foundation gives
 unlimited permission to copy, distribute and modify it.
 
 Basic Installation
 ==================
 
-These are generic installation instructions.
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -23,9 +26,9 @@
 
    It can also use an optional file (typically called `config.cache'
 and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
+the results of its tests to speed up reconfiguring.  Caching is
 disabled by default to prevent problems with accidental use of stale
-cache files.)
+cache files.
 
    If you need to do unusual things to compile the package, please try
 to figure out how `configure' could check whether to do them, and mail
@@ -35,20 +38,17 @@
 may remove or edit it.
 
    The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
 
 The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
+     `./configure' to configure the package for your system.
 
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
 
   2. Type `make' to compile the package.
 
@@ -67,42 +67,57 @@
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
 Compilers and Options
 =====================
 
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
 
    You can give `configure' initial values for configuration parameters
 by setting variables in the command line or in the environment.  Here
 is an example:
 
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
 
    *Note Defining Variables::, for more details.
 
 Compiling For Multiple Architectures
 ====================================
 
-You can compile the package for more than one kind of computer at the
+   You can compile the package for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
 source code in the directory that `configure' is in and in `..'.
 
-   If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory.  After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
 
 Installation Names
 ==================
 
-By default, `make install' installs the package's commands under
+   By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
 `configure' the option `--prefix=PREFIX'.
@@ -125,7 +140,7 @@
 Optional Features
 =================
 
-Some packages pay attention to `--enable-FEATURE' options to
+   Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
 is something like `gnu-as' or `x' (for the X Window System).  The
@@ -137,14 +152,36 @@
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
 Specifying the System Type
 ==========================
 
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
 `--build=TYPE' option.  TYPE can either be a short name for the system
 type, such as `sun4', or a canonical name which has the form:
 
@@ -170,9 +207,9 @@
 Sharing Defaults
 ================
 
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
 `configure' looks for `PREFIX/share/config.site' if it exists, then
 `PREFIX/etc/config.site' if it exists.  Or, you can set the
 `CONFIG_SITE' environment variable to the location of the site script.
@@ -181,7 +218,7 @@
 Defining Variables
 ==================
 
-Variables not defined in a site shell script can be set in the
+   Variables not defined in a site shell script can be set in the
 environment passed to `configure'.  However, some packages may run
 configure again during the build, and the customized values of these
 variables may be lost.  In order to avoid this problem, you should set
@@ -190,21 +227,29 @@
      ./configure CC=/usr/local2/bin/gcc
 
 causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).  Here is a another example:
+overridden in the site shell script).
 
-     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
 
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================
 
-`configure' recognizes the following options to control how it operates.
+   `configure' recognizes the following options to control how it
+operates.
 
 `--help'
 `-h'
-     Print a summary of the options to `configure', and exit.
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
 
 `--version'
 `-V'
@@ -231,6 +276,16 @@
      Look for the package's source code in directory DIR.  Usually
      `configure' can determine that directory automatically.
 
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *Note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
 

Modified: trunk/src/mud-connections.c
==============================================================================
--- trunk/src/mud-connections.c	(original)
+++ trunk/src/mud-connections.c	Thu Feb  5 19:19:17 2009
@@ -37,53 +37,53 @@
 
 struct _MudConnectionsPrivate
 {
-	// Main Window
-	MudWindow *parent;
-	GtkWidget *winwidget;
-	MudTray *tray;
+    // Main Window
+    MudWindow *parent;
+    GtkWidget *winwidget;
+    MudTray *tray;
 
-	GtkWidget *window;
-	GtkWidget *iconview;
-	GtkWidget *popup;
+    GtkWidget *window;
+    GtkWidget *iconview;
+    GtkWidget *popup;
 
-	GtkTreeModel *icon_model;
-	GtkTreeModel *profile_model;
+    GtkTreeModel *icon_model;
+    GtkTreeModel *profile_model;
 
-	// Properties Dialog
-	GtkWidget *properties_window;
-	GtkWidget *name_entry;
-	GtkWidget *host_entry;
-	GtkWidget *port_entry;
+    // Properties Dialog
+    GtkWidget *properties_window;
+    GtkWidget *name_entry;
+    GtkWidget *host_entry;
+    GtkWidget *port_entry;
 
-	GtkWidget *icon_button;
-	GtkWidget *icon_image;
+    GtkWidget *icon_button;
+    GtkWidget *icon_image;
 
-	GtkWidget *profile_combo;
-	GtkCellRenderer *profile_combo_renderer;
+    GtkWidget *profile_combo;
+    GtkCellRenderer *profile_combo_renderer;
 
-	GtkWidget *character_name_entry;
-	GtkWidget *logon_textview;
+    GtkWidget *character_name_entry;
+    GtkWidget *logon_textview;
 
-	gboolean changed;
+    gboolean changed;
 
-	gchar *original_name;
-	gchar *original_char_name;
+    gchar *original_name;
+    gchar *original_char_name;
 	
-	guint connection;
+    guint connection;
 
-	// Iconview Dialog
-	GtkWidget *icon_dialog;
-	GtkWidget *icon_dialog_view;
-	GtkTreeModel *icon_dialog_view_model;
-	GtkWidget *icon_dialog_chooser;
-	gchar *icon_current;
+    // Iconview Dialog
+    GtkWidget *icon_dialog;
+    GtkWidget *icon_dialog_view;
+    GtkTreeModel *icon_dialog_view_model;
+    GtkWidget *icon_dialog_chooser;
+    gchar *icon_current;
 };
 
 typedef enum MudConnectionsModelColumns
 {
-	MODEL_COLUMN_STRING,
-	MODEL_COLUMN_PIXBUF,
-	MODEL_COLUMN_N
+    MODEL_COLUMN_STRING,
+    MODEL_COLUMN_PIXBUF,
+    MODEL_COLUMN_N
 } MudConnectionsModelColumns;
 
 GType mud_connections_get_type (void);
@@ -91,1154 +91,1259 @@
 static void mud_connections_init (MudConnections *conn);
 static void mud_connections_class_init (MudConnectionsClass *klass);
 static void mud_connections_finalize (GObject *object);
-static gint mud_connections_close_cb(GtkWidget *widget, MudConnections *conn);
-static void mud_connections_connect_cb(GtkWidget *widget, MudConnections *conn);
-static void mud_connections_add_cb(GtkWidget *widget, MudConnections *conn);
-static void mud_connections_delete_cb(GtkWidget *widget, MudConnections *conn);
-static void mud_connections_properties_cb(GtkWidget *widget, MudConnections *conn);
+static gint mud_connections_close_cb(GtkWidget *widget,
+				     MudConnections *conn);
+static void mud_connections_connect_cb(GtkWidget *widget,
+				       MudConnections *conn);
+static void mud_connections_add_cb(GtkWidget *widget,
+				   MudConnections *conn);
+static void mud_connections_delete_cb(GtkWidget *widget,
+				      MudConnections *conn);
+static void mud_connections_properties_cb(GtkWidget *widget,
+					  MudConnections *conn);
 static void mud_connections_populate_iconview(MudConnections *conn);
-static void mud_connections_show_properties(MudConnections *conn, gchar *mud);
-static void mud_connections_property_cancel_cb(GtkWidget *widget, MudConnections *conn);
-static void mud_connections_property_save_cb(GtkWidget *widget, MudConnections *conn);
-static void mud_connections_property_icon_cb(GtkWidget *widget, MudConnections *conn);
-static gboolean mud_connections_property_changed_cb(GtkWidget *widget, GdkEventKey *event, MudConnections *conn);
-static void mud_connections_property_combo_changed_cb(GtkWidget *widget, MudConnections *conn);
-static gboolean mud_connections_property_delete_cb(GtkWidget *widget, GdkEvent *event, MudConnections *conn);
+static void mud_connections_show_properties(MudConnections *conn,
+					    gchar *mud);
+static void mud_connections_property_cancel_cb(GtkWidget *widget,
+					       MudConnections *conn);
+static void mud_connections_property_save_cb(GtkWidget *widget,
+					     MudConnections *conn);
+static void mud_connections_property_icon_cb(GtkWidget *widget,
+					     MudConnections *conn);
+static gboolean mud_connections_property_changed_cb(GtkWidget *widget,
+						    GdkEventKey *event,
+						    MudConnections *conn);
+static void mud_connections_property_combo_changed_cb(GtkWidget *widget,
+						      MudConnections *conn);
+static gboolean mud_connections_property_delete_cb(GtkWidget *widget,
+						   GdkEvent *event,
+						   MudConnections *conn);
 static gboolean mud_connections_property_save(MudConnections *conn);
 static gint mud_connections_property_confirm(void);
-static void mud_connections_property_populate_profiles(MudConnections *conn);
-static void mud_connections_property_combo_get_index(MudConnections *conn, gchar *profile);
+static void mud_connections_property_populate_profiles(
+    MudConnections *conn);
+static void mud_connections_property_combo_get_index(MudConnections *conn,
+						     gchar *profile);
 static void mud_connections_refresh_iconview(MudConnections *conn);
 static gboolean mud_connections_delete_confirm(gchar *name);
 static gboolean mud_connections_button_press_cb(GtkWidget *widget,
-		GdkEventButton *event, MudConnections *conn);
-static void mud_connections_popup(MudConnections *conn, GdkEventButton *event);
+						GdkEventButton *event,
+						MudConnections *conn);
+static void mud_connections_popup(MudConnections *conn,
+				  GdkEventButton *event);
 static void mud_connections_show_icon_dialog(MudConnections *conn);
-static void mud_connections_icon_fileset_cb(GtkFileChooserButton *widget, MudConnections *conn);
-static void mud_connections_icon_select_cb(GtkIconView *view, MudConnections *conn);
+static void mud_connections_icon_fileset_cb(GtkFileChooserButton *widget,
+					    MudConnections *conn);
+static void mud_connections_icon_select_cb(GtkIconView *view,
+					   MudConnections *conn);
 void mud_connections_iconview_activate_cb(GtkIconView *iconview,
-		GtkTreePath *path, MudConnections *conn);
-void mud_connections_gconf_notify_cb(GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer *data);
+					  GtkTreePath *path,
+					  MudConnections *conn);
+void mud_connections_gconf_notify_cb(GConfClient *client,
+				     guint cnxn_id, GConfEntry *entry,
+				     gpointer *data);
 
 // MudConnections class functions
 GType
 mud_connections_get_type (void)
 {
-	static GType object_type = 0;
+    static GType object_type = 0;
 
-	g_type_init();
+    g_type_init();
 
-	if (!object_type)
-	{
-		static const GTypeInfo object_info =
-		{
-			sizeof (MudConnectionsClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) mud_connections_class_init,
-			NULL,
-			NULL,
-			sizeof (MudConnections),
-			0,
-			(GInstanceInitFunc) mud_connections_init,
-		};
-
-		object_type = g_type_register_static(G_TYPE_OBJECT, "MudConnections", &object_info, 0);
-	}
+    if (!object_type)
+    {
+	static const GTypeInfo object_info =
+	    {
+		sizeof (MudConnectionsClass),
+		NULL,
+		NULL,
+		(GClassInitFunc) mud_connections_class_init,
+		NULL,
+		NULL,
+		sizeof (MudConnections),
+		0,
+		(GInstanceInitFunc) mud_connections_init,
+	    };
+
+	object_type =
+	    g_type_register_static(G_TYPE_OBJECT,
+				   "MudConnections", &object_info, 0);
+    }
 
-	return object_type;
+    return object_type;
 }
 
 static void
 mud_connections_init (MudConnections *conn)
 {
-	GladeXML *glade;
-	GConfClient *client;
+    GladeXML *glade;
+    GConfClient *client;
 
-	conn->priv = g_new0(MudConnectionsPrivate, 1);
+    conn->priv = g_new0(MudConnectionsPrivate, 1);
 
-	glade = glade_xml_new(GLADEDIR "/muds.glade", "mudviewwindow", NULL);
+    glade = glade_xml_new(GLADEDIR "/muds.glade", "mudviewwindow", NULL);
 
-	conn->priv->window = glade_xml_get_widget(glade, "mudviewwindow");
-	conn->priv->iconview = glade_xml_get_widget(glade, "iconview");
-
-	conn->priv->icon_model = GTK_TREE_MODEL(gtk_list_store_new(MODEL_COLUMN_N,
-							G_TYPE_STRING,
-							GDK_TYPE_PIXBUF));
-	conn->priv->original_name = NULL;
-	conn->priv->original_char_name = NULL;
-
-	gtk_icon_view_set_model(GTK_ICON_VIEW(conn->priv->iconview),
-		conn->priv->icon_model);
-	gtk_icon_view_set_text_column(GTK_ICON_VIEW(conn->priv->iconview),
-		MODEL_COLUMN_STRING);
-	gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(conn->priv->iconview),
-		MODEL_COLUMN_PIXBUF);
-
-	client = gconf_client_get_default();
-	gconf_client_add_dir(client, "/apps/gnome-mud/muds", GCONF_CLIENT_PRELOAD_NONE, NULL);
-	conn->priv->connection = gconf_client_notify_add(client, "/apps/gnome-mud/muds",
-			(GConfClientNotifyFunc)mud_connections_gconf_notify_cb, conn,
-			NULL, NULL);
-
-	g_signal_connect(conn->priv->iconview, "item-activated",
-			G_CALLBACK(mud_connections_iconview_activate_cb),
-			conn);
-	g_signal_connect(conn->priv->iconview, "button-press-event",
-			G_CALLBACK(mud_connections_button_press_cb),
-			conn);
-	g_signal_connect(conn->priv->window, "destroy",
-			G_CALLBACK(mud_connections_close_cb), conn);
-	g_signal_connect(glade_xml_get_widget(glade, "connect_button"),
-			"clicked", G_CALLBACK(mud_connections_connect_cb), conn);
-	g_signal_connect(glade_xml_get_widget(glade, "add_button"),
-		       	"clicked", G_CALLBACK(mud_connections_add_cb), conn);
-	g_signal_connect(glade_xml_get_widget(glade, "delete_button"),
-		       	"clicked", G_CALLBACK(mud_connections_delete_cb), conn);
-	g_signal_connect(glade_xml_get_widget(glade, "properties_button"),
-		       	"clicked", G_CALLBACK(mud_connections_properties_cb), conn);
+    conn->priv->window = glade_xml_get_widget(glade, "mudviewwindow");
+    conn->priv->iconview = glade_xml_get_widget(glade, "iconview");
+
+    conn->priv->icon_model =
+	GTK_TREE_MODEL(gtk_list_store_new(MODEL_COLUMN_N,
+					  G_TYPE_STRING,
+					  GDK_TYPE_PIXBUF));
+    
+    conn->priv->original_name = NULL;
+    conn->priv->original_char_name = NULL;
+
+    gtk_icon_view_set_model(GTK_ICON_VIEW(conn->priv->iconview),
+			    conn->priv->icon_model);
+    gtk_icon_view_set_text_column(GTK_ICON_VIEW(conn->priv->iconview),
+				  MODEL_COLUMN_STRING);
+    gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(conn->priv->iconview),
+				    MODEL_COLUMN_PIXBUF);
+
+    client = gconf_client_get_default();
+    gconf_client_add_dir(client, "/apps/gnome-mud/muds",
+			 GCONF_CLIENT_PRELOAD_NONE, NULL);
+    
+    conn->priv->connection =
+	gconf_client_notify_add(client, "/apps/gnome-mud/muds",
+				(GConfClientNotifyFunc)
+				mud_connections_gconf_notify_cb,
+				conn, NULL, NULL);
+
+    g_signal_connect(conn->priv->iconview, "item-activated",
+		     G_CALLBACK(mud_connections_iconview_activate_cb),
+		     conn);
+    g_signal_connect(conn->priv->iconview, "button-press-event",
+		     G_CALLBACK(mud_connections_button_press_cb),
+		     conn);
+    g_signal_connect(conn->priv->window, "destroy",
+		     G_CALLBACK(mud_connections_close_cb), conn);
+    g_signal_connect(glade_xml_get_widget(glade, "connect_button"),
+		     "clicked", G_CALLBACK(mud_connections_connect_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "add_button"),
+		     "clicked", G_CALLBACK(mud_connections_add_cb), conn);
+    g_signal_connect(glade_xml_get_widget(glade, "delete_button"),
+		     "clicked", G_CALLBACK(mud_connections_delete_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "properties_button"),
+		     "clicked", G_CALLBACK(mud_connections_properties_cb),
+		     conn);
 
-	mud_connections_populate_iconview(conn);
+    mud_connections_populate_iconview(conn);
 
-	gtk_widget_show_all(conn->priv->window);
-	g_object_unref(glade);
+    gtk_widget_show_all(conn->priv->window);
+    g_object_unref(glade);
 }
 
 static void
 mud_connections_class_init (MudConnectionsClass *klass)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS(klass);
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-	object_class->finalize = mud_connections_finalize;
+    object_class->finalize = mud_connections_finalize;
 }
 
 static void
 mud_connections_finalize (GObject *object)
 {
-	MudConnections *conn;
-	GObjectClass *parent_class;
-	GConfClient *client = gconf_client_get_default();
+    MudConnections *conn;
+    GObjectClass *parent_class;
+    GConfClient *client = gconf_client_get_default();
 
-	conn = MUD_CONNECTIONS(object);
+    conn = MUD_CONNECTIONS(object);
 
-	gconf_client_notify_remove(client, conn->priv->connection);
+    gconf_client_notify_remove(client, conn->priv->connection);
 	
-	g_object_unref(conn->priv->icon_model);
-	g_free(conn->priv);
+    g_object_unref(conn->priv->icon_model);
+    g_free(conn->priv);
 
-	parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
-	parent_class->finalize(object);
+    parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
+    parent_class->finalize(object);
 }
 
 // MudConnections Private Methods
 static gint
 mud_connections_close_cb(GtkWidget *widget, MudConnections *conn)
 {
-	g_object_unref(conn);
+    g_object_unref(conn);
 
-	return TRUE;
+    return TRUE;
 }
 
 static void
 mud_connections_connect_cb(GtkWidget *widget, MudConnections *conn)
 {
-	GList *selected = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(conn->priv->iconview));
-	GtkTreeIter iter;
-	gchar *buf, *mud_name, *key, *strip_name,
-	      *profile, *host, *logon, *char_name;
-	gint port;
-	gchar **mud_tuple;
-	gint len;
-	GConfClient *client = gconf_client_get_default();
-	MudConnectionView *view;
-
-	if(g_list_length(selected) == 0)
-		return;
-
-	logon = char_name = NULL;
-
-	gtk_tree_model_get_iter(conn->priv->icon_model, &iter, (GtkTreePath *)selected->data);
-	gtk_tree_model_get(conn->priv->icon_model, &iter, 0, &buf, -1);
+    GList *selected =
+	gtk_icon_view_get_selected_items(
+	    GTK_ICON_VIEW(conn->priv->iconview));
+    GtkTreeIter iter;
+    gchar *buf, *mud_name, *key, *strip_name,
+	*profile, *host, *logon, *char_name;
+    gint port;
+    gchar **mud_tuple;
+    gint len;
+    GConfClient *client = gconf_client_get_default();
+    MudConnectionView *view;
+
+    if(g_list_length(selected) == 0)
+	return;
+
+    logon = char_name = NULL;
+
+    gtk_tree_model_get_iter(conn->priv->icon_model, &iter,
+			    (GtkTreePath *)selected->data);
+    gtk_tree_model_get(conn->priv->icon_model, &iter, 0, &buf, -1);
 	
-	mud_tuple = g_strsplit(buf, "\n", -1);
-
-	len = g_strv_length(mud_tuple);
+    mud_tuple = g_strsplit(buf, "\n", -1);
 
-	switch(len)
-	{
-		case 1:
-			mud_name = g_strdup(mud_tuple[0]);
-			break;
-
-		case 2:
-			char_name = remove_whitespace(mud_tuple[0]);
-			mud_name = g_strdup(mud_tuple[1]);
-			break;
-
-		default:
-			g_warning("Malformed mud name passed to delete.");
-			return;
-	}
-
-	g_strfreev(mud_tuple);
-	g_free(buf);
-
-	strip_name = remove_whitespace(mud_name);
+    len = g_strv_length(mud_tuple);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/host", strip_name);
-	host = gconf_client_get_string(client, key, NULL);
+    switch(len)
+    {
+    case 1:
+	mud_name = g_strdup(mud_tuple[0]);
+	break;
+
+    case 2:
+	char_name = remove_whitespace(mud_tuple[0]);
+	mud_name = g_strdup(mud_tuple[1]);
+	break;
+
+    default:
+	g_warning("Malformed mud name passed to delete.");
+	return;
+    }
+
+    g_strfreev(mud_tuple);
+    g_free(buf);
+
+    strip_name = remove_whitespace(mud_name);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/host", strip_name);
+    host = gconf_client_get_string(client, key, NULL);
+    g_free(key);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/profile", strip_name);
+    profile = gconf_client_get_string(client, key, NULL);
+    g_free(key);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/port", strip_name);
+    port = gconf_client_get_int(client, key, NULL);
+    g_free(key);
+
+    if(char_name && strlen(char_name) > 0)
+    {
+	key = g_strdup_printf(
+	    "/apps/gnome-mud/muds/%s/characters/%s/logon", 
+	    strip_name, char_name);
+	logon = gconf_client_get_string(client, key, NULL);
 	g_free(key);
+    }
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/profile", strip_name);
-	profile = gconf_client_get_string(client, key, NULL);
-	g_free(key);
+    mud_tray_update_icon(conn->priv->tray, offline);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/port", strip_name);
-	port = gconf_client_get_int(client, key, NULL);
-	g_free(key);
+    view = mud_connection_view_new("Default", host, port,
+				   conn->priv->winwidget,
+				   (GtkWidget *)conn->priv->tray, mud_name);
+    mud_window_add_connection_view(conn->priv->parent, view, mud_name);
+    mud_connection_view_set_profile(view, get_profile(profile));
+    mud_window_profile_menu_set_active(profile, conn->priv->parent);
+
+    if(logon && strlen(logon) != 0)
+	mud_connection_view_set_connect_string(view, logon);
+
+    g_free(mud_name);
+    g_free(strip_name);
+    g_object_unref(client);
 
-	if(char_name && strlen(char_name) > 0)
-	{
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon", 
-				strip_name, char_name);
-		logon = gconf_client_get_string(client, key, NULL);
-		g_free(key);
-	}
-
-	mud_tray_update_icon(conn->priv->tray, offline);
-
-	view = mud_connection_view_new("Default", host, port, conn->priv->winwidget,
-			(GtkWidget *)conn->priv->tray, mud_name);
-	mud_window_add_connection_view(conn->priv->parent, view, mud_name);
-	mud_connection_view_set_profile(view, get_profile(profile));
-	mud_window_profile_menu_set_active(profile, conn->priv->parent);
-
-	if(logon && strlen(logon) != 0)
-		mud_connection_view_set_connect_string(view, logon);
-
-	g_free(mud_name);
-	g_free(strip_name);
-	g_object_unref(client);
-
-	// Safe only because the iconview is in single select mode.
-	/*g_free(selected->data);
-	g_list_free(selected);*/
+    g_list_foreach(selected, (GFunc)gtk_tree_path_free, NULL);
+    g_list_free(selected);
 
 }
 
 static void
 mud_connections_add_cb(GtkWidget *widget, MudConnections *conn)
 {
-	mud_connections_show_properties(conn, NULL);
+    mud_connections_show_properties(conn, NULL);
 }
 
 static void
 mud_connections_delete_cb(GtkWidget *widget, MudConnections *conn)
 {
-	GList *selected = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(conn->priv->iconview));
-	GtkTreeIter iter;
-	gchar *buf, *mud_name, *key, *strip_name;
-	gchar **mud_tuple;
-	gint len;
-	GConfClient *client = gconf_client_get_default();
+    GList *selected =
+	gtk_icon_view_get_selected_items(
+	    GTK_ICON_VIEW(conn->priv->iconview));
+    GtkTreeIter iter;
+    gchar *buf, *mud_name, *key, *strip_name;
+    gchar **mud_tuple;
+    gint len;
+    GConfClient *client = gconf_client_get_default();
+
+    if(g_list_length(selected) == 0)
+	return;
+
+    gtk_tree_model_get_iter(conn->priv->icon_model, &iter,
+			    (GtkTreePath *)selected->data);
+    gtk_tree_model_get(conn->priv->icon_model, &iter, 0, &buf, -1);
+	
+    mud_tuple = g_strsplit(buf, "\n", -1);
 
-	if(g_list_length(selected) == 0)
-		return;
+    len = g_strv_length(mud_tuple);
 
-	gtk_tree_model_get_iter(conn->priv->icon_model, &iter, (GtkTreePath *)selected->data);
-	gtk_tree_model_get(conn->priv->icon_model, &iter, 0, &buf, -1);
-	
-	mud_tuple = g_strsplit(buf, "\n", -1);
+    switch(len)
+    {
+    case 1:
+	mud_name = g_strdup(mud_tuple[0]);
+	break;
 
-	len = g_strv_length(mud_tuple);
+    case 2:
+	mud_name = g_strdup(mud_tuple[1]);
+	break;
 
-	switch(len)
-	{
-		case 1:
-			mud_name = g_strdup(mud_tuple[0]);
-			break;
-
-		case 2:
-			mud_name = g_strdup(mud_tuple[1]);
-			break;
-
-		default:
-			g_warning("Malformed mud name passed to delete.");
-			return;
-	}
+    default:
+	g_warning("Malformed mud name passed to delete.");
+	return;
+    }
 
-	g_strfreev(mud_tuple);
+    g_strfreev(mud_tuple);
 
-	if(!mud_connections_delete_confirm(buf))
-		return;
+    if(!mud_connections_delete_confirm(buf))
+	return;
 
-	g_free(buf);
+    g_free(buf);
 
-	strip_name = remove_whitespace(mud_name);
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s", strip_name);
-	gconf_client_recursive_unset(client, key, 0, NULL);
-	g_free(key);
-	gconf_client_suggest_sync(client, NULL);
+    strip_name = remove_whitespace(mud_name);
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s", strip_name);
+    gconf_client_recursive_unset(client, key, 0, NULL);
+    g_free(key);
+    gconf_client_suggest_sync(client, NULL);
 
-	g_free(mud_name);
-	g_free(strip_name);
-	g_object_unref(client);
+    g_free(mud_name);
+    g_free(strip_name);
+    g_object_unref(client);
 
-	// Safe only because the iconview is in single select mode.
-	/*g_free(selected->data);
-	g_list_free(selected);*/
+    g_list_foreach(selected, (GFunc)gtk_tree_path_free, NULL);
+    g_list_free(selected);
 }
 
 static void
 mud_connections_properties_cb(GtkWidget *widget, MudConnections *conn)
 {
-	GList *selected = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(conn->priv->iconview));
-	GtkTreeIter iter;
-	gchar *buf;
+    GList *selected =
+	gtk_icon_view_get_selected_items(
+	    GTK_ICON_VIEW(conn->priv->iconview));
+    GtkTreeIter iter;
+    gchar *buf;
+
+    if(g_list_length(selected) == 0)
+	return;
+
+    gtk_tree_model_get_iter(conn->priv->icon_model, &iter,
+			    (GtkTreePath *)selected->data);
+    gtk_tree_model_get(conn->priv->icon_model, &iter, 0, &buf, -1);
 
-	if(g_list_length(selected) == 0)
-		return;
+    mud_connections_show_properties(conn, g_strdup(buf));
 
-	gtk_tree_model_get_iter(conn->priv->icon_model, &iter, (GtkTreePath *)selected->data);
-	gtk_tree_model_get(conn->priv->icon_model, &iter, 0, &buf, -1);
-
-	mud_connections_show_properties(conn, g_strdup(buf));
-
-	g_free(buf);
+    g_free(buf);
 }
 
 static void
 mud_connections_populate_iconview(MudConnections *conn)
 {
-	GSList *muds, *characters, *mud_entry, *char_entry;
-	gchar *key, *mud_name, *char_name, *display_name,
-	      *name_strip, *char_strip, *buf;
-	GConfClient *client = gconf_client_get_default();
-	GtkTreeIter iter;
-	GdkPixbuf *icon;
+    GSList *muds, *characters, *mud_entry, *char_entry;
+    gchar *key, *mud_name, *char_name, *display_name,
+	*name_strip, *char_strip, *buf;
+    GConfClient *client = gconf_client_get_default();
+    GtkTreeIter iter;
+    GdkPixbuf *icon;
+
+    key = g_strdup("/apps/gnome-mud/muds");
+    muds = gconf_client_all_dirs(client, key, NULL);
+    g_free(key);
+
+    for(mud_entry = muds; mud_entry != NULL;
+	mud_entry = g_slist_next(mud_entry))
+    {
+	mud_name = g_path_get_basename((gchar *)mud_entry->data);
+	name_strip = NULL;
+
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/name", mud_name);
+	name_strip = gconf_client_get_string(client, key, NULL);
+	g_free(key);
 
-	key = g_strdup("/apps/gnome-mud/muds");
-	muds = gconf_client_all_dirs(client, key, NULL);
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters",
+			      mud_name);
+	characters = gconf_client_all_dirs(client, key, NULL);
 	g_free(key);
 
-	for(mud_entry = muds; mud_entry != NULL; mud_entry = g_slist_next(mud_entry))
+	char_entry = characters;
+
+	if(char_entry == NULL) // No Characters
+	{
+	    key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", mud_name);
+	    buf = gconf_client_get_string(client, key, NULL);
+	    g_free(key);
+
+	    if(buf && strcmp(buf, "gnome-mud") != 0)
+	    {
+		icon = gdk_pixbuf_new_from_file_at_size(
+		    buf, 48, 48, NULL);
+		g_free(buf);
+	    }
+	    else
+		icon =
+		    gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
+					     "gnome-mud", 48, 0, NULL);
+
+	    gtk_list_store_append(
+		GTK_LIST_STORE(conn->priv->icon_model), &iter);
+	    gtk_list_store_set(
+		GTK_LIST_STORE(conn->priv->icon_model), &iter,
+		MODEL_COLUMN_STRING, name_strip,
+		MODEL_COLUMN_PIXBUF, icon,
+		-1);
+
+	    g_object_unref(icon);
+	    continue;
+	}
+
+	for(char_entry = characters; char_entry != NULL;
+	    char_entry = g_slist_next(char_entry))
 	{
-		mud_name = g_path_get_basename((gchar *)mud_entry->data);
-		name_strip = NULL;
+	    char_strip = NULL;
+	    char_name = g_path_get_basename((gchar *)char_entry->data);
 
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/name", mud_name);
-		name_strip = gconf_client_get_string(client, key, NULL);
-		g_free(key);
-
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters", mud_name);
-		characters = gconf_client_all_dirs(client, key, NULL);
-		g_free(key);
-
-		char_entry = characters;
-
-		if(char_entry == NULL) // No Characters
-		{
-			key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", mud_name);
-			buf = gconf_client_get_string(client, key, NULL);
-			g_free(key);
-
-			if(buf && strcmp(buf, "gnome-mud") != 0)
-			{
-				icon = gdk_pixbuf_new_from_file_at_size(
-						buf, 48, 48, NULL);
-				g_free(buf);
-			}
-			else
-				icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
-					"gnome-mud", 48, 0, NULL);
-
-			gtk_list_store_append(GTK_LIST_STORE(conn->priv->icon_model), &iter);
-			gtk_list_store_set(GTK_LIST_STORE(conn->priv->icon_model), &iter,
-					MODEL_COLUMN_STRING, name_strip,
-					MODEL_COLUMN_PIXBUF, icon,
-					-1);
-
-			g_object_unref(icon);
-			continue;
-		}
-
-		for(char_entry = characters; char_entry != NULL; char_entry = g_slist_next(char_entry))
-		{
-			char_strip = NULL;
-			char_name = g_path_get_basename((gchar *)char_entry->data);
-
-			key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/name",
-					mud_name, char_name);
-			char_strip = gconf_client_get_string(client, key, NULL);
-			g_free(key);
-
-			display_name = g_strconcat(char_strip, "\n", name_strip, NULL);
-
-			key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", mud_name);
-			buf = gconf_client_get_string(client, key, NULL);
-			g_free(key);
-
-			if(buf && strcmp(buf, "gnome-mud") != 0)
-			{
-				icon = gdk_pixbuf_new_from_file_at_size(
-						buf, 48, 48, NULL);
-				g_free(buf);
-			}
-			else
-				icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
-					"gnome-mud", 48, 0, NULL);
-
-			gtk_list_store_append(GTK_LIST_STORE(conn->priv->icon_model), &iter);
-			gtk_list_store_set(GTK_LIST_STORE(conn->priv->icon_model), &iter,
-					MODEL_COLUMN_STRING, display_name,
-					MODEL_COLUMN_PIXBUF, icon,
-					-1);
-
-			g_object_unref(icon);
-			g_free(char_name);
-			g_free(char_strip);
-			g_free(display_name);
-		}
+	    key = g_strdup_printf(
+		"/apps/gnome-mud/muds/%s/characters/%s/name",
+		mud_name, char_name);
+	    char_strip = gconf_client_get_string(client, key, NULL);
+	    g_free(key);
+
+	    display_name = g_strconcat(char_strip, "\n", name_strip, NULL);
+
+	    key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", mud_name);
+	    buf = gconf_client_get_string(client, key, NULL);
+	    g_free(key);
 
-		g_free(mud_name);
-		g_free(name_strip);
+	    if(buf && strcmp(buf, "gnome-mud") != 0)
+	    {
+		icon = gdk_pixbuf_new_from_file_at_size(
+		    buf, 48, 48, NULL);
+		g_free(buf);
+	    }
+	    else
+		icon =
+		    gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
+					     "gnome-mud", 48, 0, NULL);
+
+	    gtk_list_store_append(GTK_LIST_STORE(conn->priv->icon_model),
+				  &iter);
+	    gtk_list_store_set(GTK_LIST_STORE(conn->priv->icon_model),
+			       &iter,
+			       MODEL_COLUMN_STRING, display_name,
+			       MODEL_COLUMN_PIXBUF, icon,
+			       -1);
+
+	    g_object_unref(icon);
+	    g_free(char_name);
+	    g_free(char_strip);
+	    g_free(display_name);
 	}
+
+	g_free(mud_name);
+	g_free(name_strip);
+    }
 }
 
 static void
 mud_connections_refresh_iconview(MudConnections *conn)
 {
-	GConfClient *client = gconf_client_get_default();
+    GConfClient *client = gconf_client_get_default();
 
-	gtk_list_store_clear(GTK_LIST_STORE(conn->priv->icon_model));
+    gtk_list_store_clear(GTK_LIST_STORE(conn->priv->icon_model));
 
-	gconf_client_suggest_sync(client, NULL);
+    gconf_client_suggest_sync(client, NULL);
 
-	mud_connections_populate_iconview(conn);
+    mud_connections_populate_iconview(conn);
 }
 
 void
-mud_connections_gconf_notify_cb(GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer *conn)
+mud_connections_gconf_notify_cb(GConfClient *client, guint cnxn_id,
+				GConfEntry *entry, gpointer *conn)
 {
-	mud_connections_refresh_iconview((MudConnections *)conn);
+    mud_connections_refresh_iconview((MudConnections *)conn);
 }
 
 void
 mud_connections_iconview_activate_cb(GtkIconView *iconview,
-		GtkTreePath *path, MudConnections *conn)
+				     GtkTreePath *path,
+				     MudConnections *conn)
 {
-	mud_connections_connect_cb(GTK_WIDGET(iconview), conn);
+    mud_connections_connect_cb(GTK_WIDGET(iconview), conn);
 }
 
 
 static gboolean
 mud_connections_button_press_cb(GtkWidget *widget,
-		GdkEventButton *event, MudConnections *conn)
+				GdkEventButton *event,
+				MudConnections *conn)
 {
-	if ((event->button == 3) &&
-			!(event->state & (GDK_SHIFT_MASK |
-					GDK_CONTROL_MASK |
-					GDK_MOD1_MASK)))
-	{
-		mud_connections_popup(conn, event);
-		return TRUE;
-	}
+    if ((event->button == 3) &&
+	!(event->state & (GDK_SHIFT_MASK |
+			  GDK_CONTROL_MASK |
+			  GDK_MOD1_MASK)))
+    {
+	mud_connections_popup(conn, event);
+	return TRUE;
+    }
 
-	return FALSE;
+    return FALSE;
 }
 
 static void
 mud_connections_popup(MudConnections *conn, GdkEventButton *event)
 {
-	GladeXML *glade;
-	GtkWidget *popup;
-	GList *selected = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(conn->priv->iconview));
-
-	if(g_list_length(selected) == 0)
-		return;
-
-	glade = glade_xml_new(GLADEDIR "/muds.glade", "popupmenu", NULL);
-	popup = glade_xml_get_widget(glade, "popupmenu");
-
-	g_signal_connect(glade_xml_get_widget(glade, "connect"), "activate",
-			G_CALLBACK(mud_connections_connect_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "add"), "activate",
-			G_CALLBACK(mud_connections_add_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "delete"), "activate",
-			G_CALLBACK(mud_connections_delete_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "properties"), "activate",
-			G_CALLBACK(mud_connections_properties_cb),
-			conn);
-
-	g_object_unref(glade);
-
-	gtk_menu_attach_to_widget(GTK_MENU(popup), conn->priv->iconview,
-			NULL);
-	gtk_widget_show_all(popup);
-	gtk_menu_popup(GTK_MENU(popup), NULL, NULL, NULL, NULL,
-			event ? event->button : 0,
-			event ? event->time : gtk_get_current_event_time());
-
-	// Safe only because the iconview is in single select mode.
-	/*g_free(selected->data);
-	g_list_free(selected);*/
+    GladeXML *glade;
+    GtkWidget *popup;
+    GList *selected =
+	gtk_icon_view_get_selected_items(
+	    GTK_ICON_VIEW(conn->priv->iconview));
+
+    if(g_list_length(selected) == 0)
+	return;
+
+    glade = glade_xml_new(GLADEDIR "/muds.glade", "popupmenu", NULL);
+    popup = glade_xml_get_widget(glade, "popupmenu");
+
+    g_signal_connect(glade_xml_get_widget(glade, "connect"), "activate",
+		     G_CALLBACK(mud_connections_connect_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "add"), "activate",
+		     G_CALLBACK(mud_connections_add_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "delete"), "activate",
+		     G_CALLBACK(mud_connections_delete_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "properties"), "activate",
+		     G_CALLBACK(mud_connections_properties_cb),
+		     conn);
+
+    g_object_unref(glade);
+
+    gtk_menu_attach_to_widget(GTK_MENU(popup), conn->priv->iconview,
+			      NULL);
+    gtk_widget_show_all(popup);
+    gtk_menu_popup(GTK_MENU(popup), NULL, NULL, NULL, NULL,
+		   event ? event->button : 0,
+		   event ? event->time : gtk_get_current_event_time());
+
+    g_list_foreach(selected, (GFunc)gtk_tree_path_free, NULL);
+    g_list_free(selected);
 }
 
 static gboolean
 mud_connections_delete_confirm(gchar *name)
 {
-	GladeXML *glade;
-	GtkWidget *dialog;
-	GtkWidget *label;
-	gint result;
-	gchar *message;
-	gchar *title;
-
-	glade = glade_xml_new(GLADEDIR "/muds.glade", "mudviewdelconfirm", NULL);
-	dialog = glade_xml_get_widget(glade, "mudviewdelconfirm");
-	label = glade_xml_get_widget(glade, "message");
-	g_object_unref(glade);
-
-	message = g_strdup_printf(_("Are you sure you want to delete %s?"), name);
-	title = g_strdup_printf(_("Delete %s?"), name);
-
-	gtk_label_set_text(GTK_LABEL(label), message);
-	gtk_window_set_title(GTK_WINDOW(dialog), title);
+    GladeXML *glade;
+    GtkWidget *dialog;
+    GtkWidget *label;
+    gint result;
+    gchar *message;
+    gchar *title;
+
+    glade = glade_xml_new(
+	GLADEDIR "/muds.glade", "mudviewdelconfirm", NULL);
+    dialog = glade_xml_get_widget(glade, "mudviewdelconfirm");
+    label = glade_xml_get_widget(glade, "message");
+    g_object_unref(glade);
+
+    message =
+	g_strdup_printf(_("Are you sure you want to delete %s?"), name);
+    title = g_strdup_printf(_("Delete %s?"), name);
+
+    gtk_label_set_text(GTK_LABEL(label), message);
+    gtk_window_set_title(GTK_WINDOW(dialog), title);
 
-	g_free(message);
-	g_free(title);
+    g_free(message);
+    g_free(title);
 
-	result = gtk_dialog_run(GTK_DIALOG(dialog));
-	gtk_widget_destroy(dialog);
+    result = gtk_dialog_run(GTK_DIALOG(dialog));
+    gtk_widget_destroy(dialog);
 
-	return (result == GTK_RESPONSE_YES);
+    return (result == GTK_RESPONSE_YES);
 }
 
 static void
 mud_connections_show_properties(MudConnections *conn, gchar *mud)
 {
-	GladeXML *glade;
-	GConfClient *client;
-	GtkTextBuffer *buffer;
-	gchar *key, *buf, *name_strip, *char_strip;
-	gint port;
-	gchar **mud_tuple;
-
-	glade = glade_xml_new(GLADEDIR "/muds.glade", "mudviewproperties", NULL);
-
-	conn->priv->properties_window = glade_xml_get_widget(glade, "mudviewproperties");
-	conn->priv->name_entry = glade_xml_get_widget(glade, "name_entry");
-	conn->priv->host_entry = glade_xml_get_widget(glade, "host_entry");
-	conn->priv->port_entry = glade_xml_get_widget(glade, "port_entry");
-	conn->priv->icon_button = glade_xml_get_widget(glade, "icon_button");
-	conn->priv->icon_image = glade_xml_get_widget(glade, "icon_image");
-	conn->priv->profile_combo = glade_xml_get_widget(glade, "profile_combo");
-	conn->priv->character_name_entry =
-		glade_xml_get_widget(glade, "character_name_entry");
-	conn->priv->logon_textview =
-		glade_xml_get_widget(glade, "character_logon_textview");
-
-	if(conn->priv->icon_current)
-		g_free(conn->priv->icon_current);
-	conn->priv->icon_current = NULL;
-
-	mud_connections_property_populate_profiles(conn);
-	gtk_combo_box_set_model(GTK_COMBO_BOX(conn->priv->profile_combo), conn->priv->profile_model);
-	conn->priv->profile_combo_renderer = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(conn->priv->profile_combo),
-			conn->priv->profile_combo_renderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(conn->priv->profile_combo),
-			conn->priv->profile_combo_renderer, "text", 0, NULL);
-
-	g_signal_connect(conn->priv->properties_window, "delete-event",
-			G_CALLBACK(mud_connections_property_delete_cb), conn);
-	g_signal_connect(glade_xml_get_widget(glade, "cancel_button"),
-			"clicked",
-			G_CALLBACK(mud_connections_property_cancel_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "save_button"),
-			"clicked",
-			G_CALLBACK(mud_connections_property_save_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "icon_button"),
-			"clicked",
-			G_CALLBACK(mud_connections_property_icon_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "name_entry"),
-			"key-press-event",
-			G_CALLBACK(mud_connections_property_changed_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "host_entry"),
-			"key-press-event",
-			G_CALLBACK(mud_connections_property_changed_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "port_entry"),
-			"key-press-event",
-			G_CALLBACK(mud_connections_property_changed_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "character_name_entry"),
-			"key-press-event",
-			G_CALLBACK(mud_connections_property_changed_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "character_logon_textview"),
-			"key-press-event",
-			G_CALLBACK(mud_connections_property_changed_cb),
-			conn);
-	g_signal_connect(glade_xml_get_widget(glade, "profile_combo"),
-			"changed",
-			G_CALLBACK(mud_connections_property_combo_changed_cb),
-			conn);
-
-	g_object_unref(glade);
-
-	if(conn->priv->original_name != NULL)
-		g_free(conn->priv->original_name);
-	conn->priv->original_name = NULL;
-
-	if(conn->priv->original_char_name != NULL)
-		g_free(conn->priv->original_char_name);
-	conn->priv->original_char_name = NULL;
+    GladeXML *glade;
+    GConfClient *client;
+    GtkTextBuffer *buffer;
+    gchar *key, *buf, *name_strip, *char_strip;
+    gint port;
+    gchar **mud_tuple;
+
+    glade =
+	glade_xml_new(GLADEDIR "/muds.glade", "mudviewproperties", NULL);
+
+    conn->priv->properties_window =
+	glade_xml_get_widget(glade, "mudviewproperties");
+    conn->priv->name_entry = glade_xml_get_widget(glade, "name_entry");
+    conn->priv->host_entry = glade_xml_get_widget(glade, "host_entry");
+    conn->priv->port_entry = glade_xml_get_widget(glade, "port_entry");
+    conn->priv->icon_button = glade_xml_get_widget(glade, "icon_button");
+    conn->priv->icon_image = glade_xml_get_widget(glade, "icon_image");
+    conn->priv->profile_combo =
+	glade_xml_get_widget(glade, "profile_combo");
+    conn->priv->character_name_entry =
+	glade_xml_get_widget(glade, "character_name_entry");
+    conn->priv->logon_textview =
+	glade_xml_get_widget(glade, "character_logon_textview");
+
+    if(conn->priv->icon_current)
+	g_free(conn->priv->icon_current);
+    conn->priv->icon_current = NULL;
+
+    mud_connections_property_populate_profiles(conn);
+    gtk_combo_box_set_model(
+	GTK_COMBO_BOX(conn->priv->profile_combo),
+	conn->priv->profile_model);
+    conn->priv->profile_combo_renderer = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(conn->priv->profile_combo),
+			       conn->priv->profile_combo_renderer, TRUE);
+    gtk_cell_layout_set_attributes(
+	GTK_CELL_LAYOUT(conn->priv->profile_combo),
+	conn->priv->profile_combo_renderer, "text", 0, NULL);
+
+    g_signal_connect(conn->priv->properties_window, "delete-event",
+		     G_CALLBACK(mud_connections_property_delete_cb), conn);
+    g_signal_connect(glade_xml_get_widget(glade, "cancel_button"),
+		     "clicked",
+		     G_CALLBACK(mud_connections_property_cancel_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "save_button"),
+		     "clicked",
+		     G_CALLBACK(mud_connections_property_save_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "icon_button"),
+		     "clicked",
+		     G_CALLBACK(mud_connections_property_icon_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "name_entry"),
+		     "key-press-event",
+		     G_CALLBACK(mud_connections_property_changed_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "host_entry"),
+		     "key-press-event",
+		     G_CALLBACK(mud_connections_property_changed_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "port_entry"),
+		     "key-press-event",
+		     G_CALLBACK(mud_connections_property_changed_cb),
+		     conn);
+    g_signal_connect(glade_xml_get_widget(glade, "character_name_entry"),
+		     "key-press-event",
+		     G_CALLBACK(mud_connections_property_changed_cb),
+		     conn);
+    g_signal_connect(
+	glade_xml_get_widget(glade, "character_logon_textview"),
+	"key-press-event",
+	G_CALLBACK(mud_connections_property_changed_cb),
+	conn);
+    g_signal_connect(glade_xml_get_widget(glade, "profile_combo"),
+		     "changed",
+		     G_CALLBACK(mud_connections_property_combo_changed_cb),
+		     conn);
+
+    g_object_unref(glade);
+
+    if(conn->priv->original_name != NULL)
+	g_free(conn->priv->original_name);
+    conn->priv->original_name = NULL;
+
+    if(conn->priv->original_char_name != NULL)
+	g_free(conn->priv->original_char_name);
+    conn->priv->original_char_name = NULL;
 
-	if(mud != NULL)
-	{
-		gint len;
-		mud_tuple = g_strsplit(mud, "\n", -1);
-		g_free(mud);
-		len = g_strv_length(mud_tuple);
-
-		switch(len)
-		{
-			case 1:
-				conn->priv->original_name = g_strdup(mud_tuple[0]);
-				break;
-
-			case 2:
-				conn->priv->original_char_name = g_strdup(mud_tuple[0]);
-				conn->priv->original_name = g_strdup(mud_tuple[1]);
-				break;
-		}
-
-		g_strfreev(mud_tuple);
-	} else
-		return;
-
-	name_strip = remove_whitespace(conn->priv->original_name);
-
-	gtk_entry_set_text(GTK_ENTRY(conn->priv->name_entry), conn->priv->original_name);
-
-	if(conn->priv->original_char_name)
-		gtk_entry_set_text(GTK_ENTRY(conn->priv->character_name_entry),
-				conn->priv->original_char_name);
-
-	client = gconf_client_get_default();
-
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/host", name_strip);
-	buf = gconf_client_get_string(client, key, NULL);
-	g_free(key);
+    if(mud != NULL)
+    {
+	gint len;
+	mud_tuple = g_strsplit(mud, "\n", -1);
+	g_free(mud);
+	len = g_strv_length(mud_tuple);
 
-	if(buf)
+	switch(len)
 	{
-		gtk_entry_set_text(GTK_ENTRY(conn->priv->host_entry), buf);
-		g_free(buf);
+	case 1:
+	    conn->priv->original_name = g_strdup(mud_tuple[0]);
+	    break;
+
+	case 2:
+	    conn->priv->original_char_name = g_strdup(mud_tuple[0]);
+	    conn->priv->original_name = g_strdup(mud_tuple[1]);
+	    break;
 	}
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/port", name_strip);
-	port = gconf_client_get_int(client, key, NULL);
-	g_free(key);
+	g_strfreev(mud_tuple);
+    } else
+	return;
 
-	if(port != 0)
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(conn->priv->port_entry), port);
+    name_strip = remove_whitespace(conn->priv->original_name);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/profile", name_strip);
-	buf = gconf_client_get_string(client, key, NULL);
-	g_free(key);
+    gtk_entry_set_text(
+	GTK_ENTRY(conn->priv->name_entry), conn->priv->original_name);
 
-	if(buf)
-	{
-		mud_connections_property_combo_get_index(conn, buf);
-		g_free(buf);
-	}
+    if(conn->priv->original_char_name)
+	gtk_entry_set_text(GTK_ENTRY(conn->priv->character_name_entry),
+			   conn->priv->original_char_name);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", name_strip);
-	buf = gconf_client_get_string(client, key, NULL);
-	g_free(key);
+    client = gconf_client_get_default();
 
-	if(buf && strcmp(buf, "gnome-mud") != 0)
-	{
-		GdkPixbuf *icon;
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/host", name_strip);
+    buf = gconf_client_get_string(client, key, NULL);
+    g_free(key);
 
-		conn->priv->icon_current = g_strdup(buf);
-		g_free(buf);
+    if(buf)
+    {
+	gtk_entry_set_text(GTK_ENTRY(conn->priv->host_entry), buf);
+	g_free(buf);
+    }
 
-		icon = gdk_pixbuf_new_from_file_at_size(
-				conn->priv->icon_current, 48, 48, NULL);
-		gtk_image_set_from_pixbuf(GTK_IMAGE(conn->priv->icon_image),
-				icon);
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/port", name_strip);
+    port = gconf_client_get_int(client, key, NULL);
+    g_free(key);
+
+    if(port != 0)
+	gtk_spin_button_set_value(
+	    GTK_SPIN_BUTTON(conn->priv->port_entry), port);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/profile", name_strip);
+    buf = gconf_client_get_string(client, key, NULL);
+    g_free(key);
+
+    if(buf)
+    {
+	mud_connections_property_combo_get_index(conn, buf);
+	g_free(buf);
+    }
 
-		g_object_unref(icon);
-	}
-	else
-		conn->priv->icon_current = g_strdup("gnome-mud");
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", name_strip);
+    buf = gconf_client_get_string(client, key, NULL);
+    g_free(key);
 
-	if(conn->priv->original_char_name != NULL)
-	{
-		char_strip = remove_whitespace(conn->priv->original_char_name);
+    if(buf && strcmp(buf, "gnome-mud") != 0)
+    {
+	GdkPixbuf *icon;
+
+	conn->priv->icon_current = g_strdup(buf);
+	g_free(buf);
+
+	icon = gdk_pixbuf_new_from_file_at_size(
+	    conn->priv->icon_current, 48, 48, NULL);
+	gtk_image_set_from_pixbuf(GTK_IMAGE(conn->priv->icon_image),
+				  icon);
+
+	g_object_unref(icon);
+    }
+    else
+	conn->priv->icon_current = g_strdup("gnome-mud");
+
+    if(conn->priv->original_char_name != NULL)
+    {
+	char_strip = remove_whitespace(conn->priv->original_char_name);
 		
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon",
-				name_strip, char_strip);
-		buf = gconf_client_get_string(client, key, NULL);
-		g_free(key);
-
-		if(buf)
-		{
-			buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(conn->priv->logon_textview));
-			gtk_text_buffer_set_text(buffer, buf, strlen(buf));
-			g_free(buf);
-		}
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon",
+			      name_strip, char_strip);
+	buf = gconf_client_get_string(client, key, NULL);
+	g_free(key);
 
-		g_free(char_strip);
+	if(buf)
+	{
+	    buffer =
+		gtk_text_view_get_buffer(
+		    GTK_TEXT_VIEW(conn->priv->logon_textview));
+	    gtk_text_buffer_set_text(buffer, buf, strlen(buf));
+	    g_free(buf);
 	}
 
-	g_free(name_strip);
+	g_free(char_strip);
+    }
+
+    g_free(name_strip);
 
-	g_object_unref(client);
+    g_object_unref(client);
 
-	conn->priv->changed = FALSE;
+    conn->priv->changed = FALSE;
 }
 
 static void
 mud_connections_property_cancel_cb(GtkWidget *widget, MudConnections *conn)
 {
-	gtk_widget_destroy(conn->priv->properties_window);
+    gtk_widget_destroy(conn->priv->properties_window);
 
 }
 
 static void
 mud_connections_property_save_cb(GtkWidget *widget, MudConnections *conn)
 {
-	if(mud_connections_property_save(conn))
-		gtk_widget_destroy(conn->priv->properties_window);
+    if(mud_connections_property_save(conn))
+	gtk_widget_destroy(conn->priv->properties_window);
 }
 static void
 mud_connections_property_icon_cb(GtkWidget *widget, MudConnections *conn)
 {
-	mud_connections_show_icon_dialog(conn);
+    mud_connections_show_icon_dialog(conn);
 }
 
 static gboolean
-mud_connections_property_changed_cb(GtkWidget *widget, GdkEventKey *event, MudConnections *conn)
+mud_connections_property_changed_cb(GtkWidget *widget,
+				    GdkEventKey *event,
+				    MudConnections *conn)
 {
-	conn->priv->changed = TRUE;
+    conn->priv->changed = TRUE;
 
-	return FALSE;
+    return FALSE;
 }
 
 static void
-mud_connections_property_combo_changed_cb(GtkWidget *widget, MudConnections *conn)
+mud_connections_property_combo_changed_cb(GtkWidget *widget,
+					  MudConnections *conn)
 {
-	conn->priv->changed = TRUE;
+    conn->priv->changed = TRUE;
 }
 
 static gboolean
-mud_connections_property_delete_cb(GtkWidget *widget, GdkEvent *event, MudConnections *conn)
+mud_connections_property_delete_cb(GtkWidget *widget,
+				   GdkEvent *event,
+				   MudConnections *conn)
 {
-	if(conn->priv->changed)
-		switch(mud_connections_property_confirm())
-		{
-			case -1:
-				return FALSE;
-				break;	
-			case 1:
-				if(mud_connections_property_save(conn))
-				{
-					return FALSE;
-				}
-				else
-					return TRUE;
-				break;
-
-			case 0:
-				return TRUE;
-				break;
-		}
+    if(conn->priv->changed)
+	switch(mud_connections_property_confirm())
+	{
+	case -1:
+	    return FALSE;
+	    break;	
+	case 1:
+	    if(mud_connections_property_save(conn))
+	    {
+		return FALSE;
+	    }
+	    else
+		return TRUE;
+	    break;
 
-	return FALSE;
+	case 0:
+	    return TRUE;
+	    break;
+	}
+
+    return FALSE;
 }
 
 static gint
 mud_connections_property_confirm(void)
 {
-	GladeXML *glade;
-	GtkWidget *dialog;
-	gint result;
-
-	glade = glade_xml_new(GLADEDIR "/muds.glade", "mudviewconfirm", NULL);
-	dialog = glade_xml_get_widget(glade, "mudviewconfirm");
-	g_object_unref(glade);
-
-	result = gtk_dialog_run(GTK_DIALOG(dialog));
-	gtk_widget_destroy(dialog);
-
-	switch(result)
-	{
-		case GTK_RESPONSE_OK:
-			return 1;
-			break;
-
-		case GTK_RESPONSE_CLOSE:
-			return -1;
-			break;
-
-		default:
-			return 0;
-			break;
-	}
+    GladeXML *glade;
+    GtkWidget *dialog;
+    gint result;
+
+    glade = glade_xml_new(GLADEDIR "/muds.glade", "mudviewconfirm", NULL);
+    dialog = glade_xml_get_widget(glade, "mudviewconfirm");
+    g_object_unref(glade);
+
+    result = gtk_dialog_run(GTK_DIALOG(dialog));
+    gtk_widget_destroy(dialog);
+
+    switch(result)
+    {
+    case GTK_RESPONSE_OK:
+	return 1;
+	break;
+
+    case GTK_RESPONSE_CLOSE:
+	return -1;
+	break;
+
+    default:
+	return 0;
+	break;
+    }
 }
 
 static gboolean
 mud_connections_property_save(MudConnections *conn)
 {
-	GConfClient *client;
-	const gchar *name = gtk_entry_get_text(GTK_ENTRY(conn->priv->name_entry));
-	const gchar *host = gtk_entry_get_text(GTK_ENTRY(conn->priv->host_entry));
-	const gchar *character_name = gtk_entry_get_text(GTK_ENTRY(conn->priv->character_name_entry));
-	gchar *logon, *profile, *key, *buf, *char_name, *stripped_name, *strip_name_new;
-	GtkTextIter start, end;
-	GtkTextBuffer *buffer;
-	GtkTreeIter iter;
-	GSList *chars, *entry;
-
-	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(conn->priv->logon_textview));
-	gtk_text_buffer_get_bounds(buffer, &start, &end);
-	logon = gtk_text_iter_get_text(&start, &end);
-
-	if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(conn->priv->profile_combo), &iter))
-		gtk_tree_model_get(GTK_TREE_MODEL(conn->priv->profile_model), &iter, 0, &profile, -1);
-	else
-		profile = g_strdup("Default");
-
-	if(strlen(name) == 0)
-	{
-		utils_error_message(conn->priv->properties_window, _("Error"),
-				"%s", _("No mud name specified."));
+    GConfClient *client;
+    const gchar *name =
+	gtk_entry_get_text(GTK_ENTRY(conn->priv->name_entry));
+    const gchar *host =
+	gtk_entry_get_text(GTK_ENTRY(conn->priv->host_entry));
+    const gchar *character_name
+	= gtk_entry_get_text(GTK_ENTRY(conn->priv->character_name_entry));
+    gchar *logon, *profile, *key, *buf, *char_name,
+	*stripped_name, *strip_name_new;
+    GtkTextIter start, end;
+    GtkTextBuffer *buffer;
+    GtkTreeIter iter;
+    GSList *chars, *entry;
+
+    buffer =
+	gtk_text_view_get_buffer(GTK_TEXT_VIEW(conn->priv->logon_textview));
+    gtk_text_buffer_get_bounds(buffer, &start, &end);
+    logon = gtk_text_iter_get_text(&start, &end);
+
+    if(gtk_combo_box_get_active_iter(
+	   GTK_COMBO_BOX(conn->priv->profile_combo), &iter))
+	gtk_tree_model_get(
+	    GTK_TREE_MODEL(conn->priv->profile_model),
+	    &iter, 0, &profile, -1);
+    else
+	profile = g_strdup("Default");
+
+    if(strlen(name) == 0)
+    {
+	utils_error_message(conn->priv->properties_window, _("Error"),
+			    "%s", _("No mud name specified."));
 
-		if(logon)
-			g_free(logon);
+	if(logon)
+	    g_free(logon);
 
-		return FALSE;
-	}
+	return FALSE;
+    }
        
-	client = gconf_client_get_default();
+    client = gconf_client_get_default();
+
+    /* If the user renames the mud we need to 
+     * transfer over the old character information
+     * and do some cleanup */
+    if(conn->priv->original_name &&
+       strcmp(conn->priv->original_name, name) != 0)
+    {
+	stripped_name = remove_whitespace(conn->priv->original_name);
+	strip_name_new = remove_whitespace(name);
+
+	g_message("stripped_name: %s", stripped_name);
+	g_message("strip_name_new: %s", strip_name_new);
+
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters",
+			      stripped_name);
+	chars = gconf_client_all_dirs(client, key, NULL);
+	g_free(key);
 
-	/* If the user renames the mud we need to 
-	 * transfer over the old character information
-	 * and do some cleanup */
-	if(conn->priv->original_name &&
-		strcmp(conn->priv->original_name, name) != 0)
+	for(entry = chars; entry != NULL; entry = g_slist_next(entry))
 	{
-		stripped_name = remove_whitespace(conn->priv->original_name);
-		strip_name_new = remove_whitespace(name);
+	    char_name = g_path_get_basename((gchar *)entry->data);
 
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters", stripped_name);
-		chars = gconf_client_all_dirs(client, key, NULL);
-		g_free(key);
-
-		for(entry = chars; entry != NULL; entry = g_slist_next(entry))
-		{
-			char_name = g_path_get_basename((gchar *)entry->data);
-
-			key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon",
-					stripped_name, char_name);
-			buf = gconf_client_get_string(client, key, NULL);
-			g_free(key);
-
-			key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon",
-					strip_name_new, char_name);
-			gconf_client_set_string(client, key, buf, NULL);
-			g_free(key);
-
-			g_free(char_name);
-			g_free(buf);
-		}
-
-		for(entry = chars; entry != NULL; entry = g_slist_next(entry))
-			if(entry->data)
-				g_free(entry->data);
-		g_slist_free(chars);
-
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s", conn->priv->original_name);
-		gconf_client_recursive_unset(client, key, 0, NULL);
-		g_free(key);
+	    key = g_strdup_printf(
+		"/apps/gnome-mud/muds/%s/characters/%s/logon",
+		stripped_name, char_name);
+	    buf = gconf_client_get_string(client, key, NULL);
+	    g_free(key);
+
+	    key = g_strdup_printf(
+		"/apps/gnome-mud/muds/%s/characters/%s/logon",
+		strip_name_new, char_name);
+	    gconf_client_set_string(client, key, buf, NULL);
+	    g_free(key);
 
-		g_free(stripped_name);
-		g_free(strip_name_new);
+	    g_free(char_name);
+	    g_free(buf);
 	}
 
-	stripped_name = remove_whitespace(name);
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/name", stripped_name);
-	gconf_client_set_string(client, key, name, NULL);
-	g_free(key);
+	for(entry = chars; entry != NULL; entry = g_slist_next(entry))
+	    if(entry->data)
+		g_free(entry->data);
+	g_slist_free(chars);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/host", stripped_name);
-	gconf_client_set_string(client, key, host, NULL);
+	key = g_strdup_printf(
+	    "/apps/gnome-mud/muds/%s", stripped_name);
+	gconf_client_recursive_unset(client, key, 0, NULL);
 	g_free(key);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/port", stripped_name);
-	gconf_client_set_int(client, key, 
-			gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(conn->priv->port_entry)),
-			NULL);
+	g_free(stripped_name);
+	g_free(strip_name_new);
+    }
+
+    stripped_name = remove_whitespace(name);
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/name", stripped_name);
+    gconf_client_set_string(client, key, name, NULL);
+    g_free(key);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/host", stripped_name);
+    gconf_client_set_string(client, key, host, NULL);
+    g_free(key);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/port", stripped_name);
+    gconf_client_set_int(client, key, 
+			 gtk_spin_button_get_value_as_int(
+			     GTK_SPIN_BUTTON(conn->priv->port_entry)),
+			 NULL);
+    g_free(key);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", stripped_name);
+    if(conn->priv->icon_current &&
+       strcmp(conn->priv->icon_current, "gnome-mud") != 0)
+	gconf_client_set_string(
+	    client, key, conn->priv->icon_current, NULL);
+    else
+	gconf_client_set_string(client, key, "gnome-mud", NULL);
+    g_free(key);
+
+    key = g_strdup_printf("/apps/gnome-mud/muds/%s/profile", stripped_name);
+    gconf_client_set_string(client, key, profile, NULL);
+    g_free(key);
+
+    if(conn->priv->original_char_name && 
+       strcmp(conn->priv->original_char_name, character_name) != 0)
+    {
+	strip_name_new = remove_whitespace(conn->priv->original_char_name);
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s",
+			      stripped_name, strip_name_new);
+	gconf_client_recursive_unset(client, key, 0, NULL);
 	g_free(key);
+	g_free(strip_name_new);
+    }
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/icon", stripped_name);
-	if(conn->priv->icon_current && strcmp(conn->priv->icon_current, "gnome-mud") != 0)
-		gconf_client_set_string(client, key, conn->priv->icon_current, NULL);
-	else
-		gconf_client_set_string(client, key, "gnome-mud", NULL);
-	g_free(key);
+    strip_name_new = remove_whitespace(character_name);
 
-	key = g_strdup_printf("/apps/gnome-mud/muds/%s/profile", stripped_name);
-	gconf_client_set_string(client, key, profile, NULL);
+    if(strlen(strip_name_new) > 0)
+    {
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon",
+			      stripped_name, strip_name_new);
+	gconf_client_set_string(client, key, logon, NULL);
 	g_free(key);
 
-	if(conn->priv->original_char_name && 
-		strcmp(conn->priv->original_char_name, character_name) != 0)
-	{
-		strip_name_new = remove_whitespace(conn->priv->original_char_name);
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s",
-				stripped_name, strip_name_new);
-		gconf_client_recursive_unset(client, key, 0, NULL);
-		g_free(key);
-		g_free(strip_name_new);
-	}
-
-	strip_name_new = remove_whitespace(character_name);
-
-	if(strlen(strip_name_new) > 0)
-	{
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/logon",
-				stripped_name, strip_name_new);
-		gconf_client_set_string(client, key, logon, NULL);
-		g_free(key);
-
-		key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/name",
-				stripped_name, strip_name_new);
-		gconf_client_set_string(client, key, character_name, NULL);
-		g_free(key);
-	}
+	key = g_strdup_printf("/apps/gnome-mud/muds/%s/characters/%s/name",
+			      stripped_name, strip_name_new);
+	gconf_client_set_string(client, key, character_name, NULL);
+	g_free(key);
+    }
 
-	g_object_unref(client);
+    g_object_unref(client);
 
-	if(logon)
-		g_free(logon);
+    if(logon)
+	g_free(logon);
 
-	if(profile)
-		g_free(profile);
+    if(profile)
+	g_free(profile);
 
-	return TRUE;
+    return TRUE;
 }
 
 static void
 mud_connections_property_populate_profiles(MudConnections *conn)
 {
-	GSList *profiles, *entry;
-	GConfClient *client = gconf_client_get_default();
-	GError *error = NULL;
-	gchar *keyname = g_strdup("/apps/gnome-mud/profiles/list");
-	GtkTreeIter iter;
-
-	profiles = gconf_client_get_list(client, keyname,
-			GCONF_VALUE_STRING, &error);
-
-	conn->priv->profile_model = GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_STRING));
+    GSList *profiles, *entry;
+    GConfClient *client = gconf_client_get_default();
+    GError *error = NULL;
+    gchar *keyname = g_strdup("/apps/gnome-mud/profiles/list");
+    GtkTreeIter iter;
+
+    profiles = gconf_client_get_list(client, keyname,
+				     GCONF_VALUE_STRING, &error);
+
+    conn->priv->profile_model =
+	GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_STRING));
+
+    for(entry = profiles; entry != NULL; entry = g_slist_next(entry))
+    {
+	gtk_list_store_append(
+	    GTK_LIST_STORE(conn->priv->profile_model), &iter);
+	gtk_list_store_set(GTK_LIST_STORE(conn->priv->profile_model), &iter,
+			   0, (gchar *)entry->data, -1);
+    }
 
-	for(entry = profiles; entry != NULL; entry = g_slist_next(entry))
-	{
-		gtk_list_store_append(GTK_LIST_STORE(conn->priv->profile_model), &iter);
-		gtk_list_store_set(GTK_LIST_STORE(conn->priv->profile_model), &iter,
-				0, (gchar *)entry->data, -1);
-	}
-
-	g_free(keyname);
-	g_object_unref(client);
+    g_free(keyname);
+    g_object_unref(client);
 }
 
 static void
-mud_connections_property_combo_get_index(MudConnections *conn, gchar *profile)
+mud_connections_property_combo_get_index(MudConnections *conn,
+					 gchar *profile)
 {
-	gchar *buf;
-	GtkTreeIter iter;
+    gchar *buf;
+    GtkTreeIter iter;
 	
-	gtk_tree_model_get_iter_first(conn->priv->profile_model, &iter);
+    gtk_tree_model_get_iter_first(conn->priv->profile_model, &iter);
 
-	do
-	{
-		gtk_tree_model_get(conn->priv->profile_model, &iter, 0, &buf, -1);
+    do
+    {
+	gtk_tree_model_get(conn->priv->profile_model, &iter, 0, &buf, -1);
 		
-		if(strcmp(buf, profile) == 0)
-		{
-			gtk_combo_box_set_active_iter(
-				GTK_COMBO_BOX(conn->priv->profile_combo),
-				&iter);
-			g_free(buf);
-			return;
-		}
-
-		g_free(buf);
+	if(strcmp(buf, profile) == 0)
+	{
+	    gtk_combo_box_set_active_iter(
+		GTK_COMBO_BOX(conn->priv->profile_combo),
+		&iter);
+	    g_free(buf);
+	    return;
 	}
-	while(gtk_tree_model_iter_next(conn->priv->profile_model, &iter));
+
+	g_free(buf);
+    }
+    while(gtk_tree_model_iter_next(conn->priv->profile_model, &iter));
 }
 
 // Iconview Dialog
 static void
 mud_connections_show_icon_dialog(MudConnections *conn)
 {
-	GladeXML *glade;
-	gint result;
+    GladeXML *glade;
+    gint result;
 
-	glade = glade_xml_new(GLADEDIR "/muds.glade", "iconselect", NULL);
-	conn->priv->icon_dialog = glade_xml_get_widget(glade, "iconselect");
-	conn->priv->icon_dialog_view = glade_xml_get_widget(glade, "view");
-	conn->priv->icon_dialog_chooser = glade_xml_get_widget(glade, "chooser");
-	g_object_unref(glade);
-
-	conn->priv->icon_dialog_view_model = GTK_TREE_MODEL(gtk_list_store_new(MODEL_COLUMN_N,
-							G_TYPE_STRING,
-							GDK_TYPE_PIXBUF));
-
-	gtk_icon_view_set_model(GTK_ICON_VIEW(conn->priv->icon_dialog_view),
-		conn->priv->icon_dialog_view_model);
-	gtk_icon_view_set_text_column(GTK_ICON_VIEW(conn->priv->icon_dialog_view),
-		MODEL_COLUMN_STRING);
-	gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(conn->priv->icon_dialog_view),
-		MODEL_COLUMN_PIXBUF);
+    glade = glade_xml_new(GLADEDIR "/muds.glade", "iconselect", NULL);
+    conn->priv->icon_dialog = glade_xml_get_widget(glade, "iconselect");
+    conn->priv->icon_dialog_view = glade_xml_get_widget(glade, "view");
+    conn->priv->icon_dialog_chooser =
+	glade_xml_get_widget(glade, "chooser");
+    g_object_unref(glade);
+
+    conn->priv->icon_dialog_view_model =
+	GTK_TREE_MODEL(gtk_list_store_new(MODEL_COLUMN_N,
+					  G_TYPE_STRING,
+					  GDK_TYPE_PIXBUF));
+
+    gtk_icon_view_set_model(GTK_ICON_VIEW(conn->priv->icon_dialog_view),
+			    conn->priv->icon_dialog_view_model);
+    gtk_icon_view_set_text_column(
+	GTK_ICON_VIEW(conn->priv->icon_dialog_view),
+	MODEL_COLUMN_STRING);
+    gtk_icon_view_set_pixbuf_column(
+	GTK_ICON_VIEW(conn->priv->icon_dialog_view),
+	MODEL_COLUMN_PIXBUF);
+
+    if(conn->priv->icon_current == NULL)
+	g_free(conn->priv->icon_current);
+    conn->priv->icon_current = NULL;
+
+    g_signal_connect(
+	conn->priv->icon_dialog_chooser, "current-folder-changed",
+		     G_CALLBACK(mud_connections_icon_fileset_cb),
+		     conn);
+    g_signal_connect(conn->priv->icon_dialog_view, "selection-changed",
+		     G_CALLBACK(mud_connections_icon_select_cb),
+		     conn);
+
+    g_object_set(conn->priv->icon_dialog_view, "item-width", 64, NULL);
+    gtk_file_chooser_set_current_folder(
+	GTK_FILE_CHOOSER(conn->priv->icon_dialog_chooser),
+	"/usr/share/icons");
 
-	if(conn->priv->icon_current == NULL)
-		g_free(conn->priv->icon_current);
-	conn->priv->icon_current = NULL;
+    result = gtk_dialog_run(GTK_DIALOG(conn->priv->icon_dialog));
+    gtk_widget_destroy(conn->priv->icon_dialog);
 
-	g_signal_connect(conn->priv->icon_dialog_chooser, "current-folder-changed",
-			G_CALLBACK(mud_connections_icon_fileset_cb),
-			conn);
-	g_signal_connect(conn->priv->icon_dialog_view, "selection-changed",
-			G_CALLBACK(mud_connections_icon_select_cb),
-			conn);
-
-	g_object_set(conn->priv->icon_dialog_view, "item-width", 64, NULL);
-	gtk_file_chooser_set_current_folder(
-			GTK_FILE_CHOOSER(conn->priv->icon_dialog_chooser),
-			"/usr/share/icons");
-
-	result = gtk_dialog_run(GTK_DIALOG(conn->priv->icon_dialog));
-	gtk_widget_destroy(conn->priv->icon_dialog);
-
-	if(result == GTK_RESPONSE_OK)
-	{
-		if(conn->priv->icon_current == NULL)
-			return;
+    if(result == GTK_RESPONSE_OK)
+    {
+	if(conn->priv->icon_current == NULL)
+	    return;
 
-		GdkPixbuf *icon = gdk_pixbuf_new_from_file_at_size(
-				conn->priv->icon_current, 48, 48, NULL);
-		gtk_image_set_from_pixbuf(GTK_IMAGE(conn->priv->icon_image),
-				icon);
-		g_object_unref(icon);
-	}
+	GdkPixbuf *icon = gdk_pixbuf_new_from_file_at_size(
+	    conn->priv->icon_current, 48, 48, NULL);
+	gtk_image_set_from_pixbuf(GTK_IMAGE(conn->priv->icon_image),
+				  icon);
+	g_object_unref(icon);
+    }
 }
 
 void
-mud_connections_icon_fileset_cb(GtkFileChooserButton *chooser, MudConnections *conn)
+mud_connections_icon_fileset_cb(GtkFileChooserButton *chooser,
+				MudConnections *conn)
 {
-	const gchar *file;
-	gchar *current_folder =
-		gtk_file_chooser_get_current_folder(
-				GTK_FILE_CHOOSER(conn->priv->icon_dialog_chooser));
-	GDir *dir = g_dir_open(current_folder ,0, NULL);
-	GPatternSpec *xpm_pattern = g_pattern_spec_new("*.xpm");
-	GPatternSpec *svg_pattern = g_pattern_spec_new("*.svg");
-	GPatternSpec *bmp_pattern = g_pattern_spec_new("*.bmp");
-	GPatternSpec *png_pattern = g_pattern_spec_new("*.png");
-
-	gtk_list_store_clear(GTK_LIST_STORE(conn->priv->icon_dialog_view_model));
-
-	while( (file = g_dir_read_name(dir) ) != NULL)
-		if( g_pattern_match_string(xpm_pattern, file) ||
-		    g_pattern_match_string(svg_pattern, file) ||
-		    g_pattern_match_string(bmp_pattern, file) ||
-		    g_pattern_match_string(png_pattern, file))
-		{
-			gchar *full_path = g_strconcat(current_folder,
-							G_DIR_SEPARATOR_S,
-				       			file, NULL);
-			GdkPixbuf *icon = gdk_pixbuf_new_from_file_at_size(
-					full_path, 48, 48, NULL);
-			GtkTreeIter iter;
-
-			gtk_list_store_append(GTK_LIST_STORE(
-					conn->priv->icon_dialog_view_model),
-					&iter);
-			gtk_list_store_set(GTK_LIST_STORE(conn->priv->icon_dialog_view_model),
-					&iter,
-					MODEL_COLUMN_STRING, file,
-					MODEL_COLUMN_PIXBUF, icon,
-					-1);
+    const gchar *file;
+    gchar *current_folder =
+	gtk_file_chooser_get_current_folder(
+	    GTK_FILE_CHOOSER(conn->priv->icon_dialog_chooser));
+    GDir *dir = g_dir_open(current_folder ,0, NULL);
+    GPatternSpec *xpm_pattern = g_pattern_spec_new("*.xpm");
+    GPatternSpec *svg_pattern = g_pattern_spec_new("*.svg");
+    GPatternSpec *bmp_pattern = g_pattern_spec_new("*.bmp");
+    GPatternSpec *png_pattern = g_pattern_spec_new("*.png");
+
+    gtk_list_store_clear(
+	GTK_LIST_STORE(conn->priv->icon_dialog_view_model));
+
+    while( (file = g_dir_read_name(dir) ) != NULL)
+	if( g_pattern_match_string(xpm_pattern, file) ||
+	    g_pattern_match_string(svg_pattern, file) ||
+	    g_pattern_match_string(bmp_pattern, file) ||
+	    g_pattern_match_string(png_pattern, file))
+	{
+	    gchar *full_path = g_strconcat(current_folder,
+					   G_DIR_SEPARATOR_S,
+					   file, NULL);
+	    GdkPixbuf *icon = gdk_pixbuf_new_from_file_at_size(
+		full_path, 48, 48, NULL);
+	    GtkTreeIter iter;
+
+	    gtk_list_store_append(
+		GTK_LIST_STORE(conn->priv->icon_dialog_view_model),
+		&iter);
+	    gtk_list_store_set(
+		GTK_LIST_STORE(conn->priv->icon_dialog_view_model),
+		&iter,
+		MODEL_COLUMN_STRING, file,
+		MODEL_COLUMN_PIXBUF, icon,
+		-1);
 			
-			g_object_unref(icon);
-			g_free(full_path);
-		}
-
-	g_free(current_folder);
-	g_dir_close(dir);
-	g_pattern_spec_free(xpm_pattern);
-	g_pattern_spec_free(svg_pattern);
-	g_pattern_spec_free(bmp_pattern);
-	g_pattern_spec_free(png_pattern);
+	    g_object_unref(icon);
+	    g_free(full_path);
+	}
+
+    g_free(current_folder);
+    g_dir_close(dir);
+    g_pattern_spec_free(xpm_pattern);
+    g_pattern_spec_free(svg_pattern);
+    g_pattern_spec_free(bmp_pattern);
+    g_pattern_spec_free(png_pattern);
 }
 
 static void
 mud_connections_icon_select_cb(GtkIconView *view, MudConnections *conn)
 {
-	GList *selected =
-		gtk_icon_view_get_selected_items(GTK_ICON_VIEW(conn->priv->icon_dialog_view));
-	GtkTreeIter iter;
-	gchar *buf;
-
-	if(g_list_length(selected) == 0)
-		return;
-
-	gtk_tree_model_get_iter(conn->priv->icon_dialog_view_model, &iter, (GtkTreePath *)selected->data);
-	gtk_tree_model_get(conn->priv->icon_dialog_view_model, &iter, 0, &buf, -1);
-
-
-	if(conn->priv->icon_current != NULL)
-		g_free(conn->priv->icon_current);
-
-	conn->priv->icon_current = g_strconcat(
-			gtk_file_chooser_get_current_folder(
-				GTK_FILE_CHOOSER(conn->priv->icon_dialog_chooser)),
-			G_DIR_SEPARATOR_S,
-			buf, NULL);
+    GList *selected =
+	gtk_icon_view_get_selected_items(
+	    GTK_ICON_VIEW(conn->priv->icon_dialog_view));
+    GtkTreeIter iter;
+    gchar *buf;
+
+    if(g_list_length(selected) == 0)
+	return;
+
+    gtk_tree_model_get_iter(conn->priv->icon_dialog_view_model,
+			    &iter, (GtkTreePath *)selected->data);
+    gtk_tree_model_get(conn->priv->icon_dialog_view_model,
+		       &iter, 0, &buf, -1);
+
+    if(conn->priv->icon_current != NULL)
+	g_free(conn->priv->icon_current);
+
+    conn->priv->icon_current = g_strconcat(
+	gtk_file_chooser_get_current_folder(
+	    GTK_FILE_CHOOSER(conn->priv->icon_dialog_chooser)),
+	G_DIR_SEPARATOR_S,
+	buf, NULL);
 
-	g_free(buf);
+    g_free(buf);
 
-	// Safe only because the iconview is in single select mode.
-	/*g_free(selected->data);
-	g_list_free(selected);*/
+    g_list_foreach(selected, (GFunc)gtk_tree_path_free, NULL);
+    g_list_free(selected);
 }
 
 // Instantiate MudConnections
 MudConnections*
 mud_connections_new(MudWindow *window, GtkWidget *winwidget, MudTray *tray)
 {
-	MudConnections *conn;
+    MudConnections *conn;
 
-	conn = g_object_new(MUD_TYPE_CONNECTIONS, NULL);
+    conn = g_object_new(MUD_TYPE_CONNECTIONS, NULL);
 
-	conn->priv->parent = window;
-	conn->priv->winwidget = winwidget;
-	conn->priv->tray = tray;
+    conn->priv->parent = window;
+    conn->priv->winwidget = winwidget;
+    conn->priv->tray = tray;
 
-	return conn;
+    return conn;
 }
 

Modified: trunk/src/mud-regex.c
==============================================================================
--- trunk/src/mud-regex.c	(original)
+++ trunk/src/mud-regex.c	Thu Feb  5 19:19:17 2009
@@ -25,13 +25,14 @@
 #include <glib/gi18n.h>
 #include <string.h>
 #include <glib.h>
+#include <stdio.h>
 
 #include "mud-regex.h"
 
 struct _MudRegexPrivate
 {
-	const gchar **substring_list;
-	gint substring_count;
+    const gchar **substring_list;
+    gint substring_count;
 };
 
 GType mud_regex_get_type (void);
@@ -43,143 +44,157 @@
 GType
 mud_regex_get_type (void)
 {
-	static GType object_type = 0;
+    static GType object_type = 0;
 
-	g_type_init();
+    g_type_init();
 
-	if (!object_type)
-	{
-		static const GTypeInfo object_info =
-		{
-			sizeof (MudRegexClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) mud_regex_class_init,
-			NULL,
-			NULL,
-			sizeof (MudRegex),
-			0,
-			(GInstanceInitFunc) mud_regex_init,
-		};
+    if (!object_type)
+    {
+	static const GTypeInfo object_info =
+	    {
+		sizeof (MudRegexClass),
+		NULL,
+		NULL,
+		(GClassInitFunc) mud_regex_class_init,
+		NULL,
+		NULL,
+		sizeof (MudRegex),
+		0,
+		(GInstanceInitFunc) mud_regex_init,
+	    };
+
+	object_type =
+	    g_type_register_static(
+		G_TYPE_OBJECT, "MudRegex", &object_info, 0);
+    }
 
-		object_type = g_type_register_static(G_TYPE_OBJECT, "MudRegex", &object_info, 0);
-	}
-
-	return object_type;
+    return object_type;
 }
 
 static void
 mud_regex_init (MudRegex *regex)
 {
-	regex->priv = g_new0(MudRegexPrivate, 1);
+    regex->priv = g_new0(MudRegexPrivate, 1);
 
-	regex->priv->substring_list = NULL;
-	regex->priv->substring_count = 0;
+    regex->priv->substring_list = NULL;
+    regex->priv->substring_count = 0;
 }
 
 static void
 mud_regex_class_init (MudRegexClass *klass)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS(klass);
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-	object_class->finalize = mud_regex_finalize;
+    object_class->finalize = mud_regex_finalize;
 }
 
 static void
 mud_regex_finalize (GObject *object)
 {
-	MudRegex *regex;
-	GObjectClass *parent_class;
+    MudRegex *regex;
+    GObjectClass *parent_class;
 
-	regex = MUD_REGEX(object);
+    regex = MUD_REGEX(object);
 
-	g_free(regex->priv);
+    g_free(regex->priv);
 
-	parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
-	parent_class->finalize(object);
+    parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
+    parent_class->finalize(object);
 }
 
 // MudRegex Methods
 
 gboolean
-mud_regex_check(const gchar *data, guint length, const gchar *rx, gint ovector[1020], MudRegex *regex)
+mud_regex_check(const gchar *data,
+		guint length,
+		const gchar *rx,
+		gint ovector[1020],
+		MudRegex *regex)
 {
-	pcre *re = NULL;
-	const gchar *error = NULL;
-	gint errorcode;
-	gint erroroffset;
-	gint rc;
+    pcre *re = NULL;
+    const gchar *error = NULL;
+    gint errorcode;
+    gint erroroffset;
+    gint rc;
 
-	re = pcre_compile2(rx, 0, &errorcode, &error, &erroroffset, NULL);
+    re = pcre_compile2(rx, 0, &errorcode, &error, &erroroffset, NULL);
 
-	if(!re)
-	{
-		gint i;
+    if(!re)
+    {
+	gint i;
 
-		/* This should never be called since we check the regex validity
-		   at entry time.  But You Never Know(tm) so its here to catch
-		   any runtime errors that cosmic rays, evil magic, errant gconf
-		   editing, and Monday mornings might produce.					*/
+	/*
+	   This should never be called since we check the regex validity
+	   at entry time.  But You Never Know(tm) so its here to catch
+	   any runtime errors that cosmic rays, evil magic, errant gconf
+	   editing, and Monday mornings might produce.
+	 */
 
-		g_warning("Error in Regex! - ErrCode: %d - %s", errorcode, error);
-		g_printf("--> %s\n    ", rx);
+	g_warning("Error in Regex! - ErrCode: %d - %s", errorcode, error);
+	printf("--> %s\n    ", rx);
 
-		for(i = 0; i < erroroffset - 1; i++)
-			g_printf(" ");
+	for(i = 0; i < erroroffset - 1; i++)
+	    printf(" ");
 
-		g_printf("^\n");
+	printf("^\n");
 
-		return FALSE;
+	return FALSE;
 
-	}
+    }
 
-	rc = pcre_exec(re, NULL, data, length, 0, 0, ovector, 1020);
+    rc = pcre_exec(re, NULL, data, length, 0, 0, ovector, 1020);
 
-	if(rc < 0)
-		return FALSE;
+    if(rc < 0)
+	return FALSE;
 
-	if(regex->priv->substring_list)
-		pcre_free_substring_list(regex->priv->substring_list);
+    if(regex->priv->substring_list)
+	pcre_free_substring_list(regex->priv->substring_list);
 
-	pcre_get_substring_list(data, ovector, rc, &regex->priv->substring_list);
-	regex->priv->substring_count = rc;
+    pcre_get_substring_list(data, ovector, rc, &regex->priv->substring_list);
+    regex->priv->substring_count = rc;
 
-	return TRUE;
+    return TRUE;
 }
 
 const gchar **
-mud_regex_test(const gchar *data, guint length, const gchar *rx, gint *rc, const gchar **error, gint *errorcode, gint *erroroffset)
+mud_regex_test(const gchar *data,
+	       guint length,
+	       const gchar *rx,
+	       gint *rc,
+	       const gchar **error,
+	       gint *errorcode,
+	       gint *erroroffset)
 {
-	pcre *re = NULL;
-	gint ovector[1020];
-	const gchar **sub_list;
+    pcre *re = NULL;
+    gint ovector[1020];
+    const gchar **sub_list;
 
-	if(!data)
-	    return NULL;
+    if(!data)
+	return NULL;
 
-	re = pcre_compile2(rx, 0, errorcode, error, erroroffset, NULL);
+    re = pcre_compile2(rx, 0, errorcode, error, erroroffset, NULL);
 
-	if(!re)
-		return NULL;
+    if(!re)
+	return NULL;
 
-	*rc = pcre_exec(re, NULL, data, length, 0, 0, ovector, 1020);
+    *rc = pcre_exec(re, NULL, data, length, 0, 0, ovector, 1020);
 
-	pcre_get_substring_list(data, ovector, *rc, &sub_list);
+    pcre_get_substring_list(data, ovector, *rc, &sub_list);
 
-	return sub_list;
+    return sub_list;
 }
 
 void
 mud_regex_substring_clear(const gchar **substring_list)
 {
-	pcre_free_substring_list(substring_list);
+    pcre_free_substring_list(substring_list);
 }
 
 const gchar **
 mud_regex_get_substring_list(gint *count, MudRegex *regex)
 {
-	*count = regex->priv->substring_count;
-	return regex->priv->substring_list;
+    *count = regex->priv->substring_count;
+    return regex->priv->substring_list;
 }
 
 
@@ -187,9 +202,9 @@
 MudRegex*
 mud_regex_new(void)
 {
-	MudRegex *regex;
+    MudRegex *regex;
 
-	regex = g_object_new(MUD_TYPE_REGEX, NULL);
+    regex = g_object_new(MUD_TYPE_REGEX, NULL);
 
-	return regex;
+    return regex;
 }

Modified: trunk/src/mud-telnet-handlers.c
==============================================================================
--- trunk/src/mud-telnet-handlers.c	(original)
+++ trunk/src/mud-telnet-handlers.c	Thu Feb  5 19:19:17 2009
@@ -97,13 +97,15 @@
 	            telnet->ttype_iteration++;
 	        break;
 
-	        case 4:
-	            mud_telnet_send_sub_req(telnet, 9,
-	                                (guchar)TELOPT_TTYPE,
-                                    (guchar)TEL_TTYPE_IS,
-	                                 'U','N','K','N','O','W','N');
-	            telnet->ttype_iteration = 0;
-	        break;
+		/* RFC 1091 says we need to repeat the last type */
+		case 4:
+		    mud_telnet_send_sub_req(telnet, 9,
+				    (guchar)TELOPT_TTYPE,
+				    (gchar)TEL_TTYPE_IS,
+				    'U','N','K','N','O','W','N');
+		    telnet->ttype_iteration = 0;
+		    break;
+			
 	       }
 }
 

Modified: trunk/src/mud-telnet-msp.c
==============================================================================
--- trunk/src/mud-telnet-msp.c	(original)
+++ trunk/src/mud-telnet-msp.c	Thu Feb  5 19:19:17 2009
@@ -36,190 +36,203 @@
 static void mud_telnet_msp_parser_args(MudTelnet *telnet);
 static void mud_telnet_msp_command_free(MudMSPCommand *command);
 static gboolean mud_telnet_msp_parser_is_param_char(gchar c);
-static gboolean mud_telnet_msp_parser_switch_on_param_char(gint *state, gchar *buf, gint index, gint len);
-static void mud_telnet_msp_process_command(MudTelnet *telnet, MudMSPCommand *command);
+static gboolean mud_telnet_msp_parser_switch_on_param_char(gint *state,
+							   gchar *buf,
+							   gint index,
+							   gint len);
+static void mud_telnet_msp_process_command(MudTelnet *telnet,
+					   MudMSPCommand *command);
 static void mud_telnet_msp_stop_playing(MudTelnet *telnet, MudMSPTypes type);
 static void mud_telnet_msp_start_playing(MudTelnet *telnet, MudMSPTypes type);
 static gboolean mud_telnet_msp_get_files(MudTelnet *telnet, MudMSPTypes type);
-static gboolean mud_telnet_msp_sound_bus_call (GstBus *bus, GstMessage *msg, gpointer data);
-static gboolean mud_telnet_msp_music_bus_call (GstBus *bus, GstMessage *msg, gpointer data);
+static gboolean mud_telnet_msp_sound_bus_call (GstBus *bus,
+					       GstMessage *msg, gpointer data);
+static gboolean mud_telnet_msp_music_bus_call (GstBus *bus,
+					       GstMessage *msg, gpointer data);
 
 GString *
 mud_telnet_msp_parse(MudTelnet *telnet, GString *buf, gint *len)
 {
-	gint count;
-	GString *ret = NULL;
-	gchar *temp;
+    gint count;
+    GString *ret = NULL;
+    gchar *temp;
+
+    mud_telnet_msp_parser_reset(telnet);
+
+    if(telnet->prev_buffer)
+    {
+	g_string_prepend(buf, telnet->prev_buffer->str);
+	g_string_free(telnet->prev_buffer, TRUE);
+	telnet->prev_buffer = NULL;
+    }
+
+    while(telnet->msp_parser.lex_pos_start < *len)
+    {
+	switch(telnet->msp_parser.state)
+	{
+	case MSP_STATE_TEXT:
+	    if(buf->str[telnet->msp_parser.lex_pos_start] == '!')
+		telnet->msp_parser.state = MSP_STATE_POSSIBLE_COMMAND;
+	    else
+	    {
+		g_string_append_c(telnet->msp_parser.output,
+				  buf->str[telnet->msp_parser.lex_pos_start++]);
+	    }
+	    break;
+
+	case MSP_STATE_POSSIBLE_COMMAND:
+	    if(telnet->msp_parser.lex_pos_start + 1 == *len)
+		continue;
+	    else if(buf->str[telnet->msp_parser.lex_pos_start + 1] != '!')
+	    {
+		g_string_append_c(telnet->msp_parser.output,
+				  buf->str[telnet->msp_parser.lex_pos_start++]);
+		telnet->msp_parser.state = MSP_STATE_TEXT;
+		continue;
+	    }
+
+	    telnet->msp_parser.state = MSP_STATE_COMMAND;
+	    break;
+
+	case MSP_STATE_COMMAND:
+	    if(telnet->msp_parser.lex_pos_start + 8 >= *len)
+	    {
+		telnet->prev_buffer = g_string_new(NULL);
+
+		count = telnet->msp_parser.lex_pos_start;
+
+		while(count != buf->len)
+		    g_string_append_c(telnet->prev_buffer, buf->str[count++]);
+
+		telnet->msp_parser.lex_pos_start += count;
+		continue;
+	    }
+
+	    if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'S' &&
+	       buf->str[telnet->msp_parser.lex_pos_start + 3] == 'O' &&
+	       buf->str[telnet->msp_parser.lex_pos_start + 4] == 'U' &&
+	       buf->str[telnet->msp_parser.lex_pos_start + 5] == 'N' &&
+	       buf->str[telnet->msp_parser.lex_pos_start + 6] == 'D')
+		telnet->msp_type = MSP_TYPE_SOUND;
+	    else if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'M' &&
+		    buf->str[telnet->msp_parser.lex_pos_start + 3] == 'U' &&
+		    buf->str[telnet->msp_parser.lex_pos_start + 4] == 'S' &&
+		    buf->str[telnet->msp_parser.lex_pos_start + 5] == 'I' &&
+		    buf->str[telnet->msp_parser.lex_pos_start + 6] == 'C')
+		telnet->msp_type = MSP_TYPE_MUSIC;
+	    else
+	    {
+		/* Not an msp command, bail out. */
+		g_string_append_c(telnet->msp_parser.output,
+				  buf->str[telnet->msp_parser.lex_pos_start++]);
+		g_string_append_c(telnet->msp_parser.output,
+				  buf->str[telnet->msp_parser.lex_pos_start++]);
+
+		telnet->msp_parser.state = MSP_STATE_TEXT;
+		continue;
+	    }
+
+	    // Skip leading (
+	    telnet->msp_parser.lex_pos_start += 8;
+	    telnet->msp_parser.state = MSP_STATE_GET_ARGS;
+	    continue;
+	    break;
+
+	case MSP_STATE_GET_ARGS:
+	    telnet->msp_parser.lex_pos_end = telnet->msp_parser.lex_pos_start;
+
+	    if(telnet->msp_parser.arg_buffer == NULL)
+		telnet->msp_parser.arg_buffer = g_string_new(NULL);
+	    else
+	    {
+		/* This stops some craziness where g_string_append_c
+		   doesn't actually update the gstring. Glib bug? */
+		temp = g_strdup(telnet->msp_parser.arg_buffer->str);
+		g_string_free(telnet->msp_parser.arg_buffer, TRUE);
+		telnet->msp_parser.arg_buffer = g_string_new(temp);
+		g_free(temp);
+	    }
+
+	    while(telnet->msp_parser.lex_pos_end < *len &&
+		  buf->str[telnet->msp_parser.lex_pos_end] != ')')
+		g_string_append_c(telnet->msp_parser.arg_buffer,
+				  buf->str[telnet->msp_parser.lex_pos_end++]);
+
+	    if(telnet->msp_parser.lex_pos_end >= *len &&
+	       buf->str[telnet->msp_parser.lex_pos_end - 1] != ')')
+	    {
+		telnet->msp_parser.lex_pos_start =
+		    telnet->msp_parser.lex_pos_end;
+		continue;
+	    }
+
+	    telnet->msp_parser.state = MSP_STATE_PARSE_ARGS;
+
+	    break;
+
+	case MSP_STATE_PARSE_ARGS:
+	    mud_telnet_msp_parser_args(telnet);
+
+	    g_string_free(telnet->msp_parser.arg_buffer, TRUE);
+	    telnet->msp_parser.arg_buffer = NULL;
+	    telnet->msp_parser.lex_pos_start =
+		telnet->msp_parser.lex_pos_end + 2;
+	    telnet->msp_parser.state = MSP_STATE_TEXT;
+	    break;
+	}
+    }
+
+    if(telnet->msp_parser.state == MSP_STATE_TEXT)
+    {
+	ret = g_string_new(g_strdup(telnet->msp_parser.output->str));
+	*len = telnet->msp_parser.output->len;
+    }
 
-	mud_telnet_msp_parser_reset(telnet);
-
-	if(telnet->prev_buffer)
-	{
-		g_string_prepend(buf, telnet->prev_buffer->str);
-		g_string_free(telnet->prev_buffer, TRUE);
-		telnet->prev_buffer = NULL;
-	}
-
-	while(telnet->msp_parser.lex_pos_start < *len)
-	{
-		switch(telnet->msp_parser.state)
-		{
-			case MSP_STATE_TEXT:
-				if(buf->str[telnet->msp_parser.lex_pos_start] == '!')
-					telnet->msp_parser.state = MSP_STATE_POSSIBLE_COMMAND;
-				else
-				{
-					g_string_append_c(telnet->msp_parser.output,
-						buf->str[telnet->msp_parser.lex_pos_start++]);
-				}
-			break;
-
-			case MSP_STATE_POSSIBLE_COMMAND:
-				if(telnet->msp_parser.lex_pos_start + 1 == *len)
-					continue;
-				else if(buf->str[telnet->msp_parser.lex_pos_start + 1] != '!')
-				{
-					g_string_append_c(telnet->msp_parser.output,
-						buf->str[telnet->msp_parser.lex_pos_start++]);
-					telnet->msp_parser.state = MSP_STATE_TEXT;
-					continue;
-				}
-
-				telnet->msp_parser.state = MSP_STATE_COMMAND;
-			break;
-
-			case MSP_STATE_COMMAND:
-				if(telnet->msp_parser.lex_pos_start + 8 >= *len)
-				{
-					telnet->prev_buffer = g_string_new(NULL);
-
-					count = telnet->msp_parser.lex_pos_start;
-
-					while(count != buf->len)
-						g_string_append_c(telnet->prev_buffer, buf->str[count++]);
-
-					telnet->msp_parser.lex_pos_start += count;
-					continue;
-				}
-
-				if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'S' &&
-				   buf->str[telnet->msp_parser.lex_pos_start + 3] == 'O' &&
-				   buf->str[telnet->msp_parser.lex_pos_start + 4] == 'U' &&
-				   buf->str[telnet->msp_parser.lex_pos_start + 5] == 'N' &&
-				   buf->str[telnet->msp_parser.lex_pos_start + 6] == 'D')
-				   	telnet->msp_type = MSP_TYPE_SOUND;
-				else if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'M' &&
-				   		buf->str[telnet->msp_parser.lex_pos_start + 3] == 'U' &&
-				   		buf->str[telnet->msp_parser.lex_pos_start + 4] == 'S' &&
-				   		buf->str[telnet->msp_parser.lex_pos_start + 5] == 'I' &&
-				   		buf->str[telnet->msp_parser.lex_pos_start + 6] == 'C')
-				   			telnet->msp_type = MSP_TYPE_MUSIC;
-				else
-				{
-					/* Not an msp command, bail out. */
-					g_string_append_c(telnet->msp_parser.output, buf->str[telnet->msp_parser.lex_pos_start++]);
-					g_string_append_c(telnet->msp_parser.output, buf->str[telnet->msp_parser.lex_pos_start++]);
-
-					telnet->msp_parser.state = MSP_STATE_TEXT;
-					continue;
-				}
-
-				// Skip leading (
-				telnet->msp_parser.lex_pos_start += 8;
-				telnet->msp_parser.state = MSP_STATE_GET_ARGS;
-				continue;
-			break;
-
-			case MSP_STATE_GET_ARGS:
-				telnet->msp_parser.lex_pos_end = telnet->msp_parser.lex_pos_start;
-
-				if(telnet->msp_parser.arg_buffer == NULL)
-					telnet->msp_parser.arg_buffer = g_string_new(NULL);
-				else
-				{
-					/* This stops some craziness where g_string_append_c
-					   doesn't actually update the gstring. Glib bug? */
-					temp = g_strdup(telnet->msp_parser.arg_buffer->str);
-					g_string_free(telnet->msp_parser.arg_buffer, TRUE);
-					telnet->msp_parser.arg_buffer = g_string_new(temp);
-					g_free(temp);
-				}
-
-				while(telnet->msp_parser.lex_pos_end < *len && buf->str[telnet->msp_parser.lex_pos_end] != ')')
-					g_string_append_c(telnet->msp_parser.arg_buffer, buf->str[telnet->msp_parser.lex_pos_end++]);
-
-				if(telnet->msp_parser.lex_pos_end >= *len && buf->str[telnet->msp_parser.lex_pos_end - 1] != ')')
-				{
-					telnet->msp_parser.lex_pos_start = telnet->msp_parser.lex_pos_end;
-					continue;
-				}
-
-				telnet->msp_parser.state = MSP_STATE_PARSE_ARGS;
-
-			break;
-
-			case MSP_STATE_PARSE_ARGS:
-				mud_telnet_msp_parser_args(telnet);
-
-				g_string_free(telnet->msp_parser.arg_buffer, TRUE);
-				telnet->msp_parser.arg_buffer = NULL;
-				telnet->msp_parser.lex_pos_start = telnet->msp_parser.lex_pos_end + 2;
-				telnet->msp_parser.state = MSP_STATE_TEXT;
-			break;
-		}
-	}
-
-	if(telnet->msp_parser.state == MSP_STATE_TEXT)
-	{
-		ret = g_string_new(g_strdup(telnet->msp_parser.output->str));
-		*len = telnet->msp_parser.output->len;
-	}
-
-	return ret;
+    return ret;
 }
 
 void
 mud_telnet_msp_init(MudTelnet *telnet)
 {
-	telnet->msp_parser.enabled = TRUE;
-	telnet->msp_parser.state = MSP_STATE_TEXT;
-	telnet->msp_parser.lex_pos_start = 0;
-	telnet->msp_parser.lex_pos_end = 0;
-	telnet->msp_parser.output = g_string_new(NULL);
-	telnet->msp_parser.arg_buffer = NULL;
+    telnet->msp_parser.enabled = TRUE;
+    telnet->msp_parser.state = MSP_STATE_TEXT;
+    telnet->msp_parser.lex_pos_start = 0;
+    telnet->msp_parser.lex_pos_end = 0;
+    telnet->msp_parser.output = g_string_new(NULL);
+    telnet->msp_parser.arg_buffer = NULL;
 }
 
 void
 mud_telnet_msp_parser_clear(MudTelnet *telnet)
 {
-	if(telnet->msp_parser.output)
-		g_string_free(telnet->msp_parser.output, TRUE);
+    if(telnet->msp_parser.output)
+	g_string_free(telnet->msp_parser.output, TRUE);
 
-	telnet->msp_parser.lex_pos_start = 0;
-	telnet->msp_parser.lex_pos_end = 0;
-	telnet->msp_parser.output = g_string_new(NULL);
+    telnet->msp_parser.lex_pos_start = 0;
+    telnet->msp_parser.lex_pos_end = 0;
+    telnet->msp_parser.output = g_string_new(NULL);
 }
 
 void
 mud_telnet_msp_download_item_free(MudMSPDownloadItem *item)
 {
-	if(!item)
-		return;
+    if(!item)
+	return;
 
-	if(item->url)
-		g_free(item->url);
+    if(item->url)
+	g_free(item->url);
 
-	if(item->file)
-		g_free(item->file);
+    if(item->file)
+	g_free(item->file);
 
-	g_free(item);
+    g_free(item);
 }
 
 static void
 mud_telnet_msp_parser_reset(MudTelnet *telnet)
 {
-	telnet->msp_parser.lex_pos_start = 0;
-	telnet->msp_parser.lex_pos_end = 0;
+    telnet->msp_parser.lex_pos_start = 0;
+    telnet->msp_parser.lex_pos_end = 0;
 }
 
 #define ARG_STATE_FILE 0
@@ -233,662 +246,672 @@
 static void
 mud_telnet_msp_parser_args(MudTelnet *telnet)
 {
-	gint state = ARG_STATE_FILE;
-	gint i;
-	GString *buffer = g_string_new(NULL);
-	gchar *args = g_strdup(telnet->msp_parser.arg_buffer->str);
-	gint len = strlen(args);
-	MudMSPCommand *command = g_new0(MudMSPCommand, 1);
-
-	command->type = telnet->msp_type;
-	command->fName = NULL;
-	command->V = NULL;
-	command->L = NULL;
-	command->C = NULL;
-	command->T = NULL;
-	command->U = NULL;
-	command->P = NULL;
+    gint state = ARG_STATE_FILE;
+    gint i;
+    GString *buffer = g_string_new(NULL);
+    gchar *args = g_strdup(telnet->msp_parser.arg_buffer->str);
+    gint len = strlen(args);
+    MudMSPCommand *command = g_new0(MudMSPCommand, 1);
+
+    command->type = telnet->msp_type;
+    command->fName = NULL;
+    command->V = NULL;
+    command->L = NULL;
+    command->C = NULL;
+    command->T = NULL;
+    command->U = NULL;
+    command->P = NULL;
 
-	command->mud_name = g_strdup(telnet->mud_name);
-	command->sfx_type = NULL;
+    command->mud_name = g_strdup(telnet->mud_name);
+    command->sfx_type = NULL;
 
     /* Load defaults */
-	command->volume = 100;
-	command->priority = 50;
-	command->initial_repeat_count = 1;
-	command->current_repeat_count = 1;
-	command->loop = FALSE;
-	command->cont = (telnet->msp_type == MSP_TYPE_MUSIC);
-
-	for(i = 0; i < len; ++i)
-	{
-		if(args[i] == ' ' || args[i] == '=' || args[i] == '"')
-			continue;
-
-		switch(state)
-		{
-			case ARG_STATE_FILE:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		command->fName = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-
-			case ARG_STATE_V:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		command->V = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-
-			case ARG_STATE_L:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		command->L = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-
-			case ARG_STATE_C:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		command->C = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-
-			case ARG_STATE_T:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		command->T = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-
-			case ARG_STATE_U:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		if(buffer->str[buffer->len - 1] != '/')
-				   			g_string_append_c(buffer, '/');
-
-				   		command->U = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-
-			case ARG_STATE_P:
-				if(mud_telnet_msp_parser_is_param_char(args[i]) &&
-				   mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
-				   {
-				   		command->P = g_strdup(buffer->str);
-				   		g_string_free(buffer, TRUE);
-				   		buffer = g_string_new(NULL);
-				   }
-				   else
-					  g_string_append_c(buffer, args[i]);
-			break;
-		}
-	}
+    command->volume = 100;
+    command->priority = 50;
+    command->initial_repeat_count = 1;
+    command->current_repeat_count = 1;
+    command->loop = FALSE;
+    command->cont = (telnet->msp_type == MSP_TYPE_MUSIC);
+
+    for(i = 0; i < len; ++i)
+    {
+	if(args[i] == ' ' || args[i] == '=' || args[i] == '"')
+	    continue;
 
 	switch(state)
 	{
-		case ARG_STATE_FILE:
-			command->fName = g_strdup(buffer->str);
-		break;
-
-		case ARG_STATE_V:
-			command->V = g_strdup(buffer->str);
-		break;
-
-		case ARG_STATE_L:
-			command->L = g_strdup(buffer->str);
-		break;
-
-		case ARG_STATE_C:
-			command->C = g_strdup(buffer->str);
-		break;
-
-		case ARG_STATE_T:
-			command->T = g_strdup(buffer->str);
-		break;
-
-		case ARG_STATE_U:
-	   		if(buffer->str[buffer->len - 1] != '/')
-	   			g_string_append_c(buffer, '/');
-
-			command->U = g_strdup(buffer->str);
-		break;
-
-		case ARG_STATE_P:
-			command->P = g_strdup(buffer->str);
-		break;
-	}
-
-	if(command->C)
-		command->cont = atoi(command->C);
-
-	if(command->T)
-		command->sfx_type = g_strdup(command->T);
-
-	if(command->V)
-		command->volume = atoi(command->V);
-
-	if(command->P)
-		command->priority = atoi(command->P);
-
-	if(command->L)
-	{
-		command->initial_repeat_count = atoi(command->L);
+	case ARG_STATE_FILE:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		command->fName = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+
+	case ARG_STATE_V:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		command->V = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+
+	case ARG_STATE_L:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		command->L = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+
+	case ARG_STATE_C:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		command->C = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+
+	case ARG_STATE_T:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		command->T = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+
+	case ARG_STATE_U:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		if(buffer->str[buffer->len - 1] != '/')
+		    g_string_append_c(buffer, '/');
+
+		command->U = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+
+	case ARG_STATE_P:
+	    if(mud_telnet_msp_parser_is_param_char(args[i]) &&
+	       mud_telnet_msp_parser_switch_on_param_char(&state, args, i, len))
+	    {
+		command->P = g_strdup(buffer->str);
+		g_string_free(buffer, TRUE);
+		buffer = g_string_new(NULL);
+	    }
+	    else
+		g_string_append_c(buffer, args[i]);
+	    break;
+	}
+    }
+
+    switch(state)
+    {
+    case ARG_STATE_FILE:
+	command->fName = g_strdup(buffer->str);
+	break;
+
+    case ARG_STATE_V:
+	command->V = g_strdup(buffer->str);
+	break;
+
+    case ARG_STATE_L:
+	command->L = g_strdup(buffer->str);
+	break;
+
+    case ARG_STATE_C:
+	command->C = g_strdup(buffer->str);
+	break;
+
+    case ARG_STATE_T:
+	command->T = g_strdup(buffer->str);
+	break;
+
+    case ARG_STATE_U:
+	if(buffer->str[buffer->len - 1] != '/')
+	    g_string_append_c(buffer, '/');
+
+	command->U = g_strdup(buffer->str);
+	break;
+
+    case ARG_STATE_P:
+	command->P = g_strdup(buffer->str);
+	break;
+    }
+
+    if(command->C)
+	command->cont = atoi(command->C);
+
+    if(command->T)
+	command->sfx_type = g_strdup(command->T);
+
+    if(command->V)
+	command->volume = atoi(command->V);
+
+    if(command->P)
+	command->priority = atoi(command->P);
+
+    if(command->L)
+    {
+	command->initial_repeat_count = atoi(command->L);
+
+	if(command->initial_repeat_count == 0)
+	    command->initial_repeat_count = 1;
+
+	command->current_repeat_count = command->initial_repeat_count;
+
+	if(command->current_repeat_count == -1)
+	    command->loop = TRUE;
+    }
 
-		if(command->initial_repeat_count == 0)
-			command->initial_repeat_count = 1;
+    mud_telnet_msp_process_command(telnet, command);
 
-		command->current_repeat_count = command->initial_repeat_count;
-
-		if(command->current_repeat_count == -1)
-			command->loop = TRUE;
-	}
-
-	mud_telnet_msp_process_command(telnet, command);
-
-	g_free(args);
-	g_string_free(buffer, TRUE);
+    g_free(args);
+    g_string_free(buffer, TRUE);
 }
 
 static gboolean
 mud_telnet_msp_parser_is_param_char(gchar c)
 {
-	return (c == 'V' || c == 'L' || c == 'C' ||
-			c == 'T' || c == 'U' || c == 'P');
+    return (c == 'V' || c == 'L' || c == 'C' ||
+	    c == 'T' || c == 'U' || c == 'P');
 }
 
 static gboolean
-mud_telnet_msp_parser_switch_on_param_char(gint *state, gchar *buf, gint index, gint len)
+mud_telnet_msp_parser_switch_on_param_char(gint *state, gchar *buf,
+					   gint index, gint len)
 {
-	if(index + 1 == len)
-		return FALSE;
+    if(index + 1 == len)
+	return FALSE;
 
-	if(buf[index + 1] != '=')
-		return FALSE;
+    if(buf[index + 1] != '=')
+	return FALSE;
 
-	switch(buf[index])
-	{
-			case 'V':
-				*state = ARG_STATE_V;
-				return TRUE;
-			break;
-
-			case 'L':
-				*state = ARG_STATE_L;
-				return TRUE;
-			break;
-
-			case 'C':
-				*state = ARG_STATE_C;
-				return TRUE;
-			break;
-
-			case 'T':
-				*state = ARG_STATE_T;
-				return TRUE;
-			break;
-
-			case 'U':
-				*state = ARG_STATE_U;
-				return TRUE;
-			break;
-
-			case 'P':
-				*state = ARG_STATE_P;
-				return TRUE;
-			break;
-	}
+    switch(buf[index])
+    {
+    case 'V':
+	*state = ARG_STATE_V;
+	return TRUE;
+	break;
 
-	return FALSE;
+    case 'L':
+	*state = ARG_STATE_L;
+	return TRUE;
+	break;
+
+    case 'C':
+	*state = ARG_STATE_C;
+	return TRUE;
+	break;
+
+    case 'T':
+	*state = ARG_STATE_T;
+	return TRUE;
+	break;
+
+    case 'U':
+	*state = ARG_STATE_U;
+	return TRUE;
+	break;
+
+    case 'P':
+	*state = ARG_STATE_P;
+	return TRUE;
+	break;
+    }
+
+    return FALSE;
 }
 
 static void
 mud_telnet_msp_command_free(MudMSPCommand *command)
 {
-	if(command == NULL)
-		return;
+    if(command == NULL)
+	return;
 
-	if(command->fName)
-		g_free(command->fName);
+    if(command->fName)
+	g_free(command->fName);
 
-	if(command->mud_name)
-		g_free(command->mud_name);
+    if(command->mud_name)
+	g_free(command->mud_name);
 
-	if(command->sfx_type)
-		g_free(command->sfx_type);
+    if(command->sfx_type)
+	g_free(command->sfx_type);
 
-	if(command->V)
-		g_free(command->V);
+    if(command->V)
+	g_free(command->V);
 
-	if(command->L)
-		g_free(command->L);
+    if(command->L)
+	g_free(command->L);
 
-	if(command->P)
-		g_free(command->P);
+    if(command->P)
+	g_free(command->P);
 
-	if(command->C)
-		g_free(command->C);
+    if(command->C)
+	g_free(command->C);
 
-	if(command->T)
-		g_free(command->T);
+    if(command->T)
+	g_free(command->T);
 
-	if(command->U)
-		g_free(command->U);
+    if(command->U)
+	g_free(command->U);
 
-	g_free(command);
+    g_free(command);
 
 }
 
 static void
 mud_telnet_msp_process_command(MudTelnet *telnet, MudMSPCommand *command)
 {
-	/*g_message("MSP Command Parse Results");
-	g_print("Type: %s\n", (command->type == MSP_TYPE_SOUND) ? "Sound" : "Music" );
-	g_print("Filename: %s\n", (command->fName != NULL) ? command->fName : "<null>");
-	g_print("V: %s\n", (command->V != NULL) ? command->V : "<null>");
-	g_print("L: %s\n", (command->L != NULL) ? command->L : "<null>");
-	g_print("C: %s\n", (command->C != NULL) ? command->C : "<null>");
-	g_print("T: %s\n", (command->T != NULL) ? command->T : "<null>");
-	g_print("U: %s\n", (command->U != NULL) ? command->U : "<null>");
-	g_print("P: %s\n", (command->P != NULL) ? command->P : "<null>");
-	g_print("Sfx Type: %s Volume: %d  Priority: %d  Repeat %d times. %s %s\n", (command->sfx_type) ? command->sfx_type:"None", command->volume,
-	command->priority, command->initial_repeat_count, (command->loop)? "Looping" : "Not Looping",
-	(command->cont) ? "Continue" : "Stop");*/
+    /*g_message("MSP Command Parse Results");
+      g_print("Type: %s\n", (command->type == MSP_TYPE_SOUND) ? "Sound" :
+      "Music" );
+      g_print("Filename: %s\n", (command->fName != NULL) ? command->fName :
+      "<null>");
+      g_print("V: %s\n", (command->V != NULL) ? command->V : "<null>");
+      g_print("L: %s\n", (command->L != NULL) ? command->L : "<null>");
+      g_print("C: %s\n", (command->C != NULL) ? command->C : "<null>");
+      g_print("T: %s\n", (command->T != NULL) ? command->T : "<null>");
+      g_print("U: %s\n", (command->U != NULL) ? command->U : "<null>");
+      g_print("P: %s\n", (command->P != NULL) ? command->P : "<null>");
+      g_print("Sfx Type: %s Volume: %d  Priority: %d  Repeat %d times. %s %s\n",
+      (command->sfx_type) ? command->sfx_type:"None", command->volume,
+      command->priority, command->initial_repeat_count, (command->loop) ?
+      "Looping" : "Not Looping",
+      (command->cont) ? "Continue" : "Stop");*/
 
-	if(command->fName && strcmp(command->fName, "Off") == 0)
+    if(command->fName && strcmp(command->fName, "Off") == 0)
+    {
+	if(command->U)
 	{
-		if(command->U)
-		{
-			if(telnet->base_url)
-				g_free(telnet->base_url);
+	    if(telnet->base_url)
+		g_free(telnet->base_url);
 
 
-			telnet->base_url = g_strdup(command->U);
-		}
-		else
-			mud_telnet_msp_stop_playing(telnet, command->type);
+	    telnet->base_url = g_strdup(command->U);
+	}
+	else
+	    mud_telnet_msp_stop_playing(telnet, command->type);
 
-		mud_telnet_msp_command_free(command);
+	mud_telnet_msp_command_free(command);
 
-		return;
-	}
+	return;
+    }
 
-	if(telnet->sound[command->type].current_command)
-	{
-		if(telnet->sound[command->type].playing)
-		{
-			if(command->priority > telnet->sound[command->type].current_command->priority)
-			{
-				mud_telnet_msp_stop_playing(telnet, command->type);
-				telnet->sound[command->type].current_command = command;
-				mud_telnet_msp_start_playing(telnet, command->type);
-			}
-			else
-				mud_telnet_msp_command_free(command);
-		}
-		else
-		{
-			mud_telnet_msp_stop_playing(telnet, command->type);
-			telnet->sound[command->type].current_command = command;
-			mud_telnet_msp_start_playing(telnet, command->type);
-		}
-	}
-	else
+    if(telnet->sound[command->type].current_command)
+    {
+	if(telnet->sound[command->type].playing)
 	{
+	    if(command->priority >
+	       telnet->sound[command->type].current_command->priority)
+	    {
+		mud_telnet_msp_stop_playing(telnet, command->type);
 		telnet->sound[command->type].current_command = command;
 		mud_telnet_msp_start_playing(telnet, command->type);
+	    }
+	    else
+		mud_telnet_msp_command_free(command);
 	}
+	else
+	{
+	    mud_telnet_msp_stop_playing(telnet, command->type);
+	    telnet->sound[command->type].current_command = command;
+	    mud_telnet_msp_start_playing(telnet, command->type);
+	}
+    }
+    else
+    {
+	telnet->sound[command->type].current_command = command;
+	mud_telnet_msp_start_playing(telnet, command->type);
+    }
 }
 
 static void
 mud_telnet_msp_stop_playing(MudTelnet *telnet, MudMSPTypes type)
 {
-	telnet->sound[type].playing = FALSE;
+    telnet->sound[type].playing = FALSE;
 
-	if(GST_IS_ELEMENT(telnet->sound[type].play))
-	{
-		gst_element_set_state (telnet->sound[type].play, GST_STATE_NULL);
-		gst_object_unref (GST_OBJECT (telnet->sound[type].play));
-	}
+    if(GST_IS_ELEMENT(telnet->sound[type].play))
+    {
+	gst_element_set_state (telnet->sound[type].play, GST_STATE_NULL);
+	gst_object_unref (GST_OBJECT (telnet->sound[type].play));
+    }
+
+    if(telnet->sound[type].files)
+    {
+	g_strfreev(telnet->sound[type].files);
+	telnet->sound[type].files = NULL;
+    }
 
-	if(telnet->sound[type].files)
-	{
-			g_strfreev(telnet->sound[type].files);
-			telnet->sound[type].files = NULL;
-	}
+    telnet->sound[type].files_len = 0;
 
-	telnet->sound[type].files_len = 0;
-
-	mud_telnet_msp_command_free(telnet->sound[type].current_command);
-	telnet->sound[type].current_command = NULL;
+    mud_telnet_msp_command_free(telnet->sound[type].current_command);
+    telnet->sound[type].current_command = NULL;
 }
 
 static void
 mud_telnet_msp_start_playing(MudTelnet *telnet, MudMSPTypes type)
 {
-	if(!telnet->sound[type].current_command)
-		return;
+    if(!telnet->sound[type].current_command)
+	return;
 
-	if(mud_telnet_msp_get_files(telnet, type))
-	{
-		gint num = 0;
+    if(mud_telnet_msp_get_files(telnet, type))
+    {
+	gint num = 0;
+
+	telnet->sound[type].playing = TRUE;
+
+	if(telnet->sound[type].files_len != 0)
+	    num = rand() % telnet->sound[type].files_len;
+
+	telnet->sound[type].play = gst_element_factory_make ("playbin", "play");
+	g_object_set (G_OBJECT(telnet->sound[type].play),
+		      "uri", telnet->sound[type].files[num], NULL);
+	g_object_set(G_OBJECT(telnet->sound[type].play),
+		     "volume",
+		     (double)telnet->sound[type].current_command->volume/100,
+		     NULL);
+
+	telnet->sound[type].bus =
+	    gst_pipeline_get_bus (GST_PIPELINE (telnet->sound[type].play));
+
+	if(type == MSP_TYPE_SOUND)
+	    gst_bus_add_watch (telnet->sound[type].bus,
+			       mud_telnet_msp_sound_bus_call, telnet);
+	else
+	    gst_bus_add_watch (telnet->sound[type].bus,
+			       mud_telnet_msp_music_bus_call, telnet);
 
-		telnet->sound[type].playing = TRUE;
+	gst_object_unref (telnet->sound[type].bus);
 
-		if(telnet->sound[type].files_len != 0)
-			num = rand() % telnet->sound[type].files_len;
+	gst_element_set_state (telnet->sound[type].play, GST_STATE_PLAYING);
+    }
+}
 
-		telnet->sound[type].play = gst_element_factory_make ("playbin", "play");
-		g_object_set (G_OBJECT(telnet->sound[type].play),
-			"uri", telnet->sound[type].files[num], NULL);
-		g_object_set(G_OBJECT(telnet->sound[type].play),
-			"volume", (double)telnet->sound[type].current_command->volume/100, NULL);
+static gboolean
+mud_telnet_msp_get_files(MudTelnet *telnet, MudMSPTypes type)
+{
+    gchar sound_dir[2048];
+    const gchar *file;
+    gchar **files;
+    gchar **structure;
+    GString *file_output;
+    GString *url_output;
+    GString *file_name;
+    GString *subdir;
+    GString *full_dir;
+    GDir *dir;
+    gint i, depth;
+    GPatternSpec *regex;
 
-		telnet->sound[type].bus =
-			gst_pipeline_get_bus (GST_PIPELINE (telnet->sound[type].play));
+    if(!telnet->sound[type].current_command)
+	return FALSE;
 
-		if(type == MSP_TYPE_SOUND)
-			gst_bus_add_watch (telnet->sound[type].bus, mud_telnet_msp_sound_bus_call, telnet);
-		else
-			gst_bus_add_watch (telnet->sound[type].bus, mud_telnet_msp_music_bus_call, telnet);
+    g_snprintf(sound_dir, 2048, "%s/.gnome-mud/audio/%s/",
+	       g_get_home_dir(), telnet->sound[type].current_command->mud_name);
+    if(!g_file_test(sound_dir, G_FILE_TEST_IS_DIR))
+	mkdir(sound_dir, 0777 );
 
-		gst_object_unref (telnet->sound[type].bus);
+    structure = g_strsplit(telnet->sound[type].current_command->fName, "/", 0);
+    depth = g_strv_length(structure);
 
-		gst_element_set_state (telnet->sound[type].play, GST_STATE_PLAYING);
-	}
-}
+    subdir = g_string_new(NULL);
 
-static gboolean
-mud_telnet_msp_get_files(MudTelnet *telnet, MudMSPTypes type)
-{
-	gchar sound_dir[2048];
-	const gchar *file;
-	gchar **files;
-	gchar **structure;
-	GString *file_output;
-	GString *url_output;
-	GString *file_name;
-	GString *subdir;
-	GString *full_dir;
-	GDir *dir;
-	gint i, depth;
-	GPatternSpec *regex;
-
-	if(!telnet->sound[type].current_command)
-		return FALSE;
-
-	g_snprintf(sound_dir, 2048, "%s/.gnome-mud/audio/%s/",
-		g_get_home_dir(), telnet->sound[type].current_command->mud_name);
-	if(!g_file_test(sound_dir, G_FILE_TEST_IS_DIR))
-		mkdir(sound_dir, 0777 );
+    for(i = 0; i < depth - 1; ++i)
+    {
+	g_string_append(subdir, structure[i]);
+	g_string_append_c(subdir, '/');
+    }
 
-	structure = g_strsplit(telnet->sound[type].current_command->fName, "/", 0);
-	depth = g_strv_length(structure);
+    file_name = g_string_new(structure[depth - 1]);
 
-	subdir = g_string_new(NULL);
+    g_strfreev(structure);
 
-	for(i = 0; i < depth - 1; ++i)
-	{
-		g_string_append(subdir, structure[i]);
-		g_string_append_c(subdir, '/');
-	}
+    full_dir = g_string_new(sound_dir);
+    g_string_append(full_dir, subdir->str);
 
-	file_name = g_string_new(structure[depth - 1]);
+    if(telnet->sound[type].current_command->T)
+	g_string_append(full_dir, telnet->sound[type].current_command->T);
 
-	g_strfreev(structure);
+    if(!g_file_test(full_dir->str, G_FILE_TEST_IS_DIR))
+	g_mkdir_with_parents(full_dir->str, 0777);
 
-	full_dir = g_string_new(sound_dir);
-	g_string_append(full_dir, subdir->str);
+    file_output = g_string_new(NULL);
+
+    regex = g_pattern_spec_new(file_name->str);
 
-	if(telnet->sound[type].current_command->T)
-		g_string_append(full_dir, telnet->sound[type].current_command->T);
+    dir = g_dir_open(full_dir->str, 0, NULL);
 
-	if(!g_file_test(full_dir->str, G_FILE_TEST_IS_DIR))
-		g_mkdir_with_parents(full_dir->str, 0777);
+    while((file = g_dir_read_name(dir)) != NULL)
+    {
+	if(g_pattern_match_string(regex, file))
+	{
+	    g_string_append(file_output, "file://");
+	    g_string_append(file_output, full_dir->str);
+	    g_string_append_c(file_output, '/');
+	    g_string_append(file_output, file);
+	    g_string_append_c(file_output, '\n');
+	}
+    }
 
-	file_output = g_string_new(NULL);
+    g_dir_close(dir);
 
-	regex = g_pattern_spec_new(file_name->str);
+    // Try searching again in main directory since
+    // some servers ignore the standard concering the
+    // T parameter and don't put the sound in a T-named
+    // subdir.
+    if(file_output->len == 0 && telnet->sound[type].current_command->T)
+    {
+	g_string_free(full_dir, TRUE);
+	full_dir = g_string_new(sound_dir);
+	g_string_append(full_dir, subdir->str);
 
 	dir = g_dir_open(full_dir->str, 0, NULL);
 
 	while((file = g_dir_read_name(dir)) != NULL)
 	{
-		if(g_pattern_match_string(regex, file))
-		{
-			g_string_append(file_output, "file://");
-			g_string_append(file_output, full_dir->str);
-			g_string_append_c(file_output, '/');
-			g_string_append(file_output, file);
-			g_string_append_c(file_output, '\n');
-		}
+	    if(g_pattern_match_string(regex, file))
+	    {
+		g_string_append(file_output, "file://");
+		g_string_append(file_output, full_dir->str);
+		g_string_append_c(file_output, '/');
+		g_string_append(file_output, file);
+		g_string_append_c(file_output, '\n');
+	    }
 	}
 
 	g_dir_close(dir);
+    }
 
-	// Try searching again in main directory since
-	// some servers ignore the standard concering the
-	// T parameter and don't put the sound in a T-named
-	// subdir.
-	if(file_output->len == 0 && telnet->sound[type].current_command->T)
-	{
-		g_string_free(full_dir, TRUE);
-		full_dir = g_string_new(sound_dir);
-		g_string_append(full_dir, subdir->str);
-
-		dir = g_dir_open(full_dir->str, 0, NULL);
-
-		while((file = g_dir_read_name(dir)) != NULL)
-		{
-			if(g_pattern_match_string(regex, file))
-			{
-				g_string_append(file_output, "file://");
-				g_string_append(file_output, full_dir->str);
-				g_string_append_c(file_output, '/');
-				g_string_append(file_output, file);
-				g_string_append_c(file_output, '\n');
-			}
-		}
-
-		g_dir_close(dir);
-	}
+    g_pattern_spec_free(regex);
 
-	g_pattern_spec_free(regex);
+    if(file_output->len == 0) // no matches, file doesn't exist.
+    {
+	url_output = g_string_new(NULL);
 
-	if(file_output->len == 0) // no matches, file doesn't exist.
+	if(telnet->base_url || telnet->sound[type].current_command->U)
 	{
-		url_output = g_string_new(NULL);
+	    if(telnet->base_url)
+		g_string_append(url_output, telnet->base_url);
+	    else
+		g_string_append(url_output, telnet->sound[type].current_command->U);
 
-		if(telnet->base_url || telnet->sound[type].current_command->U)
-		{
-			if(telnet->base_url)
-				g_string_append(url_output, telnet->base_url);
-			else
-				g_string_append(url_output, telnet->sound[type].current_command->U);
-
-			if(subdir->len != 0)
-				g_string_append(url_output, subdir->str);
-
-			if(telnet->sound[type].current_command->T)
-			{
-				g_string_append(url_output, telnet->sound[type].current_command->T);
-				g_string_append_c(url_output, '/');
-			}
-
-			g_string_append(url_output, file_name->str);
-
-			g_string_append(file_output, full_dir->str);
-			if(telnet->sound[type].current_command->T)
-				g_string_append_c(file_output, '/');
-			g_string_append(file_output, file_name->str);
-
-			telnet->sound[type].current_command->priority = 0;
-
-			mud_connection_view_queue_download(telnet->parent, url_output->str, file_output->str);
-		}
-
-		g_string_free(url_output, TRUE);
-		g_string_free(file_output, TRUE);
-		g_string_free(full_dir, TRUE);
-		g_string_free(subdir, TRUE);
-		g_string_free(file_name, TRUE);
+	    if(subdir->len != 0)
+		g_string_append(url_output, subdir->str);
 
-		return FALSE;
-	}
+	    if(telnet->sound[type].current_command->T)
+	    {
+		g_string_append(url_output, telnet->sound[type].current_command->T);
+		g_string_append_c(url_output, '/');
+	    }
+
+	    g_string_append(url_output, file_name->str);
 
-	files = g_strsplit(file_output->str, "\n", 0);
+	    g_string_append(file_output, full_dir->str);
+	    if(telnet->sound[type].current_command->T)
+		g_string_append_c(file_output, '/');
+	    g_string_append(file_output, file_name->str);
 
-	if(telnet->sound[type].files)
-		g_strfreev(telnet->sound[type].files);
+	    telnet->sound[type].current_command->priority = 0;
 
-	telnet->sound[type].files = files;
-	telnet->sound[type].files_len = g_strv_length(files) - 1;
+	    mud_connection_view_queue_download(telnet->parent, url_output->str, file_output->str);
+	}
 
+	g_string_free(url_output, TRUE);
 	g_string_free(file_output, TRUE);
 	g_string_free(full_dir, TRUE);
 	g_string_free(subdir, TRUE);
 	g_string_free(file_name, TRUE);
 
-	return TRUE;
+	return FALSE;
+    }
+
+    files = g_strsplit(file_output->str, "\n", 0);
+
+    if(telnet->sound[type].files)
+	g_strfreev(telnet->sound[type].files);
+
+    telnet->sound[type].files = files;
+    telnet->sound[type].files_len = g_strv_length(files) - 1;
+
+    g_string_free(file_output, TRUE);
+    g_string_free(full_dir, TRUE);
+    g_string_free(subdir, TRUE);
+    g_string_free(file_name, TRUE);
+
+    return TRUE;
 }
 
 static gboolean
 mud_telnet_msp_sound_bus_call (GstBus *bus, GstMessage *msg, gpointer data)
 {
-	MudTelnet *telnet = (MudTelnet *)data;
+    MudTelnet *telnet = (MudTelnet *)data;
 
-	switch (GST_MESSAGE_TYPE (msg))
-	{
-		case GST_MESSAGE_EOS:
-			telnet->sound[MSP_TYPE_SOUND].playing = FALSE;
+    switch (GST_MESSAGE_TYPE (msg))
+    {
+    case GST_MESSAGE_EOS:
+	telnet->sound[MSP_TYPE_SOUND].playing = FALSE;
 
-			telnet->sound[MSP_TYPE_SOUND].current_command->current_repeat_count--;
+	telnet->sound[MSP_TYPE_SOUND].current_command->current_repeat_count--;
 
-			gst_element_set_state (telnet->sound[MSP_TYPE_SOUND].play, GST_STATE_NULL);
+	gst_element_set_state (telnet->sound[MSP_TYPE_SOUND].play, GST_STATE_NULL);
 
-			if(telnet->sound[MSP_TYPE_SOUND].current_command->loop ||
-			   telnet->sound[MSP_TYPE_SOUND].current_command->current_repeat_count != 0)
-			{
-				gint num = 0;
+	if(telnet->sound[MSP_TYPE_SOUND].current_command->loop ||
+	   telnet->sound[MSP_TYPE_SOUND].current_command->current_repeat_count != 0)
+	{
+	    gint num = 0;
 
-				if(telnet->sound[MSP_TYPE_SOUND].files_len != 0)
-					num = rand() % telnet->sound[MSP_TYPE_SOUND].files_len;
+	    if(telnet->sound[MSP_TYPE_SOUND].files_len != 0)
+		num = rand() % telnet->sound[MSP_TYPE_SOUND].files_len;
 
-				g_object_set (G_OBJECT(telnet->sound[MSP_TYPE_SOUND].play),
-					"uri", telnet->sound[MSP_TYPE_SOUND].files[num], NULL);
-				g_object_set(G_OBJECT(telnet->sound[MSP_TYPE_SOUND].play),
-					"volume", (double)telnet->sound[MSP_TYPE_SOUND].current_command->volume/100.0, NULL);
+	    g_object_set (G_OBJECT(telnet->sound[MSP_TYPE_SOUND].play),
+			  "uri", telnet->sound[MSP_TYPE_SOUND].files[num], NULL);
+	    g_object_set(G_OBJECT(telnet->sound[MSP_TYPE_SOUND].play),
+			 "volume", (double)telnet->sound[MSP_TYPE_SOUND].current_command->volume/100.0, NULL);
 
-				gst_element_set_state (telnet->sound[MSP_TYPE_SOUND].play, GST_STATE_PLAYING);
-			}
-			else
-				mud_telnet_msp_stop_playing(telnet, MSP_TYPE_SOUND);
-		break;
+	    gst_element_set_state (telnet->sound[MSP_TYPE_SOUND].play, GST_STATE_PLAYING);
+	}
+	else
+	    mud_telnet_msp_stop_playing(telnet, MSP_TYPE_SOUND);
+	break;
 
-		case GST_MESSAGE_ERROR:
-		{
-			gchar *debug;
-			GError *err;
+    case GST_MESSAGE_ERROR:
+    {
+	gchar *debug;
+	GError *err;
 
-			gst_message_parse_error (msg, &err, &debug);
-			g_free (debug);
+	gst_message_parse_error (msg, &err, &debug);
+	g_free (debug);
 
-			g_warning ("Error: %s", err->message);
-			g_error_free (err);
+	g_warning ("Error: %s", err->message);
+	g_error_free (err);
 
-			break;
-		}
+	break;
+    }
 
-		default:
-		break;
-	}
+    default:
+	break;
+    }
 
-	return TRUE;
+    return TRUE;
 }
 
 static gboolean
 mud_telnet_msp_music_bus_call (GstBus *bus, GstMessage *msg, gpointer data)
 {
-	MudTelnet *telnet = (MudTelnet *)data;
+    MudTelnet *telnet = (MudTelnet *)data;
 
-	switch (GST_MESSAGE_TYPE (msg))
-	{
-		case GST_MESSAGE_EOS:
-			telnet->sound[MSP_TYPE_MUSIC].playing = FALSE;
+    switch (GST_MESSAGE_TYPE (msg))
+    {
+    case GST_MESSAGE_EOS:
+	telnet->sound[MSP_TYPE_MUSIC].playing = FALSE;
 
-			telnet->sound[MSP_TYPE_MUSIC].current_command->current_repeat_count--;
+	telnet->sound[MSP_TYPE_MUSIC].current_command->current_repeat_count--;
 
-			gst_element_set_state (telnet->sound[MSP_TYPE_MUSIC].play, GST_STATE_NULL);
+	gst_element_set_state (telnet->sound[MSP_TYPE_MUSIC].play, GST_STATE_NULL);
 
-			if(telnet->sound[MSP_TYPE_MUSIC].current_command->loop ||
-			   telnet->sound[MSP_TYPE_MUSIC].current_command->current_repeat_count != 0)
-			{
-				gint num = 0;
+	if(telnet->sound[MSP_TYPE_MUSIC].current_command->loop ||
+	   telnet->sound[MSP_TYPE_MUSIC].current_command->current_repeat_count != 0)
+	{
+	    gint num = 0;
 
-				if(telnet->sound[MSP_TYPE_MUSIC].files_len != 0)
-					num = rand() % telnet->sound[MSP_TYPE_MUSIC].files_len;
+	    if(telnet->sound[MSP_TYPE_MUSIC].files_len != 0)
+		num = rand() % telnet->sound[MSP_TYPE_MUSIC].files_len;
 
-				g_object_set (G_OBJECT(telnet->sound[MSP_TYPE_MUSIC].play),
-					"uri", telnet->sound[MSP_TYPE_MUSIC].files[num], NULL);
-				g_object_set(G_OBJECT(telnet->sound[MSP_TYPE_MUSIC].play),
-					"volume", (double)telnet->sound[MSP_TYPE_MUSIC].current_command->volume/100.0, NULL);
+	    g_object_set (G_OBJECT(telnet->sound[MSP_TYPE_MUSIC].play),
+			  "uri", telnet->sound[MSP_TYPE_MUSIC].files[num], NULL);
+	    g_object_set(G_OBJECT(telnet->sound[MSP_TYPE_MUSIC].play),
+			 "volume", (double)telnet->sound[MSP_TYPE_MUSIC].current_command->volume/100.0, NULL);
 
-				gst_element_set_state (telnet->sound[MSP_TYPE_MUSIC].play, GST_STATE_PLAYING);
-			}
-			else
-				mud_telnet_msp_stop_playing(telnet, MSP_TYPE_MUSIC);
+	    gst_element_set_state (telnet->sound[MSP_TYPE_MUSIC].play, GST_STATE_PLAYING);
+	}
+	else
+	    mud_telnet_msp_stop_playing(telnet, MSP_TYPE_MUSIC);
 
-		break;
+	break;
 
-		case GST_MESSAGE_ERROR:
-		{
-			gchar *debug;
-			GError *err;
+    case GST_MESSAGE_ERROR:
+    {
+	gchar *debug;
+	GError *err;
 
-			gst_message_parse_error (msg, &err, &debug);
-			g_free (debug);
+	gst_message_parse_error (msg, &err, &debug);
+	g_free (debug);
 
-			g_warning ("Error: %s", err->message);
-			g_error_free (err);
+	g_warning ("Error: %s", err->message);
+	g_error_free (err);
 
-			break;
-		}
+	break;
+    }
 
-		default:
-		break;
-	}
+    default:
+	break;
+    }
 
-	return TRUE;
+    return TRUE;
 }
 #endif

Modified: trunk/src/mud-telnet.c
==============================================================================
--- trunk/src/mud-telnet.c	(original)
+++ trunk/src/mud-telnet.c	Thu Feb  5 19:19:17 2009
@@ -36,7 +36,7 @@
 #include "mud-telnet-zmp.h"
 
 #ifdef ENABLE_MCCP
-    #include "mud-telnet-mccp.h"
+#include "mud-telnet-mccp.h"
 #endif
 
 struct _MudTelnetPrivate
@@ -51,21 +51,21 @@
 static void mud_telnet_send_iac(MudTelnet *telnet, guchar ch1, guchar ch2);
 static void mud_telnet_on_handle_subnego(MudTelnet *telnet);
 static void mud_telnet_on_enable_opt(MudTelnet *telnet,
-    const guchar opt_no, gint him);
+				     const guchar opt_no, gint him);
 static void mud_telnet_on_disable_opt(MudTelnet *telnet,
-    const guchar opt_no, gint him);
+				      const guchar opt_no, gint him);
 static guchar mud_telnet_get_telopt_state(guchar *storage, const guint bitshift);
 static gint mud_telnet_get_telopt_queue(guchar *storage, const guint bitshift);
 static void  mud_telnet_set_telopt_state(guchar *storage,
-    const enum TelnetOptionState state, const guint bitshift);
+					 const enum TelnetOptionState state, const guint bitshift);
 static gint mud_telnet_get_index_by_option(MudTelnet *telnet, guchar option_number);
 static void mud_telnet_set_telopt_queue(guchar *storage,
-    gint bit_on, const guint bitshift);
+					gint bit_on, const guint bitshift);
 static gint mud_telnet_handle_positive_nego(MudTelnet *telnet,
-                                const guchar opt_no,
-				const guchar affirmative,
-				const guchar negative,
-				gint him);
+					    const guchar opt_no,
+					    const guchar affirmative,
+					    const guchar negative,
+					    gint him);
 static gint
 mud_telnet_handle_negative_nego(MudTelnet *telnet,
                                 const guchar opt_no,
@@ -73,76 +73,79 @@
 				const guchar negative,
 				gint him);
 
+
+gchar *mud_telnet_get_telopt_string(guchar c);
+
 // MudTelnet class functions
 GType
 mud_telnet_get_type (void)
 {
-	static GType object_type = 0;
-
-	g_type_init();
+    static GType object_type = 0;
 
-	if (!object_type)
-	{
-		static const GTypeInfo object_info =
-		{
-			sizeof (MudTelnetClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) mud_telnet_class_init,
-			NULL,
-			NULL,
-			sizeof (MudTelnet),
-			0,
-			(GInstanceInitFunc) mud_telnet_init,
-		};
+    g_type_init();
+	
+    if (!object_type)
+    {
+	static const GTypeInfo object_info =
+	    {
+		sizeof (MudTelnetClass),
+		NULL,
+		NULL,
+		(GClassInitFunc) mud_telnet_class_init,
+		NULL,
+		NULL,
+		sizeof (MudTelnet),
+		0,
+		(GInstanceInitFunc) mud_telnet_init,
+	    };
 
-		object_type = g_type_register_static(G_TYPE_OBJECT, "MudTelnet", &object_info, 0);
-	}
+	object_type = g_type_register_static(G_TYPE_OBJECT, "MudTelnet", &object_info, 0);
+    }
 
-	return object_type;
+    return object_type;
 }
 
 static void
 mud_telnet_init (MudTelnet *telnet)
 {
-	telnet->priv = g_new0(MudTelnetPrivate, 1);
+    telnet->priv = g_new0(MudTelnetPrivate, 1);
 
-	telnet->processed = g_string_new(NULL);
-	telnet->prev_buffer = NULL;
+    telnet->processed = g_string_new(NULL);
+    telnet->prev_buffer = NULL;
 }
 
 static void
 mud_telnet_class_init (MudTelnetClass *klass)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS(klass);
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-	object_class->finalize = mud_telnet_finalize;
+    object_class->finalize = mud_telnet_finalize;
 }
 
 static void
 mud_telnet_finalize (GObject *object)
 {
-	MudTelnet *telnet;
-	GObjectClass *parent_class;
+    MudTelnet *telnet;
+    GObjectClass *parent_class;
 
     telnet = MUD_TELNET(object);
 
     if(telnet->processed)
         g_string_free(telnet->processed, TRUE);
-	g_free(telnet->priv);
+    g_free(telnet->priv);
 
 #ifdef ENABLE_MCCP
-	if (telnet->compress_out != NULL)
-	{
-		inflateEnd(telnet->compress_out);
+    if (telnet->compress_out != NULL)
+    {
+	inflateEnd(telnet->compress_out);
 
-		g_free(telnet->compress_out);
-		g_free(telnet->compress_out_buf);
-	}
+	g_free(telnet->compress_out);
+	g_free(telnet->compress_out_buf);
+    }
 #endif
 
-	parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
-	parent_class->finalize(object);
+    parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
+    parent_class->finalize(object);
 }
 
 /*** Public Methods ***/
@@ -151,46 +154,47 @@
 MudTelnet*
 mud_telnet_new(MudConnectionView *parent, GConn *connection, gchar *mud_name)
 {
-	MudTelnet *telnet;
+    MudTelnet *telnet;
 
-	telnet = g_object_new(MUD_TYPE_TELNET, NULL);
+    telnet = g_object_new(MUD_TYPE_TELNET, NULL);
 
-	telnet->parent = parent;
-	telnet->conn = connection;
-	telnet->tel_state = TEL_STATE_TEXT;
-	telnet->ttype_iteration = 0;
+    telnet->parent = parent;
+    telnet->conn = connection;
+    telnet->tel_state = TEL_STATE_TEXT;
+    telnet->ttype_iteration = 0;
 
-	memset(telnet->telopt_states, 0, sizeof(telnet->telopt_states));
-	memset(telnet->handlers, 0, sizeof(telnet->handlers));
+    memset(telnet->telopt_states, 0, sizeof(telnet->telopt_states));
+    memset(telnet->handlers, 0, sizeof(telnet->handlers));
 
-	mud_telnet_register_handlers(telnet);
+    mud_telnet_register_handlers(telnet);
 
-	telnet->eor_enabled = FALSE;
+    telnet->eor_enabled = FALSE;
 
-	telnet->mud_name = g_strdup(mud_name);
+    telnet->mud_name = g_strdup(mud_name);
     telnet->buffer = NULL;
-	telnet->pos = 0;
+    telnet->pos = 0;
 
 #ifdef ENABLE_GST
-	telnet->sound[0].files = NULL;
-	telnet->sound[0].current_command = NULL;
-	telnet->sound[0].playing = FALSE;
-	telnet->sound[0].files_len = 0;
-
-	telnet->sound[1].files = NULL;
-	telnet->sound[1].current_command = NULL;
-	telnet->sound[1].playing = FALSE;
-	telnet->sound[1].files_len = 0;
+    telnet->sound[0].files = NULL;
+    telnet->sound[0].current_command = NULL;
+    telnet->sound[0].playing = FALSE;
+    telnet->sound[0].files_len = 0;
+
+    telnet->sound[1].files = NULL;
+    telnet->sound[1].current_command = NULL;
+    telnet->sound[1].playing = FALSE;
+    telnet->sound[1].files_len = 0;
+
+    telnet->base_url = NULL;
+    telnet->msp_parser.enabled = FALSE;
 
-	telnet->base_url = NULL;
-	telnet->msp_parser.enabled = FALSE;
 #endif
 
 #ifdef ENABLE_MCCP
-	telnet->mccp_new = TRUE;
+    telnet->mccp_new = TRUE;
 #endif
 
-	return telnet;
+    return telnet;
 }
 
 void
@@ -215,7 +219,7 @@
     telnet->handlers[0].enable = MudHandler_TType_Enable;
     telnet->handlers[0].disable = MudHandler_TType_Disable;
     telnet->handlers[0].handle_sub_neg = MudHandler_TType_HandleSubNeg;
-
+#if 0
     /* NAWS */
     telnet->handlers[1].type = HANDLER_NAWS;
     telnet->handlers[1].option_number = (guchar)TELOPT_NAWS;
@@ -255,7 +259,7 @@
     telnet->handlers[5].enable = MudHandler_ZMP_Enable;
     telnet->handlers[5].disable = MudHandler_ZMP_Disable;
     telnet->handlers[5].handle_sub_neg = MudHandler_ZMP_HandleSubNeg;
-
+#endif
 #ifdef ENABLE_GST
     /* MSP */
     telnet->handlers[6].type = HANDLER_MSP;
@@ -337,9 +341,10 @@
 void
 mud_telnet_process(MudTelnet *telnet, guchar * buf, guint32 c, gint *len, GString **out_buf)
 {
-	guint32 i;
-	guint32 count;
-	g_assert(telnet != NULL);
+    guint32 i;
+    guint32 count;
+    gchar *opt;
+    g_assert(telnet != NULL);
 
     telnet->buffer = g_string_new(NULL);
 
@@ -368,224 +373,240 @@
 
     count = telnet->buffer->len;
 
-	for (i = 0; i < count; ++i)
+    for (i = 0; i < count; ++i)
+    {
+	switch (telnet->tel_state)
 	{
-		switch (telnet->tel_state)
-		{
-			case TEL_STATE_TEXT:
+	case TEL_STATE_TEXT:
 #ifdef ENABLE_MCCP
-                /* The following is only done when compressing is first
-                   enabled in order to decompress any part of the buffer
-                   that remains after the subnegotation takes place */
-                if(telnet->mccp && telnet->mccp_new)
-                {
-                    GString *ret = NULL;
-                    telnet->mccp_new = FALSE;
-
-                    // decompress the rest of the buffer.
-                    //ret = mud_mccp_decompress(telnet, &buf[i], c - i);
-
-                    if(ret == NULL)
-                    {
-                        if(*out_buf != NULL) g_string_free(*out_buf, TRUE);
-                        *out_buf = g_string_new_len(telnet->processed->str, telnet->pos);
-                        *len = telnet->pos;
-
-                        telnet->pos= 0;
-
-                        if(telnet->processed)
-                        {
-                            g_string_free(telnet->processed, TRUE);
-                            telnet->processed = g_string_new(NULL);
-                        }
-
-                        if(telnet->buffer)
-                        {
-                            g_string_free(telnet->buffer, TRUE);
-                            telnet->buffer = NULL;
-                        }
-
-                        return;
-                    }
-
-                    if(telnet->buffer)
-                    {
-                        g_string_free(telnet->buffer, TRUE);
-                        telnet->buffer = NULL;
-                    }
-
-                    telnet->buffer = g_string_new(ret->str);
-
-                    if(telnet->buffer->len == 0)
-                    {
-                        if(*out_buf != NULL) g_string_free(*out_buf, TRUE);
-                        *out_buf = g_string_new_len(telnet->processed->str, telnet->pos);
-                        *len = telnet->pos;
-
-                        telnet->pos= 0;
-
-                        if(telnet->processed)
-                        {
-                            g_string_free(telnet->processed, TRUE);
-                            telnet->processed = g_string_new(NULL);
-                        }
-
-                        if(telnet->buffer)
-                        {
-                            g_string_free(telnet->buffer, TRUE);
-                            telnet->buffer = NULL;
-                        }
-                        return;
-                    }
-
-                    i = 0;
-                    count = telnet->buffer->len;
-                }
+	    /* The following is only done when compressing is first
+	       enabled in order to decompress any part of the buffer
+	       that remains after the subnegotation takes place */
+	    if(telnet->mccp && telnet->mccp_new)
+	    {
+		GString *ret = NULL;
+		telnet->mccp_new = FALSE;
+
+		// decompress the rest of the buffer.
+		//ret = mud_mccp_decompress(telnet, &buf[i], c - i);
+
+		if(ret == NULL)
+		{
+		    if(*out_buf != NULL) g_string_free(*out_buf, TRUE);
+		    *out_buf = g_string_new_len(telnet->processed->str, telnet->pos);
+		    *len = telnet->pos;
+
+		    telnet->pos= 0;
+
+		    if(telnet->processed)
+		    {
+			g_string_free(telnet->processed, TRUE);
+			telnet->processed = g_string_new(NULL);
+		    }
+
+		    if(telnet->buffer)
+		    {
+			g_string_free(telnet->buffer, TRUE);
+			telnet->buffer = NULL;
+		    }
+
+		    return;
+		}
+
+		if(telnet->buffer)
+		{
+		    g_string_free(telnet->buffer, TRUE);
+		    telnet->buffer = NULL;
+		}
+
+		telnet->buffer = g_string_new(ret->str);
+
+		if(telnet->buffer->len == 0)
+		{
+		    if(*out_buf != NULL) g_string_free(*out_buf, TRUE);
+		    *out_buf = g_string_new_len(telnet->processed->str, telnet->pos);
+		    *len = telnet->pos;
+
+		    telnet->pos= 0;
+
+		    if(telnet->processed)
+		    {
+			g_string_free(telnet->processed, TRUE);
+			telnet->processed = g_string_new(NULL);
+		    }
+
+		    if(telnet->buffer)
+		    {
+			g_string_free(telnet->buffer, TRUE);
+			telnet->buffer = NULL;
+		    }
+		    return;
+		}
+
+		i = 0;
+		count = telnet->buffer->len;
+	    }
 #endif
-				if ((guchar)telnet->buffer->str[i] == (guchar)TEL_IAC)
-					telnet->tel_state = TEL_STATE_IAC;
-				else
-				{
-					g_string_append_c(telnet->processed, telnet->buffer->str[i]);
-					telnet->pos++;
-				}
-				break;
-
-			case TEL_STATE_IAC:
-				switch ((guchar)telnet->buffer->str[i])
-				{
-					case (guchar)TEL_IAC:
-						telnet->pos++;
-						g_string_append_c(telnet->processed, telnet->buffer->str[i]);
-						telnet->tel_state = TEL_STATE_TEXT;
-						break;
-
-					case (guchar)TEL_DO:
-						telnet->tel_state = TEL_STATE_DO;
-						break;
-
-					case (guchar)TEL_DONT:
-						telnet->tel_state = TEL_STATE_DONT;
-						break;
-
-					case (guchar)TEL_WILL:
-						telnet->tel_state = TEL_STATE_WILL;
-						break;
-
-					case (guchar)TEL_NOP:
-					    telnet->tel_state = TEL_STATE_TEXT;
-					    break;
-
-                    case (guchar)TEL_GA:
-                        telnet->tel_state = TEL_STATE_TEXT;
-                        break;
-
-                    case (guchar)TEL_EOR_BYTE:
-                        telnet->tel_state = TEL_STATE_TEXT;
-                        break;
-
-					case (guchar)TEL_WONT:
-						telnet->tel_state = TEL_STATE_WONT;
-						break;
-
-					case (guchar)TEL_SB:
-						telnet->tel_state = TEL_STATE_SB;
-						telnet->subreq_pos = 0;
-						break;
-
-					default:
-						g_warning("Illegal IAC command %d received", telnet->buffer->str[i]);
-						telnet->tel_state = TEL_STATE_TEXT;
-						break;
-				}
-				break;
-
-			case TEL_STATE_DO:
-				mud_telnet_handle_positive_nego(telnet, (guchar)telnet->buffer->str[i],
-				    (guchar)TEL_WILL, (guchar)TEL_WONT, FALSE);
-				telnet->tel_state = TEL_STATE_TEXT;
-
-			case TEL_STATE_WILL:
-				mud_telnet_handle_positive_nego(telnet, (guchar)telnet->buffer->str[i],
-				    (guchar)TEL_DO, (guchar)TEL_DONT, TRUE);
-				telnet->tel_state = TEL_STATE_TEXT;
-				break;
-
-			case TEL_STATE_DONT:
-				mud_telnet_handle_negative_nego(telnet,
-				    (guchar)telnet->buffer->str[i], (guchar)TEL_WILL, (guchar)TEL_WONT, FALSE);
-				telnet->tel_state = TEL_STATE_TEXT;
-				break;
-
-			case TEL_STATE_WONT:
-				mud_telnet_handle_negative_nego(telnet,
-				    (guchar)telnet->buffer->str[i], (guchar)TEL_DO, (guchar)TEL_DONT, TRUE);
-				telnet->tel_state = TEL_STATE_TEXT;
-				break;
-
-			case TEL_STATE_SB:
-				if ((guchar)telnet->buffer->str[i] == (guchar)TEL_IAC)
-					telnet->tel_state = TEL_STATE_SB_IAC;
-				else
-				{
-					// FIXME: Handle overflow
-					if (telnet->subreq_pos >= TEL_SUBREQ_BUFFER_SIZE)
-					{
-						g_warning("Subrequest buffer full. Oddities in output will happen. Sorry.");
-						telnet->subreq_pos = 0;
-						telnet->tel_state = TEL_STATE_TEXT;
-					}
-					else
-						telnet->subreq_buffer[telnet->subreq_pos++] = (guchar)telnet->buffer->str[i];
-				}
-				break;
-
-			case TEL_STATE_SB_IAC:
-				if ((guchar)telnet->buffer->str[i] == (guchar)TEL_IAC)
-				{
-					if (telnet->subreq_pos >= TEL_SUBREQ_BUFFER_SIZE)
-					{
-						g_warning("Subrequest buffer full. Oddities in output will happen. Sorry.");
-						telnet->subreq_pos = 0;
-						telnet->tel_state = TEL_STATE_TEXT;
-					}
-					else
-						telnet->subreq_buffer[telnet->subreq_pos++] = (guchar)telnet->buffer->str[i];
-
-					telnet->tel_state = TEL_STATE_SB;
-				}
-				else if ((guchar)telnet->buffer->str[i] == (guchar)TEL_SE)
-				{
-				    telnet->subreq_buffer[telnet->subreq_pos++] = (guchar)telnet->buffer->str[i];
-					mud_telnet_on_handle_subnego(telnet);
-                    telnet->tel_state = TEL_STATE_TEXT;
-				} else {
-					g_warning("Erronous byte %d after an IAC inside a subrequest", telnet->buffer->str[i]);
-					telnet->subreq_pos = 0;
-					telnet->tel_state = TEL_STATE_TEXT;
-				}
-				break;
+	    if ((guchar)telnet->buffer->str[i] == (guchar)TEL_IAC)
+		telnet->tel_state = TEL_STATE_IAC;
+	    else
+	    {
+		g_string_append_c(telnet->processed, telnet->buffer->str[i]);
+		telnet->pos++;
+	    }
+	    break;
+
+	case TEL_STATE_IAC:
+	    switch ((guchar)telnet->buffer->str[i])
+	    {
+	    case (guchar)TEL_IAC:
+		telnet->pos++;
+		g_string_append_c(telnet->processed, telnet->buffer->str[i]);
+		telnet->tel_state = TEL_STATE_TEXT;
+		break;
+
+	    case (guchar)TEL_DO:
+		telnet->tel_state = TEL_STATE_DO;
+		break;
+
+	    case (guchar)TEL_DONT:
+		telnet->tel_state = TEL_STATE_DONT;
+		break;
+
+	    case (guchar)TEL_WILL:
+		telnet->tel_state = TEL_STATE_WILL;
+		break;
+
+	    case (guchar)TEL_NOP:
+		telnet->tel_state = TEL_STATE_TEXT;
+		break;
+
+	    case (guchar)TEL_GA:
+		telnet->tel_state = TEL_STATE_TEXT;
+		break;
+
+	    case (guchar)TEL_EOR_BYTE:
+		telnet->tel_state = TEL_STATE_TEXT;
+		break;
+
+	    case (guchar)TEL_WONT:
+		telnet->tel_state = TEL_STATE_WONT;
+		break;
+
+	    case (guchar)TEL_SB:
+		telnet->tel_state = TEL_STATE_SB;
+		telnet->subreq_pos = 0;
+		break;
+
+	    default:
+		g_warning("Illegal IAC command %d received", telnet->buffer->str[i]);
+		telnet->tel_state = TEL_STATE_TEXT;
+		break;
+	    }
+	    break;
+
+	case TEL_STATE_DO:
+	    opt = mud_telnet_get_telopt_string((guchar)telnet->buffer->str[i]);
+	    g_message("Tel State DO %s", opt);
+	    g_free(opt);
+
+	    mud_telnet_handle_positive_nego(telnet, (guchar)telnet->buffer->str[i],
+					    (guchar)TEL_WILL, (guchar)TEL_WONT, FALSE);
+	    telnet->tel_state = TEL_STATE_TEXT;
+
+	case TEL_STATE_WILL:
+	    opt = mud_telnet_get_telopt_string((guchar)telnet->buffer->str[i]);
+	    g_message("Tel State WILL %s", opt);
+	    g_free(opt);
+	   
+	    mud_telnet_handle_positive_nego(telnet, (guchar)telnet->buffer->str[i],
+					    (guchar)TEL_DO, (guchar)TEL_DONT, TRUE);
+	    telnet->tel_state = TEL_STATE_TEXT;
+	    break;
+
+	case TEL_STATE_DONT:
+	    opt = mud_telnet_get_telopt_string((guchar)telnet->buffer->str[i]);
+	    g_message("Tel State DONT %s", opt);
+	    g_free(opt);
+	    
+	    mud_telnet_handle_negative_nego(telnet,
+					    (guchar)telnet->buffer->str[i], (guchar)TEL_WILL, (guchar)TEL_WONT, FALSE);
+	    telnet->tel_state = TEL_STATE_TEXT;
+	    break;
+
+	case TEL_STATE_WONT:
+	    opt = mud_telnet_get_telopt_string((guchar)telnet->buffer->str[i]);
+	    g_message("Tel State WONT %s", opt);
+	    g_free(opt);
+
+	    mud_telnet_handle_negative_nego(telnet,
+					    (guchar)telnet->buffer->str[i], (guchar)TEL_DO, (guchar)TEL_DONT, TRUE);
+	    telnet->tel_state = TEL_STATE_TEXT;
+	    break;
+
+	case TEL_STATE_SB:
+	    if ((guchar)telnet->buffer->str[i] == (guchar)TEL_IAC)
+		telnet->tel_state = TEL_STATE_SB_IAC;
+	    else
+	    {
+		// FIXME: Handle overflow
+		if (telnet->subreq_pos >= TEL_SUBREQ_BUFFER_SIZE)
+		{
+		    g_warning("Subrequest buffer full. Oddities in output will happen. Sorry.");
+		    telnet->subreq_pos = 0;
+		    telnet->tel_state = TEL_STATE_TEXT;
 		}
+		else
+		    telnet->subreq_buffer[telnet->subreq_pos++] = (guchar)telnet->buffer->str[i];
+	    }
+	    break;
+
+	case TEL_STATE_SB_IAC:
+	    if ((guchar)telnet->buffer->str[i] == (guchar)TEL_IAC)
+	    {
+		if (telnet->subreq_pos >= TEL_SUBREQ_BUFFER_SIZE)
+		{
+		    g_warning("Subrequest buffer full. Oddities in output will happen. Sorry.");
+		    telnet->subreq_pos = 0;
+		    telnet->tel_state = TEL_STATE_TEXT;
+		}
+		else
+		    telnet->subreq_buffer[telnet->subreq_pos++] = (guchar)telnet->buffer->str[i];
+
+		telnet->tel_state = TEL_STATE_SB;
+	    }
+	    else if ((guchar)telnet->buffer->str[i] == (guchar)TEL_SE)
+	    {
+		telnet->subreq_buffer[telnet->subreq_pos++] = (guchar)telnet->buffer->str[i];
+		mud_telnet_on_handle_subnego(telnet);
+		telnet->tel_state = TEL_STATE_TEXT;
+	    } else {
+		g_warning("Erronous byte %d after an IAC inside a subrequest", telnet->buffer->str[i]);
+		telnet->subreq_pos = 0;
+		telnet->tel_state = TEL_STATE_TEXT;
+	    }
+	    break;
 	}
+    }
 
-	if(telnet->tel_state == TEL_STATE_TEXT)
-	{
-	    if(*out_buf != NULL) g_string_free(*out_buf, TRUE);
-		*out_buf = g_string_new_len(g_strdup(telnet->processed->str), telnet->pos);
-		*len = telnet->pos;
+    if(telnet->tel_state == TEL_STATE_TEXT)
+    {
+	if(*out_buf != NULL) g_string_free(*out_buf, TRUE);
+	*out_buf = g_string_new_len(g_strdup(telnet->processed->str), telnet->pos);
+	*len = telnet->pos;
 
         telnet->pos= 0;
 
         if(telnet->processed)
         {
-		    g_string_free(telnet->processed, TRUE);
-		    telnet->processed = g_string_new(NULL);
-	    }
+	    g_string_free(telnet->processed, TRUE);
+	    telnet->processed = g_string_new(NULL);
 	}
-	else
-	    *out_buf = NULL;
+    }
+    else
+	*out_buf = NULL;
 
-	if(telnet->buffer)
+    if(telnet->buffer)
     {
         g_string_free(telnet->buffer, TRUE);
         telnet->buffer = NULL;
@@ -596,164 +617,189 @@
 mud_telnet_get_telnet_string(guchar ch)
 {
     GString *string = g_string_new(NULL);
-    gchar *ret = string->str;
+    gchar *ret;
 
-	switch (ch)
-	{
-		case TEL_WILL:
-			g_string_append(string, "WILL");
-		case TEL_WONT:
-			g_string_append(string, "WONT");
-		case TEL_DO:
-			g_string_append(string, "DO");
-		case TEL_DONT:
-			g_string_append(string, "DONT");
-		case TEL_IAC:
-			g_string_append(string, "IAC");
-		default:
-			g_string_append_c(string,ch);
-	}
+    switch (ch)
+    {
+    case TEL_WILL:
+	g_string_append(string, "WILL");
+    case TEL_WONT:
+	g_string_append(string, "WONT");
+    case TEL_DO:
+	g_string_append(string, "DO");
+    case TEL_DONT:
+	g_string_append(string, "DONT");
+    case TEL_IAC:
+	g_string_append(string, "IAC");
+    default:
+	g_string_append_c(string,ch);
+    }
 
-	g_string_free(string, FALSE);
+    ret = g_strdup(string->str);
+    g_string_free(string, TRUE);
 
-	return ret;
+    return ret;
 }
 
 gchar*
 mud_telnet_get_telopt_string(guchar ch)
 {
     GString *string = g_string_new(NULL);
-    gchar *ret = string->str;
+    gchar *ret;
 
-	switch (ch)
-	{
-		case TELOPT_ECHO:
-			g_string_append(string, "ECHO");
-		case TELOPT_TTYPE:
-			g_string_append(string, "TTYPE");
-		case TELOPT_EOR:
-			g_string_append(string, "END-OF-RECORD");
-		case TELOPT_NAWS:
-			g_string_append(string, "NAWS");
-		case TELOPT_CHARSET:
-			g_string_append(string, "CHARSET");
-		case TELOPT_MCCP:
-			g_string_append(string, "COMPRESS");
-		case TELOPT_MCCP2:
-			g_string_append(string, "COMPRESS2");
-		case TELOPT_CLIENT:
-			g_string_append(string, "CLIENT");
-		case TELOPT_CLIENTVER:
-			g_string_append(string, "CLIENTVER");
-		case TELOPT_MSP:
-			g_string_append(string, "MSP");
-		case TELOPT_MXP:
-			g_string_append(string, "MXP");
-		case TELOPT_ZMP:
-			g_string_append(string, "ZMP");
-		default:
-			g_string_append_c(string, ch);
-	}
+    switch (ch)
+    {
+    case TELOPT_ECHO:
+	g_string_append(string, "ECHO");
+	break;
+
+    case TELOPT_TTYPE:
+	g_string_append(string, "TTYPE");
+	break;
+
+    case TELOPT_EOR:
+	g_string_append(string, "END-OF-RECORD");
+	break;
+
+    case TELOPT_NAWS:
+	g_string_append(string, "NAWS");
+	break;
+
+    case TELOPT_CHARSET:
+	g_string_append(string, "CHARSET");
+	break;
+
+    case TELOPT_MCCP:
+	g_string_append(string, "COMPRESS");
+	break;
+
+    case TELOPT_MCCP2:
+	g_string_append(string, "COMPRESS2");
+	break;
+
+    case TELOPT_CLIENT:
+	g_string_append(string, "CLIENT");
+	break;
+
+    case TELOPT_CLIENTVER:
+	g_string_append(string, "CLIENTVER");
+	break;
+
+    case TELOPT_MSP:
+	g_string_append(string, "MSP");
+	break;
+
+    case TELOPT_MXP:
+	g_string_append(string, "MXP");
+	break;
+
+    case TELOPT_ZMP:
+	g_string_append(string, "ZMP");
+	break;
+    }
 
-	return ret;
+    ret = g_strdup(string->str);
+    g_string_free(string, TRUE);
+
+    return ret;
 }
 
 void
 mud_telnet_send_charset_req(MudTelnet *telnet, gchar *encoding)
 {
     guchar byte;
-	guint32 i;
+    guint32 i;
 
-	if(!encoding)
-		return;
+    if(!encoding)
+	return;
 
     /* Writes IAC SB CHARSET ACCEPTED <charset> IAC SE to server */
-	byte = (guchar)TEL_IAC;
+    byte = (guchar)TEL_IAC;
 
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	byte = (guchar)TEL_SB;
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    byte = (guchar)TEL_SB;
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
     byte = (guchar)TELOPT_CHARSET;
     gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
     byte = (guchar)TEL_CHARSET_ACCEPT;
     gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 
-	for (i = 0; i < strlen(encoding); ++i)
-	{
-		byte = (guchar)encoding[i];
-		gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    for (i = 0; i < strlen(encoding); ++i)
+    {
+	byte = (guchar)encoding[i];
+	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 
-		if (byte == (guchar)TEL_IAC)
-			gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	}
+	if (byte == (guchar)TEL_IAC)
+	    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    }
 
-	byte = (guchar)TEL_IAC;
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	byte = (guchar)TEL_SE;
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    byte = (guchar)TEL_IAC;
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    byte = (guchar)TEL_SE;
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 }
 
 void
 mud_telnet_send_sub_req(MudTelnet *telnet, guint32 count, ...)
 {
-	guchar byte;
-	guint32 i;
-	va_list va;
-	va_start(va, count);
+    guchar byte;
+    guint32 i;
+    va_list va;
+    va_start(va, count);
 
-	byte = (guchar)TEL_IAC;
+    byte = (guchar)TEL_IAC;
 
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	byte = (guchar)TEL_SB;
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    byte = (guchar)TEL_SB;
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 
-	for (i = 0; i < count; ++i)
-	{
-		byte = (guchar)va_arg(va, gint);
-		gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    for (i = 0; i < count; ++i)
+    {
+	byte = (guchar)va_arg(va, gint);
+	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 
-		if (byte == (guchar)TEL_IAC)
-			gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	}
+	if (byte == (guchar)TEL_IAC)
+	    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    }
 
-	va_end(va);
+    va_end(va);
 
-	byte = (guchar)TEL_IAC;
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	byte = (guchar)TEL_SE;
-	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    byte = (guchar)TEL_IAC;
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    byte = (guchar)TEL_SE;
+    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 }
 
 void
 mud_telnet_send_raw(MudTelnet *telnet, guint32 count, ...)
 {
-	guchar byte;
-	guint32 i;
-	va_list va;
-	va_start(va, count);
+    guchar byte;
+    guint32 i;
+    va_list va;
+    va_start(va, count);
 
-	for (i = 0; i < count; ++i)
-	{
-		byte = (guchar)va_arg(va, gint);
-		gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    for (i = 0; i < count; ++i)
+    {
+	byte = (guchar)va_arg(va, gint);
+	gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
 
-		if (byte == (guchar)TEL_IAC)
-			gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
-	}
+	if (byte == (guchar)TEL_IAC)
+	    gnet_conn_write(telnet->conn, (gchar *)&byte, 1);
+    }
 
-	va_end(va);
+    va_end(va);
 }
 
 /*** Private Methods ***/
 static void
 mud_telnet_send_iac(MudTelnet *telnet, guchar ch1, guchar ch2)
 {
-	guchar buf[3];
-	buf[0] = (guchar)TEL_IAC;
-	buf[1] = ch1;
-	buf[2] = ch2;
+    guchar buf[3];
+    buf[0] = (guchar)TEL_IAC;
+    buf[1] = ch1;
+    buf[2] = ch2;
 
-	gnet_conn_write(telnet->conn, (gchar *)buf, 3);
+    gnet_conn_write(telnet->conn, (gchar *)buf, 3);
 }
 
 static void
@@ -761,8 +807,8 @@
 {
     int index;
 
-	if (telnet->subreq_pos < 1)
-	    return;
+    if (telnet->subreq_pos < 1)
+	return;
 
     if((index = mud_telnet_get_index_by_option(telnet, telnet->subreq_buffer[0])) == -1)
     {
@@ -772,7 +818,7 @@
 
     if (mud_telnet_isenabled(telnet, telnet->subreq_buffer[0], FALSE))
         telnet->handlers[index].handle_sub_neg(telnet, telnet->subreq_buffer + 1,
-            telnet->subreq_pos - 1, &telnet->handlers[index]);
+					       telnet->subreq_pos - 1, &telnet->handlers[index]);
 }
 
 static void
@@ -806,26 +852,26 @@
 static guchar
 mud_telnet_get_telopt_state(guint8 *storage, const guint bitshift)
 {
-	return (*storage >> bitshift) & 0x03u;
+    return (*storage >> bitshift) & 0x03u;
 }
 
 static gint
 mud_telnet_get_telopt_queue(guchar *storage, const guint bitshift)
 {
-	return !!((*storage >> bitshift) & 0x04u);
+    return !!((*storage >> bitshift) & 0x04u);
 }
 
 static void
 mud_telnet_set_telopt_state(guchar *storage, const enum TelnetOptionState state,
-						    const guint bitshift)
+			    const guint bitshift)
 {
-	*storage = (*storage & ~(0x03u << bitshift)) | (state << bitshift);
+    *storage = (*storage & ~(0x03u << bitshift)) | (state << bitshift);
 }
 
 static void
 mud_telnet_set_telopt_queue(guchar *storage, gint bit_on, const guint bitshift)
 {
-	*storage = bit_on ? (*storage | (0x04u << bitshift)) : (*storage & ~(0x04u << bitshift));
+    *storage = bit_on ? (*storage | (0x04u << bitshift)) : (*storage & ~(0x04u << bitshift));
 }
 
 // Otherwise handlers called on state changes could see the wrong options
@@ -833,118 +879,122 @@
 static gint
 mud_telnet_handle_positive_nego(MudTelnet *telnet,
                                 const guchar opt_no,
-								const guchar affirmative,
-								const guchar negative,
-								gint him)
+				const guchar affirmative,
+				const guchar negative,
+				gint him)
 {
-	const guint bitshift = him ? 4 : 0;
-	guchar * opt = &(telnet->telopt_states[opt_no]);
 
-	switch (mud_telnet_get_telopt_state(opt, bitshift))
-	{
-		case TELOPT_STATE_NO:
-			// If we agree that server should enable telopt, set
-			// his state to YES and send DO; otherwise send DONT
-			// FIXME-US/HIM
-			// FIXME: What to do in the opposite "him" gint value case?
-			if (mud_telnet_isenabled(telnet, opt_no, him))
-			{
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_YES, bitshift);
-				mud_telnet_send_iac(telnet, affirmative, opt_no);
-				mud_telnet_on_enable_opt(telnet, opt_no, him);
-				return TRUE;
-			} else {
-				mud_telnet_send_iac(telnet, negative, opt_no);
-				return FALSE;
-			}
-
-		case TELOPT_STATE_YES:
-			// Ignore, he already supposedly has it enabled. Includes the case where
-			// DONT was answered by WILL with himq = OPPOSITE to prevent loop.
-			return FALSE;
-
-		case TELOPT_STATE_WANTNO:
-			if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
-			{
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
-				g_warning("TELNET NEGOTIATION: DONT answered by WILL; ill-behaved server. Ignoring IAC WILL %d. him = NO\n", opt_no);
-				return FALSE;
-			} else { // The opposite is queued
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_YES, bitshift);
-				mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
-				g_warning("TELNET NEGOTIATION: DONT answered by WILL; ill-behaved server. Ignoring IAC WILL %d. him = YES, himq = EMPTY\n", opt_no);
-				return FALSE;
-			}
-			break;
-
-		case TELOPT_STATE_WANTYES:
-			if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
-			{
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_YES, bitshift);
-				mud_telnet_send_iac(telnet, affirmative, opt_no);
-				mud_telnet_on_enable_opt(telnet, opt_no, him);
-				return TRUE;
-			} else { // The opposite is queued
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_WANTNO, bitshift);
-				mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
-				mud_telnet_send_iac(telnet, negative, opt_no);
-				return FALSE;
-			}
-		default:
-			g_warning("Something went really wrong\n");
-			return FALSE;
-	}
+    if(opt_no == TELOPT_TTYPE)
+	   g_message("Handling Positive TTYPE");
+
+    const guint bitshift = him ? 4 : 0;
+    guchar * opt = &(telnet->telopt_states[opt_no]);
+
+    switch (mud_telnet_get_telopt_state(opt, bitshift))
+    {
+    case TELOPT_STATE_NO:
+	// If we agree that server should enable telopt, set
+	// his state to YES and send DO; otherwise send DONT
+	// FIXME-US/HIM
+	// FIXME: What to do in the opposite "him" gint value case?
+	if (mud_telnet_isenabled(telnet, opt_no, him))
+	{
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_YES, bitshift);
+	    mud_telnet_send_iac(telnet, affirmative, opt_no);
+	    mud_telnet_on_enable_opt(telnet, opt_no, him);
+	    return TRUE;
+	} else {
+	    mud_telnet_send_iac(telnet, negative, opt_no);
+	    return FALSE;
+	}
+
+    case TELOPT_STATE_YES:
+	// Ignore, he already supposedly has it enabled. Includes the case where
+	// DONT was answered by WILL with himq = OPPOSITE to prevent loop.
+	return FALSE;
+
+    case TELOPT_STATE_WANTNO:
+	if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
+	{
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
+	    g_warning("TELNET NEGOTIATION: DONT answered by WILL; ill-behaved server. Ignoring IAC WILL %d. him = NO\n", opt_no);
+	    return FALSE;
+	} else { // The opposite is queued
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_YES, bitshift);
+	    mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
+	    g_warning("TELNET NEGOTIATION: DONT answered by WILL; ill-behaved server. Ignoring IAC WILL %d. him = YES, himq = EMPTY\n", opt_no);
+	    return FALSE;
+	}
+	break;
+
+    case TELOPT_STATE_WANTYES:
+	if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
+	{
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_YES, bitshift);
+	    mud_telnet_send_iac(telnet, affirmative, opt_no);
+	    mud_telnet_on_enable_opt(telnet, opt_no, him);
+	    return TRUE;
+	} else { // The opposite is queued
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_WANTNO, bitshift);
+	    mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
+	    mud_telnet_send_iac(telnet, negative, opt_no);
+	    return FALSE;
+	}
+    default:
+	g_warning("Something went really wrong\n");
+	return FALSE;
+    }
 }
 
 static gint
 mud_telnet_handle_negative_nego(MudTelnet *telnet,
                                 const guchar opt_no,
-								const guchar affirmative,
-								const guchar negative,
-								gint him)
+				const guchar affirmative,
+				const guchar negative,
+				gint him)
 {
-	const guint bitshift = him ? 4 : 0;
-	guchar * opt = &(telnet->telopt_states[opt_no]);
+    const guint bitshift = him ? 4 : 0;
+    guchar * opt = &(telnet->telopt_states[opt_no]);
 
-	switch (mud_telnet_get_telopt_state(opt, bitshift))
-	{
-		case TELOPT_STATE_NO:
-			// Ignore, he already supposedly has it disabled
-			return FALSE;
-
-		case TELOPT_STATE_YES:
-			mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
-			mud_telnet_send_iac(telnet, negative, opt_no);
-			mud_telnet_on_disable_opt(telnet, opt_no, him);
-			return TRUE;
-
-		case TELOPT_STATE_WANTNO:
-			if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
-			{
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
-				return FALSE;
-			} else {
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_WANTYES, bitshift);
-				mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
-			    mud_telnet_send_iac(telnet, affirmative, opt_no);
-				mud_telnet_on_enable_opt(telnet, opt_no, him); // FIXME: Is this correct?
-				return TRUE;
-			}
-
-		case TELOPT_STATE_WANTYES:
-			if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
-			{
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
-				return FALSE;
-			} else { // The opposite is queued
-				mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
-				mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
-				return FALSE;
-			}
-		default:
-			g_warning("TELNET NEGOTIATION: Something went really wrong\n");
-			return FALSE;
-	}
+    switch (mud_telnet_get_telopt_state(opt, bitshift))
+    {
+    case TELOPT_STATE_NO:
+	// Ignore, he already supposedly has it disabled
+	return FALSE;
+
+    case TELOPT_STATE_YES:
+	mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
+	mud_telnet_send_iac(telnet, negative, opt_no);
+	mud_telnet_on_disable_opt(telnet, opt_no, him);
+	return TRUE;
+
+    case TELOPT_STATE_WANTNO:
+	if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
+	{
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
+	    return FALSE;
+	} else {
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_WANTYES, bitshift);
+	    mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
+	    mud_telnet_send_iac(telnet, affirmative, opt_no);
+	    mud_telnet_on_enable_opt(telnet, opt_no, him); // FIXME: Is this correct?
+	    return TRUE;
+	}
+
+    case TELOPT_STATE_WANTYES:
+	if (mud_telnet_get_telopt_queue(opt, bitshift) == TELOPT_STATE_QUEUE_EMPTY)
+	{
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
+	    return FALSE;
+	} else { // The opposite is queued
+	    mud_telnet_set_telopt_state(opt, TELOPT_STATE_NO, bitshift);
+	    mud_telnet_set_telopt_queue(opt, TELOPT_STATE_QUEUE_EMPTY, bitshift);
+	    return FALSE;
+	}
+    default:
+	g_warning("TELNET NEGOTIATION: Something went really wrong\n");
+	return FALSE;
+    }
 }
 
 static gint



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]