Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > c16175c8ac398348b6b013a530fb93a0 > files > 1

qstat-2.11-9.20080912svn311.fc13.src.rpm

diff -urP qstat-2.11/a2s.c qstat-2.11-20080912svn311/a2s.c
--- qstat-2.11/a2s.c	2006-05-28 07:48:38.000000000 -0400
+++ qstat-2.11-20080912svn311/a2s.c	2008-09-12 14:52:23.000000000 -0400
@@ -44,12 +44,14 @@
 	unsigned char type;
 };
 
-void send_a2s_request_packet(struct qserver *server)
+int send_a2s_request_packet(struct qserver *server)
 {
 	struct a2s_status* status = (struct a2s_status*)server->master_query_tag;
 
 	if(qserver_send_initial(server, A2S_INFO, sizeof(A2S_INFO)) == -1)
-		goto error;
+	{
+		return DONE_FORCE;
+	}
 
 	status->sent_info = 1;
 	status->type = 0;
@@ -57,28 +59,27 @@
 	if(get_server_rules || get_player_info)
 		server->next_rule = ""; // trigger calling send_a2s_rule_request_packet
 
-	return;
-
-error:
-	cleanup_qserver(server, 1);
+	return 0;
 }
 
-void send_a2s_rule_request_packet(struct qserver *server)
+int send_a2s_rule_request_packet(struct qserver *server)
 {
 	struct a2s_status* status = (struct a2s_status*)server->master_query_tag;
 
 	if(!get_server_rules && !get_player_info)
 	{
-		goto error;
+		return DONE_FORCE;
 	}
 
-	do
+	while( 1 )
 	{
 		if(!status->have_challenge)
 		{
 			debug(3, "sending challenge");
-			if(qserver_send_initial(server, A2S_GETCHALLENGE, sizeof(A2S_GETCHALLENGE)-1) == -1)
-				goto error;
+			if( SOCKET_ERROR == qserver_send_initial(server, A2S_GETCHALLENGE, sizeof(A2S_GETCHALLENGE)-1) )
+			{
+				return SOCKET_ERROR;
+			}
 			status->sent_challenge = 1;
 			break;
 		}
@@ -87,8 +88,10 @@
 			char buf[sizeof(A2S_RULES)-1+4] = A2S_RULES;
 			memcpy(buf+sizeof(A2S_RULES)-1, &status->challenge, 4);
 			debug(3, "sending rule query");
-			if(qserver_send_initial(server, buf, sizeof(buf)) == -1)
-				goto error;
+			if( SOCKET_ERROR == qserver_send_initial(server, buf, sizeof(buf)) )
+			{
+				return SOCKET_ERROR;
+			}
 			status->sent_rules = 1;
 			break;
 		}
@@ -97,8 +100,10 @@
 			char buf[sizeof(A2S_PLAYER)-1+4] = A2S_PLAYER;
 			memcpy(buf+sizeof(A2S_PLAYER)-1, &status->challenge, 4);
 			debug(3, "sending player query");
-			if(qserver_send_initial(server, buf, sizeof(buf)) == -1)
-				goto error;
+			if( SOCKET_ERROR == qserver_send_initial(server, buf, sizeof(buf)) )
+			{
+				return SOCKET_ERROR;
+			}
 			status->sent_player = 1;
 			break;
 		}
@@ -109,15 +114,12 @@
 			status->have_challenge = 0;
 			status->have_rules = 0;
 		}
-	} while(1);
-
-	return;
+	}
 
-error:
-	cleanup_qserver(server, 1);
+	return INPROGRESS;
 }
 
-void deal_with_a2s_packet(struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_a2s_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
 	struct a2s_status* status = (struct a2s_status*)server->master_query_tag;
 	char* pkt = rawpkt;
@@ -159,12 +161,12 @@
 		// packetId
 		if ( 1 == status->type )
 		{
-			// HL2 format
+			// HL1 format
 			// The lower four bits represent the number of packets (2 to 15) and
 			// the upper four bits represent the current packet starting with 0
 			pkt_max = ((unsigned char)*pkt) & 15;
 			pkt_index = ((unsigned char)*pkt) >> 4;
-			debug( 3, "packetid: 0x%hhx => idx: %hhu, max: %hhu", *pkt, pkt_index, pkt_max );
+			debug( 3, "packetid[1]: 0x%hhx => idx: %hhu, max: %hhu", *pkt, pkt_index, pkt_max );
 			pkt++;
 			pktlen -= 9;
 		}
@@ -172,20 +174,20 @@
 		{
 			// HL2 format
 			// The next two bytes are:
-			// 1. the max packets sent
-			// 2. the index of this packet starting from 0
+			// 1. the max packets sent ( byte )
+			// 2. the index of this packet starting from 0 ( byte )
+			// 3. Size of the split ( short )
 			if(pktlen < 10) goto out_too_short;
 			pkt_max = ((unsigned char)*pkt);
 			pkt_index = ((unsigned char)*(pkt+1));
-			debug( 3, "packetid: 0x%hhx => idx: %hhu, max: %hhu", *pkt, pkt_index, pkt_max );
-			pkt+=2;
-			pktlen -= 10;
+			debug( 3, "packetid[2]: 0x%hhx => idx: %hhu, max: %hhu", *pkt, pkt_index, pkt_max );
+			pkt+=4;
+			pktlen -= 12;
 		}
 		else
 		{
 			malformed_packet( server, "Unable to determine packet format" );
-			cleanup_qserver( server, 1 );
-			return;
+			return PKT_ERROR;
 		}
 
 		// pkt_max is the total number of packets expected
@@ -210,25 +212,24 @@
 		if ( NULL == sdata->data )
 		{
 			malformed_packet(server, "Out of memory");
-			cleanup_qserver( server, 1 );
-			return;
+			return MEM_ERROR;
 		}
 		memcpy( sdata->data, pkt, sdata->datalen);
 
 		// combine_packets will call us recursively
-		combine_packets( server );
-		return;
+		return combine_packets( server );
 	}
 	else if( 0 != memcmp(pkt, "\xFF\xFF\xFF\xFF", 4) )
 	{
 		malformed_packet(server, "invalid packet header");
-		goto out_error;
+		return PKT_ERROR;
 	}
 
 	pkt += 4;
 	pktlen -= 4;
 
 	pktlen -= 1;
+	debug( 2, "A2S type = %hhd", *pkt );
 	switch(*pkt++)
 	{
 	case A2S_CHALLENGERESPONSE:
@@ -438,6 +439,9 @@
 		server->num_players = (unsigned char)pkt[2];
 		server->max_players = (unsigned char)pkt[3];
 		// pkt[4] number of bots
+		sprintf( buf, "%hhu", pkt[4] );
+		add_rule( server, "bots", buf, 0 );
+
 		add_rule(server, "dedicated", pkt[5]?"1":"0", 0);
 		if(pkt[6] == 'l')
 		{
@@ -582,7 +586,7 @@
 
 	default:
 		malformed_packet(server, "invalid packet id %hhx", *--pkt);
-		goto out_error;
+		return PKT_ERROR;
 	}
 
 	if(
@@ -593,14 +597,11 @@
 		server->next_rule = NULL;
 	}
 
-	cleanup_qserver(server, 0);
-	return;
+	return DONE_AUTO;
 
 out_too_short:
 	malformed_packet(server, "packet too short");
-
-out_error:
-	cleanup_qserver(server, 1);
+	return PKT_ERROR;
 }
 
-// vim: sw=4 ts=8 noet
+// vim: sw=4 ts=4 noet
diff -urP qstat-2.11/a2s.h qstat-2.11-20080912svn311/a2s.h
--- qstat-2.11/a2s.h	2005-06-12 00:47:35.000000000 -0400
+++ qstat-2.11-20080912svn311/a2s.h	2008-09-12 14:52:23.000000000 -0400
@@ -12,8 +12,8 @@
 
 #include "qserver.h"
 
-void send_a2s_request_packet(struct qserver *server);
-void send_a2s_rule_request_packet(struct qserver *server);
-void deal_with_a2s_packet(struct qserver *server, char *rawpkt, int pktlen);
+int send_a2s_request_packet(struct qserver *server);
+int send_a2s_rule_request_packet(struct qserver *server);
+int deal_with_a2s_packet(struct qserver *server, char *rawpkt, int pktlen);
 
 #endif
diff -urP qstat-2.11/aclocal.m4 qstat-2.11-20080912svn311/aclocal.m4
--- qstat-2.11/aclocal.m4	2006-10-28 08:37:22.000000000 -0400
+++ qstat-2.11-20080912svn311/aclocal.m4	2008-09-12 15:00:24.000000000 -0400
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005  Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -11,32 +11,358 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_PREREQ([2.52])
+
+# serial 6
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                            -*- Autoconf -*-
+
+# This macro actually does too much some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 10
+
+AC_PREREQ([2.54])
+
+# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
+# the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright 2002  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
 
 # AM_SET_CURRENT_AUTOMAKE_VERSION
 # -------------------------------
 # Call AM_AUTOMAKE_VERSION so it can be traced.
 # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-	 [AM_AUTOMAKE_VERSION([1.9.6])])
+	 [AM_AUTOMAKE_VERSION([1.7.9])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+
+# Copyright 2001, 2002  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
 
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
 #
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+#  -*- Autoconf -*-
+
+
+# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
@@ -76,55 +402,131 @@
 # absolute PATH.  The drawback is that using absolute paths prevent a
 # configured tree to be moved without reconfiguration.
 
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
+# Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_AUX_DIR_EXPAND], [
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
 ])
 
-# AM_CONDITIONAL                                            -*- Autoconf -*-
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# Copyright 2001 Free Software Foundation, Inc.
 
-# serial 7
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+#                                                          -*- Autoconf -*-
+# Copyright (C) 2003  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
 else
-  $1_TRUE='#'
-  $1_FALSE=
+  am__leading_dot=_
 fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
 
+# serial 5						-*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
-# serial 8
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -133,6 +535,7 @@
 # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
 
 
+
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
@@ -191,9 +594,7 @@
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      : > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
@@ -221,14 +622,9 @@
        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
         am_cv_$1_dependencies_compiler_type=$depmode
         break
       fi
@@ -262,8 +658,8 @@
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
 [AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
@@ -272,16 +668,26 @@
 AC_SUBST([AMDEPBACKSLASH])
 ])
 
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-#serial 3
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
@@ -300,21 +706,27 @@
   else
     continue
   fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
   test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
   # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
     # Make sure the directory exists.
     test -f "$dirpart/$file" && continue
@@ -340,177 +752,27 @@
      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
 ])
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
+# Check to see how 'make' treats includes.	-*- Autoconf -*-
 
-# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
 
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 12
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.58])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-	      		     [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-])
-])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $1 | $1:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # serial 2
 
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -553,310 +815,47 @@
 rm -f confinc confmf
 ])
 
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-#
-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-# created by `make install' are always world readable, even if the
-# installer happens to have an overly restrictive umask (e.g. 077).
-# This was a mistake.  There are at least two reasons why we must not
-# use `-m 0755':
-#   - it causes special bits like SGID to be ignored,
-#   - it may be too restrictive (some setups expect 775 directories).
-#
-# Do not use -m 0755 and let people choose whatever they expect by
-# setting umask.
-#
-# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-# Some implementations (such as Solaris 8's) are not thread-safe: if a
-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-# concurrently, both version can detect that a/ is missing, but only
-# one can create it and the other will error out.  Consequently we
-# restrict ourselves to GNU make (using the --version option ensures
-# this.)
-AC_DEFUN([AM_PROG_MKDIR_P],
-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
-fi
-AC_SUBST([mkdir_p])])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+# AM_CONDITIONAL                                              -*- Autoconf -*-
 
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
 
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
-# serial 4
+# serial 5
 
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
+AC_PREREQ(2.52)
 
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+        [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
 else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
+  $1_TRUE='#'
+  $1_FALSE=
 fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
 
diff -urP qstat-2.11/autogen.sh qstat-2.11-20080912svn311/autogen.sh
--- qstat-2.11/autogen.sh	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/autogen.sh	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+# Global variables...
+AUTOCONF="autoconf"
+AUTOHEADER="autoheader"
+AUTOM4TE="autom4te"
+AUTOMAKE="automake"
+ACLOCAL="aclocal"
+
+# Please add higher versions first. The last version number is the minimum
+# needed to compile KDE. Do not forget to include the name/version #
+# separator if one is present, e.g. -1.2 where - is the separator.
+AUTOCONF_VERS="-2.61 261 -2.59 259 -2.58 258 -2.57 257 -2.54 254 -2.53 253"
+AUTOMAKE_VERS="-1.9 19 -1.8 18 -1.7 17 -1.6 16 -1.5 15"
+
+# We don't use variable here for remembering the type ... strings. Local 
+# variables are not that portable, but we fear namespace issues with our
+# includer.
+check_autoconf()
+{
+	echo "Checking autoconf version..."
+	for ver in $AUTOCONF_VERS; do
+		if test -x "`$WHICH $AUTOCONF$ver 2>/dev/null`"; then
+			AUTOCONF="`$WHICH $AUTOCONF$ver`"
+			AUTOHEADER="`$WHICH $AUTOHEADER$ver`"
+			AUTOM4TE="`$WHICH $AUTOM4TE$ver`"
+			break
+		fi
+	done
+}
+
+check_automake()
+{
+	echo "Checking automake version..."
+	for ver in $AUTOMAKE_VERS; do
+		if test -x "`$WHICH $AUTOMAKE$ver 2>/dev/null`"; then
+			AUTOMAKE="`$WHICH $AUTOMAKE$ver`"
+			ACLOCAL="`$WHICH $ACLOCAL$ver`"
+			break
+		fi
+	done
+
+	if test -n "$UNSERMAKE"; then 
+		AUTOMAKE="$UNSERMAKE"
+	fi
+}
+
+check_which()
+{
+	WHICH=""
+	for i in "type -p" "which" "type" ; do
+		T=`$i sh 2> /dev/null`
+		test -x "$T" && WHICH="$i" && break
+	done
+}
+
+check_which
+check_autoconf
+check_automake
+
+export AUTOCONF AUTOHEADER AUTOM4TE AUTOMAKE ACLOCAL
+
+set -e
+
+echo "Running aclocal..."
+$ACLOCAL
+echo "Running autoconf..."
+$AUTOCONF
+echo "Running autoheader..."
+$AUTOHEADER
+echo "Running automake..."
+$AUTOMAKE -a --foreign
diff -urP qstat-2.11/autom4te.cache/output.0 qstat-2.11-20080912svn311/autom4te.cache/output.0
--- qstat-2.11/autom4te.cache/output.0	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/autom4te.cache/output.0	2008-09-12 15:00:24.000000000 -0400
@@ -0,0 +1,5808 @@
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.62 for qstat 2.12.
+@%:@
+@%:@ Report bugs to <qstat-users@yahoogroups.com>.
+@%:@ 
+@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+@%:@ This configure script is free software; the Free Software Foundation
+@%:@ gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes &&	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	   done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+	do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+	done
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+    
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIB@&t@OBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='qstat'
+PACKAGE_TARNAME='qstat'
+PACKAGE_VERSION='2.12'
+PACKAGE_STRING='qstat 2.12'
+PACKAGE_BUGREPORT='qstat-users@yahoogroups.com'
+
+ac_unique_file="qstat.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+AMTAR
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+AWK
+SET_MAKE
+am__leading_dot
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+CPP
+GREP
+EGREP
+LIB@&t@OBJS
+LTLIBOBJS'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_optimize
+enable_debug
+enable_dump
+with_efence
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
+   { (exit 1); exit 1; }; } ;;
+    *)     $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { $as_echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures qstat 2.12 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root @<:@DATAROOTDIR/doc/qstat@:>@
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of qstat 2.12:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors
+  --disable-optimize         turn off optimization
+  --disable-debug         turn off debugging code
+  --enable-dump           enable packet dumps
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-efence=<path>    Use electric fence for malloc debugging.
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <qstat-users@yahoogroups.com>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+qstat configure 2.12
+generated by GNU Autoconf 2.62
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by qstat $as_me 2.12, which was
+generated by GNU Autoconf 2.62.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+@%:@@%:@ --------- @%:@@%:@
+@%:@@%:@ Platform. @%:@@%:@
+@%:@@%:@ --------- @%:@@%:@
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  $as_echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+@%:@@%:@ ----------- @%:@@%:@
+@%:@@%:@ Core tests. @%:@@%:@
+@%:@@%:@ ----------- @%:@@%:@
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+@%:@@%:@ ---------------- @%:@@%:@
+@%:@@%:@ Cache variables. @%:@@%:@
+@%:@@%:@ ---------------- @%:@@%:@
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+@%:@@%:@ ----------------- @%:@@%:@
+@%:@@%:@ Output variables. @%:@@%:@
+@%:@@%:@ ----------------- @%:@@%:@
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+@%:@@%:@ ------------------- @%:@@%:@
+@%:@@%:@ File substitutions. @%:@@%:@
+@%:@@%:@ ------------------- @%:@@%:@
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+@%:@@%:@ ----------- @%:@@%:@
+@%:@@%:@ confdefs.h. @%:@@%:@
+@%:@@%:@ ----------- @%:@@%:@
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test -r "$ac_site_file"; then
+    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_config_headers="$ac_config_headers gnuconfig.h"
+
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+am__api_version="1.7"
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+$as_echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+ # test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='qstat'
+ VERSION='2.12'
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE "$PACKAGE"
+_ACEOF
+
+ 
+cat >>confdefs.h <<_ACEOF
+@%:@define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $@%:@ != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	
+fi
+
+rm -f core conftest.err conftest.$ac_objext 
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+@%:@ Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking; 
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      : > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if 
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+@%:@include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+  
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+@%:@include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+ 
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+ 
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+  
+cat >>confdefs.h <<\_ACEOF
+@%:@define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+@%:@include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ 
+fi
+
+done
+
+
+if test "${ac_cv_header_sys_mman_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for sys/mman.h" >&5
+$as_echo_n "checking for sys/mman.h... " >&6; }
+if test "${ac_cv_header_sys_mman_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
+$as_echo "$ac_cv_header_sys_mman_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking sys/mman.h usability" >&5
+$as_echo_n "checking sys/mman.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+@%:@include <sys/mman.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking sys/mman.h presence" >&5
+$as_echo_n "checking sys/mman.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+@%:@include <sys/mman.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+@%:@@%:@ ------------------------------------------ @%:@@%:@
+@%:@@%:@ Report this to qstat-users@yahoogroups.com @%:@@%:@
+@%:@@%:@ ------------------------------------------ @%:@@%:@
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for sys/mman.h" >&5
+$as_echo_n "checking for sys/mman.h... " >&6; }
+if test "${ac_cv_header_sys_mman_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_sys_mman_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
+$as_echo "$ac_cv_header_sys_mman_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_mman_h = yes; then
+  have_mman_h=yes
+fi
+
+
+
+case $host in
+	*mingw32*)
+		{ $as_echo "$as_me:$LINENO: compiling for $host, adding -lwsock32" >&5
+$as_echo "$as_me: compiling for $host, adding -lwsock32" >&6;}
+		LIBS="$LIBS -lwsock32"
+	;;
+esac
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable optimization" >&5
+$as_echo_n "checking whether to enable optimization... " >&6; }
+@%:@ Check whether --enable-optimize was given.
+if test "${enable_optimize+set}" = set; then
+  enableval=$enable_optimize; 
+fi
+
+if test x$enable_optimize != xno; then
+	{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+	CPPFLAGS=""
+	CFLAGS="-ggdb"
+	{ $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable debug output" >&5
+$as_echo_n "checking whether to enable debug output... " >&6; }
+@%:@ Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval=$enable_debug; 
+fi
+
+if test x$enable_debug != xno; then
+	CPPFLAGS="$CPPFLAGS -DDEBUG"
+	{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+	{ $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable packet dumps" >&5
+$as_echo_n "checking whether to enable packet dumps... " >&6; }
+@%:@ Check whether --enable-dump was given.
+if test "${enable_dump+set}" = set; then
+  enableval=$enable_dump; 
+fi
+
+if test x$enable_dump != xno; then
+	if test x$have_mman_h = xyes; then
+		CPPFLAGS="$CPPFLAGS -DENABLE_DUMP"
+		{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:$LINENO: result: no, sys/mman.h missing" >&5
+$as_echo "no, sys/mman.h missing" >&6; }
+	fi
+else
+	{ $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+@%:@ Check whether --with-efence was given.
+if test "${with_efence+set}" = set; then
+  withval=$with_efence; if test x$withval != xyes ; then
+		LDFLAGS="${LDFLAGS} -L$withval"
+	fi
+	
+{ $as_echo "$as_me:$LINENO: checking for malloc in -lefence" >&5
+$as_echo_n "checking for malloc in -lefence... " >&6; }
+if test "${ac_cv_lib_efence_malloc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lefence  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char malloc ();
+int
+main ()
+{
+return malloc ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_efence_malloc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_efence_malloc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_efence_malloc" >&5
+$as_echo "$ac_cv_lib_efence_malloc" >&6; }
+if test $ac_cv_lib_efence_malloc = yes; then
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_LIBEFENCE 1
+_ACEOF
+
+  LIBS="-lefence $LIBS"
+
+fi
+
+
+fi
+
+
+if test "x$GCC" = "xyes"; then
+  case " $CFLAGS " in
+  *[\ \	]-Wall[\ \	]*) ;;
+  *) CFLAGS="$CFLAGS -Wall" ;;
+  esac
+fi
+
+ac_config_files="$ac_config_files Makefile template/Makefile info/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIB@&t@OBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by qstat $as_me 2.12, which was
+generated by GNU Autoconf 2.62.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="`echo $ac_config_files`"
+config_headers="`echo $ac_config_headers`"
+config_commands="`echo $ac_config_commands`"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE] 
+                   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE] 
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+qstat config.status 2.12
+configured by $0, generated by GNU Autoconf 2.62,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { $as_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX
+@%:@@%:@ Running $as_me. @%:@@%:@
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "gnuconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS gnuconfig.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "template/Makefile") CONFIG_FILES="$CONFIG_FILES template/Makefile" ;;
+    "info/Makefile") CONFIG_FILES="$CONFIG_FILES info/Makefile" ;;
+
+  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   $as_echo "$as_me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr='
'
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+   { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+   { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      ac_file_inputs="$ac_file_inputs '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; } ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+	|| { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    "$ac_file" | "$ac_file":* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for "$ac_file"" >`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+  
+  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[^ @%:@]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff -urP qstat-2.11/autom4te.cache/requests qstat-2.11-20080912svn311/autom4te.cache/requests
--- qstat-2.11/autom4te.cache/requests	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/autom4te.cache/requests	2008-09-12 15:00:26.000000000 -0400
@@ -0,0 +1,67 @@
+# This file was generated.
+# It contains the lists of macros which have been traced.
+# It can be safely removed.
+
+@request = (
+             bless( [
+                      '0',
+                      1,
+                      [
+                        '/usr/share/autoconf'
+                      ],
+                      [
+                        '/usr/share/autoconf/autoconf/autoconf.m4f',
+                        'aclocal.m4',
+                        'configure.ac'
+                      ],
+                      {
+                        '_LT_AC_TAGCONFIG' => 1,
+                        'AM_PROG_F77_C_O' => 1,
+                        'AC_INIT' => 1,
+                        'm4_pattern_forbid' => 1,
+                        '_AM_COND_IF' => 1,
+                        'AC_CANONICAL_TARGET' => 1,
+                        'AC_SUBST' => 1,
+                        'AC_CONFIG_LIBOBJ_DIR' => 1,
+                        'AC_FC_SRCEXT' => 1,
+                        'AC_CANONICAL_HOST' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'AC_CONFIG_SUBDIRS' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'LT_CONFIG_LTDL_DIR' => 1,
+                        'AC_REQUIRE_AUX_FILE' => 1,
+                        'AC_CONFIG_LINKS' => 1,
+                        'm4_sinclude' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'AM_MAINTAINER_MODE' => 1,
+                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
+                        '_m4_warn' => 1,
+                        'AM_PROG_CXX_C_O' => 1,
+                        '_AM_COND_ENDIF' => 1,
+                        'AM_ENABLE_MULTILIB' => 1,
+                        'AC_CONFIG_FILES' => 1,
+                        'include' => 1,
+                        'LT_INIT' => 1,
+                        'AM_GNU_GETTEXT' => 1,
+                        'AC_LIBSOURCE' => 1,
+                        'AM_PROG_FC_C_O' => 1,
+                        'AC_CANONICAL_BUILD' => 1,
+                        'AC_FC_FREEFORM' => 1,
+                        'AH_OUTPUT' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
+                        'sinclude' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        'AC_CONFIG_HEADERS' => 1,
+                        'AC_DEFINE_TRACE_LITERAL' => 1,
+                        'm4_include' => 1,
+                        '_AM_COND_ELSE' => 1,
+                        'AC_SUBST_TRACE' => 1
+                      }
+                    ], 'Autom4te::Request' )
+           );
+
diff -urP qstat-2.11/autom4te.cache/traces.0 qstat-2.11-20080912svn311/autom4te.cache/traces.0
--- qstat-2.11/autom4te.cache/traces.0	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/autom4te.cache/traces.0	2008-09-12 15:00:24.000000000 -0400
@@ -0,0 +1,373 @@
+m4trace:aclocal.m4:69: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
+m4trace:configure.ac:1: -1- AC_INIT([qstat], [2.12], [qstat-users@yahoogroups.com])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:1: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([SHELL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.ac:1: -1- AC_SUBST([PATH_SEPARATOR])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_NAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_STRING])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- AC_SUBST([exec_prefix], [NONE])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([exec_prefix])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.ac:1: -1- AC_SUBST([prefix], [NONE])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([prefix])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.ac:1: -1- AC_SUBST([program_transform_name], [s,x,x,])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([program_transform_name])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.ac:1: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([bindir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sbindir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.ac:1: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libexecdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datarootdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([datadir], ['${datarootdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datadir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sysconfdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sharedstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([includedir], ['${prefix}/include'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([includedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([oldincludedir], ['/usr/include'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([oldincludedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+				     ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
+				     ['${datarootdir}/doc/${PACKAGE}'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([docdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([infodir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.ac:1: -1- AC_SUBST([htmldir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([htmldir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.ac:1: -1- AC_SUBST([dvidir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([dvidir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.ac:1: -1- AC_SUBST([pdfdir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([pdfdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([psdir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([psdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([mandir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
+#undef PACKAGE_NAME])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
+#undef PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- AC_SUBST([DEFS])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([DEFS])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_C])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_C])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_N])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_N])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_T])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_T])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.ac:1: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:1: -1- AC_SUBST([build_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([build_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.ac:1: -1- AC_SUBST([host_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([host_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.ac:1: -1- AC_SUBST([target_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([target_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.ac:3: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete.
+You should run autoupdate.], [aclocal.m4:38: AM_CONFIG_HEADER is expanded from...
+configure.ac:3: the top level])
+m4trace:configure.ac:3: -1- AC_CONFIG_HEADERS([gnuconfig.h])
+m4trace:configure.ac:6: -1- AC_CANONICAL_HOST
+m4trace:configure.ac:6: -1- AC_CANONICAL_BUILD
+m4trace:configure.ac:6: -1- AC_REQUIRE_AUX_FILE([config.sub])
+m4trace:configure.ac:6: -1- AC_REQUIRE_AUX_FILE([config.guess])
+m4trace:configure.ac:6: -1- AC_SUBST([build], [$ac_cv_build])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([build])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^build$])
+m4trace:configure.ac:6: -1- AC_SUBST([build_cpu], [$[1]])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([build_cpu])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.ac:6: -1- AC_SUBST([build_vendor], [$[2]])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([build_vendor])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.ac:6: -1- AC_SUBST([build_os])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([build_os])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.ac:6: -1- AC_SUBST([host], [$ac_cv_host])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([host])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^host$])
+m4trace:configure.ac:6: -1- AC_SUBST([host_cpu], [$[1]])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([host_cpu])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.ac:6: -1- AC_SUBST([host_vendor], [$[2]])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([host_vendor])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.ac:6: -1- AC_SUBST([host_os])
+m4trace:configure.ac:6: -1- AC_SUBST_TRACE([host_os])
+m4trace:configure.ac:6: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.ac:7: -1- AM_INIT_AUTOMAKE([1.6 foreign])
+m4trace:configure.ac:7: -1- AM_AUTOMAKE_VERSION([1.7.9])
+m4trace:configure.ac:7: -1- AC_REQUIRE_AUX_FILE([install-sh])
+m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_PROGRAM])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_SCRIPT])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_DATA])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_DATA])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.ac:7: -1- AC_SUBST([CYGPATH_W])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([CYGPATH_W])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^CYGPATH_W$])
+m4trace:configure.ac:7: -1- _m4_warn([obsolete], [The macro `AC_FOREACH' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:196: AC_FOREACH is expanded from...
+aclocal.m4:229: _AM_SET_OPTIONS is expanded from...
+aclocal.m4:82: AM_INIT_AUTOMAKE is expanded from...
+configure.ac:7: the top level])
+m4trace:configure.ac:7: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([PACKAGE])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:7: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([VERSION])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:7: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:7: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
+#undef PACKAGE])
+m4trace:configure.ac:7: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:7: -1- AH_OUTPUT([VERSION], [/* Version number of package */
+#undef VERSION])
+m4trace:configure.ac:7: -1- AC_SUBST([ACLOCAL])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([ACLOCAL])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^ACLOCAL$])
+m4trace:configure.ac:7: -1- AC_SUBST([AUTOCONF])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AUTOCONF])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOCONF$])
+m4trace:configure.ac:7: -1- AC_SUBST([AUTOMAKE])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AUTOMAKE])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOMAKE$])
+m4trace:configure.ac:7: -1- AC_SUBST([AUTOHEADER])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AUTOHEADER])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOHEADER$])
+m4trace:configure.ac:7: -1- AC_SUBST([MAKEINFO])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([MAKEINFO])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^MAKEINFO$])
+m4trace:configure.ac:7: -1- AC_SUBST([AMTAR])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AMTAR])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^AMTAR$])
+m4trace:configure.ac:7: -1- AC_SUBST([install_sh])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([install_sh])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^install_sh$])
+m4trace:configure.ac:7: -1- AC_SUBST([STRIP])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([STRIP])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
+m4trace:configure.ac:7: -1- AC_SUBST([AWK])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AWK])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^AWK$])
+m4trace:configure.ac:7: -1- AC_SUBST([SET_MAKE])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([SET_MAKE])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:7: -1- AC_SUBST([am__leading_dot])
+m4trace:configure.ac:7: -1- AC_SUBST_TRACE([am__leading_dot])
+m4trace:configure.ac:7: -1- m4_pattern_allow([^am__leading_dot$])
+m4trace:configure.ac:10: -1- AC_SUBST([CC])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:10: -1- AC_SUBST([CFLAGS])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CFLAGS])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.ac:10: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:10: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:10: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:10: -1- AC_SUBST([CC])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:10: -1- AC_SUBST([CC])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:10: -1- AC_SUBST([CC])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:10: -1- AC_SUBST([CC])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:10: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([ac_ct_CC])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.ac:10: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([EXEEXT])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.ac:10: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([OBJEXT])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.ac:10: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([DEPDIR])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^DEPDIR$])
+m4trace:configure.ac:10: -1- AC_SUBST([am__include])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([am__include])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^am__include$])
+m4trace:configure.ac:10: -1- AC_SUBST([am__quote])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([am__quote])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^am__quote$])
+m4trace:configure.ac:10: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+m4trace:configure.ac:10: -1- AC_SUBST([AMDEP_TRUE])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([AMDEP_TRUE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^AMDEP_TRUE$])
+m4trace:configure.ac:10: -1- AC_SUBST([AMDEP_FALSE])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([AMDEP_FALSE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^AMDEP_FALSE$])
+m4trace:configure.ac:10: -1- AC_SUBST([AMDEPBACKSLASH])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
+m4trace:configure.ac:10: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CCDEPMODE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CCDEPMODE$])
+m4trace:configure.ac:10: -1- AM_CONDITIONAL([am__fastdepCC], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:10: -1- AC_SUBST([am__fastdepCC_TRUE])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
+m4trace:configure.ac:10: -1- AC_SUBST([am__fastdepCC_FALSE])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
+m4trace:configure.ac:13: -1- AC_SUBST([CPP])
+m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:13: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:13: -1- AC_SUBST([CPP])
+m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:13: -1- AC_SUBST([GREP])
+m4trace:configure.ac:13: -1- AC_SUBST_TRACE([GREP])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:13: -1- AC_SUBST([EGREP])
+m4trace:configure.ac:13: -1- AC_SUBST_TRACE([EGREP])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:13: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H])
+m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H])
+m4trace:configure.ac:63: -2- AH_OUTPUT([HAVE_LIBEFENCE], [/* Define to 1 if you have the `efence\' library (-lefence). */
+#undef HAVE_LIBEFENCE])
+m4trace:configure.ac:63: -2- AC_DEFINE_TRACE_LITERAL([HAVE_LIBEFENCE])
+m4trace:configure.ac:63: -2- m4_pattern_allow([^HAVE_LIBEFENCE$])
+m4trace:configure.ac:76: -1- AC_CONFIG_FILES([
+	Makefile
+	template/Makefile
+	info/Makefile
+])
+m4trace:configure.ac:81: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.ac:81: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.ac:81: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([LTLIBOBJS])
+m4trace:configure.ac:81: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([top_builddir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([top_build_prefix])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([srcdir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([abs_srcdir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([top_srcdir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([abs_top_srcdir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([builddir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([abs_builddir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([abs_top_builddir])
+m4trace:configure.ac:81: -1- AC_SUBST_TRACE([INSTALL])
diff -urP qstat-2.11/config.guess qstat-2.11-20080912svn311/config.guess
--- qstat-2.11/config.guess	2006-04-22 20:59:37.000000000 -0400
+++ qstat-2.11-20080912svn311/config.guess	2007-09-18 10:10:46.000000000 -0400
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
-timestamp='2005-07-08'
+timestamp='2003-10-03'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,15 +17,13 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
-
 # Originally written by Per Bothner <per@bothner.com>.
 # Please send patches to <config-patches@gnu.org>.  Submit a context
 # diff and a properly formatted ChangeLog entry.
@@ -55,7 +53,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -68,11 +66,11 @@
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
+       echo "$timestamp" ; exit 0 ;;
     --version | -v )
-       echo "$version" ; exit ;;
+       echo "$version" ; exit 0 ;;
     --help | --h* | -h )
-       echo "$usage"; exit ;;
+       echo "$usage"; exit 0 ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -125,7 +123,7 @@
 	;;
  ,,*)   CC_FOR_BUILD=$CC ;;
  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+esac ;'
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
@@ -138,16 +136,6 @@
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "${UNAME_MACHINE}" in
-    i?86)
-	test -z "$VENDOR" && VENDOR=pc
-	;;
-    *)
-	test -z "$VENDOR" && VENDOR=unknown
-	;;
-esac
-test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
-
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -208,29 +196,50 @@
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
-	exit ;;
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
     *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
     alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
+	if test $UNAME_RELEASE = "V4.0"; then
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
+	fi
 	# According to Compaq, /usr/sbin/psrinfo has been available on
 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
 	# covers most systems running today.  This code pipes the CPU
@@ -268,49 +277,42 @@
 	    "EV7.9 (21364A)")
 		UNAME_MACHINE="alphaev79" ;;
 	esac
-	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
+	exit 0 ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
 	# of the specific Alpha model?
 	echo alpha-pc-interix
-	exit ;;
+	exit 0 ;;
     21064:Windows_NT:50:3)
 	echo alpha-dec-winnt3.5
-	exit ;;
+	exit 0 ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
-	exit ;;
+	exit 0;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
+	exit 0 ;;
     *:[Mm]orph[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
+	exit 0 ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-        echo powerpc-ibm-os400
-	exit ;;
+	exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
+	exit 0;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
+	exit 0;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -318,32 +320,32 @@
 	else
 		echo pyramid-pyramid-bsd
 	fi
-	exit ;;
+	exit 0 ;;
     NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
-	exit ;;
+	exit 0 ;;
     DRS?6000:unix:4.0:6*)
 	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
 	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
 	esac ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     i86pc:SunOS:5.*:*)
 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
 	    Series*|S4*)
@@ -352,10 +354,10 @@
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
+	exit 0 ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
@@ -367,10 +369,10 @@
 		echo sparc-sun-sunos${UNAME_RELEASE}
 		;;
 	esac
-	exit ;;
+	exit 0 ;;
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -381,40 +383,37 @@
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
         echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
         echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
+        exit 0 ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
-	exit ;;
+	exit 0 ;;
     RISC*:ULTRIX:*:*)
 	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     VAX*:ULTRIX*:*:*)
 	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
 	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -438,33 +437,32 @@
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
 	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
-	exit ;;
+	exit 0 ;;
     Motorola:*:4.3:PL8-*)
 	echo powerpc-harris-powermax
-	exit ;;
+	exit 0 ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
 	echo powerpc-harris-powermax
-	exit ;;
+	exit 0 ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
-	exit ;;
+	exit 0 ;;
     m88k:CX/UX:7*:*)
 	echo m88k-harris-cxux7
-	exit ;;
+	exit 0 ;;
     m88k:*:4*:R4*)
 	echo m88k-motorola-sysv4
-	exit ;;
+	exit 0 ;;
     m88k:*:3*:R3*)
 	echo m88k-motorola-sysv3
-	exit ;;
+	exit 0 ;;
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
         UNAME_PROCESSOR=`/usr/bin/uname -p`
@@ -480,29 +478,29 @@
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+ 	exit 0 ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
-	exit ;;
+	exit 0 ;;
     M88*:*:R3*:*)
 	# Delta 88k system running SVR3
 	echo m88k-motorola-sysv3
-	exit ;;
+	exit 0 ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
 	echo m88k-tektronix-sysv3
-	exit ;;
+	exit 0 ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
 	echo m68k-tektronix-bsd
-	exit ;;
+	exit 0 ;;
     *:IRIX*:*:*)
 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
+	exit 0 ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
-	exit ;;
+	exit 0 ;;
     ia64:AIX:*:*)
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
@@ -510,7 +508,7 @@
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
+	exit 0 ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
 		eval $set_cc_for_build
@@ -525,18 +523,14 @@
 			exit(0);
 			}
 EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 		echo rs6000-ibm-aix3.2.4
 	else
 		echo rs6000-ibm-aix3.2
 	fi
-	exit ;;
+	exit 0 ;;
     *:AIX:*:[45])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
@@ -550,28 +544,28 @@
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
+	exit 0 ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
-	exit ;;
+	exit 0 ;;
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
-	exit ;;
+	exit 0 ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
-	exit ;;
+	exit 0 ;;
     DPX/2?00:B.O.S.:*:*)
 	echo m68k-bull-sysv3
-	exit ;;
+	exit 0 ;;
     9000/[34]??:4.3bsd:1.*:*)
 	echo m68k-hp-bsd
-	exit ;;
+	exit 0 ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
 	echo m68k-hp-bsd4.4
-	exit ;;
+	exit 0 ;;
     9000/[34678]??:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	case "${UNAME_MACHINE}" in
@@ -633,19 +627,9 @@
 	esac
 	if [ ${HP_ARCH} = "hppa2.0w" ]
 	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -653,11 +637,11 @@
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
+	exit 0 ;;
     ia64:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
+	exit 0 ;;
     3050*:HI-UX:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -685,166 +669,153 @@
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
 	echo unknown-hitachi-hiuxwe2
-	exit ;;
+	exit 0 ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 	echo hppa1.1-hp-bsd
-	exit ;;
+	exit 0 ;;
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
-	exit ;;
+	exit 0 ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
-	exit ;;
+	exit 0 ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
-	exit ;;
+	exit 0 ;;
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
-	exit ;;
+	exit 0 ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
 	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
 	    echo ${UNAME_MACHINE}-unknown-osf1
 	fi
-	exit ;;
+	exit 0 ;;
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
-	exit ;;
+	exit 0 ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+        exit 0 ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+        exit 0 ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+        exit 0 ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+        exit 0 ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+        exit 0 ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*TS:*:*:*)
 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*T3E:*:*:*)
 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*SV1:*:*:*)
 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
-    5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
+        exit 0 ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     sparc*:BSD/OS:*:*)
 	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:BSD/OS:*:*)
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
+	exit 0 ;;
+    *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/FreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+	exit 0 ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
+	exit 0 ;;
     i*:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
+	exit 0 ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
+	exit 0 ;;
     x86:Interix*:[34]*)
 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit ;;
+	exit 0 ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
+	exit 0 ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
 	# UNAME_MACHINE based on the output of uname instead of i386?
 	echo i586-pc-interix
-	exit ;;
+	exit 0 ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
+	exit 0 ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
-	exit ;;
+	exit 0 ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     *:GNU:*:*)
-	# the GNU system
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit ;;
+	exit 0 ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
+	exit 0 ;;
     arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     cris:Linux:*:*)
-	echo cris-axis-linux
-	exit ;;
-    crisv32:Linux:*:*)
-	echo crisv32-axis-linux
-	exit ;;
-    frv:Linux:*:*)
-    	echo frv-${VENDOR}-linux
-	exit ;;
+	echo cris-axis-linux-gnu
+	exit 0 ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     mips:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -862,7 +833,7 @@
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux"; exit; }
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
 	;;
     mips64:Linux:*:*)
 	eval $set_cc_for_build
@@ -881,14 +852,14 @@
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux"; exit; }
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
 	;;
     ppc:Linux:*:*)
-	echo powerpc-${VENDOR}-linux
-	exit ;;
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
     ppc64:Linux:*:*)
-	echo powerpc64-${VENDOR}-linux
-	exit ;;
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -901,34 +872,34 @@
         esac
 	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-${VENDOR}-linux${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-${VENDOR}-linux ;;
-	  PA8*) echo hppa2.0-${VENDOR}-linux ;;
-	  *)    echo hppa-${VENDOR}-linux ;;
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
-	exit ;;
+	exit 0 ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-${VENDOR}-linux
-	exit ;;
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
-	exit ;;
+	exit 0 ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     x86_64:Linux:*:*)
-	echo x86_64-${VENDOR}-linux
-	exit ;;
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
     i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
 	# first see if it will tell us. cd to the root directory to prevent
@@ -942,19 +913,19 @@
 				    p'`
         case "$ld_supported_targets" in
 	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-${VENDOR}-linux"
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
 		;;
 	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-${VENDOR}-linuxaout"
-		exit ;;
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
 	  coff-i386)
-		echo "${UNAME_MACHINE}-${VENDOR}-linuxcoff"
-		exit ;;
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
 	  "")
-		# Either a pre-BFD a.out linker (linuxoldld) or
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
 		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-${VENDOR}-linuxoldld"
-		exit ;;
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
 	esac
 	# Determine whether the default compiler is a.out or elf
 	eval $set_cc_for_build
@@ -982,18 +953,15 @@
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" | sed 's/linux-gnu/linux/'
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
 	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
 	# sysname and nodename.
 	echo i386-sequent-sysv4
-	exit ;;
+	exit 0 ;;
     i*86:UNIX_SV:4.2MP:2.*)
         # Unixware is an offshoot of SVR4, but it has its own version
         # number series starting with 2...
@@ -1001,27 +969,24 @@
 	# I just have to hope.  -- rms.
         # Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
+	exit 0 ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
 	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
+	exit 0 ;;
     i*86:XTS-300:*:STOP)
 	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
+	exit 0 ;;
     i*86:atheos:*:*)
 	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
+	exit 0 ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
+	exit 0 ;;
     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
@@ -1029,16 +994,15 @@
 	else
 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
-	exit ;;
-    i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	exit 0 ;;
+    i*86:*:5:[78]*)
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
+	exit 0 ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1056,73 +1020,73 @@
 	else
 		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
-	exit ;;
+	exit 0 ;;
     pc:*:*:*)
 	# Left here for compatibility:
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
         # the processor, so we play safe by assuming i386.
 	echo i386-pc-msdosdjgpp
-        exit ;;
+        exit 0 ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
-	exit ;;
+	exit 0 ;;
     paragon:*:*:*)
 	echo i860-intel-osf1
-	exit ;;
+	exit 0 ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
-	exit ;;
+	exit 0 ;;
     mini*:CTIX:SYS*5:*)
 	# "miniframe"
 	echo m68010-convergent-sysv
-	exit ;;
+	exit 0 ;;
     mc68k:UNIX:SYSTEM5:3.51m)
 	echo m68k-convergent-sysv
-	exit ;;
+	exit 0 ;;
     M680?0:D-NIX:5.3:*)
 	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+          && echo i486-ncr-sysv4 && exit 0 ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
-	exit ;;
+	exit 0 ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
-	exit ;;
+	exit 0 ;;
     RM*:SINIX-*:*:*)
 	echo mips-sni-sysv4
-	exit ;;
+	exit 0 ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1130,73 +1094,68 @@
 	else
 		echo ns32k-sni-sysv
 	fi
-	exit ;;
+	exit 0 ;;
     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                       # says <Richard.M.Bartel@ccMail.Census.GOV>
         echo i586-unisys-sysv4
-        exit ;;
+        exit 0 ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
 	echo hppa1.1-stratus-sysv4
-	exit ;;
+	exit 0 ;;
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
 	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
+	exit 0 ;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
 	echo hppa1.1-stratus-vos
-	exit ;;
+	exit 0 ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
-	exit ;;
+	exit 0 ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
 	        echo mips-nec-sysv${UNAME_RELEASE}
 	else
 	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+        exit 0 ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
-	exit ;;
+	exit 0 ;;
     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 	echo powerpc-apple-beos
-	exit ;;
+	exit 0 ;;
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
-	exit ;;
+	exit 0 ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     SX-5:SUPER-UX:*:*)
 	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
+	case `uname -p` in
 	    *86) UNAME_PROCESSOR=i686 ;;
-	    unknown) UNAME_PROCESSOR=powerpc ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
 	if test "$UNAME_PROCESSOR" = "x86"; then
@@ -1204,25 +1163,22 @@
 		UNAME_MACHINE=pc
 	fi
 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
-	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
+	exit 0 ;;
+    NSR-[DGKLNPTVWY]:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
-	exit ;;
+	exit 0 ;;
     BS2000:POSIX*:*:*)
 	echo bs2000-siemens-sysv
-	exit ;;
+	exit 0 ;;
     DS/*:UNIX_System_V:*:*)
 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
@@ -1233,44 +1189,28 @@
 	    UNAME_MACHINE="$cputype"
 	fi
 	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
+	exit 0 ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
-	exit ;;
+	exit 0 ;;
     *:TENEX:*:*)
 	echo pdp10-unknown-tenex
-	exit ;;
+	exit 0 ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
-	exit ;;
+	exit 0 ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
 	echo pdp10-xkl-tops20
-	exit ;;
+	exit 0 ;;
     *:TOPS-20:*:*)
 	echo pdp10-unknown-tops20
-	exit ;;
+	exit 0 ;;
     *:ITS:*:*)
 	echo pdp10-unknown-its
-	exit ;;
+	exit 0 ;;
     SEI:*:*:SEIUX)
         echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
+	exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1302,7 +1242,7 @@
 #endif
 
 #if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
+  printf ("arm-acorn-riscix"); exit (0);
 #endif
 
 #if defined (hp300) && !defined (hpux)
@@ -1391,12 +1331,11 @@
 }
 EOF
 
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
 
 # Apollos put the system type in the environment.
 
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
 
 # Convex versions that predate uname can use getsysinfo(1)
 
@@ -1405,22 +1344,22 @@
     case `getsysinfo -f cpu_type` in
     c1*)
 	echo c1-convex-bsd
-	exit ;;
+	exit 0 ;;
     c2*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-	exit ;;
+	exit 0 ;;
     c34*)
 	echo c34-convex-bsd
-	exit ;;
+	exit 0 ;;
     c38*)
 	echo c38-convex-bsd
-	exit ;;
+	exit 0 ;;
     c4*)
 	echo c4-convex-bsd
-	exit ;;
+	exit 0 ;;
     esac
 fi
 
@@ -1431,9 +1370,7 @@
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+    ftp://ftp.gnu.org/pub/gnu/config/
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
diff -urP qstat-2.11/config.sub qstat-2.11-20080912svn311/config.sub
--- qstat-2.11/config.sub	2006-04-22 20:59:37.000000000 -0400
+++ qstat-2.11-20080912svn311/config.sub	2007-09-18 10:10:46.000000000 -0400
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
-timestamp='2005-07-08'
+timestamp='2003-08-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,15 +21,14 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
-
 # Please send patches to <config-patches@gnu.org>.  Submit a context
 # diff and a properly formatted ChangeLog entry.
 #
@@ -71,7 +70,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -84,11 +83,11 @@
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
+       echo "$timestamp" ; exit 0 ;;
     --version | -v )
-       echo "$version" ; exit ;;
+       echo "$version" ; exit 0 ;;
     --help | --h* | -h )
-       echo "$usage"; exit ;;
+       echo "$usage"; exit 0 ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -100,7 +99,7 @@
     *local*)
        # First pass through any local machine types.
        echo $1
-       exit ;;
+       exit 0;;
 
     * )
        break ;;
@@ -119,8 +118,7 @@
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+  nto-qnx* | linux-gnu* | linux-dietlibc | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -146,7 +144,7 @@
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
+	-apple | -axis)
 		os=
 		basic_machine=$1
 		;;
@@ -232,14 +230,13 @@
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
 	| fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| m32r | m68000 | m68k | m88k | mcore \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -248,7 +245,6 @@
 	| mips64vr4100 | mips64vr4100el \
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
 	| mipsisa64 | mipsisa64el \
@@ -257,28 +253,23 @@
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
-	| ms1 \
 	| msp430 \
 	| ns16k | ns32k \
-	| or32 \
+	| openrisc | or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
 	| pyramid \
-	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
 	| strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
 	| v850 | v850e \
 	| we32k \
-	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xscale | xstormy16 | xtensa \
 	| z8k)
 		basic_machine=$basic_machine-unknown
 		;;
-	m32c)
-		basic_machine=$basic_machine-unknown
-		;;
 	m6811 | m68hc11 | m6812 | m68hc12)
 		# Motorola 68HC11/12.
 		basic_machine=$basic_machine-unknown
@@ -306,9 +297,9 @@
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* \
-	| bfin-* | bs2000-* \
+	| bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | craynv-* | cydra-* \
+	| clipper-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
@@ -316,9 +307,9 @@
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
+	| m32r-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| m88110-* | m88k-* | mcore-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -327,7 +318,6 @@
 	| mips64vr4100-* | mips64vr4100el-* \
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
 	| mipsisa64-* | mipsisa64el-* \
@@ -335,32 +325,27 @@
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| ms1-* \
 	| msp430-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
 	| pyramid-* \
 	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tron-* \
 	| v850-* | v850e-* | vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-	| xstormy16-* | xtensa-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
 	| ymp-* \
 	| z8k-*)
 		;;
-	m32c-*)
-		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
 	386bsd)
@@ -377,9 +362,6 @@
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
-		basic_machine=abacus-unknown
-		;;
 	adobe68k)
 		basic_machine=m68010-adobe
 		os=-scout
@@ -397,9 +379,6 @@
 	amd64)
 		basic_machine=x86_64-pc
 		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
 	amdahl)
 		basic_machine=580-amdahl
 		os=-sysv
@@ -459,27 +438,12 @@
 		basic_machine=j90-cray
 		os=-unicos
 		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16c)
-		basic_machine=cr16c-unknown
-		os=-elf
-		;;
 	crds | unos)
 		basic_machine=m68k-crds
 		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
 	cris | cris-* | etrax*)
 		basic_machine=cris-axis
 		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
 	da30 | da30-*)
 		basic_machine=m68k-da30
 		;;
@@ -502,10 +466,6 @@
 		basic_machine=m88k-motorola
 		os=-sysv3
 		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
 	dpx20 | dpx20-*)
 		basic_machine=rs6000-bull
 		os=-bosx
@@ -684,6 +644,10 @@
 	mips3*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
 		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
 	monitor)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -764,6 +728,10 @@
 	np1)
 		basic_machine=np1-gould
 		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -771,12 +739,9 @@
 		basic_machine=hppa1.1-oki
 		os=-proelf
 		;;
-	openrisc | openrisc-*)
+	or32 | or32-*)
 		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
+		os=-coff
 		;;
 	OSE68000 | ose68000)
 		basic_machine=m68000-ericsson
@@ -998,10 +963,6 @@
 	tower | tower-32)
 		basic_machine=m68k-ncr
 		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
 	udi29k)
 		basic_machine=a29k-amd
 		os=-udi
@@ -1045,10 +1006,6 @@
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
@@ -1079,9 +1036,6 @@
 	romp)
 		basic_machine=romp-ibm
 		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
 	rs6000)
 		basic_machine=rs6000-ibm
 		;;
@@ -1098,10 +1052,13 @@
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv9 | sparcv9b)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1174,21 +1131,19 @@
 	      | -aos* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
+	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* \
 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku*)
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1206,7 +1161,7 @@
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		;;
 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 		;;
 	-mac*)
@@ -1215,6 +1170,9 @@
 	-linux-dietlibc)
 		os=-linux-dietlibc
 		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
 	-sunos5*)
 		os=`echo $os | sed -e 's|sunos5|solaris2|'`
 		;;
@@ -1224,9 +1182,6 @@
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
-		os=-os400
-		;;
 	-wince*)
 		os=-wince
 		;;
@@ -1248,9 +1203,6 @@
 	-atheos*)
 		os=-atheos
 		;;
-	-syllable*)
-		os=-syllable
-		;;
 	-386bsd)
 		os=-bsd
 		;;
@@ -1273,9 +1225,6 @@
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
-		os=-tpf
-		;;
 	-triton*)
 		os=-sysv3
 		;;
@@ -1312,9 +1261,6 @@
 	-kaos*)
 		os=-kaos
 		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
 	-none)
 		;;
 	*)
@@ -1392,15 +1338,9 @@
 	*-be)
 		os=-beos
 		;;
-	*-haiku)
-		os=-haiku
-		;;
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
-		os=-mmixware
-		;;
 	*-wec)
 		os=-proelf
 		;;
@@ -1533,15 +1473,9 @@
 			-mvs* | -opened*)
 				vendor=ibm
 				;;
-			-os400*)
-				vendor=ibm
-				;;
 			-ptx*)
 				vendor=sequent
 				;;
-			-tpf*)
-				vendor=ibm
-				;;
 			-vxsim* | -vxworks* | -windiss*)
 				vendor=wrs
 				;;
@@ -1566,7 +1500,7 @@
 esac
 
 echo $basic_machine$os
-exit
+exit 0
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
diff -urP qstat-2.11/configure qstat-2.11-20080912svn311/configure
--- qstat-2.11/configure	2006-10-28 08:37:24.000000000 -0400
+++ qstat-2.11-20080912svn311/configure	2008-09-12 15:00:25.000000000 -0400
@@ -1,27 +1,84 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for qstat 2.11.
+# Generated by GNU Autoconf 2.62 for qstat 2.12.
 #
 # Report bugs to <qstat-users@yahoogroups.com>.
 #
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 ## --------------------- ##
 ## M4sh Initialization.  ##
 ## --------------------- ##
 
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
-DUALCASE=1; export DUALCASE # for MKS sh
 
 # Support unset when possible.
 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -31,33 +88,60 @@
 fi
 
 
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
 # Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
   as_basename=basename
 else
   as_basename=false
@@ -65,157 +149,391 @@
 
 
 # Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
+# CDPATH.
+$as_unset CDPATH
 
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
 fi
 
+  if test $as_have_required = yes &&	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
 
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
 
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
+  case $as_dir in
 	 /*)
-	   if ("$as_dir/$as_base" -c '
+	   for as_base in sh bash ksh sh5; do
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	   done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
   as_lineno_1=$LINENO
   as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
   test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+	do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+	done
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
 
   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
   # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
     sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
       N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
       t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
+      s/-\n.*//
     ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
    { (exit 1); exit 1; }; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
   # Exit status is that of the last command.
   exit
 }
 
 
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-if expr a : '\(a\)' >/dev/null 2>&1; then
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
 rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
     as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
   fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
 else
   as_ln_s='cp -p'
 fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
   as_mkdir_p=:
@@ -224,7 +542,28 @@
   as_mkdir_p=false
 fi
 
-as_executable_p="test -f"
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -233,90 +572,180 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
 
+exec 7<&0 </dev/null 6>&1
 
 # Name of the host.
 # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
-exec 6>&1
-
 #
 # Initializations.
 #
 ac_default_prefix=/usr/local
+ac_clean_files=
 ac_config_libobj_dir=.
+LIBOBJS=
 cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
 SHELL=${CONFIG_SHELL-/bin/sh}
 
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
 # Identity of this package.
 PACKAGE_NAME='qstat'
 PACKAGE_TARNAME='qstat'
-PACKAGE_VERSION='2.11'
-PACKAGE_STRING='qstat 2.11'
+PACKAGE_VERSION='2.12'
+PACKAGE_STRING='qstat 2.12'
 PACKAGE_BUGREPORT='qstat-users@yahoogroups.com'
 
 ac_unique_file="qstat.c"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
-#if HAVE_SYS_TYPES_H
+#ifdef HAVE_SYS_TYPES_H
 # include <sys/types.h>
 #endif
-#if HAVE_SYS_STAT_H
+#ifdef HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif
-#if STDC_HEADERS
+#ifdef STDC_HEADERS
 # include <stdlib.h>
 # include <stddef.h>
 #else
-# if HAVE_STDLIB_H
+# ifdef HAVE_STDLIB_H
 #  include <stdlib.h>
 # endif
 #endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
 #  include <memory.h>
 # endif
 # include <string.h>
 #endif
-#if HAVE_STRINGS_H
+#ifdef HAVE_STRINGS_H
 # include <strings.h>
 #endif
-#if HAVE_INTTYPES_H
+#ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
 #endif
-#if HAVE_UNISTD_H
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+AMTAR
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+AWK
+SET_MAKE
+am__leading_dot
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+CPP
+GREP
+EGREP
+LIBOBJS
+LTLIBOBJS'
 ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_optimize
+enable_debug
+enable_dump
+with_efence
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
 
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -339,34 +768,48 @@
 # and all the variables that are supposed to be based on exec_prefix
 # by default will actually change.
 # Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
 bindir='${exec_prefix}/bin'
 sbindir='${exec_prefix}/sbin'
 libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
 
 ac_prev=
+ac_dashdash=
 for ac_option
 do
   # If the previous option needs an argument, assign it.
   if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
+    eval $ac_prev=\$ac_option
     ac_prev=
     continue
   fi
 
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
 
-  case $ac_option in
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
 
   -bindir | --bindir | --bindi | --bind | --bin | --bi)
     ac_prev=bindir ;;
@@ -388,33 +831,61 @@
   --config-cache | -C)
     cache_file=config.cache ;;
 
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+  -datadir | --datadir | --datadi | --datad)
     ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
     datadir=$ac_optarg ;;
 
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
   -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
     esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
+    eval enable_$ac_useropt=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -441,6 +912,12 @@
   -host=* | --host=* | --hos=* | --ho=*)
     host_alias=$ac_optarg ;;
 
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
   -includedir | --includedir | --includedi | --included | --include \
   | --includ | --inclu | --incl | --inc)
     ac_prev=includedir ;;
@@ -465,13 +942,16 @@
   | --libexe=* | --libex=* | --libe=*)
     libexecdir=$ac_optarg ;;
 
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
   -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
+  | --localstate | --localstat | --localsta | --localst | --locals)
     ac_prev=localstatedir ;;
   -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
     localstatedir=$ac_optarg ;;
 
   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
@@ -536,6 +1016,16 @@
   | --progr-tra=* | --program-tr=* | --program-t=*)
     program_transform_name=$ac_optarg ;;
 
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
@@ -586,26 +1076,38 @@
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
     esac
-    eval "with_$ac_package='$ac_optarg'" ;;
+    eval with_$ac_useropt=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -625,7 +1127,7 @@
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
+  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
 Try \`$0 --help' for more information." >&2
    { (exit 1); exit 1; }; }
     ;;
@@ -634,17 +1136,16 @@
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
     expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
    { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
+    eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
@@ -653,31 +1154,39 @@
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
+  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
    { (exit 1); exit 1; }; }
 fi
 
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
+   { (exit 1); exit 1; }; } ;;
+    *)     $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
-done
+fi
 
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
 do
-  eval ac_val=$`echo $ac_var`
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
   case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
+  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -691,7 +1200,7 @@
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
     If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
@@ -704,74 +1213,76 @@
 test "$silent" = yes && exec 6>/dev/null
 
 
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { $as_echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
   srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
+  if test ! -r "$srcdir/$ac_unique_file"; then
     srcdir=..
   fi
 else
   ac_srcdir_defaulted=no
 fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
    { (exit 1); exit 1; }; }
-  fi
 fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
    { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
 
 #
 # Report the --help message.
@@ -780,7 +1291,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures qstat 2.11 to adapt to many kinds of systems.
+\`configure' configures qstat 2.12 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -800,14 +1311,11 @@
   -n, --no-create         do not create output files
       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
 
-_ACEOF
-
-  cat <<_ACEOF
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
+                          [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
+                          [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -817,18 +1325,25 @@
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/qstat]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
 _ACEOF
 
   cat <<\_ACEOF
@@ -846,25 +1361,33 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of qstat 2.11:";;
+     short | recursive ) echo "Configuration of qstat 2.12:";;
    esac
   cat <<\_ACEOF
 
 Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
+  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors
+  --disable-optimize         turn off optimization
   --disable-debug         turn off debugging code
   --enable-dump           enable packet dumps
 
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-efence=<path>    Use electric fence for malloc debugging.
+
 Some influential environment variables:
   CC          C compiler command
   CFLAGS      C compiler flags
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
 
 Use these variables to override the choices made by `configure' or to help
@@ -872,120 +1395,88 @@
 
 Report bugs to <qstat-users@yahoogroups.com>.
 _ACEOF
+ac_status=$?
 fi
 
 if test "$ac_init_help" = "recursive"; then
   # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
     ac_builddir=.
 
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
 
 case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
+  .)  # We are building in place.
     ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
     ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
 esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd $ac_popdir
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
   done
 fi
 
-test -n "$ac_init_help" && exit 0
+test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-qstat configure 2.11
-generated by GNU Autoconf 2.59
+qstat configure 2.12
+generated by GNU Autoconf 2.62
 
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
-  exit 0
+  exit
 fi
-exec 5>config.log
-cat >&5 <<_ACEOF
+cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by qstat $as_me 2.11, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
+It was created by qstat $as_me 2.12, which was
+generated by GNU Autoconf 2.62.  Invocation command line was
 
   $ $0 $@
 
 _ACEOF
+exec 5>>config.log
 {
 cat <<_ASUNAME
 ## --------- ##
@@ -1004,7 +1495,7 @@
 /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
 /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
 /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
 /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
@@ -1016,8 +1507,9 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
+  $as_echo "PATH: $as_dir"
 done
+IFS=$as_save_IFS
 
 } >&5
 
@@ -1039,7 +1531,6 @@
 ac_configure_args=
 ac_configure_args0=
 ac_configure_args1=
-ac_sep=
 ac_must_keep_next=false
 for ac_pass in 1 2
 do
@@ -1050,8 +1541,8 @@
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
     1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
@@ -1072,9 +1563,7 @@
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
+      ac_configure_args="$ac_configure_args '$ac_arg'"
       ;;
     esac
   done
@@ -1085,8 +1574,8 @@
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
 # would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
 trap 'exit_status=$?
   # Save into config.log some information that might help in debugging.
   {
@@ -1099,20 +1588,35 @@
 _ASBOX
     echo
     # The following way of writing the cache mishandles newlines in values,
-{
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
   (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
       sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
     *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
       ;;
-    esac;
-}
+    esac |
+    sort
+)
     echo
 
     cat <<\_ASBOX
@@ -1123,22 +1627,28 @@
     echo
     for ac_var in $ac_subst_vars
     do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
     if test -n "$ac_subst_files"; then
       cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
 _ASBOX
       echo
       for ac_var in $ac_subst_files
       do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
@@ -1150,26 +1660,24 @@
 ## ----------- ##
 _ASBOX
       echo
-      sed "/^$/d" confdefs.h | sort
+      cat confdefs.h
       echo
     fi
     test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
   } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
     exit $exit_status
-     ' 0
+' 0
 for ac_signal in 1 2 13 15; do
   trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
+rm -f -r conftest* confdefs.h
 
 # Predefined preprocessor variables.
 
@@ -1199,18 +1707,24 @@
 
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
 fi
-for ac_site_file in $CONFIG_SITE; do
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
   if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file"
   fi
@@ -1220,54 +1734,61 @@
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
     esac
   fi
 else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+for ac_var in $ac_precious_vars; do
   eval ac_old_set=\$ac_cv_env_${ac_var}_set
   eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
@@ -1277,19 +1798,13 @@
   fi
 done
 if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
 
 
 
@@ -1314,93 +1829,133 @@
 
 
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-          ac_config_headers="$ac_config_headers gnuconfig.h"
+ac_config_headers="$ac_config_headers gnuconfig.h"
 
 
 
 ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install-sh -c"
     break
-  elif test -f $ac_dir/install.sh; then
+  elif test -f "$ac_dir/install.sh"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install.sh -c"
     break
-  elif test -f $ac_dir/shtool; then
+  elif test -f "$ac_dir/shtool"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/shtool install -c"
     break
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
    { (exit 1); exit 1; }; }
 fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
 
 # Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
    { (exit 1); exit 1; }; }
 
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
 if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
-  ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
    { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
    { (exit 1); exit 1; }; }
 
 fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
 build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
 if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
-  ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
    { (exit 1); exit 1; }; }
+fi
 
 fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
 host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
-am__api_version="1.9"
+am__api_version="1.7"
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -1414,11 +1969,12 @@
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
 if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -1437,7 +1993,7 @@
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
 	  if test $ac_prog = install &&
 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
@@ -1447,30 +2003,43 @@
 	    # program-specific install script used by HP pwplus--don't use.
 	    :
 	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
 	  fi
 	fi
       done
     done
     ;;
 esac
+
 done
+IFS=$as_save_IFS
 
+rm -rf conftest.one conftest.two conftest.dir
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
     INSTALL=$ac_cv_path_install
   else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
     # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
+    # removed, or if the value is a relative name.
     INSTALL=$ac_install_sh
   fi
 fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -1480,8 +2049,8 @@
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
 # Just in case
 sleep 1
 echo timestamp > conftest.file
@@ -1504,9 +2073,9 @@
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" >&2;}
    { (exit 1); exit 1; }; }
    fi
@@ -1517,26 +2086,24 @@
    # Ok.
    :
 else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
 Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
+$as_echo "$as_me: error: newly created file is older than distributed files!
 Check your system clock" >&2;}
    { (exit 1); exit 1; }; }
 fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 test "$program_prefix" != NONE &&
-  program_transform_name="s,^,$program_prefix,;$program_transform_name"
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
 test "$program_suffix" != NONE &&
-  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
-# Double any \ or $.  echo might interpret backslashes.
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
 # By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
 
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
@@ -1547,51 +2114,18 @@
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
+  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
 fi
 
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_AWK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
@@ -1602,54 +2136,58 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AWK="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
+  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$AWK" && break
 done
 
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
 all:
-	@echo 'ac_maketemp="$(MAKE)"'
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
 # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
-  eval ac_cv_prog_make_${ac_make}_set=yes
-else
-  eval ac_cv_prog_make_${ac_make}_set=no
-fi
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
 rm -f conftest.make
 fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
   SET_MAKE=
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
@@ -1662,11 +2200,11 @@
 fi
 rmdir .tst 2>/dev/null
 
-# test to see if srcdir already configured
+ # test to see if srcdir already configured
 if test "`cd $srcdir && pwd`" != "`pwd`" &&
    test -f $srcdir/config.status; then
-  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -1682,7 +2220,7 @@
 
 # Define the identity of the package.
  PACKAGE='qstat'
- VERSION='2.11'
+ VERSION='2.12'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -1710,6 +2248,9 @@
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
 install_sh=${install_sh-"$am_aux_dir/install-sh"}
 
 # Installed binaries are usually stripped using `strip' when the user
@@ -1720,10 +2261,10 @@
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
@@ -1734,34 +2275,36 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
 fi
 if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
@@ -1772,27 +2315,41 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
-  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
 fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  STRIP=$ac_ct_STRIP
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
 else
   STRIP="$ac_cv_prog_STRIP"
 fi
@@ -1802,13 +2359,6 @@
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
 
 
 
@@ -1821,10 +2371,10 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1835,34 +2385,36 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
 fi
 if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -1873,38 +2425,53 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  CC=$ac_ct_CC
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
 else
   CC="$ac_cv_prog_CC"
 fi
 
 if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1915,76 +2482,36 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
 
+  fi
 fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1996,17 +2523,18 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
@@ -2024,24 +2552,25 @@
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
 fi
 if test -z "$CC"; then
   if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
+  for ac_prog in cl.exe
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2052,38 +2581,40 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
     test -n "$CC" && break
   done
 fi
 if test -z "$CC"; then
   ac_ct_CC=$CC
-  for ac_prog in cl
+  for ac_prog in cl.exe
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2094,58 +2625,92 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 done
+IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$ac_ct_CC" && break
 done
 
-  CC=$ac_ct_CC
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
 fi
 
 fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
 See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
 
 # Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
 
 cat >conftest.$ac_ext <<_ACEOF
@@ -2164,111 +2729,146 @@
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link_default") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
 	;;
     [ab].out )
 	# We found the default executable, but exeext='' is most
 	# certainly right.
 	break;;
     *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
 	break;;
     * )
 	break;;
   esac
 done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
 else
-  echo "$as_me: failed program was:" >&5
+  ac_file=''
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
 See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
+$as_echo "$as_me: error: C compiler cannot create executables
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
 fi
 
 ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
 
-# Check the compiler produces executables we can run.  If not, either
+# Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
 # If not cross compiling, check that we can run a simple program.
 if test "$cross_compiling" != yes; then
   if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
 	cross_compiling=yes
     else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+	{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
+$as_echo "$as_me: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
     fi
   fi
 fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
+# Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
@@ -2277,32 +2877,31 @@
 for ac_file in conftest.exe conftest conftest.*; do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
 	  break;;
     * ) break;;
   esac
 done
 else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+  { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
 if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -2320,39 +2919,46 @@
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
 See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
 if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -2373,50 +2979,54 @@
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_compiler_gnu=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_compiler_gnu=no
+	ac_compiler_gnu=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
 if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2432,38 +3042,121 @@
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_prog_cc_g=no
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -2479,12 +3172,12 @@
     CFLAGS=
   fi
 fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_prog_cc_stdc=no
+  ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -2518,12 +3211,17 @@
 /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
    function prototypes and stuff, but not '\xHH' hex character constants.
    These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
+   as 'x'.  The following induces an error, until -std is added to get
    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
    array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
+   that's true only with -std.  */
 int osf4_cc_array ['\x00' == 0 ? 1 : -1];
 
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
 int test (int i, double x);
 struct s1 {int (*f) (int a);};
 struct s2 {int (*f) (double a);};
@@ -2538,205 +3236,58 @@
   return 0;
 }
 _ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
   rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
+
 fi
-rm -f conftest.err conftest.$ac_objext
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f conftest.$ac_ext
 CC=$ac_save_CC
 
 fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
 
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2744,7 +3295,7 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 DEPDIR="${am__leading_dot}deps"
 
-          ac_config_commands="$ac_config_commands depfiles"
+ac_config_commands="$ac_config_commands depfiles"
 
 
 am_make=${MAKE-make}
@@ -2754,8 +3305,8 @@
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
 am__include="#"
 am__quote=
 _am_result=none
@@ -2782,15 +3333,15 @@
 fi
 
 
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
 rm -f confinc confmf
 
-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+# Check whether --enable-dependency-tracking was given.
 if test "${enable_dependency_tracking+set}" = set; then
-  enableval="$enable_dependency_tracking"
+  enableval=$enable_dependency_tracking;
+fi
 
-fi;
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
@@ -2810,10 +3361,10 @@
 
 depcc="$CC"   am_compiler_list=
 
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
   # We make a subdir and do the tests there.  Otherwise we can end up
@@ -2849,9 +3400,7 @@
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      : > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
@@ -2879,14 +3428,9 @@
        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
         am_cv_CC_dependencies_compiler_type=$depmode
         break
       fi
@@ -2900,8 +3444,8 @@
 fi
 
 fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
 
@@ -2924,15 +3468,15 @@
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
   if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -2959,35 +3503,35 @@
 #endif
 		     Syntax error
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Broken: fails on valid input.
 continue
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
-  # OK, works on sane cases.  Now check whether non-existent headers
+  # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -2997,34 +3541,34 @@
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
 done
@@ -3042,8 +3586,8 @@
 else
   ac_cv_prog_CPP=$CPP
 fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -3066,35 +3610,35 @@
 #endif
 		     Syntax error
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Broken: fails on valid input.
 continue
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
-  # OK, works on sane cases.  Now check whether non-existent headers
+  # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -3104,34 +3648,34 @@
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
 done
@@ -3140,9 +3684,9 @@
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+  { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
 See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -3154,25 +3698,144 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
     fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
 fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
 
 
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
 if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -3194,35 +3857,32 @@
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_header_stdc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_header_stdc=no
+	ac_cv_header_stdc=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
@@ -3278,6 +3938,7 @@
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <ctype.h>
+#include <stdlib.h>
 #if ((' ' & 0x0FF) == 0x020)
 # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
 # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
@@ -3297,36 +3958,50 @@
   for (i = 0; i < 256; i++)
     if (XOR (islower (i), ISLOWER (i))
 	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
+      return 2;
+  return 0;
 }
 _ACEOF
 rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   :
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_header_stdc=no
 fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
+
+
 fi
 fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -3349,11 +4024,11 @@
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -3366,41 +4041,41 @@
 #include <$ac_header>
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-eval "$as_ac_Header=no"
+	eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'` = yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -3409,17 +4084,17 @@
 
 
 if test "${ac_cv_header_sys_mman_h+set}" = set; then
-  echo "$as_me:$LINENO: checking for sys/mman.h" >&5
-echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6
+  { $as_echo "$as_me:$LINENO: checking for sys/mman.h" >&5
+$as_echo_n "checking for sys/mman.h... " >&6; }
 if test "${ac_cv_header_sys_mman_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
+$as_echo "$ac_cv_header_sys_mman_h" >&6; }
 else
   # Is the header compilable?
-echo "$as_me:$LINENO: checking sys/mman.h usability" >&5
-echo $ECHO_N "checking sys/mman.h usability... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking sys/mman.h usability" >&5
+$as_echo_n "checking sys/mman.h usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -3430,41 +4105,38 @@
 #include <sys/mman.h>
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_header_compiler=no
+	ac_header_compiler=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-echo "$as_me:$LINENO: checking sys/mman.h presence" >&5
-echo $ECHO_N "checking sys/mman.h presence... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking sys/mman.h presence" >&5
+$as_echo_n "checking sys/mman.h presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -3473,76 +4145,74 @@
 /* end confdefs.h.  */
 #include <sys/mman.h>
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
+
 rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: sys/mman.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: sys/mman.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
 ## ------------------------------------------ ##
 ## Report this to qstat-users@yahoogroups.com ##
 ## ------------------------------------------ ##
 _ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-echo "$as_me:$LINENO: checking for sys/mman.h" >&5
-echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for sys/mman.h" >&5
+$as_echo_n "checking for sys/mman.h... " >&6; }
 if test "${ac_cv_header_sys_mman_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_header_sys_mman_h=$ac_header_preproc
 fi
-echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5
+$as_echo "$ac_cv_header_sys_mman_h" >&6; }
 
 fi
 if test $ac_cv_header_sys_mman_h = yes; then
@@ -3553,49 +4223,151 @@
 
 case $host in
 	*mingw32*)
-		{ echo "$as_me:$LINENO: compiling for $host, adding -lwsock32" >&5
-echo "$as_me: compiling for $host, adding -lwsock32" >&6;}
+		{ $as_echo "$as_me:$LINENO: compiling for $host, adding -lwsock32" >&5
+$as_echo "$as_me: compiling for $host, adding -lwsock32" >&6;}
 		LIBS="$LIBS -lwsock32"
 	;;
 esac
 
-echo "$as_me:$LINENO: checking whether to enable debug output" >&5
-echo $ECHO_N "checking whether to enable debug output... $ECHO_C" >&6
-# Check whether --enable-debug or --disable-debug was given.
+{ $as_echo "$as_me:$LINENO: checking whether to enable optimization" >&5
+$as_echo_n "checking whether to enable optimization... " >&6; }
+# Check whether --enable-optimize was given.
+if test "${enable_optimize+set}" = set; then
+  enableval=$enable_optimize;
+fi
+
+if test x$enable_optimize != xno; then
+	{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+	CPPFLAGS=""
+	CFLAGS="-ggdb"
+	{ $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable debug output" >&5
+$as_echo_n "checking whether to enable debug output... " >&6; }
+# Check whether --enable-debug was given.
 if test "${enable_debug+set}" = set; then
-  enableval="$enable_debug"
+  enableval=$enable_debug;
+fi
 
-fi;
 if test x$enable_debug != xno; then
 	CPPFLAGS="$CPPFLAGS -DDEBUG"
-	echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+	{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-	echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+	{ $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-echo "$as_me:$LINENO: checking whether to enable packet dumps" >&5
-echo $ECHO_N "checking whether to enable packet dumps... $ECHO_C" >&6
-# Check whether --enable-dump or --disable-dump was given.
+{ $as_echo "$as_me:$LINENO: checking whether to enable packet dumps" >&5
+$as_echo_n "checking whether to enable packet dumps... " >&6; }
+# Check whether --enable-dump was given.
 if test "${enable_dump+set}" = set; then
-  enableval="$enable_dump"
+  enableval=$enable_dump;
+fi
 
-fi;
 if test x$enable_dump != xno; then
 	if test x$have_mman_h = xyes; then
 		CPPFLAGS="$CPPFLAGS -DENABLE_DUMP"
-		echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+		{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 	else
-		echo "$as_me:$LINENO: result: no, sys/mman.h missing" >&5
-echo "${ECHO_T}no, sys/mman.h missing" >&6
+		{ $as_echo "$as_me:$LINENO: result: no, sys/mman.h missing" >&5
+$as_echo "no, sys/mman.h missing" >&6; }
+	fi
+else
+	{ $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Check whether --with-efence was given.
+if test "${with_efence+set}" = set; then
+  withval=$with_efence; if test x$withval != xyes ; then
+		LDFLAGS="${LDFLAGS} -L$withval"
 	fi
+
+{ $as_echo "$as_me:$LINENO: checking for malloc in -lefence" >&5
+$as_echo_n "checking for malloc in -lefence... " >&6; }
+if test "${ac_cv_lib_efence_malloc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lefence  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char malloc ();
+int
+main ()
+{
+return malloc ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_efence_malloc=yes
 else
-	echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_efence_malloc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_efence_malloc" >&5
+$as_echo "$ac_cv_lib_efence_malloc" >&6; }
+if test $ac_cv_lib_efence_malloc = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBEFENCE 1
+_ACEOF
+
+  LIBS="-lefence $LIBS"
+
+fi
+
+
 fi
 
+
 if test "x$GCC" = "xyes"; then
   case " $CFLAGS " in
   *[\ \	]-Wall[\ \	]*) ;;
@@ -3603,7 +4375,7 @@
   esac
 fi
 
-                              ac_config_files="$ac_config_files Makefile template/Makefile info/Makefile"
+ac_config_files="$ac_config_files Makefile template/Makefile info/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -3623,39 +4395,59 @@
 
 # The following way of writing the cache mishandles newlines in values,
 # but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
+# So, we kill variables containing newlines.
 # Ultrix sh set writes to stderr and can't be redirected directly,
 # and sets the high bit in the cache file unless we assign to the vars.
-{
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
   (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
       # `set' does not quote correctly, so add quotes (double-quote
       # substitution turns \\\\ into \\, and sed turns \\ into \).
       sed -n \
 	"s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
+      ;; #(
     *)
       # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
       ;;
-    esac;
-} |
+    esac |
+    sort
+) |
   sed '
+     /^ac_cv_env_/b end
      t clear
-     : clear
+     :clear
      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
      t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
     cat confcache >$cache_file
   else
-    echo "not updating unwritable cache $cache_file"
+    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -3664,32 +4456,18 @@
 # Let make expand exec_prefix.
 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
 DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -3697,26 +4475,27 @@
 
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 : ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -3729,22 +4508,78 @@
 SHELL=\${CONFIG_SHELL-$SHELL}
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ## --------------------- ##
 ## M4sh Initialization.  ##
 ## --------------------- ##
 
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
-DUALCASE=1; export DUALCASE # for MKS sh
 
 # Support unset when possible.
 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -3754,33 +4589,60 @@
 fi
 
 
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
 # Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
   as_basename=basename
 else
   as_basename=false
@@ -3788,159 +4650,122 @@
 
 
 # Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
+# CDPATH.
+$as_unset CDPATH
 
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
 
 
   as_lineno_1=$LINENO
   as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
   test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
 
   # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
   # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
   # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
     sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
       N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
       t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
+      s/-\n.*//
     ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
    { (exit 1); exit 1; }; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
   # Exit status is that of the last command.
   exit
 }
 
 
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-if expr a : '\(a\)' >/dev/null 2>&1; then
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
 rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
     as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
   fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
 else
   as_ln_s='cp -p'
 fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
   as_mkdir_p=:
@@ -3949,7 +4774,28 @@
   as_mkdir_p=false
 fi
 
-as_executable_p="test -f"
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -3958,31 +4804,14 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
 exec 6>&1
 
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# Save the log message, to keep $[0] and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by qstat $as_me 2.11, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
+# values after options handling.
+ac_log="
+This file was extended by qstat $as_me 2.12, which was
+generated by GNU Autoconf 2.62.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -3990,30 +4819,20 @@
   CONFIG_COMMANDS = $CONFIG_COMMANDS
   $ $0 $@
 
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
 _ACEOF
 
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
+config_files="`echo $ac_config_files`"
+config_headers="`echo $ac_config_headers`"
+config_commands="`echo $ac_config_commands`"
 
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
+_ACEOF
 
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
 \`$as_me' instantiates files from templates according to the
 current configuration.
@@ -4021,14 +4840,14 @@
 Usage: $0 [OPTIONS] [FILE]...
 
   -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
+  -V, --version    print version number and configuration settings, then exit
   -q, --quiet      do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
   --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
+                   instantiate the configuration file FILE
   --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
+                   instantiate the configuration header FILE
 
 Configuration files:
 $config_files
@@ -4040,83 +4859,83 @@
 $config_commands
 
 Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
 
-cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
-qstat config.status 2.11
-configured by $0, generated by GNU Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+qstat config.status 2.12
+configured by $0, generated by GNU Autoconf 2.62,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2008 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
 ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
   --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
-  -*)
+  *)
     ac_option=$1
     ac_optarg=$2
     ac_shift=shift
     ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
   esac
 
   case $ac_option in
   # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
     $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
     ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
+  -*) { $as_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
    { (exit 1); exit 1; }; } ;;
 
-  *) ac_config_targets="$ac_config_targets $1" ;;
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
 
   esac
   shift
@@ -4130,41 +4949,55 @@
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
 fi
 
 _ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
 
-cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
-# INIT-COMMANDS section.
+# INIT-COMMANDS
 #
-
 AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 _ACEOF
 
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 
-
-cat >>$CONFIG_STATUS <<\_ACEOF
+# Handling of arguments.
 for ac_config_target in $ac_config_targets
 do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "template/Makefile" ) CONFIG_FILES="$CONFIG_FILES template/Makefile" ;;
-  "info/Makefile" ) CONFIG_FILES="$CONFIG_FILES info/Makefile" ;;
-  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-  "gnuconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS gnuconfig.h" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+  case $ac_config_target in
+    "gnuconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS gnuconfig.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "template/Makefile") CONFIG_FILES="$CONFIG_FILES template/Makefile" ;;
+    "info/Makefile") CONFIG_FILES="$CONFIG_FILES info/Makefile" ;;
+
+  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
    { (exit 1); exit 1; }; };;
   esac
 done
 
+
 # If the user did not use the arguments to specify the items to instantiate,
 # then the envvar interface is used.  Set only those that are not.
 # We use the long form for the default assignment because of an extremely
@@ -4176,722 +5009,634 @@
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
+# simply because there is no reason against having it here, and in addition,
 # creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
   trap '{ (exit 1); exit 1; }' 1 2 13 15
 }
-
 # Create a (secure) tmp directory for tmp files.
 
 {
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
   test -n "$tmp" && test -d "$tmp"
 }  ||
 {
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
 } ||
 {
-   echo "$me: cannot create a temporary directory in ." >&2
+   $as_echo "$as_me: cannot create a temporary directory in ." >&2
    { (exit 1); exit 1; }
 }
 
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr='
'
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
 _ACEOF
 
-cat >>$CONFIG_STATUS <<_ACEOF
 
-#
-# CONFIG_FILES section.
-#
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
 
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@CYGPATH_W@,$CYGPATH_W,;t t
-s,@PACKAGE@,$PACKAGE,;t t
-s,@VERSION@,$VERSION,;t t
-s,@ACLOCAL@,$ACLOCAL,;t t
-s,@AUTOCONF@,$AUTOCONF,;t t
-s,@AUTOMAKE@,$AUTOMAKE,;t t
-s,@AUTOHEADER@,$AUTOHEADER,;t t
-s,@MAKEINFO@,$MAKEINFO,;t t
-s,@install_sh@,$install_sh,;t t
-s,@STRIP@,$STRIP,;t t
-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-s,@mkdir_p@,$mkdir_p,;t t
-s,@AWK@,$AWK,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@am__leading_dot@,$am__leading_dot,;t t
-s,@AMTAR@,$AMTAR,;t t
-s,@am__tar@,$am__tar,;t t
-s,@am__untar@,$am__untar,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@DEPDIR@,$DEPDIR,;t t
-s,@am__include@,$am__include,;t t
-s,@am__quote@,$am__quote,;t t
-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-s,@CCDEPMODE@,$CCDEPMODE,;t t
-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+   { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_FILES"
 
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+   { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
   esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      ac_file_inputs="$ac_file_inputs '$ac_f'"
+    done
 
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; } ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
 $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$ac_file" : 'X\(//\)[^/]' \| \
 	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
     as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
 $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$as_dir" : 'X\(//\)[^/]' \| \
 	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
     done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
    { (exit 1); exit 1; }; }; }
-
   ac_builddir=.
 
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
 
 case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
+  .)  # We are building in place.
     ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
     ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
 esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
 
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
 
   case $INSTALL in
   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
   esac
+_ACEOF
 
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
 $extrasub
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
 
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
-ac_dB='[	 ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
 
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  rm -f "$tmp/stdin"
   case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 # Do quote $f, to prevent DOS paths from being IFS'd.
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
    { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
   if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+	|| { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
     fi
   else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+   { (exit 1); exit 1; }; }
   fi
-# Compute $ac_file's index in $config_headers.
+# Compute "$ac_file"'s index in $config_headers.
 _am_stamp_count=1
 for _am_header in $config_headers :; do
   case $_am_header in
-    $ac_file | $ac_file:* )
+    "$ac_file" | "$ac_file":* )
       break ;;
     * )
       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
   esac
 done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X$ac_file : 'X\(//\)[^/]' \| \
-	 X$ac_file : 'X\(//\)$' \| \
-	 X$ac_file : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X$ac_file |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_dest" : 'X\(//\)[^/]' \| \
-	 X"$ac_dest" : 'X\(//\)$' \| \
-	 X"$ac_dest" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
+echo "timestamp for "$ac_file"" >`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
 
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
+  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
 
 
-  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
-  case $ac_dest in
-    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
   # Strip MF so we end up with the name of the file.
   mf=`echo "$mf" | sed -e 's/:.*$//'`
   # Check whether this is an Automake generated Makefile or not.
@@ -4901,92 +5646,140 @@
   # each Makefile.in and add a new line on top of each file to say so.
   # So let's grep whole file.
   if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`(dirname "$mf") 2>/dev/null ||
+    dirpart=`$as_dirname -- "$mf" ||
 $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$mf" : 'X\(//\)[^/]' \| \
 	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
   else
     continue
   fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
   test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
   # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
     # Make sure the directory exists.
     test -f "$dirpart/$file" && continue
-    fdir=`(dirname "$file") 2>/dev/null ||
+    fdir=`$as_dirname -- "$file" ||
 $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$file" : 'X\(//\)[^/]' \| \
 	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    { if $as_mkdir_p; then
-    mkdir -p $dirpart/$fdir
-  else
-    as_dir=$dirpart/$fdir
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
     as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
 $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$as_dir" : 'X\(//\)[^/]' \| \
 	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
     done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
    { (exit 1); exit 1; }; }; }
-
     # echo "creating $dirpart/$file"
     echo '# dummy' > "$dirpart/$file"
   done
 done
  ;;
+
   esac
-done
-_ACEOF
+done # for ac_tag
 
-cat >>$CONFIG_STATUS <<\_ACEOF
 
 { (exit 0); exit 0; }
 _ACEOF
 chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
+test $ac_write_fail = 0 ||
+  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -5008,4 +5801,8 @@
   # would make configure fail if this is the last instruction.
   $ac_cs_success || { (exit 1); exit 1; }
 fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
 
diff -urP qstat-2.11/configure.ac qstat-2.11-20080912svn311/configure.ac
--- qstat-2.11/configure.ac	2006-10-28 08:36:47.000000000 -0400
+++ qstat-2.11-20080912svn311/configure.ac	2008-09-12 14:52:23.000000000 -0400
@@ -1,4 +1,4 @@
-AC_INIT([qstat],[2.11],[qstat-users@yahoogroups.com])
+AC_INIT([qstat],[2.12],[qstat-users@yahoogroups.com])
 AC_CONFIG_SRCDIR([qstat.c])
 AM_CONFIG_HEADER([gnuconfig.h])
 
@@ -22,6 +22,17 @@
 esac
 
 dnl check if user wants debug
+AC_MSG_CHECKING([whether to enable optimization])
+AC_ARG_ENABLE(optimize,[  --disable-optimize         turn off optimization])
+if test x$enable_optimize != xno; then
+	AC_MSG_RESULT([yes])
+else
+	CPPFLAGS=""
+	CFLAGS="-ggdb"
+	AC_MSG_RESULT([no])
+fi
+
+dnl check if user wants debug
 AC_MSG_CHECKING([whether to enable debug output])
 AC_ARG_ENABLE(debug,[  --disable-debug         turn off debugging code])
 if test x$enable_debug != xno; then
@@ -44,6 +55,14 @@
 	AC_MSG_RESULT([no])
 fi
 
+AC_ARG_WITH(efence,
+[  --with-efence=<path>    Use electric fence for malloc debugging.],
+	if test x$withval != xyes ; then
+		LDFLAGS="${LDFLAGS} -L$withval"
+	fi
+	AC_CHECK_LIB(efence,malloc)
+)
+
 dnl Use -Wall if we have gcc.
 changequote(,)dnl
 if test "x$GCC" = "xyes"; then
diff -urP qstat-2.11/.cvsignore qstat-2.11-20080912svn311/.cvsignore
--- qstat-2.11/.cvsignore	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/.cvsignore	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,16 @@
+Makefile
+Makefile.in
+configure
+gnuconfig.h
+gnuconfig.h.in
+INSTALL
+aclocal.m4
+install-sh
+missing
+depcomp
+autom4te.cache
+stamp-h1
+config.log
+config.status
+.deps
+qstat
diff -urP qstat-2.11/debug.c qstat-2.11-20080912svn311/debug.c
--- qstat-2.11/debug.c	2006-05-24 10:26:00.000000000 -0400
+++ qstat-2.11-20080912svn311/debug.c	2008-09-12 14:52:23.000000000 -0400
@@ -15,6 +15,8 @@
 #ifndef _WIN32
 #include <unistd.h>
 #include <sys/param.h>
+#else
+#include <stdarg.h>
 #endif
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -25,14 +27,14 @@
 #include <stdarg.h>
 
 #ifdef DEBUG
+
 void _debug(const char* file, int line, const char* function, int level, const char* fmt, ...)
 {
 	va_list ap;
 	char buf[9];
-	time_t now;
+	time_t now = time( NULL );
 
-	now = time(NULL);
-	strftime(buf,9,"%T",localtime(&now));
+	strftime(buf,9,"%H:%M:%S", localtime( &now ) );
 
 	fprintf(stderr, "debug(%d) %s %s:%d %s() - ", level, buf, file, line, function);
 
@@ -107,7 +109,13 @@
 }
 
 void
-print_packet( struct qserver *server, const char *buf, int buflen)
+print_packet( struct qserver *server, const char *buf, int buflen )
+{
+	output_packet( server, buf, buflen, 0 );
+}
+
+void
+output_packet( struct qserver *server, const char *buf, int buflen, int to )
 {
 	static char *hex= "0123456789abcdef";
 	unsigned char *p= (unsigned char*)buf;
@@ -115,27 +123,40 @@
 	char line[256];
 
 	if ( server != NULL)
-	fprintf( stderr, "FROM %s len %d\n", server->arg, buflen );
-
-	for ( i= buflen; i ; offset+= 16)  {
-	memset( line, ' ', 256);
-	h= 0;
-	h+= sprintf( line, "%5d:", offset);
-	a= astart = h + 16*2 + 16/4 + 2;
-	for ( b=16; b && i; b--, i--, p++)  {
-		if ( (b & 3) == 0)
-		line[h++]= ' ';
-		line[h++]= hex[*p >> 4];
-		line[h++]= hex[*p & 0xf];
-		if ( isprint( *p))
-		line[a++]= *p;
-		else
-		line[a++]= '.';
-		if((a-astart)==8) line[a++] = ' ';
+	{
+		fprintf( stderr, "%s %s len %d\n", ( to ) ? "TO" : "FROM", server->arg, buflen );
 	}
-	line[a]= '\0';
-	fputs( line, stderr);
-	fputs( "\n", stderr);
+
+	for ( i= buflen; i ; offset+= 16)
+	{
+		memset( line, ' ', 256);
+		h= 0;
+		h+= sprintf( line, "%5d:", offset);
+		a= astart = h + 16*2 + 16/4 + 2;
+		for ( b=16; b && i; b--, i--, p++)
+		{
+			if ( (b & 3) == 0)
+			{
+				line[h++]= ' ';
+			}
+			line[h++]= hex[*p >> 4];
+			line[h++]= hex[*p & 0xf];
+			if ( isprint( *p))
+			{
+				line[a++]= *p;
+			}
+			else
+			{
+				line[a++]= '.';
+			}
+			if((a-astart)==8)
+			{
+				line[a++] = ' ';
+			}
+		}
+		line[a]= '\0';
+		fputs( line, stderr);
+		fputs( "\n", stderr);
 	}
 	fputs( "\n", stderr);
 }
diff -urP qstat-2.11/debug.h qstat-2.11-20080912svn311/debug.h
--- qstat-2.11/debug.h	2006-05-24 10:26:00.000000000 -0400
+++ qstat-2.11-20080912svn311/debug.h	2008-09-12 14:52:23.000000000 -0400
@@ -12,21 +12,24 @@
 
 #include "qstat.h"
 
-// NOTE: Windows doesn't support debugging ATM
-#ifdef _WIN32
-	#define debug 0 &&
-#else
-	#ifdef DEBUG
-		#include <stdarg.h>
+
+#ifdef DEBUG
+	#include <stdarg.h>
+	#ifdef _WIN32
+		void _debug(const char* file, int line, const char* function, int level, const char* fmt, ...);
+		#define debug(level,fmt,...) \
+			if( level <= get_debug_level() ) \
+				_debug(__FILE__,__LINE__,__FUNCTION__,level,fmt,__VA_ARGS__)
+	#else
 		void _debug(const char* file, int line, const char* function, int level, const char* fmt, ...)
-			GCC_FORMAT_PRINTF(5, 6);
+		GCC_FORMAT_PRINTF(5, 6);
 		#define debug(level,fmt,rem...) \
-		  if( level <= get_debug_level() ) \
-			_debug(__FILE__,__LINE__,__FUNCTION__,level,fmt,##rem)
-	#else
-		#define debug(...)
-	#endif
-#endif
+			if( level <= get_debug_level() ) \
+				_debug(__FILE__,__LINE__,__FUNCTION__,level,fmt,##rem)
+	#endif // _WIN32
+#else
+	#define debug(...)
+#endif // DEBUG
 
 void dump_packet(const char* buf, int buflen);
 
@@ -37,5 +40,6 @@
 void set_debug_level (int level);
 
 void print_packet( struct qserver *server, const char *buf, int buflen );
+void output_packet( struct qserver *server, const char *buf, int buflen, int to );
 
 #endif
diff -urP qstat-2.11/depcomp qstat-2.11-20080912svn311/depcomp
--- qstat-2.11/depcomp	2006-04-22 20:59:37.000000000 -0400
+++ qstat-2.11-20080912svn311/depcomp	2007-09-18 10:10:46.000000000 -0400
@@ -1,9 +1,7 @@
 #! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2005-07-09.11
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,8 +15,8 @@
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,45 +25,22 @@
 
 # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
 
-case $1 in
-  '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
-  depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
-  DEPDIR      directory where to store dependencies.
-  depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
 fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
 
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
 tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
 rm -f "$tmpdepfile"
@@ -287,43 +262,27 @@
    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
 
    if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
       "$@" -Wc,-MD
    else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
       "$@" -MD
    fi
 
    stat=$?
    if test $stat -eq 0; then :
    else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
       exit $stat
    fi
 
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
       # That's a tab and a space in the [].
@@ -467,8 +426,7 @@
   done
 
   "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
     sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
@@ -519,12 +477,3 @@
 esac
 
 exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff -urP qstat-2.11/doom3.c qstat-2.11-20080912svn311/doom3.c
--- qstat-2.11/doom3.c	2006-07-11 20:28:49.000000000 -0400
+++ qstat-2.11-20080912svn311/doom3.c	2008-09-12 14:52:23.000000000 -0400
@@ -131,7 +131,7 @@
 	return buf;
 }
 
-void send_doom3master_request_packet( struct qserver *server)
+int send_doom3master_request_packet( struct qserver *server)
 {
 	int rc = 0;
 	int packet_len = -1;
@@ -146,7 +146,7 @@
 	rc= send( server->fd, packet, packet_len, 0);
 	if ( rc == SOCKET_ERROR)
 	{
-		perror( "send");
+		return send_error( server, rc );
 	}
 
 	if ( server->retry1 == n_retries)
@@ -160,9 +160,11 @@
 	}
 	server->retry1--;
 	server->n_packets++;
+
+	return 1;
 }
 
-void send_quake4master_request_packet( struct qserver *server)
+int send_quake4master_request_packet( struct qserver *server)
 {
 	int rc = 0;
 	int packet_len = -1;
@@ -177,7 +179,7 @@
 	rc= send( server->fd, packet, packet_len, 0);
 	if ( rc == SOCKET_ERROR)
 	{
-		perror( "send");
+		return send_error( server, rc );
 	}
 
 	if ( server->retry1 == n_retries)
@@ -191,17 +193,17 @@
 	}
 	server->retry1--;
 	server->n_packets++;
+
+	return 1;
 }
 
 static const char doom3_masterresponse[] = "\xFF\xFFservers";
 
-void
-deal_with_doom3master_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_doom3master_packet( struct qserver *server, char *rawpkt, int pktlen)
 {
 	char* pkt, *dest;
 	int len;
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
+	server->ping_total+= time_delta( &packet_recv_time, &server->packet_time1);
 
 	if ( pktlen < sizeof(doom3_masterresponse) + 6 // at least one server
 			|| (pktlen - sizeof(doom3_masterresponse)) % 6
@@ -210,8 +212,7 @@
 		server->server_name= SERVERERROR;
 		server->master_pkt_len = 0;
 		malformed_packet(server, "too short or invalid response");
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	server->retry1 = 0; // received at least one packet so no need to retry
@@ -239,16 +240,22 @@
 	server->n_servers= server->master_pkt_len / 6;
 
 	debug(2, "%d servers added", server->n_servers);
+
+	return 0;
 }
 
 static const char doom3_inforesponse[] = "\xFF\xFFinfoResponse";
 static unsigned MAX_DOOM3_ASYNC_CLIENTS = 32;
 
-static void _deal_with_doom3_packet( struct qserver *server, char *rawpkt, int pktlen, unsigned version )
+static int _deal_with_doom3_packet( struct qserver *server, char *rawpkt, int pktlen, unsigned version )
 {
 	char *ptr = rawpkt;
 	char *end = rawpkt + pktlen;
 	int type = 0;
+	int size = 0;
+	int tail_size = 4;
+	int viewers = 0;
+	int tv = 0;
 	unsigned num_players = 0;
 	unsigned challenge = 0;
 	unsigned protocolver = 0;
@@ -269,11 +276,18 @@
 		memcmp( doom3_inforesponse, ptr, sizeof(doom3_inforesponse)) != 0 )
 	{
 		malformed_packet(server, "too short or invalid response");
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 	ptr += sizeof(doom3_inforesponse);
 
+	if ( 5 == version )
+	{
+		// TaskID
+		ptr += 4;
+		// osmask + ranked
+		tail_size++;
+	}
+
 	challenge = swap_long_from_little(ptr);
 	ptr += 4;
 
@@ -283,20 +297,28 @@
 	snprintf(tmp, sizeof(tmp), "%u.%u", protocolver >> 16, protocolver & 0xFFFF);
 	debug(2, "challenge: 0x%08X, protocol: %s (0x%X)", challenge, tmp, protocolver);
 
+	server->protocol_version = protocolver;
+	add_rule( server, "protocol", tmp, NO_FLAGS );
+
+
+	if ( 5 == version )
+	{
+		// Size Long
+		size = swap_long_from_little(ptr);
+		debug( 2, "Size = %d", size );
+		ptr += 4;
+	}
+
 // Commented out until we have a better way to specify the expected version
 // This is due to prey demo requiring version 4 yet prey retail version 3
 /*
 	if( protocolver >> 16 != version )
 	{
 		malformed_packet(server, "protocol version %u, expected %u", protocolver >> 16, version );
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 */
 
-	server->protocol_version = protocolver;
-	add_rule( server, "protocol", tmp, NO_FLAGS );
-
 	while ( ptr < end )
 	{
 		// server info:
@@ -310,8 +332,7 @@
 		if ( !ptr )
 		{
 			malformed_packet( server, "no rule key" );
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 		keylen = ptr - key;
 
@@ -320,19 +341,19 @@
 		if ( !ptr )
 		{
 			malformed_packet( server, "no rule value" );
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 		vallen = ptr - val;
 		++ptr;
-		debug( 2, "key:%s=%s:", key, val);
 
-		if(keylen == 0 && vallen == 0)
+		if( keylen == 0 && vallen == 0 )
 		{
 			type = 1;
 			break; // end
 		}
 
+		debug( 2, "key:%s=%s:", key, val);
+
 		// Lets see what we've got
 		if ( 0 == strcasecmp( key, "si_name" ) )
 		{
@@ -346,18 +367,46 @@
 		else if( 0 == strcasecmp( key, "si_version" ) )
 		{
 			// format:
+x
 			// DOOM 1.0.1262.win-x86 Jul  8 2004 16:46:37
 			server->protocol_version = atoi( val+1 );
 		}
 #endif
 		else if( 0 == strcasecmp( key, "si_map" ) )
 		{
+			if ( 5 == version )
+			{
+				// ET:QW reports maps/<mapname>.entities
+				// so we strip that here if it exists
+				char *tmpp = strstr( val, ".entities" );
+				if ( NULL != tmpp )
+				{
+					*tmpp = '\0';
+				}
+
+				if ( 0 == strncmp( val, "maps/", 5 ) )
+				{
+					val += 5;
+				}
+			}
 			server->map_name = strdup( val );
 		}
-		else if( 0 == strcasecmp( key, "si_maxplayers" ) )
+		else if ( 0 == strcasecmp( key, "si_maxplayers" ) )
 		{
 			server->max_players = atoi( val );
 		}
+		else if (  0 == strcasecmp( key, "ri_maxViewers" ) )
+		{
+			char max[20];
+			sprintf( max, "%d", server->max_players );
+			add_rule( server, "si_maxplayers", max, NO_FLAGS );
+			server->max_players = atoi( val );
+		}
+		else if (  0 == strcasecmp( key, "ri_numViewers" ) )
+		{
+			viewers = atoi( val );
+			tv = 1;
+		}
 
 		add_rule( server, key, val, NO_FLAGS );
 	}
@@ -367,68 +416,77 @@
 		// no more info should be player headers here as we
 		// requested it
 		malformed_packet( server, "player info missing" );
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	// now each player details
-	while( ptr < end )
+	while( ptr < end - tail_size )
 	{
 		struct player *player;
 		char *val;
 		unsigned char player_id = *ptr++;
-		short prediction = 0;
+		short ping = 0;
 		unsigned rate = 0;
 
-		if(player_id == MAX_DOOM3_ASYNC_CLIENTS)
-			break;
-
-		/* id's are not steady
-		if(player_id != num_players)
+		if( MAX_DOOM3_ASYNC_CLIENTS == player_id )
 		{
-			malformed_packet(server, "unexpected player id");
-			cleanup_qserver( server, 1);
-			return;
+			break;
 		}
-		*/
+		debug( 2, "ID = %d\n", player_id );
 
-		if ( ptr + 7 > end ) // 2 pred + 4 rate + empty player name ('\0')
+		// Note: id's are not steady
+		if ( ptr + 7 > end ) // 2 ping + 4 rate + empty player name ('\0')
 		{
 			// run off the end and shouldnt have
 			malformed_packet( server, "player info too short" );
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 
 		player = add_player( server, player_id );
+		if(!player)
+		{
+			malformed_packet( server, "duplicate player id" );
+			return PKT_ERROR;
+		}
 
+		// doesnt support score so set a sensible default
 		player->score = 0;
 		player->frags = 0;
 
-		prediction = swap_short_from_little(ptr);
+		// Ping
+		ping = swap_short_from_little(ptr);
+		player->ping = ping;
 		ptr += 2;
 
-		player->ping = prediction; // seems to be ping
-
-		rate = swap_long_from_little(ptr);
-		ptr += 4;
+		if ( 5 != version || 0xa0013 < protocolver )
+		{
+			// Rate
+			rate = swap_long_from_little(ptr);
+			{
+				char buf[16];
+				snprintf(buf, sizeof(buf), "%u", rate);
+				player_add_info(player, "rate", buf, NO_FLAGS);
+			}
+			ptr += 4;
+		}
 
+		if ( 5 == version && ( ( 0xd0009 == protocolver || 0xd000a == protocolver ) && 0 != num_players ) ) // v13.9 or v13.10
 		{
-			char buf[16];
-			snprintf(buf, sizeof(buf), "%u", rate);
-			player_add_info(player, "rate", buf, NO_FLAGS);
+			// Fix the packet offset due to the single bit used for bot
+			// which realigns at the byte boundary for the player name
+			ptr++;
 		}
 
+		// Name
 		val = ptr;
 		ptr = memchr(ptr, '\0', end-ptr);
 		if ( !ptr )
 		{
 			malformed_packet( server, "player name not null terminated" );
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
-		++ptr;
 		player->name = strdup( val );
+		ptr++;
 
 		if( 2 == version )
 		{
@@ -437,25 +495,134 @@
 			if ( !ptr )
 			{
 				malformed_packet( server, "player clan not null terminated" );
-				cleanup_qserver( server, 1);
-				return;
+				return PKT_ERROR;
 			}
-			++ptr;
 			player->tribe_tag = strdup( val );
+			ptr++;
+			debug( 2, "Player[%d] = %s, ping %hu, rate %u, id %hhu, clan %s",
+					num_players, player->name, ping, rate, player_id, player->tribe_tag);
 		}
+		else if ( 5 == version )
+		{
+			if ( 0xa0011 <= protocolver ) // clan tag since 10.17
+			{
+				// clantag position
+				ptr++;
+
+				// clantag
+				val = ptr;
+				ptr = memchr(ptr, '\0', end-ptr);
+				if ( !ptr )
+				{
+					malformed_packet( server, "player clan not null terminated" );
+					return PKT_ERROR;
+				}
+				player->tribe_tag = strdup( val );
+				ptr++;
+			}
 
-		debug( 2, "Player[%d] = %s, prediction %hu, rate %u, id %hhu, clan %s",
-				num_players, player->name, prediction, rate, player_id, player->tribe_tag);
+			// Bot flag
+			if ( 0xd0009 == protocolver || 0xd000a == protocolver ) // v13.9 or v13.10
+			{
+				// Bot flag is a single bit so need to realign everything from here on in :(
+				int i;
+				unsigned char *tp = (unsigned char*)ptr;
+				player->type_flag = (*tp)<<7;
+
+				// alignment is reset at the end
+				for( i = 0; i < 8 && tp < (unsigned char*)end; i++ )
+				{
+					*tp = (*tp)>>1 | *(tp+1)<<7;
+					tp++;
+				}
+			}
+			else
+			{
+				player->type_flag = *ptr++;
+			}
+
+			if ( 0xa0011 <= protocolver ) // clan tag since 10.17
+			{
+				debug( 2, "Player[%d] = %s, ping %hu, rate %u, id %hhu, bot %hhu, clan %s",
+					num_players, player->name, ping, rate, player_id, player->type_flag, player->tribe_tag);
+			}
+			else
+			{
+				debug( 2, "Player[%d] = %s, ping %hu, rate %u, id %hhu, bot %hhu",
+					num_players, player->name, ping, rate, player_id, player->type_flag );
+			}
+		}
+		else
+		{
+			debug( 2, "Player[%d] = %s, ping %hu, rate %u, id %hhu",
+					num_players, player->name, ping, rate, player_id );
+		}
 
 		++num_players;
 	}
 
-	if(end - ptr >= 4)
+	if( end - ptr >= 4 )
 	{
+		// OS Mask
 		snprintf(tmp, sizeof(tmp), "0x%X", swap_long_from_little(ptr));
 		add_rule( server, "osmask", tmp, NO_FLAGS );
 		debug( 2, "osmask %s", tmp);
 		ptr += 4;
+
+		if ( 5 == version && end - ptr >= 1 )
+		{
+			// Ranked flag
+			snprintf( tmp, sizeof(tmp), "%hhu", *ptr++ );
+			add_rule( server, "ranked", tmp, NO_FLAGS );
+
+			if ( end - ptr >= 5 )
+			{
+				// Time Left
+				snprintf( tmp, sizeof(tmp), "%d", swap_long_from_little( ptr ) );
+				add_rule( server, "timeleft", tmp, NO_FLAGS );
+				ptr += 4;
+
+				// Game State
+				snprintf( tmp, sizeof(tmp), "%hhu", *ptr++ );
+				add_rule( server, "gamestate", tmp, NO_FLAGS );
+
+				if ( end - ptr >= 1 )
+				{
+					// Server Type
+					unsigned char servertype = *ptr++;
+					snprintf( tmp, sizeof(tmp), "%hhu", servertype );
+					add_rule( server, "servertype", tmp, NO_FLAGS );
+
+					switch ( servertype )
+					{
+					case 0: // Regular Server
+						// Interested Clients
+						snprintf( tmp, sizeof(tmp), "%hhu", *ptr++ );
+						add_rule( server, "interested_clients", tmp, NO_FLAGS );
+						break;
+
+					case 1: // TV Server
+						// Connected Clients
+						snprintf( tmp, sizeof(tmp), "%d", swap_long_from_little( ptr ) );
+						ptr+=4;
+						add_rule( server, "interested_clients", tmp, NO_FLAGS );
+
+						// Max Clients
+						snprintf( tmp, sizeof(tmp), "%d", swap_long_from_little( ptr ) );
+						ptr+=4;
+						add_rule( server, "interested_clients", tmp, NO_FLAGS );
+						break;
+
+					default:
+						// Unknown
+						if ( show_errors )
+						{
+							fprintf( stderr, "Unknown server type %d\n", servertype );
+						}
+					}
+				}
+			}
+		}
 	}
 	else
 	{
@@ -469,28 +636,40 @@
 	}
 #endif
 
-	server->num_players = num_players;
+	if ( 0 == tv )
+	{
+		debug( 2, "Num players = %d", num_players );
+		server->num_players = num_players;
+	}
+	else
+	{
+		server->num_players = viewers;
+	}
+
+	return DONE_FORCE;
+}
 
-	cleanup_qserver( server, 1 );
-	return;
+int deal_with_doom3_packet( struct qserver *server, char *rawpkt, int pktlen)
+{
+	return _deal_with_doom3_packet( server, rawpkt, pktlen, 1 );
 }
 
-void deal_with_doom3_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_quake4_packet( struct qserver *server, char *rawpkt, int pktlen)
 {
-	_deal_with_doom3_packet( server, rawpkt, pktlen, 1 );
+	return _deal_with_doom3_packet( server, rawpkt, pktlen, 2 );
 }
 
-void deal_with_quake4_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_prey_demo_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
-	_deal_with_doom3_packet( server, rawpkt, pktlen, 2 );
+	return _deal_with_doom3_packet( server, rawpkt, pktlen, 4 );
 }
 
-void deal_with_prey_demo_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_prey_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
-	_deal_with_doom3_packet( server, rawpkt, pktlen, 4 );
+	return _deal_with_doom3_packet( server, rawpkt, pktlen, 3 );
 }
 
-void deal_with_prey_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_etqw_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
-	_deal_with_doom3_packet( server, rawpkt, pktlen, 3 );
+	return _deal_with_doom3_packet( server, rawpkt, pktlen, 5 );
 }
diff -urP qstat-2.11/doom3.h qstat-2.11-20080912svn311/doom3.h
--- qstat-2.11/doom3.h	2006-06-22 07:13:51.000000000 -0400
+++ qstat-2.11-20080912svn311/doom3.h	2008-09-12 14:52:23.000000000 -0400
@@ -21,12 +21,16 @@
 #define PREY_DEFAULT_PORT	27719
 #define PREY_MASTER_DEFAULT_PORT	27655
 
-void send_doom3master_request_packet( struct qserver *server);
-void deal_with_doom3_packet( struct qserver *server, char *rawpkt, int pktlen);
+#define ETQW_DEFAULT_PORT	27733
 
-void send_quake4master_request_packet( struct qserver *server);
-void deal_with_quake4_packet( struct qserver *server, char *rawpkt, int pktlen);
+int send_doom3master_request_packet( struct qserver *server);
+int deal_with_doom3_packet( struct qserver *server, char *rawpkt, int pktlen);
 
-void deal_with_prey_packet( struct qserver *server, char *rawpkt, int pktlen);
+int send_quake4master_request_packet( struct qserver *server);
+int deal_with_quake4_packet( struct qserver *server, char *rawpkt, int pktlen);
+
+int deal_with_prey_packet( struct qserver *server, char *rawpkt, int pktlen);
+
+int deal_with_etqw_packet( struct qserver *server, char *rawpkt, int pktlen);
 
 #endif
diff -urP qstat-2.11/fl.c qstat-2.11-20080912svn311/fl.c
--- qstat-2.11/fl.c	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/fl.c	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,512 @@
+/*
+ * qstat 2.8
+ * by Steve Jankowski
+ *
+ * Frontlines-Fuel of War protocol
+ * Copyright 2008 Steven Hartland
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ *
+ */
+
+#include <sys/types.h>
+#ifndef _WIN32
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#else
+#include <winsock.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "debug.h"
+#include "qstat.h"
+#include "packet_manip.h"
+
+#define FL_GETCHALLENGE	  "\xFF\xFF\xFF\xFF\x57"
+#define FL_CHALLENGERESPONSE 0x41
+#define FL_INFO			  "\xFF\xFF\xFF\xFF\x46LSQ"
+#define FL_INFORESPONSE  0x49
+#define FL_PLAYER			"\xFF\xFF\xFF\xFF\x55"
+#define FL_PLAYERRESPONSE	0x44
+#define FL_RULES			 "\xFF\xFF\xFF\xFF\x56"
+#define FL_RULESRESPONSE	 0x45
+
+struct fl_status
+{
+	unsigned sent_challenge : 1;
+	unsigned have_challenge : 1;
+	unsigned sent_info : 1;
+	unsigned have_info : 1;
+	unsigned sent_player : 1;
+	unsigned have_player : 1;
+	unsigned sent_rules : 1;
+	unsigned have_rules : 1;
+	unsigned challenge;
+	unsigned char type;
+};
+
+int send_fl_request_packet(struct qserver *server)
+{
+	struct fl_status* status = (struct fl_status*)server->master_query_tag;
+
+	if( SOCKET_ERROR == qserver_send_initial(server, FL_INFO, sizeof(FL_INFO) - 1) )
+	{
+		return SOCKET_ERROR;
+	}
+
+	status->sent_info = 1;
+	status->type = 0;
+
+	return 0;
+}
+
+int send_fl_rule_request_packet(struct qserver *server)
+{
+	struct fl_status* status = (struct fl_status*)server->master_query_tag;
+
+	if ( 1 >= status->type )
+	{
+		// Not supported
+		return PKT_ERROR;
+	}
+
+	if(!get_server_rules && !get_player_info)
+	{
+		return DONE_FORCE;
+	}
+
+	do
+	{
+		if(!status->have_challenge)
+		{
+			debug(3, "sending challenge");
+			if( SOCKET_ERROR == qserver_send_initial(server, FL_GETCHALLENGE, sizeof(FL_GETCHALLENGE)-1) )
+			{
+				return SOCKET_ERROR;
+			}
+			status->sent_challenge = 1;
+			break;
+		}
+		else if(get_server_rules && !status->have_rules)
+		{
+			char buf[sizeof(FL_RULES)-1+4] = FL_RULES;
+			memcpy(buf+sizeof(FL_RULES)-1, &status->challenge, 4);
+			debug(3, "sending rule query");
+			if( SOCKET_ERROR == qserver_send_initial(server, buf, sizeof(buf)) )
+			{
+				return SOCKET_ERROR;
+			}
+			status->sent_rules = 1;
+			break;
+		}
+		else if(get_player_info && !status->have_player)
+		{
+			char buf[sizeof(FL_PLAYER)-1+4] = FL_PLAYER;
+			memcpy(buf+sizeof(FL_PLAYER)-1, &status->challenge, 4);
+			debug(3, "sending player query");
+			if( SOCKET_ERROR == qserver_send_initial(server, buf, sizeof(buf)) )
+			{
+				return SOCKET_ERROR;
+			}
+			status->sent_player = 1;
+			break;
+		}
+		else
+		{
+			debug(3, "timeout");
+			// we are probably called due to timeout, restart.
+			status->have_challenge = 0;
+			status->have_rules = 0;
+		}
+	} while(1);
+
+	return 0;
+}
+
+int deal_with_fl_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	struct fl_status* status = (struct fl_status*)server->master_query_tag;
+	char* pkt = rawpkt;
+	char buf[16];
+	char* str;
+	unsigned cnt;
+	unsigned short tmp_short;
+
+	if(server->server_name == NULL)
+	{
+		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1);
+		server->n_requests++;
+	}
+
+	if(pktlen < 5) goto out_too_short;
+
+	if( 0 == memcmp(pkt, "\xFF\xFF\xFF\xFE", 4) )
+	{
+		// fragmented packet
+		unsigned char pkt_index, pkt_max;
+		unsigned int pkt_id;
+		SavedData *sdata;
+
+		if(pktlen < 9) goto out_too_short;
+
+		// format:
+		// int Header
+		// int RequestId
+		// byte PacketNumber
+		// byte NumPackets
+		// Short SizeOfPacketSplits
+
+		// Header
+		pkt += 4;
+
+		// RequestId
+		pkt_id = ntohl( *(long *)pkt );
+		debug( 3, "RequestID: %d", pkt_id );
+		pkt += 4;
+
+		// The next two bytes are:
+		// 1. the max packets sent ( byte )
+		// 2. the index of this packet starting from 0 ( byte )
+		// 3. Size of the split ( short )
+		if(pktlen < 10) goto out_too_short;
+
+		// PacketNumber
+		pkt_index = ((unsigned char)*pkt);
+
+		// NumPackates
+		pkt_max = ((unsigned char)*(pkt+1));
+
+		// SizeOfPacketSplits
+		debug( 3, "packetid[2]: 0x%hhx => idx: %hhu, max: %hhu", *pkt, pkt_index, pkt_max );
+		pkt+=4;
+		pktlen -= 12;
+
+		// pkt_max is the total number of packets expected
+		// pkt_index is a bit mask of the packets received.
+		if ( server->saved_data.data == NULL )
+		{
+			sdata = &server->saved_data;
+		}
+		else
+		{
+			sdata = (SavedData*) calloc( 1, sizeof(SavedData));
+			sdata->next = server->saved_data.next;
+			server->saved_data.next = sdata;
+		}
+
+		sdata->pkt_index = pkt_index;
+		sdata->pkt_max = pkt_max;
+		sdata->pkt_id = pkt_id;
+		sdata->datalen = pktlen;
+		sdata->data= (char*)malloc( pktlen );
+		if ( NULL == sdata->data )
+		{
+			malformed_packet(server, "Out of memory");
+			return MEM_ERROR;
+		}
+
+		memcpy( sdata->data, pkt, sdata->datalen );
+
+		// combine_packets will call us recursively
+		return combine_packets( server );
+	}
+	else if ( 0 != memcmp(pkt, "\xFF\xFF\xFF\xFF", 4) )
+	{
+		malformed_packet(server, "invalid packet header");
+		return PKT_ERROR;
+	}
+
+	pkt += 4;
+	pktlen -= 4;
+
+	pktlen -= 1;
+	debug( 2, "FL type = 0x%x", *pkt );
+	switch(*pkt++)
+	{
+	case FL_CHALLENGERESPONSE:
+		if(pktlen < 4) goto out_too_short;
+		memcpy(&status->challenge, pkt, 4);
+		// do not count challenge as retry
+		if(!status->have_challenge && server->retry1 != n_retries)
+		{
+			++server->retry1;
+			if(server->n_retries)
+			{
+				--server->n_retries;
+			}
+		}
+		status->have_challenge = 1;
+		debug(3, "challenge %x", status->challenge);
+		break;
+
+	case FL_INFORESPONSE:
+		if(pktlen < 1) goto out_too_short;
+		status->type = *pkt;
+		if ( *pkt > 1 && ( get_server_rules || get_player_info ) )
+		{
+			 server->next_rule = ""; // trigger calling send_fl_rule_request_packet
+		}
+		snprintf(buf, sizeof(buf), "%hhX", *pkt);
+		add_rule(server, "protocol", buf, 0);
+		pktlen--;
+		pkt++;
+
+		// ServerName
+		str = memchr(pkt, '\0', pktlen);
+		if(!str) goto out_too_short;
+		server->server_name = strdup(pkt);
+		pktlen -= str-pkt+1;
+		pkt += str-pkt+1;
+
+		// MapName
+		str = memchr(pkt, '\0', pktlen);
+		if(!str) goto out_too_short;
+		server->map_name = strdup(pkt);
+		pktlen -= str-pkt+1;
+		pkt += str-pkt+1;
+
+		// ModName
+		str = memchr(pkt, '\0', pktlen);
+		if(!str) goto out_too_short;
+		server->game = strdup(pkt);
+		add_rule(server, "modname", pkt, 0);
+		pktlen -= str-pkt+1;
+		pkt += str-pkt+1;
+
+		// GameMode
+		str = memchr(pkt, '\0', pktlen);
+		if(!str) goto out_too_short;
+		add_rule(server, "gamemode", pkt, 0);
+		pktlen -= str-pkt+1;
+		pkt += str-pkt+1;
+
+		// GameDescription
+		str = memchr(pkt, '\0', pktlen);
+		if(!str) goto out_too_short;
+		add_rule(server, "gamedescription", pkt, 0);
+		pktlen -= str-pkt+1;
+		pkt += str-pkt+1;
+
+		// GameVersion
+		str = memchr(pkt, '\0', pktlen);
+		if(!str) goto out_too_short;
+		add_rule(server, "gameversion", pkt, 0);
+		pktlen -= str-pkt+1;
+		pkt += str-pkt+1;
+
+		if( pktlen < 13 )
+		{
+			goto out_too_short;
+		}
+
+		// GamePort
+		tmp_short = ((unsigned short)pkt[0] <<8 ) | ((unsigned short)pkt[1]);
+		change_server_port( server, tmp_short, 0 );
+		pkt += 2;
+
+		// Num Players
+		server->num_players = (unsigned char)*pkt++;
+
+		// Max Players
+		server->max_players = (unsigned char)*pkt++;
+
+		// Dedicated
+		add_rule(server, "dedicated", ( 'd' == *pkt++) ? "1" : "0", 0);
+
+		// OS
+		switch( *pkt )
+		{
+		case 'l':
+			add_rule(server, "sv_os", "linux", 0);
+			break;
+
+		case 'w':
+			add_rule(server, "sv_os", "windows", 0);
+			break;
+
+		default:
+			buf[0] = *pkt;
+			buf[1] = '\0';
+			add_rule(server, "sv_os", buf, 0);
+			break;
+		}
+		pkt++;
+
+		// Passworded
+		add_rule(server, "passworded", ( *pkt++ ) ? "1" : "0" , 0);
+
+		// Anticheat
+		add_rule(server, "passworded", ( *pkt++ ) ? "1" : "0" , 0);
+
+		// FrameTime
+		sprintf( buf, "%hhu", *pkt++ );
+		add_rule(server, "frametime", buf , 0);
+
+		// Round
+		sprintf( buf, "%hhu", *pkt++ );
+		add_rule(server, "round", buf , 0);
+
+		// RoundMax
+		sprintf( buf, "%hhu", *pkt++ );
+		add_rule(server, "roundmax", buf , 0);
+
+		// RoundSeconds
+		tmp_short = ((unsigned short)pkt[0] <<8 ) | ((unsigned short)pkt[1]);
+		sprintf( buf, "%hhu", tmp_short );
+		add_rule(server, "roundseconds", buf , 0);
+		pkt += 2;
+
+		status->have_info = 1;
+
+		server->retry1 = n_retries;
+
+		server->next_player_info = server->num_players;
+
+		break;
+
+	case FL_RULESRESPONSE:
+		if(pktlen < 2) goto out_too_short;
+
+		cnt = ((unsigned char)pkt[0] << 8 ) + ((unsigned char)pkt[1]);
+		pktlen -= 2;
+		pkt += 2;
+
+		debug(3, "num_rules: %d", cnt);
+
+		for(;cnt && pktlen > 0; --cnt)
+		{
+			char* key, *value;
+			str = memchr(pkt, '\0', pktlen);
+			if(!str) break;
+			key = pkt;
+			pktlen -= str-pkt+1;
+			pkt += str-pkt+1;
+
+			str = memchr(pkt, '\0', pktlen);
+			if(!str) break;
+			value = pkt;
+			pktlen -= str-pkt+1;
+			pkt += str-pkt+1;
+
+			add_rule(server, key, value, NO_FLAGS);
+		}
+
+		if(cnt)
+		{
+			malformed_packet(server, "packet contains too few rules, missing %d", cnt);
+			server->missing_rules = 1;
+		}
+		if(pktlen)
+		malformed_packet(server, "garbage at end of rules, %d bytes left", pktlen);
+
+		status->have_rules = 1;
+
+		server->retry1 = n_retries;
+
+		break;
+
+	case FL_PLAYERRESPONSE:
+
+		if(pktlen < 1) goto out_too_short;
+
+		cnt = (unsigned char)pkt[0];
+		pktlen -= 1;
+		pkt += 1;
+
+		debug(3, "num_players: %d", cnt);
+
+		for(;cnt && pktlen > 0; --cnt)
+		{
+			unsigned idx;
+			const char* name;
+			struct player* p;
+
+			// Index
+			idx = *pkt++;
+			--pktlen;
+
+			// PlayerName
+			str = memchr(pkt, '\0', pktlen);
+			if(!str) break;
+			name = pkt;
+			pktlen -= str-pkt+1;
+			pkt += str-pkt+1;
+
+			if(pktlen < 8) goto out_too_short;
+
+			debug(3, "player index %d", idx);
+			p = add_player(server, server->n_player_info);
+			if(p)
+			{
+				union
+				{
+					int i;
+					float fl;
+				} temp;
+
+				p->name = strdup(name);
+
+				// Score
+				p->frags = ntohl( *(unsigned int *)pkt );
+
+				// TimeConnected
+				temp.i = ntohl( *(unsigned int *)(pkt+4) );
+				p->connect_time = temp.fl;
+
+				// Ping
+				p->ping = 0;
+				p->ping = ntohs( *(unsigned int *)(pkt+8) );
+				//((unsigned char*)&p->ping)[0] = pkt[9];
+				//((unsigned char*)&p->ping)[1] = pkt[8];
+
+				// ProfileId
+				//p->profileid = ntohl( *(unsigned int *)pkt+10 );
+
+				// Team
+				p->team = *(pkt+14);
+//fprintf( stderr, "Player: '%s', Frags: %u, Time: %u, Ping: %hu, Team: %d\n", p->name, p->frags,  p->connect_time, p->ping, p->team );
+			}
+			pktlen -= 15;
+			pkt += 15;
+		}
+
+#if 0 // seems to be a rather normal condition
+		if(cnt)
+		{
+			malformed_packet(server, "packet contains too few players, missing %d", cnt);
+		}
+#endif
+		if(pktlen)
+		malformed_packet(server, "garbage at end of player info, %d bytes left", pktlen);
+
+		status->have_player = 1;
+
+		server->retry1 = n_retries;
+
+		break;
+
+	default:
+		malformed_packet(server, "invalid packet id %hhx", *--pkt);
+		return PKT_ERROR;
+	}
+
+	if(
+		(!get_player_info || (get_player_info && status->have_player)) &&
+		(!get_server_rules || (get_server_rules && status->have_rules))
+	)
+	{
+		server->next_rule = NULL;
+	}
+
+	return DONE_AUTO;
+
+out_too_short:
+	malformed_packet(server, "packet too short");
+
+	return PKT_ERROR;
+}
+
+// vim: sw=4 ts=4 noet
diff -urP qstat-2.11/fl.h qstat-2.11-20080912svn311/fl.h
--- qstat-2.11/fl.h	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/fl.h	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,19 @@
+/*
+ * qstat 2.8
+ * by Steve Jankowski
+ *
+ * Frontlines-Fuel of War protocol
+ * Copyright 2008 Steven Hartland
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ */
+#ifndef QSTAT_FL_H
+#define QSTAT_FL_H
+
+#include "qserver.h"
+
+int send_fl_request_packet(struct qserver *server);
+int send_fl_rule_request_packet(struct qserver *server);
+int deal_with_fl_packet(struct qserver *server, char *rawpkt, int pktlen);
+
+#endif
diff -urP qstat-2.11/gitmktar qstat-2.11-20080912svn311/gitmktar
--- qstat-2.11/gitmktar	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/gitmktar	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# make snapshot tar archive from git-svn repo
+#
+NAME=qstat
+VERSION=2.11
+LAST_COMMIT=(`git-rev-list --timestamp HEAD^..HEAD`)
+DATE=`date +%Y%m%d%H%M -d "1970-01-01 00:00 UTC $LAST_COMMIT seconds"`
+fn=$NAME-${VERSION}_$DATE.tar.bz2
+git archive --prefix=$NAME-${VERSION}_$DATE/ HEAD | bzip2 > $fn
+echo "version ${VERSION}_$DATE -> $fn"
diff -urP qstat-2.11/gnuconfig.h.in qstat-2.11-20080912svn311/gnuconfig.h.in
--- qstat-2.11/gnuconfig.h.in	2006-10-28 08:37:30.000000000 -0400
+++ qstat-2.11-20080912svn311/gnuconfig.h.in	2008-09-12 15:00:25.000000000 -0400
@@ -3,6 +3,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `efence' library (-lefence). */
+#undef HAVE_LIBEFENCE
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
diff -urP qstat-2.11/gps.c qstat-2.11-20080912svn311/gps.c
--- qstat-2.11/gps.c	2006-06-09 11:30:11.000000000 -0400
+++ qstat-2.11-20080912svn311/gps.c	2008-09-12 14:52:23.000000000 -0400
@@ -59,13 +59,13 @@
     return 0;
 }
 
-void send_gps_request_packet( struct qserver *server )
+int send_gps_request_packet( struct qserver *server )
 {
-    send_packet( server, server->type->status_packet, server->type->status_len );
+	return send_packet( server, server->type->status_packet, server->type->status_len );
 }
 
 
-void deal_with_gps_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_gps_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
 	char *s, *key, *value, *end;
 	struct player *player = NULL;
@@ -465,6 +465,8 @@
 		( server->num_players < 0 && id_minor >= 3)
 	)
 	{
-		cleanup_qserver( server, 1);
+		return DONE_FORCE;
 	}
+
+	return INPROGRESS;
 }
diff -urP qstat-2.11/gps.h qstat-2.11-20080912svn311/gps.h
--- qstat-2.11/gps.h	2005-06-20 08:43:46.000000000 -0400
+++ qstat-2.11-20080912svn311/gps.h	2008-09-12 14:52:23.000000000 -0400
@@ -13,8 +13,8 @@
 #include "qserver.h"
 
 // Packet processing methods
-void deal_with_gps_packet( struct qserver *server, char *pkt, int pktlen );
-void send_gps_request_packet( struct qserver *server );
+int deal_with_gps_packet( struct qserver *server, char *pkt, int pktlen );
+int send_gps_request_packet( struct qserver *server );
 
 #endif
 
diff -urP qstat-2.11/gs2.c qstat-2.11-20080912svn311/gs2.c
--- qstat-2.11/gs2.c	2006-08-24 14:52:25.000000000 -0400
+++ qstat-2.11-20080912svn311/gs2.c	2008-09-12 14:52:23.000000000 -0400
@@ -20,7 +20,7 @@
 #include "qstat.h"
 #include "packet_manip.h"
 
-void send_gs2_request_packet( struct qserver *server )
+int send_gs2_request_packet( struct qserver *server )
 {
 	// The below should work but seems to make no difference to what some
 	// servers send
@@ -35,13 +35,13 @@
 		server->type->status_packet[9] = 0x00;
 	}
 
-	send_packet( server, server->type->status_packet, server->type->status_len );
+	return send_packet( server, server->type->status_packet, server->type->status_len );
 }
 
 
 // See the following for protocol details:
 // http://dev.kquery.com/index.php?article=42
-void deal_with_gs2_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_gs2_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
 	char *ptr = rawpkt;
 	char *end = rawpkt + pktlen;
@@ -57,8 +57,7 @@
 	if ( pktlen < 15 )
 	{
 		// invalid packet?
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	server->n_servers++;
@@ -95,8 +94,7 @@
 			{
 				malformed_packet( server, "no player headers" );
 			}
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 		ptr += var_len + 1;
 
@@ -125,6 +123,11 @@
 		{
 			server->map_name = strdup( val );
 		}
+		else if( 0 == strcmp( var, "map" ) )
+		{
+			// For BF2MC compatibility
+			server->map_name = strdup( val );
+		}
 		else if( 0 == strcmp( var, "maxplayers" ) )
 		{
 			server->max_players = atoi( val );
@@ -154,8 +157,7 @@
 		// no more info should be player headers here as we
 		// requested it
 		malformed_packet( server, "no player headers" );
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	// player info header
@@ -169,8 +171,7 @@
 	if ( ptr >= end )
 	{
 		malformed_packet( server, "no player headers" );
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	while ( 1 == type && ptr < end )
@@ -188,8 +189,7 @@
 			{
 				free( headers );
 			}
-			cleanup_qserver( server, 1);
-			return;
+			return MEM_ERROR;
 		}
 
 		headers = tmpp;
@@ -211,8 +211,7 @@
 		// no more info should be player info here as we
 		// requested it
 		malformed_packet( server, "no players" );
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	while( 2 == type && ptr < end )
@@ -225,8 +224,7 @@
 			if ( 0 != no_players )
 			{
 				malformed_packet( server, "no players" );
-				cleanup_qserver( server, 1);
-				return;
+				return PKT_ERROR;
 			}
 		}
 		else
@@ -242,8 +240,7 @@
 				if ( ptr >= end )
 				{
 					malformed_packet( server, "short player detail" );
-					cleanup_qserver( server, 1);
-					return;
+					return PKT_ERROR;
 				}
 				val = ptr;
 				val_len = strlen( val );
@@ -292,8 +289,7 @@
 		if ( total_players > no_players )
 		{
 			malformed_packet( server, "to many players %d > %d", total_players, no_players );
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 
 		// check for end of player info
@@ -302,8 +298,7 @@
 			if ( total_players != no_players )
 			{
 				malformed_packet( server, "bad number of players %d != %d", total_players, no_players );
-				cleanup_qserver( server, 1);
-				return;
+				return PKT_ERROR;
 			}
 			type = 3;
 			ptr++;
@@ -315,8 +310,7 @@
 		// no more info should be team info here as we
 		// requested it
 		malformed_packet( server, "no teams" );
-		cleanup_qserver( server, 1 );
-		return;
+		return PKT_ERROR;
 	}
 
 	no_teams = (unsigned char)*ptr;
@@ -340,8 +334,7 @@
 			{
 				free( headers );
 			}
-			cleanup_qserver( server, 1);
-			return;
+			return MEM_ERROR;
 		}
 
 		headers = tmpp;
@@ -362,8 +355,7 @@
 		// no more info should be team info here as we
 		// requested it
 		malformed_packet( server, "no teams" );
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 
 	while( 4 == type && ptr < end )
@@ -378,8 +370,7 @@
 			if ( ptr >= end )
 			{
 				malformed_packet( server, "short team detail" );
-				cleanup_qserver( server, 1);
-				return;
+				return PKT_ERROR;
 			}
 			val = ptr;
 			val_len = strlen( val );
@@ -398,11 +389,9 @@
 		if ( total_teams > no_teams )
 		{
 			malformed_packet( server, "to many teams" );
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 	}
 
-	cleanup_qserver( server, 1);
-	return;
+	return DONE_FORCE;
 }
diff -urP qstat-2.11/gs2.h qstat-2.11-20080912svn311/gs2.h
--- qstat-2.11/gs2.h	2005-06-12 08:41:52.000000000 -0400
+++ qstat-2.11-20080912svn311/gs2.h	2008-09-12 14:52:23.000000000 -0400
@@ -13,8 +13,8 @@
 #include "qserver.h"
 
 // Packet processing methods
-void deal_with_gs2_packet( struct qserver *server, char *pkt, int pktlen );
-void send_gs2_request_packet( struct qserver *server );
+int deal_with_gs2_packet( struct qserver *server, char *pkt, int pktlen );
+int send_gs2_request_packet( struct qserver *server );
 
 #endif
 
diff -urP qstat-2.11/gs3.c qstat-2.11-20080912svn311/gs3.c
--- qstat-2.11/gs3.c	2006-08-15 15:38:38.000000000 -0400
+++ qstat-2.11-20080912svn311/gs3.c	2008-09-12 14:52:23.000000000 -0400
@@ -51,7 +51,7 @@
 //	query: [0xFE][0xFD][0x00][0x.. 4-byte-instance][0xb3412b5a "-1287574694"]
 //
 
-void deal_with_gs3_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_gs3_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
 	char *ptr = rawpkt;
 	unsigned int pkt_id;
@@ -59,14 +59,48 @@
 	unsigned char flag;
 	unsigned int pkti, final;
 
-	debug( 2, "packet..." );
+	debug( 2, "packet n_requests %d, retry1 %d, n_retries %d, delta %d", server->n_requests, server->retry1, n_retries, time_delta( &packet_recv_time, &server->packet_time1 ) );
+	server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
+
+	if ( 7 == pktlen && 0x09 == *ptr )
+	{
+		// gs4 query sent to a gs3 server
+		// switch protocols and try again
+
+		// Correct the stats due to two phase protocol
+		int i;
+		server_type *gs3_type = &builtin_types[49];
+		debug( 3, "Attempting gs3 fallback from gs4" );
+		server->retry1++;
+		if ( GAMESPY3_PROTOCOL_SERVER != gs3_type->id )
+		{
+			// Static coding failure do it the hard way
+			debug( 1, "gs3 static lookup failure, using dynamic lookup" );
+			for( i = 0; i < GAMESPY3_PROTOCOL_SERVER; i++ )
+			{
+				if ( GAMESPY3_PROTOCOL_SERVER == builtin_types[i].id )
+				{
+					// found it
+					gs3_type = &builtin_types[i];
+					i = GAMESPY3_PROTOCOL_SERVER;
+				}
+			}
+
+			if ( GAMESPY3_PROTOCOL_SERVER != gs3_type->id )
+			{
+				malformed_packet( server, "GS3 protocol not found" );
+				return PKT_ERROR;
+			}
+		}
+		server->type = gs3_type;
+		return send_gs3_request_packet( server );
+	}
 
 	if ( pktlen < 12 )
 	{
 		// invalid packet?
 		malformed_packet( server, "too short" );
-		cleanup_qserver( server, 1 );
-		return;
+		return PKT_ERROR;
 	}
 
 	if ( 0x09 == *ptr )
@@ -78,39 +112,19 @@
 		memcpy( &pkt_id, ptr, 4 );
 		ptr += 4;
 		server->challenge = atoi( ptr );
-
-		// Correct the stats due to two phase protocol
 		server->retry1++;
-		server->n_packets--;
-		if ( server->retry1 == n_retries || server->flags & FLAG_BROADCAST )
-		{
-			server->n_requests--;
-		}
-		else
-		{
-			server->n_retries--;
-		}
-		send_gs3_request_packet( server );
-		return;
+
+		return send_gs3_request_packet( server );
 	}
 
 	if ( 0x00 != *ptr )
 	{
 		malformed_packet( server, "bad initial byte '%hhx'", *ptr );
-		cleanup_qserver( server, 1 );
-		return;
+		return PKT_ERROR;
 	}
 	ptr++;
 
 	server->n_servers++;
-	if ( server->server_name == NULL )
-	{
-		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
-	}
-	else
-	{
-		gettimeofday( &server->packet_time1, NULL);
-	}
 
 	// Could check the header here should
 	// match the 4 byte id sent
@@ -123,14 +137,12 @@
 		if ( server->flags & TF_STATUS_QUERY )
 		{
 			// we have the status response
-			deal_with_gs3_status( server, ptr, pktlen - ( ptr - rawpkt )  );
-			return;
+			return deal_with_gs3_status( server, ptr, pktlen - ( ptr - rawpkt )  );
 		}
 		else
 		{
 			malformed_packet( server, "missing splitnum" );
-			cleanup_qserver( server, 1 );
-			return;
+			return PKT_ERROR;
 		}
 	}
 	ptr += 9;
@@ -167,20 +179,18 @@
 		if ( ! add_packet( server, pkt_id, pkt_index, pkt_max, pktlen, rawpkt, 1 ) )
 		{
 			// fatal error e.g. out of memory
-			return;
+			return MEM_ERROR;
 		}
 
 		// combine_packets will call us recursively
-		combine_packets( server );
-		return;
+		return combine_packets( server );
 	}
 
 	// if we get here we have what should be a full packet
-	process_gs3_packet( server );
-	return;
+	return process_gs3_packet( server );
 }
 
-void deal_with_gs3_status( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_gs3_status( struct qserver *server, char *rawpkt, int pktlen )
 {
 	char *pkt = rawpkt;
 	debug( 1, "status packet" );
@@ -194,8 +204,90 @@
 	pkt += strlen( pkt ) + 1;
 
 	// map
-	server->map_name = strdup( pkt );
-	pkt += strlen( pkt ) + 1;
+	// UT3 retail compatibility
+	if ( 0 == strncmp( pkt, "OwningPlayerId", 13 ) )
+	{
+		char *end = pkt + strlen( pkt ) + 1;
+		char *var = pkt;
+		while ( NULL != var )
+		{
+			char *next;
+			char *val = strstr( var, "=" );
+			*val = '\0';
+			val++;
+			next = strstr( val, "," );
+			if ( NULL != next )
+			{
+				*next = '\0';
+				next++;
+			}
+
+			if ( 0 == strcmp( var, "mapname" ) )
+			{
+				if ( server->map_name )
+				{
+					free( server->map_name );
+				}
+				server->map_name = strdup( val );
+			}
+			else if ( 0 == strcmp( var, "p1073741825" ) )
+			{
+				if ( server->map_name )
+				{
+					free( server->map_name );
+				}
+				server->map_name = strdup( val );
+			}
+			else if ( 0 == strcmp( var, "p1073741826" ) )
+			{
+				add_rule( server, "gametype", val, OVERWITE_DUPLICATES );
+			}
+			else if ( 0 == strcmp( var, "p268435705" ) )
+			{
+				add_rule( server, "timelimit", val, OVERWITE_DUPLICATES );
+			}
+			else if ( 0 == strcmp( var, "p1073741827" ) )
+			{
+				add_rule( server, "description", val, OVERWITE_DUPLICATES );
+#ifndef UT3_PATCHED
+				if ( 0 != strlen( val ) )
+				{
+					if ( server->server_name )
+					{
+						char *name = (char*)realloc( server->server_name, strlen( server->server_name ) + strlen( val ) + 3 );
+						if ( name )
+						{
+							strcat( name, ": " );
+							strcat( name, val );
+							server->server_name = name;
+						}
+					}
+					server->server_name = strdup( val );
+				}
+#endif
+			}
+			else if ( 0 == strcmp( var, "p268435704" ) )
+			{
+				add_rule( server, "goalscore", val, OVERWITE_DUPLICATES );
+			}
+			else if ( 0 == strcmp( var, "s32779" ) )
+			{
+				add_rule( server, "gamemode", val, OVERWITE_DUPLICATES );
+			}
+			else
+			{
+				add_rule( server, var, val, OVERWITE_DUPLICATES );
+			}
+
+			var = next;
+		}
+		pkt = end;
+	}
+	else
+	{
+		server->map_name = strdup( pkt );
+		pkt += strlen( pkt ) + 1;
+	}
 
 	// num players
 	server->num_players = atoi( pkt );
@@ -209,7 +301,7 @@
 	change_server_port( server, atoi( pkt ), 0 );
 	pkt += strlen( pkt ) + 1;
 
-	cleanup_qserver( server, 1 );
+	return DONE_FORCE;
 }
 
 int process_gs3_packet( struct qserver *server )
@@ -236,8 +328,7 @@
 		{
 			// invalid packet?
 			malformed_packet( server, "too short" );
-			cleanup_qserver( server, 1 );
-			return 0;
+			return PKT_ERROR;
 		}
 
 		// skip over the header
@@ -267,8 +358,7 @@
 			if ( ptr + 1 > end )
 			{
 				malformed_packet( server, "no rule value" );
-				cleanup_qserver( server, 1);
-				return 0;
+				return PKT_ERROR;
 			}
 
 			val = ptr;
@@ -294,6 +384,89 @@
 			}
 			else if( 0 == strcmp( var, "mapname" ) )
 			{
+				// UT3 retail compatibility
+				if ( 0 == strncmp( val, "OwningPlayerId", 13 ) )
+				{
+					var = val;
+					while ( NULL != var )
+					{
+						char *next;
+						char *val = strstr( var, "=" );
+						*val = '\0';
+						val++;
+						next = strstr( val, "," );
+						if ( NULL != next )
+						{
+							*next = '\0';
+							next++;
+						}
+
+						if ( 0 == strcmp( var, "mapname" ) )
+						{
+							if ( server->map_name )
+							{
+								free( server->map_name );
+							}
+							server->map_name = strdup( val );
+						}
+						else if ( 0 == strcmp( var, "p1073741825" ) )
+						{
+							if ( server->map_name )
+							{
+								free( server->map_name );
+							}
+							server->map_name = strdup( val );
+						}
+						else if ( 0 == strcmp( var, "p1073741826" ) )
+						{
+							add_rule( server, "gametype", val, OVERWITE_DUPLICATES );
+						}
+						else if ( 0 == strcmp( var, "p268435705" ) )
+						{
+							add_rule( server, "timelimit", val, OVERWITE_DUPLICATES );
+						}
+						else if ( 0 == strcmp( var, "p1073741827" ) )
+						{
+#ifndef UT3_PATCHED
+							if ( 0 != strlen( val ) )
+							{
+								if ( server->server_name )
+								{
+									char *name = (char*)realloc( server->server_name, strlen( server->server_name ) + strlen( val ) + 3 );
+									if ( name )
+									{
+										strcat( name, ": " );
+										strcat( name, val );
+										server->server_name = name;
+									}
+								}
+								server->server_name = strdup( val );
+							}
+#endif
+						}
+						else if ( 0 == strcmp( var, "p268435704" ) )
+						{
+							add_rule( server, "goalscore", val, OVERWITE_DUPLICATES );
+						}
+						else if ( 0 == strcmp( var, "s32779" ) )
+						{
+							add_rule( server, "gamemode", val, OVERWITE_DUPLICATES );
+						}
+						else
+						{
+							add_rule( server, var, val, OVERWITE_DUPLICATES );
+						}
+						var = next;
+					}
+				}
+				else
+				{
+					server->map_name = strdup( val );
+				}
+			}
+			else if( 0 == strcmp( var, "map" ) )
+			{
+				// BF2MC compatibility
 				server->map_name = strdup( val );
 			}
 			else if( 0 == strcmp( var, "maxplayers" ) )
@@ -308,11 +481,60 @@
 			else if( 0 == strcmp( var, "hostport" ) )
 			{
 				change_server_port( server, atoi( val ), 0 );
-				add_rule( server, var, val, NO_FLAGS );
+			}
+			else if ( 0 == strcmp( var, "p1073741825" ) )
+			{
+				// UT3 demo compatibility
+				if ( server->map_name )
+				{
+					free( server->map_name );
+				}
+				server->map_name = strdup( val );
+			}
+			else if ( 0 == strcmp( var, "p1073741826" ) )
+			{
+				// UT3 demo compatibility
+				add_rule( server, "gametype", val, OVERWITE_DUPLICATES );
+			}
+			else if ( 0 == strcmp( var, "p268435705" ) )
+			{
+				// UT3 demo compatibility
+				add_rule( server, "timelimit", val, OVERWITE_DUPLICATES );
+			}
+			else if ( 0 == strcmp( var, "p1073741827" ) )
+			{
+				// UT3 demo compatibility
+				add_rule( server, "description", val, OVERWITE_DUPLICATES );
+#ifndef UT3_PATCHED
+				if ( 0 != strlen( val ) )
+				{
+					if ( server->server_name )
+					{
+						char *name = (char*)realloc( server->server_name, strlen( server->server_name ) + strlen( val ) + 3 );
+						if ( name )
+						{
+							strcat( name, ": " );
+							strcat( name, val );
+							server->server_name = name;
+						}
+					}
+					server->server_name = strdup( val );
+				}
+#endif
+			}
+			else if ( 0 == strcmp( var, "p268435704" ) )
+			{
+				// UT3 demo compatibility
+				add_rule( server, "goalscore", val, OVERWITE_DUPLICATES );
+			}
+			else if ( 0 == strcmp( var, "s32779" ) )
+			{
+				// UT3 demo compatibility
+				add_rule( server, "gamemode", val, OVERWITE_DUPLICATES );
 			}
 			else
 			{
-				add_rule( server, var, val, NO_FLAGS );
+				add_rule( server, var, val, OVERWITE_DUPLICATES );
 			}
 		}
 
@@ -328,8 +550,7 @@
 			{
 				// no more info
 				debug( 3, "All done" );
-				cleanup_qserver( server, 1 );
-				return 1;
+				return DONE_FORCE;
 			}
 
 			debug( 2, "player header '%s'", header );
@@ -337,14 +558,13 @@
 			if ( ptr > end )
 			{
 				malformed_packet( server, "no details for header '%s'", header );
-				cleanup_qserver( server, 1 );
-				return 0;
+				return PKT_ERROR;
 			}
 
 			// the next byte is the starting number
 			total_players = *ptr++;
 
-			if ( 0 == strcmp( header, "player_" ) )
+			if ( 0 == strcmp( header, "player_" ) || 0 == strcmp( header, "name_" ) )
 			{
 				header_type = PLAYER_NAME_HEADER;
 			}
@@ -406,8 +626,7 @@
 				if ( ptr >= end )
 				{
 					malformed_packet( server, "short player detail" );
-					cleanup_qserver( server, 1);
-					return 0;
+					return PKT_ERROR;
 				}
 				val = ptr;
 				val_len = strlen( val );
@@ -462,8 +681,7 @@
 				if ( total_players > no_players )
 				{
 					malformed_packet( server, "to many players %d > %d", total_players, no_players );
-					cleanup_qserver( server, 1 );
-					return 0;
+					return PKT_ERROR;
 				}
 			}
 		}
@@ -489,8 +707,7 @@
 			{
 				// no more info
 				debug( 3, "All done" );
-				cleanup_qserver( server, 1 );
-				return 1;
+				return DONE_FORCE;
 			}
 
 			debug( 2, "team header '%s'", header );
@@ -516,8 +733,7 @@
 				if ( ptr >= end )
 				{
 					malformed_packet( server, "short team detail" );
-					cleanup_qserver( server, 1);
-					return 0;
+					return PKT_ERROR;
 				}
 				val = ptr;
 				val_len = strlen( val );
@@ -552,11 +768,10 @@
 		}
 	}
 
-	cleanup_qserver( server, 1 );
-	return 1;
+	return DONE_FORCE;
 }
 
-void send_gs3_request_packet( struct qserver *server )
+int send_gs3_request_packet( struct qserver *server )
 {
 	char *packet;
 	char query_buf[128];
@@ -615,5 +830,5 @@
 		}
 	}
 
-	send_packet( server, packet, len );
+	return send_packet( server, packet, len );
 }
diff -urP qstat-2.11/gs3.h qstat-2.11-20080912svn311/gs3.h
--- qstat-2.11/gs3.h	2005-07-16 23:45:08.000000000 -0400
+++ qstat-2.11-20080912svn311/gs3.h	2008-09-12 14:52:23.000000000 -0400
@@ -13,8 +13,8 @@
 #include "qserver.h"
 
 // Packet processing methods
-void deal_with_gs3_packet( struct qserver *server, char *pkt, int pktlen );
-void deal_with_gs3_status( struct qserver *server, char *rawpkt, int pktlen );
-void send_gs3_request_packet( struct qserver *server );
+int deal_with_gs3_packet( struct qserver *server, char *pkt, int pktlen );
+int deal_with_gs3_status( struct qserver *server, char *rawpkt, int pktlen );
+int send_gs3_request_packet( struct qserver *server );
 
 #endif
diff -urP qstat-2.11/haze.c qstat-2.11-20080912svn311/haze.c
--- qstat-2.11/haze.c	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/haze.c	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,628 @@
+/*
+ * qstat 2.8
+ * by Steve Jankowski
+ *
+ * New Haze query protocol
+ * Copyright 2005 Steven Hartland
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ *
+ */
+
+#include <sys/types.h>
+#ifndef _WIN32
+#include <netinet/in.h>
+#include <sys/socket.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "debug.h"
+#include "qstat.h"
+#include "packet_manip.h"
+
+
+// Format:
+// 1 - 8: Challenge Request / Response
+char haze_challenge[] = {
+    'f', 'r', 'd', 'c', '_', '_', '_', '_'
+};
+
+int process_haze_packet( struct qserver *server );
+
+// Player headers
+#define PLAYER_NAME_HEADER 1
+#define PLAYER_SCORE_HEADER 2
+#define PLAYER_DEATHS_HEADER 3
+#define PLAYER_PING_HEADER 4
+#define PLAYER_KILLS_HEADER 5
+#define PLAYER_TEAM_HEADER 6
+#define PLAYER_OTHER_HEADER 7
+
+// Team headers
+#define TEAM_NAME_HEADER 1
+#define TEAM_OTHER_HEADER 2
+
+// Challenge response algorithum
+// Before sending a qr2 query (type 0x00) the client must first send a
+// challenge request (type 0x09).  The host will respond with the same
+// packet type containing a string signed integer.
+//
+// Once the challenge is received the client should convert the string to a
+// network byte order integer and embed it in the keys query.
+//
+// Example:
+//
+// 	challenge request: [0xFE][0xFD][0x09][0x.. 4-byte-instance]
+//	challenge response: [0x09][0x.. 4-byte-instance]["-1287574694"]
+//	query: [0xFE][0xFD][0x00][0x.. 4-byte-instance][0xb3412b5a "-1287574694"]
+//
+
+int deal_with_haze_packet( struct qserver *server, char *rawpkt, int pktlen )
+{
+	char *ptr = rawpkt;
+	unsigned int pkt_id;
+	unsigned short len;
+	unsigned char pkt_max, pkt_index;
+
+	debug( 2, "packet..." );
+
+	if ( pktlen < 8 )
+	{
+		// invalid packet
+		malformed_packet( server, "too short" );
+		return PKT_ERROR;
+	}
+
+	if ( 0 == strncmp( ptr, "frdcr", 5 ) )
+	{
+		// challenge response
+		ptr += 8;
+		server->challenge = 1;
+
+		// Correct the stats due to two phase protocol
+		server->retry1++;
+		server->n_packets--;
+		if ( server->retry1 == n_retries || server->flags & FLAG_BROADCAST )
+		{
+			//server->n_requests--;
+		}
+		else
+		{
+			server->n_retries--;
+		}
+		return send_haze_request_packet( server );
+	}
+
+	if ( pktlen < 12 )
+	{
+		// invalid packet
+		malformed_packet( server, "too short" );
+		return PKT_ERROR;
+	}
+
+	server->n_servers++;
+	if ( server->server_name == NULL )
+	{
+		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
+	}
+	else
+	{
+		gettimeofday( &server->packet_time1, NULL);
+	}
+
+	// Query version ID
+	ptr += 4;
+
+	// Could check the header here should
+	// match the 4 byte id sent
+	memcpy( &pkt_id, ptr, 4 );
+	ptr += 4;
+
+
+	// Max plackets
+	pkt_max = ((unsigned char)*ptr);
+	ptr++;
+
+	// Packet ID
+	pkt_index = ((unsigned char)*ptr);
+	ptr++;
+
+	// Query Length
+	//len = (unsigned short)ptr[0] | ((unsigned short)ptr[1] << 8);
+	//len = swap_short_from_little( ptr );
+	debug( 1, "%04hx, %04hx", (unsigned short)ptr[0], ((unsigned short)ptr[1] << 8) );
+	//len = (unsigned short)(unsigned short)ptr[0] | ((unsigned short)ptr[1] << 8);
+	// TODO: fix this crap
+	memcpy( &len, ptr+1, 1 );
+	//memcpy( &len+1, ptr, 1 );
+	//memcpy( &len, ptr, 2 );
+	ptr += 2;
+
+	debug( 1, "pkt_index = %d, pkt_max = %d, len = %d", pkt_index, pkt_max, len );
+	if ( 0 != pkt_max )
+	{
+		// not a single packet response or callback
+		debug( 2, "pkt_max %d", pkt_max );
+
+		if ( 0 == pkt_index )
+		{
+			// to prevent reprocessing when we get the call back
+			// override the packet flag so it looks like a single
+			// packet response
+			rawpkt[8] = '\0';
+		}
+
+		// add the packet recalcing maxes
+		if ( ! add_packet( server, pkt_id, pkt_index, pkt_max, pktlen, rawpkt, 1 ) )
+		{
+			// fatal error e.g. out of memory
+			return MEM_ERROR;
+		}
+
+		// combine_packets will call us recursively
+		return combine_packets( server );
+	}
+
+	// if we get here we have what should be a full packet
+	return process_haze_packet( server );
+}
+
+int deal_with_haze_status( struct qserver *server, char *rawpkt, int pktlen )
+{
+	char *pkt = rawpkt;
+	int len;
+	debug( 1, "status packet" );
+
+
+	// Server name
+	server->server_name = strdup( pkt );
+	pkt += strlen( pkt ) + 1;
+
+	// gametype
+	add_rule( server, "gametype", pkt, NO_FLAGS );
+	pkt += strlen( pkt ) + 1;
+
+	// map
+	len = strlen( pkt );
+	// remove .res from map names
+	if ( 0 == strncmp( pkt + len - 4, ".res", 4 ) )
+	{
+		*(pkt + len - 4) = '\0';
+	}
+	server->map_name = strdup( pkt );
+	pkt += len + 1;
+
+	// num players
+	server->num_players = atoi( pkt );
+	pkt += strlen( pkt ) + 1;
+
+	// max_players
+	server->max_players = atoi( pkt );
+	pkt += strlen( pkt ) + 1;
+
+	// hostport
+	change_server_port( server, atoi( pkt ), 0 );
+	pkt += strlen( pkt ) + 1;
+
+	return DONE_FORCE;
+}
+
+int process_haze_packet( struct qserver *server )
+{
+	unsigned char state = 0;
+	unsigned char no_players = 0;
+	unsigned char total_players = 0;
+	unsigned char no_teams = 0;
+	unsigned char total_teams = 0;
+	int pkt_index = 0;
+	SavedData *fragment;
+
+	debug( 2, "processing packet..." );
+
+	while ( NULL != ( fragment = get_packet_fragment( pkt_index++ ) ) )
+	{
+		int pktlen = fragment->datalen;
+		char *ptr = fragment->data;
+		char *end = ptr + pktlen;
+		debug( 2, "processing fragment[%d]...", fragment->pkt_index );
+
+		// check we have a full header
+		if ( pktlen < 12 )
+		{
+			// invalid packet
+			malformed_packet( server, "too short" );
+			return PKT_ERROR;
+		}
+
+		// skip over the header
+		//server->protocol_version = atoi( val+1 );
+		ptr += 12;
+
+		// 4 * null's signifies the end of a section
+
+		// Basic Info
+		while ( 0 == state && ptr < end )
+		{
+			// name value pairs null seperated
+			char *var, *val;
+			int var_len, val_len;
+
+			if ( ptr+4 <= end && 0x00 == ptr[0] && 0x00 == ptr[1] && 0x00 == ptr[2] && 0x00 == ptr[3] )
+			{
+				// end of rules
+				state++;
+				ptr += 4;
+				break;
+			}
+
+			var = ptr;
+			var_len = strlen( var );
+			ptr += var_len + 1;
+
+			if ( ptr + 1 > end )
+			{
+				malformed_packet( server, "no basic value" );
+				return PKT_ERROR;
+			}
+
+			val = ptr;
+			val_len = strlen( val );
+			ptr += val_len + 1;
+			debug( 2, "var:%s (%d)=%s (%d)\n", var, var_len, val, val_len );
+
+			// Lets see what we've got
+			if ( 0 == strcmp( var, "serverName" ) )
+			{
+				server->server_name = strdup( val );
+			}
+			else if( 0 == strcmp( var, "map" ) )
+			{
+				// remove .res from map names
+				if ( 0 == strncmp( val + val_len - 4, ".res", 4 ) )
+				{
+					*(val + val_len - 4) = '\0';
+				}
+				server->map_name = strdup( val );
+			}
+			else if( 0 == strcmp( var, "maxPlayers" ) )
+			{
+				server->max_players = atoi( val );
+
+			}
+			else if( 0 == strcmp( var, "currentPlayers" ) )
+			{
+				server->num_players = no_players = atoi( val );
+			}
+			else
+			{
+				add_rule( server, var, val, NO_FLAGS );
+			}
+		}
+
+		// rules
+		while ( 1 == state && ptr < end )
+		{
+			// name value pairs null seperated
+			char *var, *val;
+			int var_len, val_len;
+
+			if ( ptr+4 <= end && 0x00 == ptr[0] && 0x00 == ptr[1] && 0x00 == ptr[2] && 0x00 == ptr[3] )
+			{
+				// end of basic
+				state++;
+				ptr += 4;
+				break;
+			}
+			var = ptr;
+			var_len = strlen( var );
+			ptr += var_len + 1;
+
+			if ( ptr + 1 > end )
+			{
+				malformed_packet( server, "no basic value" );
+				return PKT_ERROR;
+			}
+
+			val = ptr;
+			val_len = strlen( val );
+			ptr += val_len + 1;
+			debug( 2, "var:%s (%d)=%s (%d)\n", var, var_len, val, val_len );
+
+			// add the rule
+			add_rule( server, var, val, NO_FLAGS );
+		}
+
+		// players
+		while ( 2 == state && ptr < end )
+		{
+			// first we have the header
+			char *header = ptr;
+			int head_len = strlen( header );
+			ptr += head_len + 1;
+
+			if ( ptr+2 <= end && 0x00 == ptr[0] && 0x00 == ptr[1] )
+			{
+				// end of player headers
+				state++;
+				ptr += 2;
+				break;
+			}
+
+			if ( 0 == head_len )
+			{
+				// no more info
+				debug( 3, "All done" );
+				return DONE_FORCE;
+			}
+
+			debug( 2, "player header '%s'", header );
+
+			if ( ptr > end )
+			{
+				malformed_packet( server, "no details for header '%s'", header );
+				return PKT_ERROR;
+			}
+
+		}
+
+		while ( 3 == state && ptr < end )
+		{
+			char *header = ptr;
+			int head_len = strlen( header );
+			int header_type;
+			// the next byte is the starting number
+			total_players = *ptr++;
+
+			if ( 0 == strcmp( header, "player_" ) || 0 == strcmp( header, "name_" ) )
+			{
+				header_type = PLAYER_NAME_HEADER;
+			}
+			else if ( 0 == strcmp( header, "score_" ) )
+			{
+				header_type = PLAYER_SCORE_HEADER;
+			}
+			else if ( 0 == strcmp( header, "deaths_" ) )
+			{
+				header_type = PLAYER_DEATHS_HEADER;
+			}
+			else if ( 0 == strcmp( header, "ping_" ) )
+			{
+				header_type = PLAYER_PING_HEADER;
+			}
+			else if ( 0 == strcmp( header, "kills_" ) )
+			{
+				header_type = PLAYER_KILLS_HEADER;
+			}
+			else if ( 0 == strcmp( header, "team_" ) )
+			{
+				header_type = PLAYER_TEAM_HEADER;
+			}
+			else
+			{
+				header_type = PLAYER_OTHER_HEADER;
+			}
+
+			while( ptr < end )
+			{
+				// now each player details
+				// add the player
+				struct player *player;
+				char *val;
+				int val_len;
+
+				// check for end of this headers player info
+				if ( 0x00 == *ptr )
+				{
+					debug( 3, "end of '%s' detail", header );
+					ptr++;
+					// Note: can't check ( total_players != no_players ) here as we may have more packets
+					if ( ptr < end && 0x00 == *ptr )
+					{
+						debug( 3, "end of players" );
+						// end of all player headers / detail
+						state = 2;
+						ptr++;
+					}
+					break;
+				}
+
+				player = get_player_by_number( server, total_players );
+				if ( NULL == player )
+				{
+					player = add_player( server, total_players );
+				}
+
+				if ( ptr >= end )
+				{
+					malformed_packet( server, "short player detail" );
+					return PKT_ERROR;
+				}
+				val = ptr;
+				val_len = strlen( val );
+				ptr += val_len + 1;
+
+				debug( 2, "Player[%d][%s]=%s\n", total_players, header, val );
+
+				// lets see what we got
+				switch( header_type )
+				{
+				case PLAYER_NAME_HEADER:
+					player->name = strdup( val );
+					break;
+
+				case PLAYER_SCORE_HEADER:
+					player->score = atoi( val );
+					break;
+
+				case PLAYER_DEATHS_HEADER:
+					player->deaths = atoi( val );
+					break;
+
+				case PLAYER_PING_HEADER:
+					player->ping = atoi( val );
+					break;
+
+				case PLAYER_KILLS_HEADER:
+					player->frags = atoi( val );
+					break;
+
+				case PLAYER_TEAM_HEADER:
+					player->team = atoi( val );
+					break;
+
+				case PLAYER_OTHER_HEADER:
+				default:
+					if ( '_' == header[head_len-1] )
+					{
+						header[head_len-1] = '\0';
+						player_add_info( player, header, val, NO_FLAGS );
+						header[head_len-1] = '_';
+					}
+					else
+					{
+						player_add_info( player, header, val, NO_FLAGS );
+					}
+					break;
+				}
+
+				total_players++;
+
+				if ( total_players > no_players )
+				{
+					malformed_packet( server, "to many players %d > %d", total_players, no_players );
+					return PKT_ERROR;
+				}
+			}
+		}
+
+		if ( 3 == state )
+		{
+			no_teams = (unsigned char)*ptr;
+			ptr++;
+
+			debug( 2, "No teams:%d\n", no_teams );
+			state = 3;
+		}
+
+		while ( 4 == state && ptr < end )
+		{
+			// first we have the header
+			char *header = ptr;
+			int head_len = strlen( header );
+			int header_type;
+			ptr += head_len + 1;
+
+			if ( 0 == head_len )
+			{
+				// no more info
+				debug( 3, "All done" );
+				return DONE_FORCE;
+			}
+
+			debug( 2, "team header '%s'", header );
+			if ( 0 == strcmp( header, "team_t" ) )
+			{
+				header_type = TEAM_NAME_HEADER;
+			}
+			else
+			{
+				header_type = TEAM_OTHER_HEADER;
+			}
+
+			// the next byte is the starting number
+			total_teams = *ptr++;
+
+			while( ptr < end )
+			{
+				// now each teams details
+				char *val;
+				int val_len;
+				char rule[512];
+
+				if ( ptr >= end )
+				{
+					malformed_packet( server, "short team detail" );
+					return PKT_ERROR;
+				}
+				val = ptr;
+				val_len = strlen( val );
+				ptr += val_len + 1;
+
+				debug( 2, "Team[%d][%s]=%s\n", total_teams, header, val );
+
+				// lets see what we got
+				switch ( header_type )
+				{
+				case TEAM_NAME_HEADER:
+					// BF being stupid again teams 1 based instead of 0
+					players_set_teamname( server, total_teams + 1, val );
+					// N.B. yes no break
+
+				case TEAM_OTHER_HEADER:
+				default:
+					// add as a server rule
+					sprintf( rule, "%s%d", header, total_teams );
+					add_rule( server, rule, val, NO_FLAGS );
+					break;
+				}
+
+				total_teams++;
+				if ( 0x00 == *ptr )
+				{
+					// end of this headers teams
+					ptr++;
+					break;
+				}
+			}
+		}
+	}
+
+	return DONE_FORCE;
+}
+
+int send_haze_request_packet( struct qserver *server )
+{
+	char *packet;
+	char query_buf[128];
+	size_t len;
+	unsigned char required = HAZE_BASIC_INFO;
+
+	if ( get_server_rules )
+	{
+		required |= HAZE_GAME_RULES;
+		server->flags |= TF_PLAYER_QUERY;
+	}
+
+	if ( get_player_info )
+	{
+		required |= HAZE_PLAYER_INFO;
+		required |= HAZE_TEAM_INFO;
+		server->flags |= TF_RULES_QUERY;
+	}
+
+	server->flags |= TF_STATUS_QUERY;
+
+	if ( server->challenge )
+	{
+		// we've recieved a challenge response, send the query + challenge id
+		len = sprintf(
+			query_buf,
+			"frdquery%c%c%c%c%c",
+			(unsigned char)(server->challenge >> 24),
+			(unsigned char)(server->challenge >> 16),
+			(unsigned char)(server->challenge >> 8),
+			(unsigned char)(server->challenge >> 0),
+			required
+		);
+		packet = query_buf;
+	}
+	else
+	{
+		// Either basic v3 protocol or challenge request
+		packet = haze_challenge;
+		len = sizeof( haze_challenge );
+	}
+
+	return send_packet( server, packet, len );
+}
diff -urP qstat-2.11/haze.h qstat-2.11-20080912svn311/haze.h
--- qstat-2.11/haze.h	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/haze.h	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,27 @@
+/*
+ * qstat 2.8
+ * by Steve Jankowski
+ *
+ * New Haze query protocol
+ * Copyright 2007 Steven Hartland
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ */
+#ifndef QSTAT_HAZE_H
+#define QSTAT_HAZE_H
+
+
+#include "qserver.h"
+
+#define HAZE_BASIC_INFO 0x01
+#define HAZE_GAME_RULES 0x02
+#define HAZE_PLAYER_INFO 0x04
+#define HAZE_TEAM_INFO 0x08
+
+// Packet processing methods
+int deal_with_haze_packet( struct qserver *server, char *pkt, int pktlen );
+int deal_with_haze_status( struct qserver *server, char *rawpkt, int pktlen );
+int send_haze_request_packet( struct qserver *server );
+
+
+#endif
diff -urP qstat-2.11/info/.cvsignore qstat-2.11-20080912svn311/info/.cvsignore
--- qstat-2.11/info/.cvsignore	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/info/.cvsignore	2008-09-12 14:52:21.000000000 -0400
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff -urP qstat-2.11/info/Makefile.in qstat-2.11-20080912svn311/info/Makefile.in
--- qstat-2.11/info/Makefile.in	2006-11-04 07:59:01.000000000 -0500
+++ qstat-2.11-20080912svn311/info/Makefile.in	2008-09-12 15:00:26.000000000 -0400
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,6 +13,7 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
+
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -20,6 +21,7 @@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = ..
+
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -33,20 +35,7 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-build_triplet = @build@
 host_triplet = @host@
-subdir = info
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/gnuconfig.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -68,6 +57,7 @@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+GREP = @GREP@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -90,14 +80,11 @@
 STRIP = @STRIP@
 VERSION = @VERSION@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_STRIP = @ac_ct_STRIP@
 am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
 am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -105,60 +92,49 @@
 build_os = @build_os@
 build_vendor = @build_vendor@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 EXTRA_DIST = $(wildcard *.txt)
+subdir = info
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/gnuconfig.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
 all: all-am
 
 .SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  info/Makefile'; \
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 	cd $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign  info/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 uninstall-info-am:
 tags: TAGS
 TAGS:
@@ -166,6 +142,10 @@
 ctags: CTAGS
 CTAGS:
 
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@@ -179,7 +159,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -197,6 +177,7 @@
 check-am: all-am
 check: check-am
 all-am: Makefile
+
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -217,7 +198,7 @@
 clean-generic:
 
 distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -234,8 +215,6 @@
 
 dvi-am:
 
-html: html-am
-
 info: info-am
 
 info-am:
@@ -269,8 +248,8 @@
 uninstall-am: uninstall-info-am
 
 .PHONY: all all-am check check-am clean clean-generic distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-exec \
+	distclean-generic distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
 	install-exec-am install-info install-info-am install-man \
 	install-strip installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
diff -urP qstat-2.11/install-sh qstat-2.11-20080912svn311/install-sh
--- qstat-2.11/install-sh	2006-04-22 20:59:37.000000000 -0400
+++ qstat-2.11-20080912svn311/install-sh	2007-09-18 10:10:46.000000000 -0400
@@ -1,8 +1,7 @@
 #!/bin/sh
+#
 # install - install a program, script, or datafile
-
-scriptversion=2005-05-14.22
-
+#
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
 # following copyright and license.
@@ -42,11 +41,13 @@
 # from scratch.  It can only install one file at a time, a restriction
 # shared with many OS's install programs.
 
+
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
 doit="${DOITPROG-}"
 
+
 # put in absolute paths if you don't have them in your path; or use env. vars.
 
 mvprog="${MVPROG-mv}"
@@ -58,266 +59,236 @@
 rmprog="${RMPROG-rm}"
 mkdirprog="${MKDIRPROG-mkdir}"
 
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
 chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
 rmcmd="$rmprog -f"
 mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c         (ignored)
--d         create directories instead of installing files.
--g GROUP   $chgrpprog installed files to GROUP.
--m MODE    $chmodprog installed files to MODE.
--o USER    $chownprog installed files to USER.
--s         $stripprog installed files.
--t DIRECTORY  install into DIRECTORY.
--T         report an error if DSTFILE is a directory.
---help     display this help and exit.
---version  display version info and exit.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
-  case $1 in
-    -c) shift
-        continue;;
-
-    -d) dir_arg=true
-        shift
-        continue;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) chmodcmd="$chmodprog $2"
-        shift
-        shift
-        continue;;
-
-    -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
-
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd=$cpprog
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd=$stripprog
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
 
-    -t) dstarg=$2
-	shift
-	shift
-	continue;;
+if [ x"$src" = x ]
+then
+	echo "$0: no input file specified" >&2
+	exit 1
+else
+	:
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+
+	if [ -d "$dst" ]; then
+		instcmd=:
+		chmodcmd=""
+	else
+		instcmd=$mkdirprog
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f "$src" ] || [ -d "$src" ]
+	then
+		:
+	else
+		echo "$0: $src does not exist" >&2
+		exit 1
+	fi
+
+	if [ x"$dst" = x ]
+	then
+		echo "$0: no destination specified" >&2
+		exit 1
+	else
+		:
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d "$dst" ]
+	then
+		dst=$dst/`basename "$src"`
+	else
+		:
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+	'
+IFS="${IFS-$defaultIFS}"
+
+oIFS=$IFS
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS=$oIFS
 
-    -T) no_target_directory=true
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp=$pathcomp$1
 	shift
-	continue;;
 
-    --version) echo "$0 $scriptversion"; exit $?;;
+	if [ ! -d "$pathcomp" ] ;
+        then
+		$mkdirprog "$pathcomp"
+	else
+		:
+	fi
 
-    *)  # When -d is used, all remaining arguments are directories to create.
-	# When -t is used, the destination is already specified.
-	test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-	for arg
-	do
-          if test -n "$dstarg"; then
-	    # $@ is not empty: it contains at least $arg.
-	    set fnord "$@" "$dstarg"
-	    shift # fnord
-	  fi
-	  shift # arg
-	  dstarg=$arg
-	done
-	break;;
-  esac
+	pathcomp=$pathcomp/
 done
-
-if test -z "$1"; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call `install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
 fi
 
-for src
-do
-  # Protect names starting with `-'.
-  case $src in
-    -*) src=./$src ;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    src=
-
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
-  else
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dstarg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-
-    dst=$dstarg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst ;;
-    esac
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd "$dst" &&
 
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dstarg: Is a directory" >&2
-	exit 1
-      fi
-      dst=$dst/`basename "$src"`
-    fi
-  fi
-
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
-  # Make sure that the destination directory exists.
-
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-	 '
-    IFS="${IFS-$defaultIFS}"
-
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
-
-    pathcomp=
-
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
-      shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-	# mkdir can fail with a `File exist' error in case several
-	# install-sh are creating the directory concurrently.  This
-	# is OK.
-	test -d "$pathcomp" || exit
-      fi
-      pathcomp=$pathcomp/
-    done
-  fi
-
-  if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
-  else
-    dstfile=`basename "$dst"`
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-    trap '(exit $?); exit' 1 2 13 15
-
-    # Copy the file name to the temp name.
-    $doit $cpprog "$src" "$dsttmp" &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
-    # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
-      || {
-	   # The rename failed, perhaps because mv can't rename something else
-	   # to itself, or perhaps because mv is so ancient that it does not
-	   # support -f.
-
-	   # Now remove or move aside any old file at destination location.
-	   # We try this two ways since rm can't unlink itself on some
-	   # systems and the destination file might be busy for other
-	   # reasons.  In this case, the final cleanup might fail but the new
-	   # file should still install successfully.
-	   {
-	     if test -f "$dstdir/$dstfile"; then
-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-	       || {
-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-		 (exit 1); exit 1
-	       }
-	     else
-	       :
-	     fi
-	   } &&
-
-	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-	 }
-    }
-  fi || { (exit 1); exit 1; }
-done
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ]
+	then
+		dstfile=`basename "$dst"`
+	else
+		dstfile=`basename "$dst" $transformbasename |
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ]
+	then
+		dstfile=`basename "$dst"`
+	else
+		:
+	fi
+
+# Make a couple of temp file names in the proper directory.
+
+	dsttmp=$dstdir/_inst.$$_
+	rmtmp=$dstdir/_rm.$$_
+
+# Trap to clean up temp files at exit.
+
+	trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+	trap '(exit $?); exit' 1 2 13 15
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd "$src" "$dsttmp" &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location.  We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons.  In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+	if [ -f "$dstdir/$dstfile" ]
+	then
+		$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+		$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+		{
+		  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		  (exit 1); exit
+		}
+	else
+		:
+	fi
+} &&
+
+# Now rename the file to the real destination.
+
+	$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+
+fi &&
 
 # The final little trick to "correctly" pass the exit status to the exit trap.
+
 {
-  (exit 0); exit 0
+	(exit 0); exit
 }
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff -urP qstat-2.11/LICENSE.txt qstat-2.11-20080912svn311/LICENSE.txt
--- qstat-2.11/LICENSE.txt	2002-11-13 21:33:54.000000000 -0500
+++ qstat-2.11-20080912svn311/LICENSE.txt	2008-09-12 14:52:23.000000000 -0400
@@ -1,130 +1,201 @@
-The Artistic License
+		       The Artistic License 2.0
+
+	    Copyright (c) 2000-2006, The Perl Foundation.
+
+     Everyone is permitted to copy and distribute verbatim copies
+      of this license document, but changing it is not allowed.
 
 Preamble
-    The intent of this document is to state the conditions
-    under which a Package may be copied, such that the
-    Copyright Holder maintains some semblance of artistic
-    control over the development of the package, while
-    giving the users of the package the right to use and
-    distribute the Package in a more-or-less customary
-    fashion, plus the right to make reasonable modifications.
-
-Definitions:
-      "Package" refers to the collection of files
-      distributed by the Copyright Holder, and derivatives
-      of that collection of files created through textual
-      modification.
-
-      "Standard Version" refers to such a Package if it has
-      not been modified, or has been modified in accordance
-      with the wishes of the Copyright Holder.
-
-      "Copyright Holder" is whoever is named in the
-      copyright or copyrights for the package.
-
-      "You" is you, if you're thinking about copying or
-      distributing this Package.
-
-      "Reasonable copying fee" is whatever you can justify
-      on the basis of media cost, duplication charges, time
-      of people involved, and so on. (You will not be
-      required to justify it to the Copyright Holder, but
-      only to the computing community at large as a market
-      that must bear the fee.)
-
-      "Freely Available" means that no fee is charged for
-      the item itself, though there may be fees involved in
-      handling the item. It also means that recipients of
-      the item may redistribute it under the same conditions
-      they received it.
-
-    1. You may make and give away verbatim copies of the
-    source form of the Standard Version of this Package
-    without restriction, provided that you duplicate all of
-    the original copyright notices and associated
-    disclaimers.
-
-    2. You may apply bug fixes, portability fixes and other
-    modifications derived from the Public Domain or from the
-    Copyright Holder. A Package modified in such a way shall
-    still be considered the Standard Version.
-
-    3. You may otherwise modify your copy of this Package in
-    any way, provided that you insert a prominent notice in
-    each changed file stating how and when you changed that
-    file, and provided that you do at least ONE of the
-    following:
-
-      a) place your modifications in the Public Domain or
-      otherwise make them Freely Available, such as by
-      posting said modifications to Usenet or an equivalent
-      medium, or placing the modifications on a major
-      archive site such as ftp.uu.net, or by allowing the
-      Copyright Holder to include your modifications in the
-      Standard Version of the Package.
-
-      b) use the modified Package only within your
-      corporation or organization.
-
-      c) rename any non-standard executables so the names do
-      not conflict with standard executables, which must
-      also be provided, and provide a separate manual page
-      for each non-standard executable that clearly
-      documents how it differs from the Standard Version.
-
-      d) make other distribution arrangements with the
-      Copyright Holder.
-
-    4. You may distribute the programs of this Package in
-    object code or executable form, provided that you do at
-    least ONE of the following:
-
-      a) distribute a Standard Version of the executables
-      and library files, together with instructions (in the
-      manual page or equivalent) on where to get the
-      Standard Version.
-
-      b) accompany the distribution with the
-      machine-readable source of the Package with your
-      modifications.
-
-      c) accompany any non-standard executables with their
-      corresponding Standard Version executables, giving the
-      non-standard executables non-standard names, and
-      clearly documenting the differences in manual pages
-      (or equivalent), together with instructions on where
-      to get the Standard Version.
-
-      d) make other distribution arrangements with the
-      Copyright Holder.
-
-    5. You may charge a reasonable copying fee for any
-    distribution of this Package. You may charge any fee you
-    choose for support of this Package. You may not charge a
-    fee for this Package itself. However, you may distribute
-    this Package in aggregate with other (possibly
-    commercial) programs as part of a larger (possibly
-    commercial) software distribution provided that you do
-    not advertise this Package as a product of your own.
-
-    6. The scripts and library files supplied as input to or
-    produced as output from the programs of this Package do
-    not automatically fall under the copyright of this
-    Package, but belong to whomever generated them, and may
-    be sold commercially, and may be aggregated with this
-    Package.
-
-    7. C subroutines supplied by you and linked into
-    this Package shall not be considered part of this
-    Package.
-
-    8. The name of the Copyright Holder may not be used to
-    endorse or promote products derived from this software
-    without specific prior written permission.
-
-    9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
-    LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY
-    AND FITNESS FOR A PARTICULAR PURPOSE.
 
-    The End
+This license establishes the terms under which a given free software
+Package may be copied, modified, distributed, and/or redistributed.
+The intent is that the Copyright Holder maintains some artistic
+control over the development of that Package while still keeping the
+Package available as open source and free software.
+
+You are always permitted to make arrangements wholly outside of this
+license directly with the Copyright Holder of a given Package.  If the
+terms of this license do not permit the full use that you propose to
+make of the Package, you should contact the Copyright Holder and seek
+a different licensing arrangement. 
+
+Definitions
+
+    "Copyright Holder" means the individual(s) or organization(s)
+    named in the copyright notice for the entire Package.
+
+    "Contributor" means any party that has contributed code or other
+    material to the Package, in accordance with the Copyright Holder's
+    procedures.
+
+    "You" and "your" means any person who would like to copy,
+    distribute, or modify the Package.
+
+    "Package" means the collection of files distributed by the
+    Copyright Holder, and derivatives of that collection and/or of
+    those files. A given Package may consist of either the Standard
+    Version, or a Modified Version.
+
+    "Distribute" means providing a copy of the Package or making it
+    accessible to anyone else, or in the case of a company or
+    organization, to others outside of your company or organization.
+
+    "Distributor Fee" means any fee that you charge for Distributing
+    this Package or providing support for this Package to another
+    party.  It does not mean licensing fees.
+
+    "Standard Version" refers to the Package if it has not been
+    modified, or has been modified only in ways explicitly requested
+    by the Copyright Holder.
+
+    "Modified Version" means the Package, if it has been changed, and
+    such changes were not explicitly requested by the Copyright
+    Holder. 
+
+    "Original License" means this Artistic License as Distributed with
+    the Standard Version of the Package, in its current version or as
+    it may be modified by The Perl Foundation in the future.
+
+    "Source" form means the source code, documentation source, and
+    configuration files for the Package.
+
+    "Compiled" form means the compiled bytecode, object code, binary,
+    or any other form resulting from mechanical transformation or
+    translation of the Source form.
+
+
+Permission for Use and Modification Without Distribution
+
+(1)  You are permitted to use the Standard Version and create and use
+Modified Versions for any purpose without restriction, provided that
+you do not Distribute the Modified Version.
+
+
+Permissions for Redistribution of the Standard Version
+
+(2)  You may Distribute verbatim copies of the Source form of the
+Standard Version of this Package in any medium without restriction,
+either gratis or for a Distributor Fee, provided that you duplicate
+all of the original copyright notices and associated disclaimers.  At
+your discretion, such verbatim copies may or may not include a
+Compiled form of the Package.
+
+(3)  You may apply any bug fixes, portability changes, and other
+modifications made available from the Copyright Holder.  The resulting
+Package will still be considered the Standard Version, and as such
+will be subject to the Original License.
+
+
+Distribution of Modified Versions of the Package as Source 
+
+(4)  You may Distribute your Modified Version as Source (either gratis
+or for a Distributor Fee, and with or without a Compiled form of the
+Modified Version) provided that you clearly document how it differs
+from the Standard Version, including, but not limited to, documenting
+any non-standard features, executables, or modules, and provided that
+you do at least ONE of the following:
+
+    (a)  make the Modified Version available to the Copyright Holder
+    of the Standard Version, under the Original License, so that the
+    Copyright Holder may include your modifications in the Standard
+    Version.
+
+    (b)  ensure that installation of your Modified Version does not
+    prevent the user installing or running the Standard Version. In
+    addition, the Modified Version must bear a name that is different
+    from the name of the Standard Version.
+
+    (c)  allow anyone who receives a copy of the Modified Version to
+    make the Source form of the Modified Version available to others
+    under
+		
+	(i)  the Original License or
+
+	(ii)  a license that permits the licensee to freely copy,
+	modify and redistribute the Modified Version using the same
+	licensing terms that apply to the copy that the licensee
+	received, and requires that the Source form of the Modified
+	Version, and of any works derived from it, be made freely
+	available in that license fees are prohibited but Distributor
+	Fees are allowed.
+
+
+Distribution of Compiled Forms of the Standard Version 
+or Modified Versions without the Source
+
+(5)  You may Distribute Compiled forms of the Standard Version without
+the Source, provided that you include complete instructions on how to
+get the Source of the Standard Version.  Such instructions must be
+valid at the time of your distribution.  If these instructions, at any
+time while you are carrying out such distribution, become invalid, you
+must provide new instructions on demand or cease further distribution.
+If you provide valid instructions or cease distribution within thirty
+days after you become aware that the instructions are invalid, then
+you do not forfeit any of your rights under this license.
+
+(6)  You may Distribute a Modified Version in Compiled form without
+the Source, provided that you comply with Section 4 with respect to
+the Source of the Modified Version.
+
+
+Aggregating or Linking the Package 
+
+(7)  You may aggregate the Package (either the Standard Version or
+Modified Version) with other packages and Distribute the resulting
+aggregation provided that you do not charge a licensing fee for the
+Package.  Distributor Fees are permitted, and licensing fees for other
+components in the aggregation are permitted. The terms of this license
+apply to the use and Distribution of the Standard or Modified Versions
+as included in the aggregation.
+
+(8) You are permitted to link Modified and Standard Versions with
+other works, to embed the Package in a larger work of your own, or to
+build stand-alone binary or bytecode versions of applications that
+include the Package, and Distribute the result without restriction,
+provided the result does not expose a direct interface to the Package.
+
+
+Items That are Not Considered Part of a Modified Version 
+
+(9) Works (including, but not limited to, modules and scripts) that
+merely extend or make use of the Package, do not, by themselves, cause
+the Package to be a Modified Version.  In addition, such works are not
+considered parts of the Package itself, and are not subject to the
+terms of this license.
+
+
+General Provisions
+
+(10)  Any use, modification, and distribution of the Standard or
+Modified Versions is governed by this Artistic License. By using,
+modifying or distributing the Package, you accept this license. Do not
+use, modify, or distribute the Package, if you do not accept this
+license.
+
+(11)  If your Modified Version has been derived from a Modified
+Version made by someone other than you, you are nevertheless required
+to ensure that your Modified Version complies with the requirements of
+this license.
+
+(12)  This license does not grant you the right to use any trademark,
+service mark, tradename, or logo of the Copyright Holder.
+
+(13)  This license includes the non-exclusive, worldwide,
+free-of-charge patent license to make, have made, use, offer to sell,
+sell, import and otherwise transfer the Package with respect to any
+patent claims licensable by the Copyright Holder that are necessarily
+infringed by the Package. If you institute patent litigation
+(including a cross-claim or counterclaim) against any party alleging
+that the Package constitutes direct or contributory patent
+infringement, then this Artistic License to you shall terminate on the
+date that such litigation is filed.
+
+(14)  Disclaimer of Warranty:
+THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
+LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff -urP qstat-2.11/Makefile.am qstat-2.11-20080912svn311/Makefile.am
--- qstat-2.11/Makefile.am	2006-08-04 16:42:09.000000000 -0400
+++ qstat-2.11-20080912svn311/Makefile.am	2008-09-12 14:52:23.000000000 -0400
@@ -20,7 +20,11 @@
 	gs2.c gs2.h \
 	gs3.c gs3.h \
 	ts2.c ts2.h \
-	tm.c tm.h
+	tm.c tm.h \
+	haze.c haze.h \
+	ottd.c ottd.h \
+	wic.c wic.h \
+	fl.c fl.h
 
 dist_configfiles_DATA = qstat.cfg
 configfilesdir = $(sysconfdir)
@@ -33,4 +37,4 @@
 
 cl:
 	cvs2cl.pl --utc --no-wrap --separate-header --no-times -f ChangeLog.cvs
-	rm -f ChangeLog.cvs.bak
+	rm -f ChangeLog.cvs.bak qstat.core
diff -urP qstat-2.11/Makefile.in qstat-2.11-20080912svn311/Makefile.in
--- qstat-2.11/Makefile.in	2006-11-04 07:59:01.000000000 -0500
+++ qstat-2.11-20080912svn311/Makefile.in	2008-09-12 15:00:26.000000000 -0400
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,7 +14,6 @@
 
 @SET_MAKE@
 
-
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -22,6 +21,7 @@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = .
+
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -35,70 +35,7 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = qstat$(EXEEXT)
-DIST_COMMON = $(am__configure_deps) $(dist_configfiles_DATA) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/gnuconfig.h.in $(top_srcdir)/configure ChangeLog \
-	config.guess config.sub depcomp install-sh missing
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = gnuconfig.h
-CONFIG_CLEAN_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(configfilesdir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(bin_PROGRAMS)
-am_qstat_OBJECTS = config.$(OBJEXT) debug.$(OBJEXT) hcache.$(OBJEXT) \
-	md5.$(OBJEXT) qserver.$(OBJEXT) qstat.$(OBJEXT) \
-	template.$(OBJEXT) a2s.$(OBJEXT) packet_manip.$(OBJEXT) \
-	ut2004.$(OBJEXT) doom3.$(OBJEXT) gps.$(OBJEXT) gs2.$(OBJEXT) \
-	gs3.$(OBJEXT) ts2.$(OBJEXT) tm.$(OBJEXT)
-qstat_OBJECTS = $(am_qstat_OBJECTS)
-qstat_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(qstat_SOURCES)
-DIST_SOURCES = $(qstat_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-exec-recursive install-info-recursive \
-	install-recursive installcheck-recursive installdirs-recursive \
-	pdf-recursive ps-recursive uninstall-info-recursive \
-	uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-dist_configfilesDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(dist_configfiles_DATA)
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  { test ! -d $(distdir) \
-    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr $(distdir); }; }
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -111,6 +48,7 @@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
 CPP = @CPP@
+
 CPPFLAGS = -Dsysconfdir=\"$(sysconfdir)\" @CPPFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
@@ -120,6 +58,7 @@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+GREP = @GREP@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -142,14 +81,11 @@
 STRIP = @STRIP@
 VERSION = @VERSION@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_STRIP = @ac_ct_STRIP@
 am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
 am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -157,28 +93,37 @@
 build_os = @build_os@
 build_vendor = @build_vendor@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 SUBDIRS = template info
+
+bin_PROGRAMS = qstat
+
 qstat_SOURCES = \
 	config.c config.h \
 	debug.c debug.h \
@@ -195,53 +140,94 @@
 	gs2.c gs2.h \
 	gs3.c gs3.h \
 	ts2.c ts2.h \
-	tm.c tm.h
+	tm.c tm.h \
+	haze.c haze.h \
+	ottd.c ottd.h \
+	wic.c wic.h \
+	fl.c fl.h
+
 
 dist_configfiles_DATA = qstat.cfg
 configfilesdir = $(sysconfdir)
+
 EXTRA_DIST = CHANGES.txt COMPILE.txt LICENSE.txt \
 	Makefile.noauto \
 	ChangeLog \
 	qstatdoc.html \
 	contrib.cfg
 
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = gnuconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = qstat$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_qstat_OBJECTS = config.$(OBJEXT) debug.$(OBJEXT) hcache.$(OBJEXT) \
+	md5.$(OBJEXT) qserver.$(OBJEXT) qstat.$(OBJEXT) \
+	template.$(OBJEXT) a2s.$(OBJEXT) packet_manip.$(OBJEXT) \
+	ut2004.$(OBJEXT) doom3.$(OBJEXT) gps.$(OBJEXT) gs2.$(OBJEXT) \
+	gs3.$(OBJEXT) ts2.$(OBJEXT) tm.$(OBJEXT) haze.$(OBJEXT) \
+	ottd.$(OBJEXT) wic.$(OBJEXT) fl.$(OBJEXT)
+qstat_OBJECTS = $(am_qstat_OBJECTS)
+qstat_LDADD = $(LDADD)
+qstat_DEPENDENCIES =
+qstat_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/a2s.Po ./$(DEPDIR)/config.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/debug.Po ./$(DEPDIR)/doom3.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/fl.Po ./$(DEPDIR)/gps.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/gs2.Po ./$(DEPDIR)/gs3.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/haze.Po ./$(DEPDIR)/hcache.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/md5.Po ./$(DEPDIR)/ottd.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/packet_manip.Po ./$(DEPDIR)/qserver.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/qstat.Po ./$(DEPDIR)/template.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/tm.Po ./$(DEPDIR)/ts2.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/ut2004.Po ./$(DEPDIR)/wic.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(qstat_SOURCES)
+DATA = $(dist_configfiles_DATA)
+
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
+	ps-recursive install-info-recursive uninstall-info-recursive \
+	all-recursive install-data-recursive install-exec-recursive \
+	installdirs-recursive install-recursive uninstall-recursive \
+	check-recursive installcheck-recursive
+DIST_COMMON = $(dist_configfiles_DATA) $(srcdir)/Makefile.in \
+	$(srcdir)/configure ChangeLog Makefile.am aclocal.m4 \
+	config.guess config.sub configure configure.ac depcomp \
+	gnuconfig.h.in install-sh missing mkinstalldirs
+DIST_SUBDIRS = $(SUBDIRS)
+SOURCES = $(qstat_SOURCES)
+
 all: gnuconfig.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .c .o .obj
-am--refresh:
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
-	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
+
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 	cd $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign  Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
 
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(srcdir)/configure:  $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
 	cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+
+$(ACLOCAL_M4):  configure.ac 
 	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 
 gnuconfig.h: stamp-h1
@@ -253,23 +239,24 @@
 stamp-h1: $(srcdir)/gnuconfig.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
 	cd $(top_builddir) && $(SHELL) ./config.status gnuconfig.h
-$(srcdir)/gnuconfig.h.in:  $(am__configure_deps) 
+
+$(srcdir)/gnuconfig.h.in:  $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
 	cd $(top_srcdir) && $(AUTOHEADER)
-	rm -f stamp-h1
-	touch $@
+	touch $(srcdir)/gnuconfig.h.in
 
 distclean-hdr:
 	-rm -f gnuconfig.h stamp-h1
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
 	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
 	  if test -f $$p \
 	  ; then \
 	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
 	  else :; fi; \
 	done
 
@@ -277,8 +264,8 @@
 	@$(NORMAL_UNINSTALL)
 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
 	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
 	done
 
 clean-binPROGRAMS:
@@ -288,7 +275,7 @@
 	$(LINK) $(qstat_LDFLAGS) $(qstat_OBJECTS) $(qstat_LDADD) $(LIBS)
 
 mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
@@ -297,11 +284,14 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doom3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gps.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gs2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gs3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/haze.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hcache.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ottd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet_manip.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qserver.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qstat.Po@am__quote@
@@ -309,37 +299,47 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ts2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ut2004.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wic.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@	fi
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
 
 .c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@	fi
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 uninstall-info-am:
+dist_configfilesDATA_INSTALL = $(INSTALL_DATA)
 install-dist_configfilesDATA: $(dist_configfiles_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(configfilesdir)" || $(mkdir_p) "$(DESTDIR)$(configfilesdir)"
+	$(mkinstalldirs) $(DESTDIR)$(configfilesdir)
 	@list='$(dist_configfiles_DATA)'; for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_configfilesDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(configfilesdir)/$$f'"; \
-	  $(dist_configfilesDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(configfilesdir)/$$f"; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(dist_configfilesDATA_INSTALL) $$d$$p $(DESTDIR)$(configfilesdir)/$$f"; \
+	  $(dist_configfilesDATA_INSTALL) $$d$$p $(DESTDIR)$(configfilesdir)/$$f; \
 	done
 
 uninstall-dist_configfilesDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(dist_configfiles_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(configfilesdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(configfilesdir)/$$f"; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f $(DESTDIR)$(configfilesdir)/$$f"; \
+	  rm -f $(DESTDIR)$(configfilesdir)/$$f; \
 	done
 
 # This directory's subdirectories are mostly independent; you can cd
@@ -349,13 +349,7 @@
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+	@set fnord $$MAKEFLAGS; amf=$$2; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -367,7 +361,7 @@
 	    local_target="$$target"; \
 	  fi; \
 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
 	done; \
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -375,13 +369,7 @@
 
 mostlyclean-recursive clean-recursive distclean-recursive \
 maintainer-clean-recursive:
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+	@set fnord $$MAKEFLAGS; amf=$$2; \
 	dot_seen=no; \
 	case "$@" in \
 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -402,7 +390,7 @@
 	    local_target="$$target"; \
 	  fi; \
 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
 	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -413,6 +401,14 @@
 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
 
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+tags: TAGS
+
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -421,22 +417,19 @@
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
 	mkid -fID $$unique
-tags: TAGS
 
 TAGS: tags-recursive $(HEADERS) $(SOURCES) gnuconfig.h.in $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	if (etags --etags-include --version) >/dev/null 2>&1; then \
 	  include_option=--etags-include; \
-	  empty_fix=.; \
 	else \
 	  include_option=--include; \
-	  empty_fix=; \
 	fi; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
+	    test -f $$subdir/TAGS && \
 	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
@@ -446,11 +439,10 @@
 	  done | \
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
 ctags: CTAGS
 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) gnuconfig.h.in $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -473,6 +465,19 @@
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = .
+distdir = $(PACKAGE)-$(VERSION)
+
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
@@ -488,7 +493,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -503,17 +508,15 @@
 	    || exit 1; \
 	  fi; \
 	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    test -d $(distdir)/$$subdir \
+	    || mkdir $(distdir)/$$subdir \
 	    || exit 1; \
-	    distdir=`$(am__cd) $(distdir) && pwd`; \
-	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
 	    (cd $$subdir && \
 	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
+	        top_distdir="$(top_distdir)" \
+	        distdir=../$(distdir)/$$subdir \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
@@ -524,46 +527,19 @@
 	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
 	|| chmod -R a+r $(distdir)
 dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
-
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
-
-dist-tarZ: distdir
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
-
-dist-shar: distdir
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
 	$(am__remove_distdir)
 
 dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
 	$(am__remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
 # tarfile.
 distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
+	$(am__remove_distdir)
+	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
 	chmod -R a-w $(distdir); chmod a+w $(distdir)
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
@@ -583,20 +559,19 @@
 	        distuninstallcheck \
 	  && chmod -R a-w "$$dc_install_base" \
 	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
 	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
 	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
 	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
+	  && rm -f $(distdir).tar.gz \
 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
 	$(am__remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+	@echo "$(distdir).tar.gz is ready for distribution" | \
+	  sed 'h;s/./=/g;p;x;p;x'
 distuninstallcheck:
 	@cd $(distuninstallcheck_dir) \
 	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
@@ -620,9 +595,8 @@
 all-am: Makefile $(PROGRAMS) $(DATA) gnuconfig.h
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(configfilesdir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(configfilesdir)
+
 install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
@@ -642,7 +616,7 @@
 clean-generic:
 
 distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -655,15 +629,13 @@
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-hdr distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic distclean-hdr \
+	distclean-tags
 
 dvi: dvi-recursive
 
 dvi-am:
 
-html: html-recursive
-
 info: info-recursive
 
 info-am:
@@ -702,28 +674,30 @@
 
 uninstall-info: uninstall-info-recursive
 
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
-	check-am clean clean-binPROGRAMS clean-generic clean-recursive \
-	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-shar dist-tarZ dist-zip distcheck distclean \
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-recursive ctags \
+	ctags-recursive dist dist-all dist-gzip distcheck distclean \
 	distclean-compile distclean-generic distclean-hdr \
 	distclean-recursive distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-binPROGRAMS install-data \
-	install-data-am install-dist_configfilesDATA install-exec \
-	install-exec-am install-info install-info-am install-man \
+	distuninstallcheck dvi dvi-am dvi-recursive info info-am \
+	info-recursive install install-am install-binPROGRAMS \
+	install-data install-data-am install-data-recursive \
+	install-dist_configfilesDATA install-exec install-exec-am \
+	install-exec-recursive install-info install-info-am \
+	install-info-recursive install-man install-recursive \
 	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	maintainer-clean-recursive mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am \
-	uninstall-binPROGRAMS uninstall-dist_configfilesDATA \
-	uninstall-info-am
+	installdirs-am installdirs-recursive maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-recursive \
+	pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \
+	tags-recursive uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-dist_configfilesDATA uninstall-info-am \
+	uninstall-info-recursive uninstall-recursive
 
 
 cl:
 	cvs2cl.pl --utc --no-wrap --separate-header --no-times -f ChangeLog.cvs
-	rm -f ChangeLog.cvs.bak
+	rm -f ChangeLog.cvs.bak qstat.core
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff -urP qstat-2.11/Makefile.noauto qstat-2.11-20080912svn311/Makefile.noauto
--- qstat-2.11/Makefile.noauto	2006-10-28 08:36:58.000000000 -0400
+++ qstat-2.11-20080912svn311/Makefile.noauto	2008-09-12 14:52:23.000000000 -0400
@@ -10,12 +10,12 @@
 ## NOTE: if you get errors when linking qstat (missing symbols or
 ## libraries), then modify LDFLAGS or LDLIBS
 
-SRC = config.c debug.c hcache.c md5.c qserver.c qstat.c template.c ut2004.c a2s.c packet_manip.c gs3.c gs2.c gps.c ts2.c doom3.c tm.c
+SRC = config.c debug.c hcache.c md5.c qserver.c qstat.c template.c ut2004.c a2s.c packet_manip.c gs3.c gs2.c gps.c ts2.c doom3.c tm.c haze.c wic.c ottd.c fl.c
 OBJ = $(SRC:.c=.obj)
 O   = $(SRC:.c=.o)
 
 SOLARIS_LIBS = -lsocket -lnsl
-WINDOWS_LIBS = /ML wsock32.lib
+WINDOWS_LIBS = wsock32.lib
 OS2_LIBS     = so32dll.lib tcp32dll.lib
 EMX_LIBS     = -lsocket
 
@@ -39,7 +39,7 @@
 
 windows_debug: $(SRC)
 	rm -f *.pdb
-	$(CC) $(CFLAGS) /Zi /ML $(SRC) /Feqstat.exe wsock32.lib /link /fixed:no /incremental:no
+	$(CC) $(CFLAGS) /Zi $(SRC) /Feqstat.exe $(WINDOWS_LIBS) /link /fixed:no /incremental:no
 
 os2: $(SRC)
 	$(CC) /Q /W0 /C+ $(SRC)
diff -urP qstat-2.11/md5.c qstat-2.11-20080912svn311/md5.c
--- qstat-2.11/md5.c	2004-10-17 16:41:52.000000000 -0400
+++ qstat-2.11-20080912svn311/md5.c	2008-09-12 14:52:23.000000000 -0400
@@ -21,7 +21,7 @@
   ghost@aladdin.com
 
  */
-/* $Id: md5.c,v 1.1 2004/10/17 20:41:52 l-n Exp $ */
+/* $Id: md5.c 73 2004-10-17 20:41:53Z l-n $ */
 /*
   Independent implementation of MD5 (RFC 1321).
 
diff -urP qstat-2.11/md5.h qstat-2.11-20080912svn311/md5.h
--- qstat-2.11/md5.h	2004-10-17 16:41:53.000000000 -0400
+++ qstat-2.11-20080912svn311/md5.h	2008-09-12 14:52:23.000000000 -0400
@@ -21,7 +21,7 @@
   ghost@aladdin.com
 
  */
-/* $Id: md5.h,v 1.1 2004/10/17 20:41:53 l-n Exp $ */
+/* $Id: md5.h 73 2004-10-17 20:41:53Z l-n $ */
 /*
   Independent implementation of MD5 (RFC 1321).
 
diff -urP qstat-2.11/missing qstat-2.11-20080912svn311/missing
--- qstat-2.11/missing	2006-04-22 20:59:37.000000000 -0400
+++ qstat-2.11-20080912svn311/missing	2007-09-18 10:10:46.000000000 -0400
@@ -1,10 +1,6 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
-
-scriptversion=2005-06-08.21
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -19,8 +15,8 @@
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -42,24 +38,18 @@
   configure_ac=configure.in
 fi
 
-msg="missing on your system"
-
 case "$1" in
 --run)
   # Try to run requested program, and just exit if it succeeds.
   run=
   shift
   "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
   ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
 
   -h|--h|--he|--hel|--help)
     echo "\
@@ -84,15 +74,11 @@
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
   tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Send bug reports to <bug-automake@gnu.org>."
-    exit $?
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
     ;;
 
   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing $scriptversion (GNU Automake)"
-    exit $?
+    echo "missing 0.4 - GNU automake"
     ;;
 
   -*)
@@ -101,44 +87,14 @@
     exit 1
     ;;
 
-esac
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
-  lex|yacc)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
-  *)
+  aclocal*)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
        exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
     fi
-    ;;
-esac
 
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
-  aclocal*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
          to install the \`Automake' and \`Perl' packages.  Grab them from
          any GNU archive site."
@@ -146,8 +102,13 @@
     ;;
 
   autoconf)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified \`${configure_ac}'.  You might want to install the
          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
          archive site."
@@ -155,8 +116,13 @@
     ;;
 
   autoheader)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
          from any GNU archive site."
@@ -174,8 +140,13 @@
     ;;
 
   automake*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
          You might want to install the \`Automake' and \`Perl' packages.
          Grab them from any GNU archive site."
@@ -185,9 +156,14 @@
     ;;
 
   autom4te)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
          proper tools for further handling them.
          You can get \`$1' as part of \`Autoconf' from any GNU
          archive site."
@@ -209,7 +185,7 @@
 
   bison|yacc)
     echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified a \`.y' file.  You may need the \`Bison' package
          in order for those modifications to take effect.  You can get
          \`Bison' from any GNU archive site."
@@ -239,7 +215,7 @@
 
   lex|flex)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified a \`.l' file.  You may need the \`Flex' package
          in order for those modifications to take effect.  You can get
          \`Flex' from any GNU archive site."
@@ -261,8 +237,13 @@
     ;;
 
   help2man)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
 	 you modified a dependency of a manual page.  You may need the
 	 \`Help2man' package in order for those modifications to take
 	 effect.  You can get \`Help2man' from any GNU archive site."
@@ -281,30 +262,32 @@
     ;;
 
   makeinfo)
+    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+       # We have makeinfo, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: \`$1' is missing on your system.  You should only need it if
          you modified a \`.texi' or \`.texinfo' file, or any other file
          indirectly affecting the aspect of the manual.  The spurious
          call might also be the consequence of using a buggy \`make' (AIX,
          DU, IRIX).  You might want to install the \`Texinfo' package or
          the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
     if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
     touch $file
     ;;
 
   tar)
     shift
+    if test -n "$run"; then
+      echo 1>&2 "ERROR: \`tar' requires --run"
+      exit 1
+    fi
 
     # We have already tried tar in the generic part.
     # Look for gnutar/gtar before invocation to avoid ugly error
@@ -340,8 +323,8 @@
 
   *)
     echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
          proper tools for further handling them.  Check the \`README' file,
          it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
@@ -351,10 +334,3 @@
 esac
 
 exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff -urP qstat-2.11/mkinstalldirs qstat-2.11-20080912svn311/mkinstalldirs
--- qstat-2.11/mkinstalldirs	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/mkinstalldirs	2007-09-18 10:10:46.000000000 -0400
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+  	errstatus=$lasterr
+      else
+  	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+    	  lasterr=""
+  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+  	  if test ! -z "$lasterr"; then
+  	    errstatus=$lasterr
+  	  fi
+  	fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here
diff -urP qstat-2.11/ottd.c qstat-2.11-20080912svn311/ottd.c
--- qstat-2.11/ottd.c	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/ottd.c	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,358 @@
+/*
+ * qstat 2.11
+ *
+ * opentTTD protocol
+ * Copyright 2007 Ludwig Nussel
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ */
+
+#include <sys/types.h>
+#ifndef _WIN32
+#include <sys/socket.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "qstat.h"
+#include "qserver.h"
+#include "debug.h"
+
+enum { MAX_VEHICLE_TYPES = 5, MAX_STATION_TYPES = 5 };
+
+static const char* vehicle_types[] = {
+	"num_trains",
+	"num_trucks",
+	"num_busses",
+	"num_aircrafts",
+	"num_ships",
+};
+
+static const char* station_types[] = {
+	"num_stations",
+	"num_truckbays",
+	"num_busstations",
+	"num_airports",
+	"num_docks",
+};
+
+int deal_with_ottdmaster_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	const char* reason = "invalid packet";
+	int ok = 1;
+	server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+	server->server_name = MASTER;
+
+	if(swap_short_from_little(rawpkt) != pktlen)
+	{
+		reason = "invalid packet length";
+		ok = 0;
+	}
+	if(rawpkt[2] != 7)
+	{
+		reason = "invalid packet type";
+		ok = 0;
+	}
+
+	if(rawpkt[3] != 1)
+	{
+		reason = "invalid packet version";
+		ok = 0;
+	}
+
+	if(ok)
+	{
+		unsigned num = swap_short_from_little(&rawpkt[4]);
+		rawpkt += 6;
+		pktlen -= 6;
+		if(num && num*6 <= pktlen)
+		{
+			unsigned i;
+			server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len + pktlen );
+			memset(server->master_pkt + server->master_pkt_len, 0, pktlen );
+			server->master_pkt_len += pktlen;
+			for(i=0; i < num*6; i+=6)
+			{
+				memcpy(&server->master_pkt[i], &rawpkt[i], 4);
+				server->master_pkt[i+4] = rawpkt[i+5];
+				server->master_pkt[i+5] = rawpkt[i+4];
+			}
+			server->n_servers += num;
+			ok = 1;
+		}
+		else
+		{
+			ok = 0;
+		}
+	}
+
+	if(!ok)
+	{
+		malformed_packet(server, reason);
+		return DONE_FORCE;
+	}
+
+	bind_sockets();
+
+	return DONE_AUTO;
+}
+
+#define xstr(s) str(s)
+#define str(s) #s
+
+#define GET_STRING do { \
+		str = (char*)ptr; \
+		ptr = memchr(ptr, '\0', end-ptr); \
+		if ( !ptr ) \
+		{ \
+			reason = __FILE__ ":" xstr(__LINE__) " invalid packet"; \
+			goto out; \
+		} \
+		++ptr; \
+	} while(0)
+
+#define FAIL_IF(cond, msg) \
+	if((cond)) { \
+		reason = __FILE__ ":" xstr(__LINE__) " " msg; \
+		goto out; \
+	}
+
+#define INVALID_IF(cond) \
+	FAIL_IF(cond, "invalid packet")
+
+int deal_with_ottd_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	const char* reason = NULL;
+	unsigned char *ptr = (unsigned char*)rawpkt;
+	unsigned char *end = (unsigned char*)(rawpkt + pktlen);
+	unsigned char type;
+	char* str;
+	char buf[32];
+
+	unsigned ver;
+
+	server->n_servers++;
+	if ( server->server_name == NULL)
+	{
+		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1);
+		server->n_requests++;
+	}
+	else
+	{
+		gettimeofday( &server->packet_time1, NULL);
+	}
+
+	FAIL_IF(pktlen < 4 || swap_short_from_little(rawpkt) > pktlen, "invalid packet");
+
+	type = ptr[2];
+	ver = ptr[3];
+	ptr += 4;
+
+	debug(3, "len %hu type %hhu ver %hhu", swap_short_from_little(rawpkt), type, ver);
+
+	FAIL_IF(ver != 4, "only version 4 servers are supported");
+
+	if(type == 1) // info packet
+	{
+		unsigned numgrf = *ptr;
+		FAIL_IF(ptr + numgrf * 20 + 1 > end, "invalid newgrf number");
+		ptr += numgrf * 20 + 1;
+
+		snprintf(buf, sizeof(buf), "%u", swap_long_from_little(ptr));
+		add_rule(server, "date_days", buf, NO_FLAGS);
+		ptr += 4;
+
+		snprintf(buf, sizeof(buf), "%u", swap_long_from_little(ptr));
+		add_rule(server, "startdate_days", buf, NO_FLAGS);
+		ptr += 4;
+
+		FAIL_IF(ptr + 3 > end, "invalid packet");
+
+		snprintf(buf, sizeof(buf), "%hhu", ptr[0]);
+		add_rule(server, "maxcompanies", buf, NO_FLAGS);
+		snprintf(buf, sizeof(buf), "%hhu", ptr[1]);
+		add_rule(server, "numcompanies", buf, NO_FLAGS);
+		server->max_spectators = ptr[2];
+		ptr += 3;
+
+		GET_STRING;
+		server->server_name = strdup(str);
+
+		GET_STRING;
+		add_rule(server, "version", str, NO_FLAGS);
+
+		FAIL_IF(ptr + 7 > end, "invalid packet");
+
+		{
+			static const char* langs[] = {
+				"any",
+				"English",
+				"German",
+				"French"
+			};
+			unsigned i = *ptr++;
+			if(i > 3) i = 0;
+			add_rule(server, "language", (char*)langs[i], NO_FLAGS);
+		}
+
+		add_rule(server, "password", *ptr++ ? "1" : "0", NO_FLAGS);
+
+		server->max_players = *ptr++;
+		server->num_players = *ptr++;
+		server->num_spectators = *ptr++;
+
+		GET_STRING;
+
+		server->map_name = strdup(str);
+
+		snprintf(buf, sizeof(buf), "%hu", swap_short_from_little(ptr));
+		add_rule(server, "map_width", buf, NO_FLAGS);
+		snprintf(buf, sizeof(buf), "%hu", swap_short_from_little(ptr));
+		add_rule(server, "map_height", buf, NO_FLAGS);
+
+		{
+			static const char* sets[] = {
+				"temperate",
+				"arctic",
+				"desert",
+				"toyland"
+			};
+			unsigned i = *ptr++;
+			if(i > 3) i = 0;
+			add_rule(server, "map_set", (char*)sets[i], NO_FLAGS);
+		}
+
+		add_rule(server, "dedicated", *ptr++ ? "1" : "0", NO_FLAGS);
+	}
+	else if(type == 3) // player packet
+	{
+		unsigned i, j;
+		INVALID_IF(ptr + 2 > end);
+
+		server->num_players = *ptr++;
+
+		for(i = 0; i < server->num_players; ++i)
+		{
+			unsigned long long lli;
+			struct player* player;
+			unsigned char nr;
+
+			nr = *ptr++;
+
+			debug(3, "player number %d", nr);
+			player = add_player(server, i);
+			FAIL_IF(!player, "can't allocate player");
+
+			GET_STRING;
+			player->name = strdup(str);
+			debug(3, "name %s", str);
+			player->frags = 0;
+
+			INVALID_IF(ptr + 4 + 3*8 + 2 + 1 + 2*MAX_VEHICLE_TYPES + 2*MAX_STATION_TYPES > end);
+
+			snprintf(buf, sizeof(buf), "%u", swap_long_from_little(ptr));
+			player_add_info(player, "startdate", buf, 0);
+			ptr += 4;
+
+			lli = swap_long_from_little(ptr+4);
+			lli <<= 32;
+			lli += swap_long_from_little(ptr);
+			snprintf(buf, sizeof(buf), "%lld", lli);
+			player_add_info(player, "value", buf, 0);
+			ptr += 8;
+
+			lli = swap_long_from_little(ptr+4);
+			lli <<= 32;
+			lli = swap_long_from_little(ptr);
+			snprintf(buf, sizeof(buf), "%lld", lli);
+			player_add_info(player, "money", buf, 0);
+			ptr += 8;
+
+			lli = swap_long_from_little(ptr+4);
+			lli <<= 32;
+			lli += swap_long_from_little(ptr);
+			snprintf(buf, sizeof(buf), "%lld", lli);
+			player_add_info(player, "income", buf, 0);
+			ptr += 8;
+
+			snprintf(buf, sizeof(buf), "%hu", swap_short_from_little(ptr));
+			player_add_info(player, "performance", buf, 0);
+			ptr += 2;
+
+			player_add_info(player, "password", *ptr?"1":"0", 0);
+			++ptr;
+
+			for (j = 0; j < MAX_VEHICLE_TYPES; ++j)
+			{
+				snprintf(buf, sizeof(buf), "%hu", swap_short_from_little(ptr));
+				player_add_info(player, (char*)vehicle_types[j], buf, 0);
+				ptr += 2;
+			}
+			for (j = 0; j < MAX_STATION_TYPES; ++j)
+			{
+				snprintf(buf, sizeof(buf), "%hu", swap_short_from_little(ptr));
+				player_add_info(player, (char*)station_types[j], buf, 0);
+				ptr += 2;
+			}
+
+			// connections
+			while(ptr + 1 < end && *ptr)
+			{
+				++ptr;
+				GET_STRING; // client name
+				debug(3, "%s played by %s", str, player->name);
+				GET_STRING; // id
+				INVALID_IF(ptr + 4 > end);
+				ptr += 4;
+			}
+
+			++ptr; // record terminated by zero byte
+		}
+
+		// spectators
+		while(ptr + 1 < end && *ptr)
+		{
+			++ptr;
+			GET_STRING; // client name
+			debug(3, "spectator %s", str);
+			GET_STRING; // id
+			INVALID_IF(ptr + 4 > end);
+			ptr += 4;
+		}
+		++ptr; // record terminated by zero byte
+
+		server->next_rule = NO_SERVER_RULES; // we're done
+		server->next_player_info = server->num_players; // we're done
+	}
+	else
+	{
+		reason = "invalid type";
+	}
+
+out:
+	if(reason)
+	{
+		malformed_packet(server, reason);
+	}
+
+	server->retry1 = n_retries; // we're done with this packet, reset retry counter
+
+	return reason ? DONE_FORCE : DONE_AUTO;
+}
+
+int send_ottdmaster_request_packet(struct qserver *server)
+{
+	return qserver_send_initial(server, server->type->master_packet, server->type->master_len);
+}
+
+int send_ottd_request_packet(struct qserver *server)
+{
+	qserver_send_initial(server, server->type->status_packet, server->type->status_len);
+
+	if(get_server_rules || get_player_info)
+	{
+		server->next_rule = ""; // trigger calling send_a2s_rule_request_packet
+	}
+
+	return 1;
+}
diff -urP qstat-2.11/ottd.h qstat-2.11-20080912svn311/ottd.h
--- qstat-2.11/ottd.h	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/ottd.h	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,20 @@
+/*
+ * qstat 2.11
+ *
+ * opentTTD protocol
+ * Copyright 2007 Ludwig Nussel
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ */
+#ifndef QSTAT_OTTD_H
+#define QSTAT_OTTD_H
+
+#include "qstat.h"
+
+int send_ottdmaster_request_packet(struct qserver *server);
+int deal_with_ottdmaster_packet(struct qserver *server, char *rawpkt, int pktlen);
+
+int send_ottd_request_packet(struct qserver *server);
+int deal_with_ottd_packet(struct qserver *server, char *rawpkt, int pktlen);
+
+#endif
diff -urP qstat-2.11/packet_manip.c qstat-2.11-20080912svn311/packet_manip.c
--- qstat-2.11/packet_manip.c	2006-08-14 05:51:21.000000000 -0400
+++ qstat-2.11-20080912svn311/packet_manip.c	2008-09-12 14:52:23.000000000 -0400
@@ -29,7 +29,7 @@
 	int maxes[MAX_PACKETS];
 	int lengths[MAX_PACKETS];
 	SavedData *sdata = &server->saved_data;
-	int i, p, done = 0;
+	int i, p, ret = INPROGRESS;
 	n_ids = 0;
 
 	memset( &segments[0][0], 0, sizeof(segments) );
@@ -116,7 +116,7 @@
 				// reset to be unusable
 				pkt_id_index = -1;
 				free( combined );
-				return 0;
+				return INPROGRESS;
 			}
 			memcpy( combined + datalen, segments[pkt_id_index][p]->data, segments[pkt_id_index][p]->datalen );
 			datalen += segments[pkt_id_index][p]->datalen;
@@ -134,12 +134,12 @@
 			print_packet( server, combined, datalen );
 		}
 		// Call the server's packet processing method
-		done = ( (int (*)()) server->type->packet_func)( server, combined, datalen );
+		ret = ( (int (*)()) server->type->packet_func)( server, combined, datalen );
 		free( combined );
 
 		// Note: this is currently invalid as packet processing methods
 		// are void not int
-		if ( done || server->saved_data.data == NULL)
+		if ( INPROGRESS != ret || NULL == server->saved_data.data )
 		{
 			break;
 		}
@@ -147,7 +147,7 @@
 	// reset to be unusable
 	pkt_id_index = -1;
 
-	return done;
+	return ret;
 }
 
 int add_packet( struct qserver *server, unsigned int pkt_id, int pkt_index, int pkt_max, int datalen, char *data, int calc_max )
@@ -196,7 +196,6 @@
 	if ( NULL == sdata->data )
 	{
 		fprintf( stderr, "Out of memory\n" );
-		cleanup_qserver( server, 1 );
 		return 0;
 	}
 
diff -urP qstat-2.11/qserver.c qstat-2.11-20080912svn311/qserver.c
--- qstat-2.11/qserver.c	2006-05-24 10:39:41.000000000 -0400
+++ qstat-2.11-20080912svn311/qserver.c	2008-09-12 14:52:23.000000000 -0400
@@ -20,30 +20,41 @@
 #include <stdlib.h>
 #include <sys/types.h>
 
+// TODO: get rid of this and use send_packet instead, remove n_requests hack from a2s
 int qserver_send_initial(struct qserver* server, const char* data, size_t len)
 {
     int ret = 0;
 
-    if(data)
+    if( data )
     {
-	if ( server->flags & FLAG_BROADCAST)
-	    ret = send_broadcast(server, data, len);
-	else
-	    ret = send( server->fd, data, len, 0);
+		debug( 2, "[%s] send", server->type->type_prefix );
+		if( 4 <= get_debug_level() )
+		{
+			output_packet( server, data, len, 1 );
+		}
 
-	if ( ret == SOCKET_ERROR)
-	{
-	    perror( "send");
-	}
+		if ( server->flags & FLAG_BROADCAST)
+		{
+			ret = send_broadcast(server, data, len);
+		}
+		else
+		{
+			ret = send( server->fd, data, len, 0);
+		}
+
+		if ( ret == SOCKET_ERROR)
+		{
+			send_error( server, ret );
+		}
     }
 
     if ( server->retry1 == n_retries || server->flags & FLAG_BROADCAST)
     {
-	gettimeofday( &server->packet_time1, NULL);
+		gettimeofday( &server->packet_time1, NULL);
     }
     else
     {
-	server->n_retries++;
+		server->n_retries++;
     }
 
     server->retry1--;
@@ -58,15 +69,19 @@
 
     if(data)
     {
-	if ( server->flags & FLAG_BROADCAST)
-	    ret = send_broadcast(server, data, len);
-	else
-	    ret = send( server->fd, data, len, 0);
+		if ( server->flags & FLAG_BROADCAST)
+		{
+			ret = send_broadcast(server, data, len);
+		}
+		else
+		{
+			ret = send( server->fd, data, len, 0);
+		}
 
-	if ( ret == SOCKET_ERROR)
-	{
-	    perror( "send");
-	}
+		if ( ret == SOCKET_ERROR)
+		{
+			send_error( server, ret );
+		}
     }
 
     server->retry1 = n_retries;
@@ -78,22 +93,25 @@
 
 }
 
-int
-send_broadcast( struct qserver *server, const char *pkt, size_t pktlen)
+int send_broadcast( struct qserver *server, const char *pkt, size_t pktlen)
 {
     struct sockaddr_in addr;
     addr.sin_family= AF_INET;
     if ( no_port_offset || server->flags & TF_NO_PORT_OFFSET)
+	{
         addr.sin_port= htons(server->port);
+	}
     else
+	{
         addr.sin_port= htons((unsigned short)( server->port + server->type->port_offset ));
+	}
     addr.sin_addr.s_addr= server->ipaddr;
     memset( &(addr.sin_zero), 0, sizeof(addr.sin_zero));
-    return sendto( server->fd, (const char*) pkt, pktlen, 0,
-		(struct sockaddr *) &addr, sizeof(addr));
+
+    return sendto( server->fd, (const char*) pkt, pktlen, 0, (struct sockaddr *) &addr, sizeof(addr));
 }
 
-void register_send( struct qserver *server )
+int register_send( struct qserver *server )
 {
     if ( server->retry1 == n_retries || server->flags & FLAG_BROADCAST )
 	{
@@ -109,6 +127,8 @@
 	gettimeofday( &server->packet_time1, NULL);
     server->retry1--;
     server->n_packets++;
+
+	return INPROGRESS;
 }
 
 int send_packet( struct qserver* server, const char* data, size_t len )
@@ -118,8 +138,9 @@
 	debug( 2, "[%s] send", server->type->type_prefix );
 	if( 4 <= get_debug_level() )
 	{
-		print_packet( server, data, len );
+		output_packet( server, data, len, 1 );
 	}
+
     if( data )
     {
 		if ( server->flags & FLAG_BROADCAST )
@@ -133,18 +154,24 @@
 
 		if ( ret == SOCKET_ERROR )
 		{
-			unsigned int ipaddr = ntohl(server->ipaddr) ;
-			fprintf( stderr, "Error on %d.%d.%d.%d\n",
-				(ipaddr>>24)&0xff,
-				(ipaddr>>16)&0xff,
-				(ipaddr>>8)&0xff,
-				ipaddr&0xff
-			);
-			perror( "send" );
+			return send_error( server, ret );
 		}
     }
 
 	register_send( server );
 
-	return ret;
+	return INPROGRESS;
+}
+
+int send_error( struct qserver *server, int rc )
+{
+	unsigned int ipaddr = ntohl(server->ipaddr);
+	fprintf(stderr, "Error on %d.%d.%d.%d, skipping ...\n",
+		(ipaddr >> 24) &0xff,
+		(ipaddr >> 16) &0xff,
+		(ipaddr >> 8) &0xff,
+		ipaddr &0xff
+	);
+	perror("send");
+	return rc;
 }
diff -urP qstat-2.11/qserver.h qstat-2.11-20080912svn311/qserver.h
--- qstat-2.11/qserver.h	2006-05-24 10:26:00.000000000 -0400
+++ qstat-2.11-20080912svn311/qserver.h	2008-09-12 14:52:23.000000000 -0400
@@ -39,6 +39,7 @@
     struct query_param *params;
     unsigned long challenge;
     unsigned short port;
+    unsigned short orig_port; // This port is always constant from creation where as port can be updated based on the query results
     unsigned short query_port;
     /** \brief number of retries _left_ for status query or rule query.
      *
@@ -103,6 +104,8 @@
     int max_players;
     int num_players;
     int protocol_version;
+	int max_spectators;
+	int num_spectators;
 
     SavedData saved_data;
 
@@ -185,7 +188,7 @@
  *
  * This updates n_requests, n_packets, packet_time1 and decrements n_retries
  */
-void register_send( struct qserver *server );
+int register_send( struct qserver *server );
 
 /**
  * Sends a packet to the server either direct or via broadcast.
@@ -194,4 +197,9 @@
  */
 int send_packet( struct qserver* server, const char* data, size_t len );
 
+/**
+ * Logs the error from a socket send
+ */
+int send_error( struct qserver *server, int rc );
+
 #endif
diff -urP qstat-2.11/qstat.c qstat-2.11-20080912svn311/qstat.c
--- qstat-2.11/qstat.c	2006-10-28 08:37:18.000000000 -0400
+++ qstat-2.11-20080912svn311/qstat.c	2008-09-12 14:52:23.000000000 -0400
@@ -18,18 +18,20 @@
  */
 
 #ifdef HAVE_CONFIG_H
-# include "gnuconfig.h"
+	#include "gnuconfig.h"
 #else
-# ifndef VERSION
-#  define VERSION "2.11"
-# endif
+	#ifndef VERSION
+		#define VERSION "2.12"
+	#endif
 #endif
 
-char *qstat_version= VERSION;
+#define RECV_BUF 204800
+
+char *qstat_version = VERSION;
 
 /* OS/2 defines */
 #ifdef __OS2__
-#define BSD_SELECT
+	#define BSD_SELECT
 #endif
 
 #include <stdio.h>
@@ -48,112 +50,113 @@
 
 
 #ifndef _WIN32
-#include <signal.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#ifndef VMS
-#include <sys/param.h>
-#endif
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-
-#ifndef F_SETFL
-#include <fcntl.h>
-#endif
-
-#ifdef __hpux
-extern int h_errno;
-#define STATIC static
-#else
-#define STATIC
-#endif
-
-#define INVALID_SOCKET -1
-#ifndef INADDR_NONE
-#define INADDR_NONE ~0
-#endif
-#define sockerr()	errno
+	#include <signal.h>
+	#include <unistd.h>
+	#include <sys/socket.h>
+	#ifndef VMS
+		#include <sys/param.h>
+	#endif
+	#include <sys/time.h>
+	#include <netinet/in.h>
+	#include <netinet/tcp.h>
+	#include <netdb.h>
+	#include <arpa/inet.h>
+
+	#ifndef F_SETFL
+		#include <fcntl.h>
+	#endif
+
+	#ifdef __hpux
+		extern int h_errno;
+		#define STATIC static
+	#else
+		#define STATIC
+	#endif
+
+	#define INVALID_SOCKET -1
+	#ifndef INADDR_NONE
+		#define INADDR_NONE ~0
+	#endif
+	#define sockerr()	errno
 #endif /* _WIN32 */
 
 #ifdef __OS2__
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <utils.h>
-
-#define INVALID_SOCKET -1
-#define SOCKET_ERROR -1
-#define close(a)        soclose(a)
+	#include <sys/socket.h>
+	#include <sys/select.h>
+	#include <sys/time.h>
+	#include <netinet/in.h>
+	#include <netdb.h>
+	#include <utils.h>
+
+	#define INVALID_SOCKET -1
+	#define SOCKET_ERROR -1
+	#define close(a)    soclose(a)
 #endif /* __OS2__ */
 
 
+
 #ifndef FD_SETSIZE
-#define FD_SETSIZE 64
+	#define FD_SETSIZE 64
 #endif
 
 /* Figure out whether to use poll() or select()
-*/
+ */
 #ifndef USE_POLL
-#ifndef USE_SELECT
+	#ifndef USE_SELECT
 
-#ifdef sun
-#define USE_POLL
-#endif
-#ifdef linux
-#define USE_POLL
-#include <poll.h>
-#endif
-#ifdef __linux__
-#define USE_POLL
-#include <poll.h>
-#endif
-#ifdef __linux
-#define USE_POLL
-#include <poll.h>
-#endif
-#ifdef __hpux
-#define USE_POLL
-#include <sys/poll.h>
-#endif
-#ifdef __OpenBSD__
-#define USE_POLL
-#include <sys/poll.h>
-#endif
-#ifdef _AIX
-#define USE_POLL
-#include <poll.h>
-#endif
-#ifdef _WIN32
-#define USE_SELECT
-#endif
-#ifdef __EMX__
-#define USE_SELECT
-#endif
+		#ifdef sun
+			#define USE_POLL
+		#endif
+		#ifdef linux
+			#define USE_POLL
+			#include <poll.h>
+		#endif
+		#ifdef __linux__
+			#define USE_POLL
+			#include <poll.h>
+		#endif
+		#ifdef __linux
+			#define USE_POLL
+			#include <poll.h>
+		#endif
+		#ifdef __hpux
+			#define USE_POLL
+			#include <sys/poll.h>
+		#endif
+		#ifdef __OpenBSD__
+			#define USE_POLL
+			#include <sys/poll.h>
+		#endif
+		#ifdef _AIX
+			#define USE_POLL
+			#include <poll.h>
+		#endif
+		#ifdef _WIN32
+			#define USE_SELECT
+		#endif
+		#ifdef __EMX__
+			#define USE_SELECT
+		#endif
 
-#endif /* USE_SELECT */
+	#endif /* USE_SELECT */
 #endif /* USE_POLL */
 
 /* If did not chose, then use select()
-*/
+ */
 #ifndef USE_POLL
-#ifndef USE_SELECT
-#define USE_SELECT
-#endif
+	#ifndef USE_SELECT
+		#define USE_SELECT
+	#endif
 #endif
 
 #ifdef ENABLE_DUMP
-#ifndef _WIN32
-#include <sys/mman.h>
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-static int do_dump;
+	#ifndef _WIN32
+		#include <sys/mman.h>
+		#include <unistd.h>
+	#endif
+	#include <sys/types.h>
+	#include <sys/stat.h>
+	static int do_dump;
 #endif
 
 #include "debug.h"
@@ -166,92 +169,99 @@
  */
 
 
-int hostname_lookup= 0;		/* set if -H was specified */
-int new_style= 1;		/* unset if -old was specified */
-int n_retries= DEFAULT_RETRIES;
-int retry_interval= DEFAULT_RETRY_INTERVAL;
-int master_retry_interval= DEFAULT_RETRY_INTERVAL*4;
-int get_player_info= 0;
-int get_server_rules= 0;
-int up_servers_only= 0;
-int no_full_servers= 0;
-int no_empty_servers= 0;
-int no_header_display= 0;
-int raw_display= 0;
-char *raw_delimiter= "\t";
+int hostname_lookup = 0; /* set if -H was specified */
+int new_style = 1; /* unset if -old was specified */
+int n_retries = DEFAULT_RETRIES;
+int retry_interval = DEFAULT_RETRY_INTERVAL;
+int master_retry_interval = DEFAULT_RETRY_INTERVAL * 4;
+int get_player_info = 0;
+int get_server_rules = 0;
+int up_servers_only = 0;
+int no_full_servers = 0;
+int no_empty_servers = 0;
+int no_header_display = 0;
+int raw_display = 0;
+char *raw_delimiter = "\t";
 char *multi_delimiter = "|";
-int player_address= 0;
-int hex_player_names= 0;
-int hex_server_names= 0;
-int name_xforms= 1;
-int strip_carets= 1;
-int max_simultaneous= MAXFD_DEFAULT;
+int player_address = 0;
+int hex_player_names = 0;
+int hex_server_names = 0;
+int name_xforms = 1;
+int strip_carets = 1;
+int max_simultaneous = MAXFD_DEFAULT;
 int sendinterval = 5;
-int html_names= -1;
+int html_names = -1;
 extern int html_mode;
-int raw_arg= 0;
-int show_game_in_raw= 0;
-int progress= 0;
-int num_servers_total= 0;
-int num_players_total= 0;
-int max_players_total= 0;
-int num_servers_returned= 0;
-int num_servers_timed_out= 0;
-int num_servers_down= 0;
-server_type* default_server_type= NULL;
-FILE *OF;		/* output file */
-unsigned int source_ip= INADDR_ANY;
-unsigned short source_port_low= 0;
-unsigned short source_port_high= 0;
-unsigned short source_port= 0;
+int raw_arg = 0;
+int show_game_in_raw = 0;
+int progress = 0;
+int num_servers_total = 0;
+int num_players_total = 0;
+int max_players_total = 0;
+int num_servers_returned = 0;
+int num_servers_timed_out = 0;
+int num_servers_down = 0;
+server_type *default_server_type = NULL;
+FILE *OF; /* output file */
+unsigned int source_ip = INADDR_ANY;
+unsigned short source_port_low = 0;
+unsigned short source_port_high = 0;
+unsigned short source_port = 0;
 int show_game_port = 0;
 int no_port_offset = 0;
 
-#define ENCODING_LATIN_1  1
-#define ENCODING_UTF_8    8
-int xml_display= 0;
-int xml_encoding= ENCODING_LATIN_1;
+#define ENCODING_LATIN_1 1
+#define ENCODING_UTF_8  8
+#define UTF8BYTESWAPNOTACHAR	0xFFFE
+#define UTF8NOTACHAR	0xFFFF
+#define UTF8MAXFROMUCS4	0x10FFFF
+
+int output_bom = 0;
+int xml_display = 0;
+int xml_encoding = ENCODING_LATIN_1;
 
 #define SUPPORTED_SERVER_SORT	"pgihn"
 #define SUPPORTED_PLAYER_SORT	"PFTNS"
 #define SUPPORTED_SORT_KEYS	"l" SUPPORTED_SERVER_SORT SUPPORTED_PLAYER_SORT
 char sort_keys[32];
-int player_sort= 0;
-int server_sort= 0;
+int player_sort = 0;
+int server_sort = 0;
 
-void quicksort( void **array, int i, int j, int (*compare)(void*,void*));
-int qpartition( void **array, int i, int j, int (*compare)(void*,void*));
-void sort_servers( struct qserver **array, int size);
-void sort_players( struct qserver *server);
-int server_compare( struct qserver *one, struct qserver *two);
-int player_compare( struct player *one, struct player *two);
-int type_option_compare( server_type *one, server_type *two );
-int type_string_compare( server_type *one, server_type *two );
-STATIC int u2xmp_html_color( short color, char *dest, int *font_tag );
-STATIC int ut2k4_html_color( const unsigned char *color, char *dest, int *font_tag );
+void quicksort(void **array, int i, int j, int(*compare)(void *, void*));
+int qpartition(void **array, int i, int j, int(*compare)(void *, void*));
+void sort_servers(struct qserver **array, int size);
+void sort_players(struct qserver *server);
+int server_compare(struct qserver *one, struct qserver *two);
+int player_compare(struct player *one, struct player *two);
+int type_option_compare(server_type *one, server_type *two);
+int type_string_compare(server_type *one, server_type *two);
+int proccess_func_ret( struct qserver *server, int ret );
+int connection_inprogress();
+STATIC int u2xmp_html_color(short color, char *dest, int *font_tag);
+STATIC int ut2k4_html_color(const unsigned char *color, char *dest, int *font_tag);
 
-int show_errors= 0;
+int show_errors = 0;
 static int noserverdups = 1;
 
 #define DEFAULT_COLOR_NAMES_RAW		0
 #define DEFAULT_COLOR_NAMES_DISPLAY	1
-int color_names= -1;
+int color_names = -1;
 
 #define SECONDS 0
 #define CLOCK_TIME 1
 #define STOPWATCH_TIME 2
 #define DEFAULT_TIME_FMT_RAW		SECONDS
 #define DEFAULT_TIME_FMT_DISPLAY	CLOCK_TIME
-int time_format= -1;
+int time_format = -1;
 
-struct qserver *servers= NULL;
-struct qserver **last_server= &servers;
-struct qserver **connmap= NULL;
+struct qserver *servers = NULL;
+struct qserver **last_server = &servers;
+struct qserver **connmap = NULL;
 int max_connmap;
-struct qserver *last_server_bind= NULL;
-struct qserver *first_server_bind= NULL;
-int connected= 0;
-time_t run_timeout= 0;
+struct qserver *last_server_bind = NULL;
+struct qserver *first_server_bind = NULL;
+int connected = 0;
+time_t run_timeout = 0;
 time_t start_time;
 int waiting_for_masters;
 
@@ -260,8080 +270,9086 @@
 static struct qserver **server_hash[ADDRESS_HASH_LENGTH];
 static unsigned int server_hash_len[ADDRESS_HASH_LENGTH];
 static void free_server_hash();
-static void xml_display_player_info_info(struct player* player);
+static void xml_display_player_info_info(struct player *player);
 
-char *DOWN= "DOWN";
-char *SYSERROR= "SYSERROR";
-char *TIMEOUT= "TIMEOUT";
-char *MASTER= "MASTER";
-char *SERVERERROR= "ERROR";
-char *HOSTNOTFOUND= "HOSTNOTFOUND";
-char *BFRIS_SERVER_NAME= "BFRIS Server";
-char *GAMESPY_MASTER_NAME= "Gamespy Master";
+char *DOWN = "DOWN";
+char *SYSERROR = "SYSERROR";
+char *TIMEOUT = "TIMEOUT";
+char *MASTER = "MASTER";
+char *SERVERERROR = "ERROR";
+char *HOSTNOTFOUND = "HOSTNOTFOUND";
+char *BFRIS_SERVER_NAME = "BFRIS Server";
+char *GAMESPY_MASTER_NAME = "Gamespy Master";
 
-int display_prefix= 0;
+int display_prefix = 0;
 char *current_filename;
 int current_fileline;
 
-int count_bits( int n);
+int count_bits(int n);
 
-static int qserver_get_timeout(struct qserver* server, struct timeval* now);
-static int wait_for_timeout( unsigned int ms);
+static int qserver_get_timeout(struct qserver *server, struct timeval *now);
+static int wait_for_timeout(unsigned int ms);
 static void finish_output();
-static void decode_stefmaster_packet( struct qserver *server, char *pkt, int pktlen);
-static void decode_q3master_packet( struct qserver *server, char *pkt, int pktlen);
+static int decode_stefmaster_packet(struct qserver *server, char *pkt, int pktlen);
+static int decode_q3master_packet(struct qserver *server, char *ikt, int pktlen);
 
-char * ut2003_strdup( const char *string, const char *end, char **next );
-int html_entity( const char c, char *dest );
+char *ut2003_strdup(const char *string, const char *end, char **next);
+int html_entity(const char c, char *dest);
 
-static const char * unreal_colors[] = {
-	"AliceBlue",
-	"AntiqueWhite",
-	"Aqua",
-	"Aquamarine",
-	"Azure",
-	"Beige",
-	"Bisque",
-	"Black",
-	"BlanchedAlmond",
-	"Blue",
-	"BlueViolet",
-	"Brown",
-	"BurlyWood",
-	"CadetBlue",
-	"Chartreuse",
-	"Chocolate",
-	"Coral",
-	"CornflowerBlue",
-	"Cornsilk",
-	"Crimson",
-	"Cyan",
-	"DarkBlue",
-	"DarkCyan",
-	"DarkGoldenrod",
-	"DarkGray",
-	"DarkGreen",
-	"DarkKhaki",
-	"DarkMagenta",
-	"DarkOliveGreen",
-	"DarkOrange",
-	"DarkOrchid",
-	"DarkRed",
-	"DarkSalmon",
-	"DarkSeaGreen",
-	"DarkSlateBlue",
-	"DarkSlateGray",
-	"DarkTurquoise",
-	"DarkViolet",
-	"DeepPink",
-	"DeepSkyBlue",
-	"DimGray",
-	"DodgerBlue",
-	"FireBrick",
-	"FloralWhite",
-	"ForestGreen",
-	"Fuchsia",
-	"Gainsboro",
-	"GhostWhite",
-	"Gold",
-	"Goldenrod",
-	"Gray",
-	"Green",
-	"GreenYellow",
-	"Honeydew",
-	"HotPink",
-	"IndianRed",
-	"Indigo",
-	"Ivory",
-	"Khaki",
-	"Lavender",
-	"LavenderBlush",
-	"LawnGreen",
-	"LemonChiffon",
-	"LightBlue",
-	"LightCoral",
-	"LightCyan",
-	"LightGoldenrodYellow",
-	"LightGreen",
-	"LightGrey",
-	"LightPink",
-	"LightSalmon",
-	"LightSeaGreen",
-	"LightSkyBlue",
-	"LightSlateGray",
-	"LightSteelBlue",
-	"LightYellow",
-	"Lime",
-	"LimeGreen",
-	"Linen",
-	"Magenta",
-	"Maroon",
-	"MediumAquamarine",
-	"MediumBlue",
-	"MediumOrchid",
-	"MediumPurple",
-	"MediumSeaGreen",
-	"MediumSlateBlue",
-	"MediumSpringGreen",
-	"MediumTurquoise",
-	"MediumVioletRed",
-	"MidnightBlue",
-	"MintCream",
-	"MistyRose",
-	"Moccasin",
-	"NavajoWhite",
-	"Navy",
-	"OldLace",
-	"Olive",
-	"OliveDrab",
-	"Orange",
-	"OrangeRed",
-	"Orchid",
-	"PaleGoldenrod",
-	"PaleGreen",
-	"PaleTurquoise",
-	"PaleVioletRed",
-	"PapayaWhip",
-	"PeachPuff",
-	"Peru",
-	"Pink",
-	"Plum",
-	"PowderBlue",
-	"Purple",
-	"Red",
-	"RosyBrown",
-	"RoyalBlue",
-	"SaddleBrown",
-	"Salmon",
-	"SandyBrown",
-	"SeaGreen",
-	"Seashell",
-	"Sienna",
-	"Silver",
-	"SkyBlue",
-	"SlateBlue",
-	"SlateGray",
-	"Snow",
-	"SpringGreen",
-	"SteelBlue",
-	"Tan",
-	"Teal",
-	"Thistle",
-	"Tomato",
-	"Turquoise",
-	"Violet",
-	"Wheat",
-	"White",
-	"WhiteSmoke",
-	"Yellow",
-	"YellowGreen",
+static const char *unreal_colors[] =
+{
+	"AliceBlue", "AntiqueWhite", "Aqua", "Aquamarine", "Azure", "Beige", "Bisque", "Black", "BlanchedAlmond", "Blue", "BlueViolet",
+	"Brown", "BurlyWood", "CadetBlue", "Chartreuse", "Chocolate", "Coral", "CornflowerBlue", "Cornsilk", "Crimson", "Cyan",
+	"DarkBlue", "DarkCyan", "DarkGoldenrod", "DarkGray", "DarkGreen", "DarkKhaki", "DarkMagenta", "DarkOliveGreen", "DarkOrange",
+	"DarkOrchid", "DarkRed", "DarkSalmon", "DarkSeaGreen", "DarkSlateBlue", "DarkSlateGray", "DarkTurquoise", "DarkViolet",
+	"DeepPink", "DeepSkyBlue", "DimGray", "DodgerBlue", "FireBrick", "FloralWhite", "ForestGreen", "Fuchsia", "Gainsboro",
+	"GhostWhite", "Gold", "Goldenrod", "Gray", "Green", "GreenYellow", "Honeydew", "HotPink", "IndianRed", "Indigo", "Ivory",
+	"Khaki", "Lavender", "LavenderBlush", "LawnGreen", "LemonChiffon", "LightBlue", "LightCoral", "LightCyan",
+	"LightGoldenrodYellow", "LightGreen", "LightGrey", "LightPink", "LightSalmon", "LightSeaGreen", "LightSkyBlue",
+	"LightSlateGray", "LightSteelBlue", "LightYellow", "Lime", "LimeGreen", "Linen", "Magenta", "Maroon", "MediumAquamarine",
+	"MediumBlue", "MediumOrchid", "MediumPurple", "MediumSeaGreen", "MediumSlateBlue", "MediumSpringGreen", "MediumTurquoise",
+	"MediumVioletRed", "MidnightBlue", "MintCream", "MistyRose", "Moccasin", "NavajoWhite", "Navy", "OldLace", "Olive", "OliveDrab",
+	"Orange", "OrangeRed", "Orchid", "PaleGoldenrod", "PaleGreen", "PaleTurquoise", "PaleVioletRed", "PapayaWhip", "PeachPuff",
+	"Peru", "Pink", "Plum", "PowderBlue", "Purple", "Red", "RosyBrown", "RoyalBlue", "SaddleBrown", "Salmon", "SandyBrown",
+	"SeaGreen", "Seashell", "Sienna", "Silver", "SkyBlue", "SlateBlue", "SlateGray", "Snow", "SpringGreen", "SteelBlue", "Tan",
+	"Teal", "Thistle", "Tomato", "Turquoise", "Violet", "Wheat", "White", "WhiteSmoke", "Yellow", "YellowGreen",
 };
 
-static const char *unreal_rgb_colors[] = {
-	"#F0F8FF",
-	"#FAEBD7",
-	"#00FFFF",
-	"#7FFFD4",
-	"#F0FFFF",
-	"#F5F5DC",
-	"#FFE4C4",
-	"#000000",
-	"#FFEBCD",
-	"#0000FF",
-	"#8A2BE2",
-	"#A52A2A",
-	"#DEB887",
-	"#5F9EA0",
-	"#7FFF00",
-	"#D2691E",
-	"#FF7F50",
-	"#6495ED",
-	"#FFF8DC",
-	"#DC143C",
-	"#00FFFF",
-	"#00008B",
-	"#008B8B",
-	"#B8860B",
-	"#A9A9A9",
-	"#006400",
-	"#BDB76B",
-	"#8B008B",
-	"#556B2F",
-	"#FF8C00",
-	"#9932CC",
-	"#8B0000",
-	"#E9967A",
-	"#8FBC8F",
-	"#483D8B",
-	"#2F4F4F",
-	"#00CED1",
-	"#9400D3",
-	"#FF1493",
-	"#00BFFF",
-	"#696969",
-	"#1E90FF",
-	"#B22222",
-	"#FFFAF0",
-	"#228B22",
-	"#FF00FF",
-	"#DCDCDC",
-	"#F8F8FF",
-	"#FFD700",
-	"#DAA520",
-	"#808080",
-	"#008000",
-	"#ADFF2F",
-	"#F0FFF0",
-	"#FF69B4",
-	"#CD5C5C",
-	"#4B0082",
-	"#FFFFF0",
-	"#F0E68C",
-	"#E6E6FA",
-	"#FFF0F5",
-	"#7CFC00",
-	"#FFFACD",
-	"#ADD8E6",
-	"#F08080",
-	"#E0FFFF",
-	"#FAFAD2",
-	"#90EE90",
-	"#D3D3D3",
-	"#FFB6C1",
-	"#FFA07A",
-	"#20B2AA",
-	"#87CEFA",
-	"#778899",
-	"#B0C4DE",
-	"#FFFFE0",
-	"#00FF00",
-	"#32CD32",
-	"#FAF0E6",
-	"#FF00FF",
-	"#800000",
-	"#66CDAA",
-	"#0000CD",
-	"#BA55D3",
-	"#9370DB",
-	"#3CB371",
-	"#7B68EE",
-	"#00FA9A",
-	"#48D1CC",
-	"#C71585",
-	"#191970",
-	"#F5FFFA",
-	"#FFE4E1",
-	"#FFE4B5",
-	"#FFDEAD",
-	"#000080",
-	"#FDF5E6",
-	"#808000",
-	"#6B8E23",
-	"#FFA500",
-	"#FF4500",
-	"#DA70D6",
-	"#EEE8AA",
-	"#98FB98",
-	"#AFEEEE",
-	"#DB7093",
-	"#FFEFD5",
-	"#FFDAB9",
-	"#CD853F",
-	"#FFC0CB",
-	"#DDA0DD",
-	"#B0E0E6",
-	"#800080",
-	"#FF0000",
-	"#BC8F8F",
-	"#4169E1",
-	"#8B4513",
-	"#FA8072",
-	"#F4A460",
-	"#2E8B57",
-	"#FFF5EE",
-	"#A0522D",
-	"#C0C0C0",
-	"#87CEEB",
-	"#6A5ACD",
-	"#708090",
-	"#FFFAFA",
-	"#00FF7F",
-	"#4682B4",
-	"#D2B48C",
-	"#008080",
-	"#D8BFD8",
-	"#FF6347",
-	"#40E0D0",
-	"#EE82EE",
-	"#F5DEB3",
-	"#FFFFFF",
-	"#F5F5F5",
-	"#FFFF00",
-	"#9ACD32",
+static const char *unreal_rgb_colors[] =
+{
+	"#F0F8FF", "#FAEBD7", "#00FFFF", "#7FFFD4", "#F0FFFF", "#F5F5DC", "#FFE4C4", "#000000", "#FFEBCD", "#0000FF", "#8A2BE2", "#A52A2A",
+	"#DEB887", "#5F9EA0", "#7FFF00", "#D2691E", "#FF7F50", "#6495ED", "#FFF8DC", "#DC143C", "#00FFFF", "#00008B", "#008B8B",
+	"#B8860B", "#A9A9A9", "#006400", "#BDB76B", "#8B008B", "#556B2F", "#FF8C00", "#9932CC", "#8B0000", "#E9967A", "#8FBC8F",
+	"#483D8B", "#2F4F4F", "#00CED1", "#9400D3", "#FF1493", "#00BFFF", "#696969", "#1E90FF", "#B22222", "#FFFAF0", "#228B22",
+	"#FF00FF", "#DCDCDC", "#F8F8FF", "#FFD700", "#DAA520", "#808080", "#008000", "#ADFF2F", "#F0FFF0", "#FF69B4", "#CD5C5C",
+	"#4B0082", "#FFFFF0", "#F0E68C", "#E6E6FA", "#FFF0F5", "#7CFC00", "#FFFACD", "#ADD8E6", "#F08080", "#E0FFFF", "#FAFAD2",
+	"#90EE90", "#D3D3D3", "#FFB6C1", "#FFA07A", "#20B2AA", "#87CEFA", "#778899", "#B0C4DE", "#FFFFE0", "#00FF00", "#32CD32",
+	"#FAF0E6", "#FF00FF", "#800000", "#66CDAA", "#0000CD", "#BA55D3", "#9370DB", "#3CB371", "#7B68EE", "#00FA9A", "#48D1CC",
+	"#C71585", "#191970", "#F5FFFA", "#FFE4E1", "#FFE4B5", "#FFDEAD", "#000080", "#FDF5E6", "#808000", "#6B8E23", "#FFA500",
+	"#FF4500", "#DA70D6", "#EEE8AA", "#98FB98", "#AFEEEE", "#DB7093", "#FFEFD5", "#FFDAB9", "#CD853F", "#FFC0CB", "#DDA0DD",
+	"#B0E0E6", "#800080", "#FF0000", "#BC8F8F", "#4169E1", "#8B4513", "#FA8072", "#F4A460", "#2E8B57", "#FFF5EE", "#A0522D",
+	"#C0C0C0", "#87CEEB", "#6A5ACD", "#708090", "#FFFAFA", "#00FF7F", "#4682B4", "#D2B48C", "#008080", "#D8BFD8", "#FF6347",
+	"#40E0D0", "#EE82EE", "#F5DEB3", "#FFFFFF", "#F5F5F5", "#FFFF00", "#9ACD32",
+
 };
 
-void free_server( struct qserver *server);
-void free_player( struct player *player);
-void free_rule( struct rule *rule);
-void standard_display_server( struct qserver *server);
+void free_server(struct qserver *server);
+void free_player(struct player *player);
+void free_rule(struct rule *rule);
+void standard_display_server(struct qserver *server);
 
 /* MODIFY HERE
  * Change these functions to display however you want
  */
-void
-display_server( struct qserver *server)
+void display_server(struct qserver *server)
 {
-    if ( player_sort)
-	sort_players( server);
-
-    if ( raw_display)
-	raw_display_server( server);
-    else if ( xml_display)
-	xml_display_server( server);
-    else if ( have_server_template())
-	template_display_server( server);
-    else
-	standard_display_server( server);
-
-    free_server( server);
-}
-
-void
-standard_display_server( struct qserver *server)
-{
-    char prefix[64];
-    if ( display_prefix)
-	sprintf( prefix, "%-4s ", server->type->type_prefix);
-    else
-	prefix[0]='\0';
-
-    if ( server->server_name == DOWN)  {
-	if ( ! up_servers_only)
-	    fprintf( OF, "%s%-16s %10s\n", prefix,
-		(hostname_lookup) ? server->host_name : server->arg, DOWN);
-	return;
-    }
-    if ( server->server_name == TIMEOUT)  {
-	if ( server->flags & FLAG_BROADCAST && server->n_servers)
-	    fprintf( OF, "%s%-16s %d servers\n", prefix,
-		server->arg, server->n_servers);
-	else if ( ! up_servers_only)
-	    fprintf( OF, "%s%-16s no response\n", prefix,
-		(hostname_lookup) ? server->host_name : server->arg);
-	return;
-    }
-
-    if ( server->type->master)  {
-	display_qwmaster(server);
-	return;
-    }
-
-    if ( no_full_servers && server->num_players >= server->max_players)
-	return;
-
-    if ( no_empty_servers && server->num_players == 0)
-	return;
-
-    if ( server->error != NULL)  {
-	fprintf( OF, "%s%-21s ERROR <%s>\n",
-	    prefix,
-	    (hostname_lookup) ? server->host_name : server->arg,
-	    server->error);
-	return;
-    }
-
-    if ( new_style)  {
-	char *game= get_qw_game( server);
-	int map_name_width= 8, game_width=0;
-	switch( server->type->id)  {
-	case QW_SERVER: case Q2_SERVER: case Q3_SERVER:
-	    game_width= 9; break;
-	case TRIBES2_SERVER:
-	    map_name_width= 14; game_width= 8; break;
-	case GHOSTRECON_SERVER:
-	    map_name_width= 15; game_width= 15; break;
-	case HL_SERVER:
-	    map_name_width= 12; break;
-	default:
-	    break;
+	if (player_sort)
+	{
+		sort_players(server);
 	}
-	fprintf( OF, "%s%-21s %2d/%2d %*s %6d / %1d  %*s %s\n",
-	    prefix,
-	    (hostname_lookup) ? server->host_name : server->arg,
-	    server->num_players, server->max_players,
-	    map_name_width, (server->map_name) ? server->map_name : "?",
-	    server->n_requests ? server->ping_total/server->n_requests : 999,
-	    server->n_retries,
-	    game_width, game,
-	    xform_name(server->server_name, server));
-	if ( get_server_rules)
-	    server->type->display_rule_func( server);
-	if ( get_player_info)
-	    server->type->display_player_func( server);
-    }
-    else  {
-	char name[512];
-	sprintf( name, "\"%s\"", server->server_name);
-	fprintf( OF, "%-16s %10s map %s at %22s %d/%d players %d ms\n",
-	    (hostname_lookup) ? server->host_name : server->arg,
-	    name, server->map_name,
-	    server->address, server->num_players, server->max_players,
-	    server->n_requests ? server->ping_total/server->n_requests : 999);
-    }
-}
-
-void
-display_qwmaster( struct qserver *server)
-{
-    char *prefix;
-    prefix= server->type->type_prefix;
-
-    if ( server->error != NULL)
-	fprintf( OF, "%s %-17s ERROR <%s>\n", prefix,
-		(hostname_lookup) ? server->host_name : server->arg,
-		server->error);
-    else
-	fprintf( OF, "%s %-17s %d servers %6d / %1d\n", prefix,
-	    (hostname_lookup) ? server->host_name : server->arg,
-	    server->n_servers,
-	    server->n_requests ? server->ping_total/server->n_requests : 999,
-	    server->n_retries);
-}
-
-void
-display_header()
-{
-    if ( ! no_header_display)
-	fprintf( OF, "%-16s %8s %8s %15s    %s\n", "ADDRESS", "PLAYERS", "MAP",
-		"RESPONSE TIME", "NAME");
-}
-
-void
-display_server_rules( struct qserver *server)
-{
-    struct rule *rule;
-    int printed= 0;
-    rule= server->rules;
-    for ( ; rule != NULL; rule= rule->next)  {
-	if ( (server->type->id != Q_SERVER &&
-		server->type->id != H2_SERVER) || ! is_default_rule( rule)) {
-	    fprintf( OF, "%c%s=%s", (printed)?',':'\t', rule->name, rule->value);
-	    printed++;
-	}
-    }
-    if ( printed)
-	fputs( "\n", OF);
-}
-
-void
-display_q_player_info( struct qserver *server)
-{
-    char fmt[128];
-    struct player *player;
-
-    strcpy( fmt, "\t#%-2d %3d frags %9s ");
-
-    if ( color_names)
-	strcat( fmt, "%9s:%-9s ");
-    else
-	strcat( fmt, "%2s:%-2s ");
-    if ( player_address)
-	strcat( fmt, "%22s ");
-    else
-	strcat( fmt, "%s");
-    strcat( fmt, "%s\n");
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		player->number,
-		player->frags,
-		play_time(player->connect_time,1),
-		quake_color(player->shirt_color),
-		quake_color(player->pants_color),
-		(player_address)?player->address:"",
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_qw_player_info( struct qserver *server)
-{
-    char fmt[128];
-    struct player *player;
-
-    strcpy( fmt, "\t#%-6d %3d frags %6s@%-5s %8s");
-
-    if ( color_names)
-	strcat( fmt, "%9s:%-9s ");
-    else
-	strcat( fmt, "%2s:%-2s ");
-    strcat( fmt, "%s\n");
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		player->number,
-		player->frags,
-		play_time(player->connect_time,0),
-		ping_time(player->ping),
-		player->skin ? player->skin : "",
-		quake_color(player->shirt_color),
-		quake_color(player->pants_color),
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_q2_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( server->flags & FLAG_PLAYER_TEAMS)
-	    fprintf( OF, "\t%3d frags team#%d %8s  %s\n",
-		player->frags,
-		player->team,
-		ping_time(player->ping),
-		xform_name( player->name, server));
-	else
-	    fprintf( OF, "\t%3d frags %8s  %s\n",
-		player->frags,
-		ping_time(player->ping),
-		xform_name( player->name, server));
-    }
-}
-
-
-void
-display_unreal_player_info( struct qserver *server)
-{
-    struct player *player;
-    static const char * fmt_team_number= "\t%3d frags team#%-3d %7s %s\n";
-    static const char * fmt_team_name= "\t%3d frags %8s %7s %s\n";
-    static const char * fmt_no_team= "\t%3d frags %8s  %s\n";
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
+	if (raw_display)
 	{
-		if ( server->flags & FLAG_PLAYER_TEAMS)
-		{
-			// we use (player->score) ? player->score : player->frags,
-			// so we get details from halo
-			if ( player->team_name)
-			{
-				fprintf( OF, fmt_team_name,
-					(player->score && NA_INT != player->score ) ? player->score : player->frags,
-					player->team_name,
-					ping_time(player->ping),
-					xform_name( player->name, server)
-				);
-			}
-			else
-			{
-				fprintf( OF, fmt_team_number,
-					(player->score && NA_INT != player->score ) ? player->score : player->frags,
-					player->team,
-					ping_time(player->ping),
-					xform_name( player->name, server)
-				);
-			}
-		}
-		else
-		{
-			fprintf( OF, fmt_no_team,
-				player->frags,
-				ping_time(player->ping),
-				xform_name( player->name, server)
-			);
-		}
+		raw_display_server(server);
+	}
+	else if (xml_display)
+	{
+		xml_display_server(server);
+	}
+	else if (have_server_template())
+	{
+		template_display_server(server);
+	}
+	else
+	{
+		standard_display_server(server);
 	}
-}
-
-void
-display_shogo_player_info( struct qserver *server)
-{
-    struct player *player;
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, "\t%3d frags %8s %s\n",
-		player->frags,
-		ping_time(player->ping),
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_halflife_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, "\t%3d frags %8s %s\n",
-		player->frags,
-		play_time( player->connect_time,1),
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_tribes_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, "\t%4d score team#%d %8s %s\n",
-		player->frags,
-		player->team,
-		ping_time( player->ping),
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_tribes2_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, "\tscore %4d %14s %s\n",
-		player->frags,
-		player->team_name ? player->team_name : (player->number == TRIBES_TEAM ? "TEAM" : "?"),
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_bfris_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-      fprintf( OF, "\ttid: %d, ship: %d, team: %s, ping: %d, score: %d, kills: %d, name: %s\n",
-	     player->number,
-	     player->ship,
-	     player->team_name,
-	     player->ping,
-	     player->score,
-	     player->frags,
-	     xform_name( player->name, server));
-    }
-}
-
-void
-display_descent3_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, "\t%3d frags %3d deaths team#%-3d %7s %s\n",
-		player->frags,
-		player->deaths,
-		player->team,
-		ping_time(player->ping),
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_ghostrecon_player_info( struct qserver *server)
-{
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, "\tdead=%3d team#%-3d %s\n",
-		player->deaths,
-		player->team,
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_eye_player_info( struct qserver *server)
-{
-    struct player *player;
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->team_name)
-	    fprintf( OF, "\tscore %4d %6s team %12s %s\n",
-		player->score,
-		ping_time(player->ping),
-		player->team_name,
-		xform_name( player->name, server));
-	else
-	    fprintf( OF, "\tscore %4d %6s team#%d %s\n",
-		player->score,
-		ping_time(player->ping),
-		player->team,
-		xform_name( player->name, server));
-    }
+	free_server(server);
 }
 
-int
-calculate_armyops_score( struct player *player)
+void standard_display_server(struct qserver *server)
 {
-	/* Calculates a player's score for ArmyOps from the basic components */
-
-	int score = 0;
-	int kill_score = 0;
-	struct info *info;
+	char prefix[64];
+	if (display_prefix)
+	{
+		sprintf(prefix, "%-4s ", server->type->type_prefix);
+	}
+	else
+	{
+		prefix[0] = '\0';
+	}
 
-	for ( info = player->info; info; info = info->next )
+	if (server->server_name == DOWN)
 	{
-		if ( 0 == strcmp( info->name, "leader") || 0 == strcmp( info->name, "goal") || 0 == strcmp( info->name, "roe") )
-			score += atoi( info->value );
-		else if ( 0 == strcmp( info->name, "kia") || 0 == strcmp( info->name, "enemy") )
-			kill_score += atoi( info->value );
+		if (!up_servers_only)
+		{
+			fprintf(OF, "%s%-16s %10s\n", prefix, (hostname_lookup) ? server->host_name: server->arg, DOWN);
+		}
+		return ;
 	}
 
-	if ( kill_score > 0 )
-		score += kill_score;
+	if (server->server_name == TIMEOUT)
+	{
+		if (server->flags &FLAG_BROADCAST && server->n_servers)
+		{
+			fprintf(OF, "%s%-16s %d servers\n", prefix, server->arg, server->n_servers);
+		}
+		else if (!up_servers_only)
+		{
+			fprintf(OF, "%s%-16s no response\n", prefix, (hostname_lookup) ? server->host_name: server->arg);
+		}
+		return ;
+	}
 
-	return score;
-}
+	if (server->type->master)
+	{
+		display_qwmaster(server);
+		return ;
+	}
 
-void
-display_gs2_player_info( struct qserver *server)
-{
-    struct player *player;
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->team_name)
-	    fprintf( OF, "\tscore %4d %6s team %12s %s\n",
-		player->score,
-		ping_time(player->ping),
-		player->team_name,
-		xform_name( player->name, server));
-	else
-	    fprintf( OF, "\tscore %4d %6s team#%d %s\n",
-		player->score,
-		ping_time(player->ping),
-		player->team,
-		xform_name( player->name, server));
-    }
-}
-
-void
-display_armyops_player_info( struct qserver *server)
-{
-	struct player *player;
+	if (no_full_servers && server->num_players >= server->max_players)
+	{
+		return ;
+	}
 
-	player= server->players;
-	for ( ; player != NULL; player= player->next)  {
-		player->score = calculate_armyops_score( player );
+	if (no_empty_servers && server->num_players == 0)
+	{
+		return ;
 	}
 
-	display_gs2_player_info(server);
-}
+	if (server->error != NULL)
+	{
+		fprintf(OF, "%s%-21s ERROR <%s>\n", prefix, (hostname_lookup) ? server->host_name: server->arg, server->error);
+		return ;
+	}
 
-void
-display_ts2_player_info( struct qserver *server)
-{
-    struct player *player;
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
-    {
-	    fprintf( OF, "\t%6s %s\n",
-			ping_time(player->ping),
-			xform_name( player->name, server)
+	if (new_style)
+	{
+		char *game = get_qw_game(server);
+		int map_name_width = 8, game_width = 0;
+		switch (server->type->id)
+		{
+			case QW_SERVER:
+			case Q2_SERVER:
+			case Q3_SERVER:
+				game_width = 9;
+				break;
+			case TRIBES2_SERVER:
+				map_name_width = 14;
+				game_width = 8;
+				break;
+			case GHOSTRECON_SERVER:
+				map_name_width = 15;
+				game_width = 15;
+				break;
+			case HL_SERVER:
+				map_name_width = 12;
+				break;
+			default:
+				break;
+		}
+		fprintf(OF,
+			"%s%-21s %2d/%-2d %2d/%-2d %*s %6d / %1d  %*s %s\n",
+			prefix,
+			(hostname_lookup) ? server->host_name: server->arg,
+			server->num_players,
+			server->max_players,
+			server->num_spectators,
+			server->max_spectators,
+			map_name_width,
+			(server->map_name) ? server->map_name: "?",
+			server->n_requests ? server->ping_total / server->n_requests: 999,
+			server->n_retries,
+			game_width,
+			game,
+			xform_name(server->server_name, server)
+		);
+		if (get_server_rules)
+		{
+			server->type->display_rule_func(server);
+		}
+		if (get_player_info)
+		{
+			server->type->display_player_func(server);
+		}
+	}
+	else
+	{
+		char name[512];
+		sprintf(name, "\"%s\"", server->server_name);
+		fprintf(OF,
+			"%-16s %10s map %s at %22s %d/%d players %d ms\n",
+			(hostname_lookup) ? server->host_name: server->arg,
+			name,
+			server->map_name,
+			server->address,
+			server->num_players,
+			server->max_players,
+			server->n_requests ? server->ping_total / server->n_requests: 999
 		);
-    }
+	}
 }
 
-void
-display_tm_player_info( struct qserver *server)
+void display_qwmaster(struct qserver *server)
 {
-    struct player *player;
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
-    {
-	    fprintf( OF, "\t%6s %s\n",
-			ping_time(player->ping),
-			xform_name( player->name, server)
+	char *prefix;
+	prefix = server->type->type_prefix;
+
+	if (server->error != NULL)
+	{
+		fprintf(OF,
+			"%s %-17s ERROR <%s>\n",
+			prefix,
+			(hostname_lookup) ? server->host_name: server->arg,
+			server->error
+		);
+	}
+	else
+	{
+		fprintf(OF,
+			"%s %-17s %d servers %6d / %1d\n",
+			prefix,
+			(hostname_lookup) ? server->host_name: server->arg,
+			server->n_servers,
+			server->n_requests ? server->ping_total / server->n_requests: 999,
+			server->n_retries
 		);
-    }
+	}
 }
 
-void
-display_doom3_player_info( struct qserver *server)
+void display_header()
 {
-    struct player *player;
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->tribe_tag)
-	    fprintf( OF, "\t#%-4d score %4d %6s team %12s %s\n",
-		player->number,
-		player->score,
-		ping_time(player->ping),
-		player->tribe_tag,
-		xform_name( player->name, server));
-	else
-	    fprintf( OF, "\t#%-4d score %4d %6s team#%d %s\n",
-		player->number,
-		player->score,
-		ping_time(player->ping),
-		player->team,
-		xform_name( player->name, server));
-    }
+	if (!no_header_display)
+	{
+		fprintf(OF, "%-16s %8s %8s %15s    %s\n", "ADDRESS", "PLAYERS", "MAP", "RESPONSE TIME", "NAME");
+	}
 }
 
-void
-display_hl2_player_info( struct qserver *server )
+void display_server_rules(struct qserver *server)
 {
-	// ATM this looks like halflife player info
-	display_halflife_player_info( server );
+	struct rule *rule;
+	int printed = 0;
+	rule = server->rules;
+	for (; rule != NULL; rule = rule->next)
+	{
+		if ((server->type->id != Q_SERVER && server->type->id != H2_SERVER) || !is_default_rule(rule))
+		{
+			fprintf(OF, "%c%s=%s", (printed) ? ',' : '\t', rule->name, rule->value);
+			printed++;
+		}
+	}
+	if (printed)
+	{
+		fputs("\n", OF);
+	}
 }
 
-void
-display_ravenshield_player_info( struct qserver *server)
+void display_q_player_info(struct qserver *server)
 {
-    struct player *player = server->players;
-    for ( ; player != NULL; player = player->next )
-	{
-		fprintf( OF, "\t%3d frags %8s %s\n",
-			player->frags,
-			play_time( player->connect_time,1),
-			xform_name( player->name, server));
-    }
-}
+	char fmt[128];
+	struct player *player;
 
+	strcpy(fmt, "\t#%-2d %3d frags %9s ");
 
-void
-display_savage_player_info( struct qserver *server)
-{
-    struct player *player = server->players;
-    for ( ; player != NULL; player = player->next )
+	if (color_names)
+	{
+		strcat(fmt, "%9s:%-9s ");
+	}
+	else
+	{
+		strcat(fmt, "%2s:%-2s ");
+	}
+	if (player_address)
 	{
-		fprintf( OF, "\t%3d frags %8s %s\n",
+		strcat(fmt, "%22s ");
+	}
+	else
+	{
+		strcat(fmt, "%s");
+	}
+	strcat(fmt, "%s\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt,
+			player->number,
 			player->frags,
-			play_time( player->connect_time,1),
-			xform_name( player->name, server));
-    }
+			play_time(player->connect_time, 1),
+			quake_color(player->shirt_color),
+			quake_color(player->pants_color),
+			(player_address) ? player->address: "",
+			xform_name(player->name, server)
+		);
+	}
 }
 
-
-void
-display_farcry_player_info( struct qserver *server)
+void display_qw_player_info(struct qserver *server)
 {
-    struct player *player = server->players;
-    for ( ; player != NULL; player = player->next )
+	char fmt[128];
+	struct player *player;
+
+	strcpy(fmt, "\t#%-6d %5d frags %6s@%-5s %8s");
+
+	if (color_names)
+	{
+		strcat(fmt, "%9s:%-9s ");
+	}
+	else
+	{
+		strcat(fmt, "%2s:%-2s ");
+	}
+	strcat(fmt, "%12s %s\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t%3d frags %8s %s\n",
+		fprintf(OF, fmt,
+			player->number,
 			player->frags,
-			play_time( player->connect_time,1),
-			xform_name( player->name, server));
-    }
+			play_time(player->connect_time, 0),
+			ping_time(player->ping),
+			player->skin ? player->skin: "",
+			quake_color(player->shirt_color),
+			quake_color(player->pants_color),
+			xform_name(player->name, server),
+			xform_name(player->team_name, server)
+		);
+	}
 }
 
-char *
-get_qw_game( struct qserver *server)
+void display_q2_player_info(struct qserver *server)
 {
-    struct rule *rule;
-    if ( server->type->game_rule == NULL || *server->type->game_rule == '\0')
-	{
-		return "";
-	}
-    rule = server->rules;
-    for ( ; rule != NULL; rule = rule->next)
+	struct player *player;
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		if ( strcmp( rule->name, server->type->game_rule) == 0)
+		if (server->flags &FLAG_PLAYER_TEAMS)
 		{
-			if ( server->type->id == Q3_SERVER && strcmp( rule->value, "baseq3") == 0)
-			{
-				return "";
-			}
-			return rule->value;
+			fprintf(OF,"\t%3d frags team#%d %8s  %s\n", player->frags, player->team, ping_time(player->ping), xform_name(player->name, server));
 		}
-	}
-    rule= server->rules;
-    for ( ; rule != NULL; rule = rule->next)
-	{
-		if ( strcmp( rule->name, "game" ) == 0)
+		else
 		{
-			return rule->value;
+			fprintf(OF, "\t%3d frags %8s  %s\n", player->frags, ping_time(player->ping), xform_name(player->name, server));
 		}
 	}
-	return "";
 }
 
-/* Raw output for web master types
- */
 
-#define RD raw_delimiter
 
-void
-raw_display_server( struct qserver *server)
+void display_unreal_player_info(struct qserver *server)
 {
-    char *prefix;
-    int ping_time;
-    prefix= server->type->type_prefix;
-
-    if ( server->n_requests)
-	ping_time= server->ping_total/server->n_requests;
-    else
-	ping_time= 999;
-
-    if ( server->server_name == DOWN)  {
-	if ( ! up_servers_only)
-	    fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s\n\n",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup)?server->host_name:server->arg,
-		RD, DOWN);
-	return;
-    }
-    if ( server->server_name == TIMEOUT)  {
-	if ( server->flags & FLAG_BROADCAST && server->n_servers)
-	    fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%d\n", prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, server->arg,
-		RD, server->n_servers);
-	else if ( ! up_servers_only)
-	    fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s\n\n",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup)?server->host_name:server->arg,
-		RD, TIMEOUT);
-	return;
-    }
-
-    if ( server->error != NULL)  {
-        fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s" "%s%s",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup) ? server->host_name : server->arg,
-		RD, "ERROR",
-		RD, server->error);
-    }
-    else if ( server->type->flags & TF_RAW_STYLE_QUAKE)  {
-        fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s" "%s%s" "%s%d" "%s%s" "%s%d" "%s%d" "%s%d" "%s%d" "%s%s",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup) ? server->host_name : server->arg,
-		RD, xform_name( server->server_name, server),
-		RD, server->address,
-		RD, server->protocol_version,
-		RD, server->map_name,
-		RD, server->max_players,
-		RD, server->num_players,
-		RD, ping_time,
-		RD, server->n_retries,
-		show_game_in_raw ? RD : "", show_game_in_raw ? get_qw_game(server) : ""
-        );
-    }
-    else if ( server->type->flags & TF_RAW_STYLE_TRIBES)  {
-	fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s" "%s%s" "%s%d" "%s%d",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup) ? server->host_name : server->arg,
-		RD, xform_name( server->server_name, server),
-		RD, (server->map_name) ? server->map_name : "?",
-		RD, server->num_players,
-		RD, server->max_players
-	);
-    }
-    else if ( server->type->flags & TF_RAW_STYLE_GHOSTRECON)  {
-	fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s" "%s%s" "%s%d" "%s%d",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup) ? server->host_name : server->arg,
-		RD, xform_name( server->server_name, server),
-		RD, (server->map_name) ? server->map_name : "?",
-		RD, server->num_players,
-		RD, server->max_players
-	);
-    }
-    else if ( server->type->master)  {
-        fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%d",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup) ? server->host_name : server->arg,
-		RD, server->n_servers
-	);
-    }
-    else  {
-        fprintf( OF, "%s" "%.*s%.*s" "%s%s" "%s%s" "%s%s" "%s%d" "%s%d" "%s%d" "%s%d" "%s%s",
-		prefix,
-		raw_arg, RD, raw_arg, server->arg,
-		RD, (hostname_lookup) ? server->host_name : server->arg,
-		RD, xform_name( server->server_name, server),
-		RD, (server->map_name) ? server->map_name : "?",
-		RD, server->max_players,
-		RD, server->num_players,
-		RD, ping_time,
-		RD, server->n_retries,
-		show_game_in_raw ? RD : "", show_game_in_raw ? get_qw_game(server) : ""
-        );
-    }
-    fputs( "\n", OF);
-
-    if ( server->type->master || server->error != NULL)  {
-	fputs( "\n", OF);
-	return;
-    }
-
-    if ( get_server_rules)
-	server->type->display_raw_rule_func( server);
-    if ( get_player_info)
-	server->type->display_raw_player_func( server);
-    fputs( "\n", OF);
-}
-
-void
-raw_display_server_rules( struct qserver *server)
-{
-    struct rule *rule;
-    int printed= 0;
-    rule= server->rules;
-    for ( ; rule != NULL; rule= rule->next)  {
-	if ( server->type->id == TRIBES2_SERVER)  {
-	    char *v;
-	    for ( v= rule->value; *v; v++)
-		if ( *v == '\n') *v= ' ';
-	}
-	fprintf( OF, "%s%s=%s", (printed)?RD:"", rule->name, rule->value);
-	printed++;
-    }
-    if ( server->missing_rules)
-	fprintf( OF, "%s?", (printed)?RD:"");
-    fputs( "\n", OF);
-}
-
-void
-raw_display_q_player_info( struct qserver *server)
-{
-    char fmt[] = "%d" "%s%s" "%s%s" "%s%d" "%s%s" "%s%s" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		player->number,
-		RD, xform_name( player->name, server),
-		RD, player->address,
-		RD, player->frags,
-		RD, play_time(player->connect_time,1),
-		RD, quake_color(player->shirt_color),
-		RD, quake_color(player->pants_color)
-	);
-	fputs( "\n", OF);
-    }
-}
+	struct player *player;
+	static const char *fmt_team_number = "\t%3d frags team#%-3d %7s %s\n";
+	static const char *fmt_team_name = "\t%3d frags %8s %7s %s\n";
+	static const char *fmt_no_team = "\t%3d frags %8s  %s\n";
 
-void
-raw_display_qw_player_info( struct qserver *server)
-{
-    char fmt[128];
-    struct player *player;
-
-    strcpy( fmt, "%d" "%s%s" "%s%d" "%s%s" "%s%s" "%s%s");
-    strcat( fmt, "%s%d" "%s%s");
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		player->number,
-		RD, xform_name( player->name, server),
-		RD, player->frags,
-		RD, play_time(player->connect_time,1),
-		RD, quake_color(player->shirt_color),
-		RD, quake_color(player->pants_color),
-		RD, player->ping,
-		RD, player->skin ? player->skin : ""
-	);
-	fputs( "\n", OF);
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		if (server->flags &FLAG_PLAYER_TEAMS)
+		{
+			// we use (player->score) ? player->score : player->frags,
+			// so we get details from halo
+			if (player->team_name)
+			{
+				fprintf(OF, fmt_team_name,
+					(player->score && NA_INT != player->score) ? player->score: player->frags,
+					player->team_name,
+					ping_time(player->ping),
+					xform_name(player->name, server)
+				);
+			}
+			else
+			{
+				fprintf(OF, fmt_team_number,
+					(player->score && NA_INT != player->score) ? player->score: player->frags,
+					player->team,
+					ping_time(player->ping),
+					xform_name(player->name, server)
+				);
+			}
+		}
+		else
+		{
+			fprintf(OF, fmt_no_team, player->frags, ping_time(player->ping), xform_name(player->name, server));
+		}
+	}
 }
 
-void
-raw_display_q2_player_info( struct qserver *server)
+void display_shogo_player_info(struct qserver *server)
 {
-    static const char *fmt = "%s" "%s%d" "%s%d";
-    static const char *fmt_team = "%s" "%s%d" "%s%d" "%s%d";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( server->flags & FLAG_PLAYER_TEAMS)
-	    fprintf( OF, fmt_team,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->ping,
-		RD, player->team
-	    );
-	else
-	    fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->ping
-	    );
-	fputs( "\n", OF);
-    }
-}
-
-void
-raw_display_unreal_player_info( struct qserver *server)
-{
-    static const char *fmt= "%s" "%s%d" "%s%d" "%s%d" "%s%s" "%s%s" "%s%s";
-    static const char *fmt_team_name= "%s" "%s%d" "%s%d" "%s%s" "%s%s" "%s%s" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->team_name)
-	fprintf( OF, fmt_team_name,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->ping,
-		RD, player->team_name,
-		RD, player->skin ? player->skin : "",
-		RD, player->mesh ? player->mesh : "",
-		RD, player->face ? player->face : ""
-	);
-	else
-	fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->ping,
-		RD, player->team,
-		RD, player->skin ? player->skin : "",
-		RD, player->mesh ? player->mesh : "",
-		RD, player->face ? player->face : ""
-	);
-	fputs( "\n", OF);
-    }
-}
+	struct player *player;
 
-void
-raw_display_halflife_player_info( struct qserver *server)
-{
-    static char fmt[24]= "%s" "%s%d" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, play_time( player->connect_time,1)
-	);
-	fputs( "\n", OF);
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%3d frags %8s %s\n", player->frags, ping_time(player->ping), xform_name(player->name, server));
+	}
 }
 
-void
-raw_display_tribes_player_info( struct qserver *server)
+void display_halflife_player_info(struct qserver *server)
 {
-    static char fmt[24]= "%s" "%s%d" "%s%d" "%s%d" "%s%d";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->ping,
-		RD, player->team,
-		RD, player->packet_loss
-	);
-	fputs( "\n", OF);
-    }
-}
+	struct player *player;
 
-void
-raw_display_tribes2_player_info( struct qserver *server)
-{
-    static char fmt[]= "%s" "%s%d" "%s%d" "%s%s" "%s%s" "%s%s";
-    struct player *player;
-    char *type;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	switch( player->type_flag)  {
-	case PLAYER_TYPE_BOT: type= "Bot"; break;
-	case PLAYER_TYPE_ALIAS: type= "Alias"; break;
-	default: type= ""; break;
-	}
-	fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->team,
-		RD, player->team_name ? player->team_name : "TEAM",
-		RD, type,
-		RD, player->tribe_tag ? xform_name(player->tribe_tag,server) : ""
-	);
-	fputs( "\n", OF);
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%3d frags %8s %s\n", player->frags, play_time(player->connect_time, 1), xform_name(player->name, server));
+	}
 }
 
-void
-raw_display_bfris_player_info( struct qserver *server)
+void display_fl_player_info(struct qserver *server)
 {
-  static char fmt[] = "%d" "%s%d" "%s%s" "%s%d" "%s%d" "%s%d" "%s%s";
-  struct player *player;
-
-  player= server->players;
-  for ( ; player != NULL; player= player->next)  {
-    fprintf( OF, fmt,
-	    player->number,
-	    RD, player->ship,
-	    RD, player->team_name,
-	    RD, player->ping,
-	    RD, player->score,
-	    RD, player->frags,
-	    RD, xform_name( player->name, server)
-	    );
-    fputs( "\n", OF);
-  }
-}
-
-void
-raw_display_descent3_player_info( struct qserver *server)
-{
-    static char fmt[]= "%s" "%s%d" "%s%d" "%s%d" "%s%d";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->frags,
-		RD, player->deaths,
-		RD, player->ping,
-		RD, player->team
-	);
-	fputs( "\n", OF);
-    }
-}
+	struct player *player;
 
-void
-raw_display_ghostrecon_player_info( struct qserver *server)
-{
-    static char fmt[28]= "%s" "%s%d" "%s%d";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->deaths,
-		RD, player->team
-	);
-	fputs( "\n", OF);
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%3d frags %8s %8s %s\n", player->frags, ping_time(player->ping), play_time(player->connect_time, 1), xform_name(player->name, server));
+	}
 }
 
-void
-raw_display_eye_player_info( struct qserver *server)
+void display_tribes_player_info(struct qserver *server)
 {
-    static const char *fmt= "%s" "%s%d" "%s%d" "%s%d" "%s%s" "%s%s";
-    static const char *fmt_team_name= "%s" "%s%d" "%s%d" "%s%s" "%s%s" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->team_name)
-	    fprintf( OF, fmt_team_name,
-		xform_name( player->name, server),
-		RD, player->score,
-		RD, player->ping,
-		RD, player->team_name,
-		RD, player->skin ? player->skin : "",
-		RD, play_time( player->connect_time,1)
-	);
-	else
-	    fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->score,
-		RD, player->ping,
-		RD, player->team,
-		RD, player->skin ? player->skin : "",
-		RD, play_time( player->connect_time,1)
-	);
-	fputs( "\n", OF);
-    }
-}
+	struct player *player;
 
-void
-raw_display_doom3_player_info( struct qserver *server)
-{
-    static const char *fmt= "%s" "%s%d" "%s%d" "%s%d" "%s%u";
-    static const char *fmt_team_name= "%s" "%s%d" "%s%d" "%s%s" "%s%u";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->tribe_tag)
-	    fprintf( OF, fmt_team_name,
-		xform_name( player->name, server),
-		RD, player->score,
-		RD, player->ping,
-		RD, player->tribe_tag,
-		RD, player->number
-	);
-	else
-	    fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->score,
-		RD, player->ping,
-		RD, player->team,
-		RD, player->number
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%4d score team#%d %8s %s\n", player->frags, player->team, ping_time(player->ping), xform_name(player->name, server)
 	);
-	fputs( "\n", OF);
-    }
+	}
 }
 
-void
-raw_display_hl2_player_info( struct qserver *server )
+void display_tribes2_player_info(struct qserver *server)
 {
-	// ATM this looks like halflife player info
-	raw_display_halflife_player_info( server );
-}
+	struct player *player;
 
-void
-raw_display_gs2_player_info( struct qserver *server)
-{
-    static const char *fmt= "%s" "%s%d" "%s%d" "%s%d" "%s%s" "%s%s";
-    static const char *fmt_team_name= "%s" "%s%d" "%s%d" "%s%s" "%s%s" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-	if ( player->team_name)
-	    fprintf( OF, fmt_team_name,
-		xform_name( player->name, server),
-		RD, player->score,
-		RD, player->ping,
-		RD, player->team_name,
-		RD, player->skin ? player->skin : "",
-		RD, play_time( player->connect_time,1)
-	);
-	else
-	    fprintf( OF, fmt,
-		xform_name( player->name, server),
-		RD, player->score,
-		RD, player->ping,
-		RD, player->team,
-		RD, player->skin ? player->skin : "",
-		RD, play_time( player->connect_time,1)
-	);
-	fputs( "\n", OF);
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\tscore %4d %14s %s\n",
+			player->frags,
+			player->team_name ? player->team_name: (player->number == TRIBES_TEAM ?	"TEAM" : "?"),
+			xform_name(player->name, server)
+		);
+	}
 }
 
-void
-raw_display_armyops_player_info( struct qserver *server)
+void display_bfris_player_info(struct qserver *server)
 {
 	struct player *player;
 
-	player= server->players;
-	for ( ; player != NULL; player= player->next)  {
-		player->score = calculate_armyops_score( player );
-	}
-
-	raw_display_gs2_player_info(server);
-}
-
-void
-raw_display_ts2_player_info( struct qserver *server)
-{
-    static const char *fmt= "%s" "%s%d" "%s%s" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
-    {
-	    fprintf( OF, fmt,
-			xform_name( player->name, server),
-			RD, player->ping,
-			RD, player->skin ? player->skin : "",
-			RD, play_time( player->connect_time, 1 )
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\ttid: %d, ship: %d, team: %s, ping: %d, score: %d, kills: %d, name: %s\n",
+			player->number,
+			player->ship,
+			player->team_name,
+			player->ping,
+			player->score,
+			player->frags,
+			xform_name(player->name, server)
 		);
-		fputs( "\n", OF);
-    }
+	}
 }
 
-void
-raw_display_tm_player_info( struct qserver *server)
+void display_descent3_player_info(struct qserver *server)
 {
-    static const char *fmt= "%s" "%s%d" "%s%s" "%s%s";
-    struct player *player;
-
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
-    {
-	    fprintf( OF, fmt,
-			xform_name( player->name, server),
-			RD, player->ping,
-			RD, player->skin ? player->skin : "",
-			RD, play_time( player->connect_time, 1 )
-		);
-		fputs( "\n", OF);
-    }
-}
+	struct player *player;
 
-void
-raw_display_ravenshield_player_info( struct qserver *server)
-{
-    static char fmt[24]= "%s" "%s%d" "%s%s";
-    struct player *player = server->players;
-    for ( ; player != NULL; player= player->next )
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, fmt,
-			xform_name( player->name, server),
-			RD, player->frags,
-			RD, play_time( player->connect_time,1)
+		fprintf(OF, "\t%3d frags %3d deaths team#%-3d %7s %s\n",
+			player->frags,
+			player->deaths,
+			player->team,
+			ping_time(player->ping),
+			xform_name(player->name, server)
 		);
-		fputs( "\n", OF);
-    }
+	}
 }
 
-void
-raw_display_savage_player_info( struct qserver *server)
+void display_ghostrecon_player_info(struct qserver *server)
 {
-    static char fmt[24]= "%s" "%s%d" "%s%s";
-    struct player *player = server->players;
-    for ( ; player != NULL; player= player->next )
-	{
-		fprintf( OF, fmt,
-			xform_name( player->name, server),
-			RD, player->frags,
-			RD, play_time( player->connect_time,1)
-		);
-		fputs( "\n", OF);
-    }
-}
+	struct player *player;
 
-void
-raw_display_farcry_player_info( struct qserver *server)
-{
-    static char fmt[24]= "%s" "%s%d" "%s%s";
-    struct player *player = server->players;
-    for ( ; player != NULL; player= player->next )
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, fmt,
-			xform_name( player->name, server),
-			RD, player->frags,
-			RD, play_time( player->connect_time,1)
-		);
-		fputs( "\n", OF);
-    }
+		fprintf(OF, "\tdead=%3d team#%-3d %s\n", player->deaths, player->team, xform_name(player->name, server));
+	}
 }
 
-/* XML output
- * Contributed by <sgarner@gameplanet.co.nz> :-)
- */
-
-void
-xml_display_server( struct qserver *server)
+void display_eye_player_info(struct qserver *server)
 {
-	char *prefix;
-	prefix= server->type->type_prefix;
-
-	if ( server->server_name == DOWN)
+	struct player *player;
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		if ( ! up_servers_only)
+		if (player->team_name)
+		{
+			fprintf(OF, "\tscore %4d %6s team %12s %s\n",
+				player->score,
+				ping_time(player->ping),
+				player->team_name,
+				xform_name(player->name,server)
+			);
+		}
+		else
 		{
-			fprintf( OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n",
-				xml_escape(prefix), xml_escape(server->arg), xml_escape(DOWN));
-			fprintf( OF, "\t\t<hostname>%s</hostname>\n",
-				xml_escape((hostname_lookup)?server->host_name:server->arg));
-			fprintf( OF, "\t</server>\n");
+			fprintf(OF, "\tscore %4d %6s team#%d %s\n",
+				player->score,
+				ping_time(player->ping),
+				player->team,
+				xform_name(player->name,server)
+			);
 		}
-		return;
 	}
-	if ( server->server_name == TIMEOUT)
+}
+
+int calculate_armyops_score(struct player *player)
+{
+	/* Calculates a player's score for ArmyOps from the basic components */
+
+	int score = 0;
+	int kill_score = 0;
+	struct info *info;
+
+	for (info = player->info; info; info = info->next)
 	{
-		if ( server->flags & FLAG_BROADCAST && server->n_servers)
+		if (0 == strcmp(info->name, "leader") || 0 == strcmp(info->name, "goal") || 0 == strcmp(info->name, "roe"))
 		{
-			fprintf( OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\" servers=\"%d\">\n",
-				xml_escape(prefix), xml_escape(server->arg),
-				xml_escape(TIMEOUT), server->n_servers);
-			fprintf( OF, "\t</server>\n");
+			score += atoi(info->value);
 		}
-		else if ( ! up_servers_only)
+		else if (0 == strcmp(info->name, "kia") || 0 == strcmp(info->name, "enemy"))
 		{
-			fprintf( OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n",
-				xml_escape(prefix), xml_escape(server->arg), xml_escape(TIMEOUT));
-			fprintf( OF, "\t\t<hostname>%s</hostname>\n",
-				xml_escape((hostname_lookup)?server->host_name:server->arg));
-			fprintf( OF, "\t</server>\n");
+			kill_score += atoi(info->value);
 		}
-		return;
-    }
-
-	if ( server->error != NULL)
-	{
-		fprintf( OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n",
-			xml_escape(prefix), xml_escape(server->arg), "ERROR");
-		fprintf( OF, "\t\t<hostname>%s</hostname>\n",
-			xml_escape((hostname_lookup)?server->host_name:server->arg));
-		fprintf( OF, "\t\t<error>%s</error>\n",
-			xml_escape(server->error));
 	}
-	else if ( server->type->master)
+
+	if (kill_score > 0)
 	{
-		fprintf( OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\" servers=\"%d\">\n",
-			xml_escape(prefix), xml_escape(server->arg), "UP", server->n_servers);
+		score += kill_score;
 	}
-	else  {
-		fprintf( OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n",
-			xml_escape(prefix), xml_escape(server->arg), "UP");
-		fprintf( OF, "\t\t<hostname>%s</hostname>\n",
-			xml_escape((hostname_lookup)?server->host_name:server->arg));
-		fprintf( OF, "\t\t<name>%s</name>\n",
-			xml_escape(xform_name( server->server_name, server)));
-		fprintf( OF, "\t\t<gametype>%s</gametype>\n",
-			xml_escape(get_qw_game(server)));
-		fprintf( OF, "\t\t<map>%s</map>\n",
-			xml_escape(server->map_name));
-		fprintf( OF, "\t\t<numplayers>%d</numplayers>\n",
-			server->num_players);
-		fprintf( OF, "\t\t<maxplayers>%d</maxplayers>\n",
-			server->max_players);
 
-		if ( !(server->type->flags & TF_RAW_STYLE_TRIBES))
+	return score;
+}
+
+void display_haze_player_info(struct qserver *server)
+{
+	// ATM this looks like gs2 player info
+	display_gs2_player_info(server);
+}
+
+void display_gs2_player_info(struct qserver *server)
+{
+	struct player *player;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		if (player->team_name)
 		{
-			fprintf( OF, "\t\t<ping>%d</ping>\n",
-				server->n_requests ? server->ping_total/server->n_requests : 999);
-			fprintf( OF, "\t\t<retries>%d</retries>\n",
-				server->n_retries);
+			fprintf(OF, "\tscore %4d %6s team %12s %s\n",
+				player->score,
+				ping_time(player->ping),
+				player->team_name,
+				xform_name(player->name,server)
+			);
 		}
-
-		if ( server->type->flags & TF_RAW_STYLE_QUAKE)
+		else
 		{
-			fprintf( OF, "\t\t<address>%s</address>\n",
-				xml_escape(server->address));
-			fprintf( OF, "\t\t<protocolversion>%d</protocolversion>\n",
-				server->protocol_version);
+			fprintf(OF, "\tscore %4d %6s team#%d %s\n",
+				player->score,
+				ping_time(player->ping),
+				player->team,
+				xform_name(player->name, server)
+			);
 		}
 	}
+}
+
+void display_armyops_player_info(struct qserver *server)
+{
+	struct player *player;
 
-	if ( ! server->type->master && server->error == NULL)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-	    if ( get_server_rules)
-			server->type->display_xml_rule_func( server);
-	    if ( get_player_info)
-			server->type->display_xml_player_func( server);
+		player->score = calculate_armyops_score(player);
 	}
 
-	fprintf( OF, "\t</server>\n");
+	display_gs2_player_info(server);
 }
 
-void
-xml_header()
+void display_ts2_player_info(struct qserver *server)
 {
-	fprintf( OF, "<?xml version=\"1.0\" encoding=\"%s\"?>\n<qstat>\n",
-		xml_encoding == ENCODING_LATIN_1 ? "iso-8859-1" : "UTF-8");
+	struct player *player;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%6s %s\n", ping_time(player->ping), xform_name(player->name, server));
+	}
 }
 
-void
-xml_footer()
+void display_wic_player_info(struct qserver *server)
 {
-	fprintf( OF, "</qstat>\n");
+	struct player *player;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t#%-4d score %4d team %12s role %12s %s\n",
+			player->number,
+			player->score,
+			player->team_name,
+			player->tribe_tag ? player->tribe_tag : "",
+			xform_name(player->name, server)
+		);
+	}
 }
 
-void
-xml_display_server_rules( struct qserver *server)
+void display_tm_player_info(struct qserver *server)
 {
-	struct rule *rule;
-	rule= server->rules;
-
-	fprintf( OF, "\t\t<rules>\n");
-	for ( ; rule != NULL; rule= rule->next)
+	struct player *player;
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<rule name=\"%s\">%s</rule>\n",
-			xml_escape(rule->name), xml_escape(rule->value));
-    }
-	fprintf( OF, "\t\t</rules>\n");
+		fprintf(OF, "\t%6s %s\n", ping_time(player->ping), xform_name(player->name, server));
+	}
 }
 
-void
-xml_display_q_player_info( struct qserver *server)
+void display_doom3_player_info(struct qserver *server)
 {
 	struct player *player;
-
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player number=\"%d\">\n",
-			player->number);
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<address>%s</address>\n",
-			xml_escape(player->address));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time(player->connect_time,1)));
-
-		if ( color_names)
+		if (player->tribe_tag)
 		{
-			fprintf( OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n",
-				xml_escape(quake_color(player->shirt_color)));
-			fprintf( OF, "\t\t\t\t<color for=\"pants\">%s</color>\n",
-				xml_escape(quake_color(player->pants_color)));
+			fprintf(OF, "\t#%-4d score %4d %6s team %12s %s\n",
+				player->number,
+				player->score,
+				ping_time(player->ping),
+				player->tribe_tag,
+				xform_name(player->name, server)
+			);
 		}
 		else
 		{
-			fprintf( OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n",
-				quake_color(player->shirt_color));
-			fprintf( OF, "\t\t\t\t<color for=\"pants\">%s</color>\n",
-				quake_color(player->pants_color));
+			fprintf(OF, "\t#%-4d score %4d %6s team#%d %s\n",
+				player->number,
+				player->score,
+				ping_time(player->ping),
+				player->team,
+				xform_name(player->name, server)
+			);
 		}
-
-		fprintf( OF, "\t\t\t</player>\n");
 	}
+}
 
-	fprintf( OF, "\t\t</players>\n");
+void display_hl2_player_info(struct qserver *server)
+{
+	// ATM this looks like halflife player info
+	display_halflife_player_info(server);
 }
 
-void
-xml_display_qw_player_info( struct qserver *server)
+void display_ravenshield_player_info(struct qserver *server)
 {
-	struct player *player;
+	struct player *player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%3d frags %8s %s\n", player->frags, play_time(player->connect_time, 1), xform_name(player->name, server));
+	}
+}
 
-	fprintf( OF, "\t\t<players>\n");
 
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+void display_savage_player_info(struct qserver *server)
+{
+	struct player *player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player number=\"%d\">\n",
-			player->number);
+		fprintf(OF, "\t%3d frags %8s %s\n", player->frags, play_time(player->connect_time, 1), xform_name(player->name, server));
+	}
+}
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time(player->connect_time,1)));
 
-		if ( color_names)
+void display_farcry_player_info(struct qserver *server)
+{
+	struct player *player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t%3d frags %8s %s\n", player->frags, play_time(player->connect_time, 1), xform_name(player->name, server));
+	}
+}
+
+char *get_qw_game(struct qserver *server)
+{
+	struct rule *rule;
+	char *game_rule = server->type->game_rule;
+	if (game_rule == NULL || *game_rule == '\0')
+	{
+		return "";
+	} rule = server->rules;
+	for (; rule != NULL; rule = rule->next)
+	{
+		if (strcmp(rule->name, game_rule) == 0)
 		{
-			fprintf( OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n",
-				xml_escape(quake_color(player->shirt_color)));
-			fprintf( OF, "\t\t\t\t<color for=\"pants\">%s</color>\n",
-				xml_escape(quake_color(player->pants_color)));
+			if (server->type->id == Q3_SERVER && strcmp(rule->value, "baseq3") == 0)
+			{
+				return "";
+			}
+			return rule->value;
 		}
-		else
+	}
+	rule = server->rules;
+	for (; rule != NULL; rule = rule->next)
+	{
+		if (0 == strcmp(rule->name, "game") || 0 == strcmp(rule->name, "fs_game"))
 		{
-			fprintf( OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n",
-				quake_color(player->shirt_color));
-			fprintf( OF, "\t\t\t\t<color for=\"pants\">%s</color>\n",
-				quake_color(player->pants_color));
+			return rule->value;
 		}
-
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
-		fprintf( OF, "\t\t\t\t<skin>%s</skin>\n",
-			player->skin ? xml_escape(player->skin) : "");
-
-		fprintf( OF, "\t\t\t</player>\n");
 	}
-
-	fprintf( OF, "\t\t</players>\n");
+	return "";
 }
 
-void
-xml_display_q2_player_info( struct qserver *server)
+/* Raw output for web master types
+ */
+
+#define RD raw_delimiter
+
+void raw_display_server(struct qserver *server)
 {
-	struct player *player;
+	char *prefix;
+	int ping_time;
+	prefix = server->type->type_prefix;
+
+	if (server->n_requests)
+	{
+		ping_time = server->ping_total / server->n_requests;
+	}
+	else
+	{
+		ping_time = 999;
+	}
 
-	fprintf( OF, "\t\t<players>\n");
+	if (server->server_name == DOWN)
+	{
+		if (!up_servers_only)
+		{
+			fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s\n\n",
+				prefix,
+				raw_arg, RD,
+				raw_arg,
+				server->arg, RD,
+				(hostname_lookup) ? server->host_name : server->arg, RD,
+				DOWN
+			);
+		}
+		return ;
+	}
 
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	if (server->server_name == TIMEOUT)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		if (server->flags &FLAG_BROADCAST && server->n_servers)
+		{
+			fprintf(OF, "%s""%.*s%.*s""%s%s""%s%d\n", prefix, raw_arg, RD, raw_arg, server->arg, RD, server->arg, RD, server->n_servers);
+		}
+		else if (!up_servers_only)
+		{
+			fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s\n\n", prefix, raw_arg, RD, raw_arg, server->arg, RD, (hostname_lookup) ? server->host_name : server->arg, RD, TIMEOUT);
+		}
+		return ;
+	}
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n", player->frags);
-		if ( server->flags & FLAG_PLAYER_TEAMS)
-			fprintf( OF, "\t\t\t\t<team>%d</team>\n", player->team);
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
+	if (server->error != NULL)
+	{
+		fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s""%s%s",
+			prefix,
+			raw_arg, RD,
+			raw_arg,
+			server->arg, RD,
+			(hostname_lookup) ? server->host_name: server->arg, RD,
+			"ERROR", RD,
+			server->error
+		);
+	}
+	else if (server->type->flags &TF_RAW_STYLE_QUAKE)
+	{
+		fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s""%s%s""%s%d""%s%s""%s%d""%s%d""%s%d""%s%d""%s%d""%s%d""%s%s",
+			prefix,
+			raw_arg, RD,
+			raw_arg,
+			server->arg, RD,
+			(hostname_lookup) ? server->host_name: server->arg, RD,
+			xform_name(server->server_name, server), RD,
+			server->address, RD,
+			server->protocol_version, RD,
+			server->map_name, RD,
+			server->max_players, RD,
+			server->num_players, RD,
+			server->max_spectators, RD,
+			server->num_spectators, RD,
+			ping_time, RD,
+			server->n_retries,
+			show_game_in_raw ? RD : "",
+			show_game_in_raw ? get_qw_game(server): ""
+		);
+	}
+	else if (server->type->flags &TF_RAW_STYLE_TRIBES)
+	{
+		fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s""%s%s""%s%d""%s%d",
+			prefix,
+			raw_arg, RD,
+			raw_arg,
+			server->arg, RD,
+			(hostname_lookup) ?	server->host_name: server->arg, RD,
+			xform_name(server->server_name, server), RD,
+			(server->map_name) ? server->map_name: "?", RD,
+			server->num_players, RD,
+			server->max_players
+		);
+	}
+	else if (server->type->flags &TF_RAW_STYLE_GHOSTRECON)
+	{
+		fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s""%s%s""%s%d""%s%d",
+			prefix,
+			raw_arg, RD,
+			raw_arg,
+			server->arg, RD,
+			(hostname_lookup) ?	server->host_name: server->arg, RD,
+			xform_name(server->server_name,	server), RD,
+			(server->map_name) ? server->map_name: "?", RD,
+			server->num_players, RD,
+			server->max_players
+		);
+	}
+	else if (server->type->master)
+	{
+		fprintf(OF, "%s""%.*s%.*s""%s%s""%s%d",
+			prefix,
+			raw_arg, RD,
+			raw_arg,
+			server->arg, RD,
+			(hostname_lookup) ? server->host_name: server->arg, RD,
+			server->n_servers
+		);
+	}
+	else
+	{
+		fprintf(OF, "%s""%.*s%.*s""%s%s""%s%s""%s%s""%s%d""%s%d""%s%d""%s%d""%s%s",
+			prefix,
+			raw_arg, RD,
+			raw_arg,
+			server->arg, RD,
+			(hostname_lookup) ? server->host_name: server->arg, RD,
+			xform_name(server->server_name,	server), RD,
+			(server->map_name) ? server->map_name: "?", RD,
+			server->max_players, RD,
+			server->num_players, RD,
+			ping_time, RD,
+			server->n_retries,
+			show_game_in_raw ? RD : "",
+			show_game_in_raw ? get_qw_game(server): ""
+		);
+	}
+	fputs("\n", OF);
 
-		fprintf( OF, "\t\t\t</player>\n");
+	if (server->type->master || server->error != NULL)
+	{
+		fputs("\n", OF);
+		return ;
 	}
 
-	fprintf( OF, "\t\t</players>\n");
+	if (get_server_rules)
+	{
+		server->type->display_raw_rule_func(server);
+	}
+	if (get_player_info)
+	{
+		server->type->display_raw_player_func(server);
+	}
+	fputs("\n", OF);
 }
 
-void xml_display_player_info_info(struct player* player)
+void raw_display_server_rules(struct qserver *server)
 {
-	struct info *info;
-
-	for (info = player->info; info; info = info->next )
+	struct rule *rule;
+	int printed = 0;
+	rule = server->rules;
+	for (; rule != NULL; rule = rule->next)
 	{
-		if ( info->name )
+		if (server->type->id == TRIBES2_SERVER)
 		{
-			char *name = xml_escape( info->name );
-			char *value = xml_escape( info->value );
-			fprintf( OF, "\t\t\t\t<%s>%s</%s>\n", name, value, name );
+			char *v;
+			for (v = rule->value; *v; v++)
+			if (*v == '\n')
+			{
+				*v = ' ';
+			}
 		}
+
+		fprintf(OF, "%s%s=%s", (printed) ? RD : "", rule->name, rule->value);
+		printed++;
+	}
+	if (server->missing_rules)
+	{
+		fprintf(OF, "%s?", (printed) ? RD : "");
+	}
+	fputs("\n", OF);
+}
+
+void raw_display_q_player_info(struct qserver *server)
+{
+	char fmt[] = "%d""%s%s""%s%s""%s%d""%s%s""%s%s""%s%s";
+	struct player *player;
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt,
+			player->number, RD,
+			xform_name(player->name, server), RD,
+			player->address, RD,
+			player->frags, RD,
+			play_time(player->connect_time, 1), RD,
+			quake_color(player->shirt_color), RD,
+			quake_color(player->pants_color)
+		);
+		fputs("\n", OF);
 	}
 }
 
-void
-xml_display_unreal_player_info( struct qserver *server)
+void raw_display_qw_player_info(struct qserver *server)
 {
+	char fmt[128];
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
+	strcpy(fmt, "%d""%s%s""%s%d""%s%s""%s%s""%s%s");
+	strcat(fmt, "%s%d""%s%s""%s%s");
 
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		fprintf(OF, fmt,
+			player->number, RD,
+			xform_name(player->name, server), RD,
+			player->frags, RD,
+			play_time(player->connect_time, 1), RD,
+			quake_color(player->shirt_color), RD,
+			quake_color(player->pants_color), RD,
+			player->ping, RD,
+			player->skin ? player->skin: "", RD,
+			player->team_name ? player->team_name: ""
+		);
+		fputs("\n", OF);
+	}
+}
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		if ( -999 != player->deaths )
-		{
-			fprintf( OF, "\t\t\t\t<deaths>%d</deaths>\n", player->deaths);
-		}
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
+void raw_display_q2_player_info(struct qserver *server)
+{
+	static const char *fmt = "%s""%s%d""%s%d";
+	static const char *fmt_team = "%s""%s%d""%s%d""%s%d";
+	struct player *player;
 
-		if ( player->team_name)
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		if (server->flags &FLAG_PLAYER_TEAMS)
 		{
-		    fprintf( OF, "\t\t\t\t<team>%s</team>\n",
-			xml_escape(player->team_name));
+			fprintf(OF, fmt_team, xform_name(player->name, server), RD, player->frags, RD, player->ping, RD, player->team);
 		}
-		else if ( -1 != player->team )
+		else
 		{
-		    fprintf( OF, "\t\t\t\t<team>%d</team>\n",
-			player->team);
+			fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, player->ping);
 		}
+		fputs("\n", OF);
+	}
+}
 
-		// Some games dont provide
-		// so only display if they do
-		if ( player->skin )
-		{
-			fprintf( OF, "\t\t\t\t<skin>%s</skin>\n",
-				player->skin ? xml_escape(player->skin) : "");
-		}
-		if ( player->mesh )
+void raw_display_unreal_player_info(struct qserver *server)
+{
+	static const char *fmt = "%s""%s%d""%s%d""%s%d""%s%s""%s%s""%s%s";
+	static const char *fmt_team_name = "%s""%s%d""%s%d""%s%s""%s%s""%s%s""%s%s";
+	struct player *player;
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		if (player->team_name)
 		{
-			fprintf( OF, "\t\t\t\t<mesh>%s</mesh>\n",
-				player->mesh ? xml_escape(player->mesh) : "");
+			fprintf(OF, fmt_team_name,
+				xform_name(player->name,server), RD,
+				player->frags, RD,
+				player->ping, RD,
+				player->team_name, RD,
+				player->skin ? player->skin: "", RD,
+				player->mesh ? player->mesh: "", RD,
+				player->face ? player->face: ""
+			);
 		}
-		if ( player->face )
+		else
 		{
-			fprintf( OF, "\t\t\t\t<face>%s</face>\n",
-				player->face ? xml_escape(player->face) : "");
+			fprintf(OF, fmt,
+				xform_name(player->name, server), RD,
+				player->frags, RD,
+				player->ping, RD,
+				player->team, RD,
+				player->skin ? player->skin: "", RD,
+				player->mesh ? player->mesh: "", RD,
+				player->face ? player->face: ""
+			);
 		}
-
-		xml_display_player_info_info(player);
-		fprintf( OF, "\t\t\t</player>\n");
+		fputs("\n", OF);
 	}
-
-	fprintf( OF, "\t\t</players>\n");
 }
 
-void
-xml_display_halflife_player_info( struct qserver *server)
+void raw_display_halflife_player_info(struct qserver *server)
 {
+	static char fmt[24] = "%s""%s%d""%s%s";
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time( player->connect_time,1)));
-
-		fprintf( OF, "\t\t\t</player>\n");
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, play_time(player->connect_time, 1));
+		fputs("\n", OF);
 	}
-
-	fprintf( OF, "\t\t</players>\n");
 }
 
-void
-xml_display_tribes_player_info( struct qserver *server)
+void raw_display_fl_player_info(struct qserver *server)
 {
+	static char fmt[24] = "%s""%s%d""%s%s""%s%d""%s%d";
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		fprintf(
+			OF, fmt,
+			xform_name(player->name, server), RD,
+			player->frags, RD,
+			play_time(player->connect_time, 1), RD,
+			player->ping, RD,
+			player->team
+		);
+		fputs("\n", OF);
+	}
+}
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<team>%d</team>\n",
-			player->team);
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
-		fprintf( OF, "\t\t\t\t<packetloss>%d</packetloss>\n",
-			player->packet_loss);
+void raw_display_tribes_player_info(struct qserver *server)
+{
+	static char fmt[24] = "%s""%s%d""%s%d""%s%d""%s%d";
+	struct player *player;
 
-		fprintf( OF, "\t\t\t</player>\n");
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, player->ping, RD, player->team, RD, player->packet_loss);
+		fputs("\n", OF);
 	}
-
-	fprintf( OF, "\t\t</players>\n");
 }
 
-void
-xml_display_tribes2_player_info( struct qserver *server)
+void raw_display_tribes2_player_info(struct qserver *server)
 {
+	static char fmt[] = "%s""%s%d""%s%d""%s%s""%s%s""%s%s";
 	struct player *player;
 	char *type;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-	for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		if ( player->team_name)
+		switch (player->type_flag)
 		{
-			switch( player->type_flag)
-			{
-				case PLAYER_TYPE_BOT:
-					type= "Bot";
-					break;
-				case PLAYER_TYPE_ALIAS:
-					type= "Alias";
-					break;
-				default:
-					type= "";
-					break;
-			}
-
-			fprintf( OF, "\t\t\t<player>\n");
-
-			fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-				xml_escape(xform_name( player->name, server)));
-			fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-				player->frags);
-			fprintf( OF, "\t\t\t\t<team number=\"%d\">%s</team>\n",
-				player->team, xml_escape(player->team_name));
-			fprintf( OF, "\t\t\t\t<type>%s</type>\n",
-				xml_escape(type));
-			fprintf( OF, "\t\t\t\t<clan>%s</clan>\n",
-				player->tribe_tag ? xml_escape(xform_name(player->tribe_tag,server)) : "");
-
-			fprintf( OF, "\t\t\t</player>\n");
+			case PLAYER_TYPE_BOT:
+				type = "Bot";
+				break;
+			case PLAYER_TYPE_ALIAS:
+				type = "Alias";
+				break;
+			default:
+				type = "";
+				break;
 		}
-    }
-
-	fprintf( OF, "\t\t</players>\n");
+		fprintf(OF, fmt,
+			xform_name(player->name, server), RD,
+			player->frags, RD,
+			player->team, RD,
+			player->team_name ? player->team_name : "TEAM", RD,
+			type, RD,
+			player->tribe_tag ? xform_name(player->tribe_tag, server): ""
+		);
+		fputs("\n", OF);
+	}
 }
 
-void
-xml_display_bfris_player_info( struct qserver *server)
+void raw_display_bfris_player_info(struct qserver *server)
 {
+	static char fmt[] = "%d""%s%d""%s%s""%s%d""%s%d""%s%d""%s%s";
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player number=\"%d\">\n",
-			player->number);
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score type=\"score\">%d</score>\n",
-			player->score);
-		fprintf( OF, "\t\t\t\t<score type=\"frags\">%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<team>%s</team>\n",
-			xml_escape(player->team_name));
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
-		fprintf( OF, "\t\t\t\t<ship>%d</ship>\n",
-			player->ship);
-
-		fprintf( OF, "\t\t\t</player>\n");
+		fprintf(OF, fmt,
+			player->number, RD,
+			player->ship, RD,
+			player->team_name, RD,
+			player->ping, RD,
+			player->score, RD,
+			player->frags, RD,
+			xform_name(player->name, server)
+		);
+		fputs("\n", OF);
 	}
-
-	fprintf( OF, "\t\t</players>\n");
 }
 
-void
-xml_display_descent3_player_info( struct qserver *server)
+void raw_display_descent3_player_info(struct qserver *server)
 {
+	static char fmt[] = "%s""%s%d""%s%d""%s%d""%s%d";
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<deaths>%d</deaths>\n",
-			player->deaths);
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
-		fprintf( OF, "\t\t\t\t<team>%d</team>\n",
-			player->team);
-
-		fprintf( OF, "\t\t\t</player>\n");
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, player->deaths, RD, player->ping, RD, player->team);
+		fputs("\n", OF);
 	}
-
-	fprintf( OF, "\t\t</players>\n");
 }
 
-void
-xml_display_ravenshield_player_info( struct qserver *server)
+void raw_display_ghostrecon_player_info(struct qserver *server)
 {
+	static char fmt[28] = "%s""%s%d""%s%d";
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time( player->connect_time,1)));
-
-		fprintf( OF, "\t\t\t</player>\n");
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->deaths, RD, player->team);
+		fputs("\n", OF);
 	}
-
-	fprintf( OF, "\t\t</players>\n");
 }
 
-
-void
-xml_display_ghostrecon_player_info( struct qserver *server)
+void raw_display_eye_player_info(struct qserver *server)
 {
+	static const char *fmt = "%s""%s%d""%s%d""%s%d""%s%s""%s%s";
+	static const char *fmt_team_name = "%s""%s%d""%s%d""%s%s""%s%s""%s%s";
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
-
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<deaths>%d</deaths>\n",
-			player->deaths);
-		fprintf( OF, "\t\t\t\t<team>%d</team>\n",
-			player->team);
-
-		fprintf( OF, "\t\t\t</player>\n");
+		if (player->team_name)
+		{
+			fprintf(OF, fmt_team_name,
+				xform_name(player->name,server), RD,
+				player->score, RD,
+				player->ping, RD,
+				player->team_name, RD,
+				player->skin ? player->skin: "", RD,
+				play_time(player->connect_time,1)
+			);
+		}
+		else
+		{
+			fprintf(OF, fmt,
+				xform_name(player->name, server), RD,
+				player->score, RD,
+				player->ping, RD,
+				player->team, RD,
+				player->skin ? player->skin: "", RD,
+				play_time(player->connect_time, 1)
+			);
+		}
+		fputs("\n", OF);
 	}
+}
+
+void raw_display_doom3_player_info(struct qserver *server)
+{
+	static const char *fmt = "%s""%s%d""%s%d""%s%d""%s%u";
+	static const char *fmt_team_name = "%s""%s%d""%s%d""%s%s""%s%u";
+	struct player *player;
 
-	fprintf( OF, "\t\t</players>\n");
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		if (player->tribe_tag)
+		{
+			fprintf(OF, fmt_team_name, xform_name(player->name, server), RD, player->score, RD, player->ping, RD, player->tribe_tag, RD, player->number);
+		}
+		else
+		{
+			fprintf(OF, fmt, xform_name(player->name, server), RD, player->score, RD, player->ping, RD, player->team, RD, player->number);
+		}
+		fputs("\n", OF);
+	}
 }
 
-void
-xml_display_eye_player_info( struct qserver *server)
+void raw_display_hl2_player_info(struct qserver *server)
 {
-    struct player *player;
+	// ATM this looks like halflife player info
+	raw_display_halflife_player_info(server);
+}
 
-    fprintf( OF, "\t\t<players>\n");
+void raw_display_haze_player_info(struct qserver *server)
+{
+	// ATM this looks like gs2 player info
+	raw_display_gs2_player_info(server);
+}
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-		fprintf( OF, "\t\t\t<player>\n");
+void raw_display_gs2_player_info(struct qserver *server)
+{
+	static const char *fmt = "%s""%s%d""%s%d""%s%d""%s%s""%s%s";
+	static const char *fmt_team_name = "%s""%s%d""%s%d""%s%s""%s%s""%s%s";
+	struct player *player;
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->score);
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
-		if ( player->team_name)
-		    fprintf( OF, "\t\t\t\t<team>%s</team>\n",
-			xml_escape(player->team_name));
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		if (player->team_name)
+		{
+			fprintf(OF, fmt_team_name, xform_name(player->name, server), RD,
+				player->score, RD,
+				player->ping, RD,
+				player->team_name, RD,
+				player->skin ? player->skin: "", RD,
+				play_time(player->connect_time,1)
+			);
+		}
 		else
-		    fprintf( OF, "\t\t\t\t<team>%d</team>\n",
-			player->team);
-		if ( player->skin)
-		    fprintf( OF, "\t\t\t\t<skin>%s</skin>\n",
-			xml_escape(player->skin));
-		if ( player->connect_time)
-		    fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time( player->connect_time,1)));
+		{
+			fprintf(OF, fmt,
+				xform_name(player->name,server), RD,
+				player->score, RD,
+				player->ping, RD,
+				player->team, RD,
+				player->skin ? player->skin: "", RD,
+				play_time(player->connect_time,1)
+			);
+		}
+		fputs("\n", OF);
+	}
+}
+
+void raw_display_armyops_player_info(struct qserver *server)
+{
+	struct player *player;
 
-		fprintf( OF, "\t\t\t</player>\n");
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		player->score = calculate_armyops_score(player);
+	}
 
-    fprintf( OF, "\t\t</players>\n");
+	raw_display_gs2_player_info(server);
 }
 
-void
-xml_display_doom3_player_info( struct qserver *server)
+void raw_display_ts2_player_info(struct qserver *server)
 {
-    struct player *player;
+	static const char *fmt = "%s""%s%d""%s%s""%s%s";
+	struct player *player;
 
-    fprintf( OF, "\t\t<players>\n");
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt,
+			xform_name(player->name,server), RD,
+			player->ping, RD,
+			player->skin ? player->skin: "", RD,
+			play_time(player->connect_time, 1)
+		);
+		fputs("\n", OF);
+	}
+}
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)  {
-		fprintf( OF, "\t\t\t<player>\n");
+void raw_display_wic_player_info(struct qserver *server)
+{
+	static const char *fmt = "%s""%s%d""%s%s""%s%s";
+	struct player *player;
 
-		fprintf( OF, "\t\t\t\t<number>%u</number>\n",
-			player->number);
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->score);
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n",
-			player->ping);
-		if ( player->tribe_tag)
-		    fprintf( OF, "\t\t\t\t<clan>%s</clan>\n",
-			player->tribe_tag ? xml_escape(xform_name(player->tribe_tag,server)) : "");
-		else
-		    fprintf( OF, "\t\t\t\t<team>%d</team>\n",
-			player->team);
-		if ( player->skin)
-		    fprintf( OF, "\t\t\t\t<skin>%s</skin>\n",
-			xml_escape(player->skin));
-		if ( player->connect_time)
-		    fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time( player->connect_time,1)));
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt,
+			xform_name(player->name,server), RD,
+			player->score, RD,
+			player->team_name, RD,
+			player->tribe_tag ? player->tribe_tag : ""
+		);
+		fputs("\n", OF);
+	}
+}
 
-		xml_display_player_info_info(player);
+void raw_display_tm_player_info(struct qserver *server)
+{
+	static const char *fmt = "%s""%s%d""%s%s""%s%s";
+	struct player *player;
 
-		fprintf( OF, "\t\t\t</player>\n");
-    }
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt,
+			xform_name(player->name,server), RD,
+			player->ping, RD,
+			player->skin ? player->skin: "", RD,
+			play_time(player->connect_time,1)
+		);
+		fputs("\n", OF);
+	}
+}
 
-    fprintf( OF, "\t\t</players>\n");
+void raw_display_ravenshield_player_info(struct qserver *server)
+{
+	static char fmt[24] = "%s""%s%d""%s%s";
+	struct player *player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, play_time(player->connect_time, 1));
+		fputs("\n", OF);
+	}
 }
 
-void
-xml_display_hl2_player_info( struct qserver *server )
+void raw_display_savage_player_info(struct qserver *server)
 {
-	// ATM this looks like halflife player info
-	xml_display_halflife_player_info( server );
+	static char fmt[24] = "%s""%s%d""%s%s";
+	struct player *player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, play_time(player->connect_time, 1));
+		fputs("\n", OF);
+	}
 }
 
-void
-xml_display_gs2_player_info( struct qserver *server)
+void raw_display_farcry_player_info(struct qserver *server)
 {
-    struct player *player;
+	static char fmt[24] = "%s""%s%d""%s%s";
+	struct player *player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, fmt, xform_name(player->name, server), RD, player->frags, RD, play_time(player->connect_time, 1));
+		fputs("\n", OF);
+	}
+}
+
+/* XML output
+ * Contributed by <sgarner@gameplanet.co.nz> :-)
+ */
 
-    fprintf( OF, "\t\t<players>\n");
+void xml_display_server(struct qserver *server)
+{
+	char *prefix;
+	prefix = server->type->type_prefix;
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
+	if (server->server_name == DOWN)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
-
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
-		if ( NA_INT != player->score )
+		if (!up_servers_only)
 		{
-			fprintf( OF, "\t\t\t\t<score>%d</score>\n", player->score);
-		}
-		if ( NA_INT != player->deaths )
+			fprintf(OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n", xml_escape(prefix), xml_escape(server->arg), xml_escape(DOWN));
+			fprintf(OF, "\t\t<hostname>%s</hostname>\n", xml_escape((hostname_lookup) ? server->host_name: server->arg));
+			fprintf(OF, "\t</server>\n");
+		} return ;
+	}
+	if (server->server_name == TIMEOUT)
+	{
+		if (server->flags &FLAG_BROADCAST && server->n_servers)
 		{
-			fprintf( OF, "\t\t\t\t<deaths>%d</deaths>\n", player->deaths);
+			fprintf(OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\" servers=\"%d\">\n",
+				xml_escape(prefix),
+				xml_escape(server->arg),
+				xml_escape(TIMEOUT),
+				server->n_servers
+			);
+			fprintf(OF, "\t</server>\n");
 		}
-		if ( NA_INT != player->frags )
+		else if (!up_servers_only)
 		{
-			fprintf( OF, "\t\t\t\t<frags>%d</frags>\n", player->frags);
+			fprintf(OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n", xml_escape(prefix), xml_escape(server->arg), xml_escape(TIMEOUT));
+			fprintf(OF, "\t\t<hostname>%s</hostname>\n", xml_escape((hostname_lookup) ? server->host_name: server->arg));
+			fprintf(OF, "\t</server>\n");
 		}
-		if ( player->team_name )
+		return ;
+	}
+
+	if (server->error != NULL)
+	{
+		fprintf(OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n", xml_escape(prefix), xml_escape(server->arg), "ERROR");
+		fprintf(OF, "\t\t<hostname>%s</hostname>\n", xml_escape((hostname_lookup) ? server->host_name: server->arg));
+		fprintf(OF, "\t\t<error>%s</error>\n", xml_escape(server->error));
+	}
+	else if (server->type->master)
+	{
+		fprintf(OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\" servers=\"%d\">\n", xml_escape(prefix), xml_escape(server->arg), "UP", server->n_servers);
+	}
+	else
+	{
+		fprintf(OF, "\t<server type=\"%s\" address=\"%s\" status=\"%s\">\n", xml_escape(prefix), xml_escape(server->arg), "UP");
+		fprintf(OF, "\t\t<hostname>%s</hostname>\n", xml_escape((hostname_lookup) ? server->host_name: server->arg));
+		fprintf(OF, "\t\t<name>%s</name>\n", xml_escape(xform_name(server->server_name, server)));
+		fprintf(OF, "\t\t<gametype>%s</gametype>\n", xml_escape(get_qw_game(server)));
+		fprintf(OF, "\t\t<map>%s</map>\n", xml_escape(server->map_name));
+		fprintf(OF, "\t\t<numplayers>%d</numplayers>\n", server->num_players);
+		fprintf(OF, "\t\t<maxplayers>%d</maxplayers>\n", server->max_players);
+		fprintf(OF, "\t\t<numspectators>%d</numspectators>\n", server->num_spectators);
+		fprintf(OF, "\t\t<maxspectators>%d</maxspectators>\n", server->max_spectators);
+
+		if (!(server->type->flags &TF_RAW_STYLE_TRIBES))
 		{
-		    fprintf( OF, "\t\t\t\t<team>%s</team>\n", xml_escape(player->team_name));
+			fprintf(OF, "\t\t<ping>%d</ping>\n", server->n_requests ? server->ping_total / server->n_requests: 999);
+			fprintf(OF, "\t\t<retries>%d</retries>\n", server->n_retries);
 		}
-		else
+
+		if (server->type->flags &TF_RAW_STYLE_QUAKE)
 		{
-		    fprintf( OF, "\t\t\t\t<team>%d</team>\n",player->team);
+			fprintf(OF, "\t\t<address>%s</address>\n", xml_escape(server->address));
+			fprintf(OF, "\t\t<protocolversion>%d</protocolversion>\n", server->protocol_version);
 		}
+	}
 
-		if ( player->skin)
+	if (!server->type->master && server->error == NULL)
+	{
+		if (get_server_rules)
 		{
-		    fprintf( OF, "\t\t\t\t<skin>%s</skin>\n", xml_escape(player->skin));
+			server->type->display_xml_rule_func(server);
 		}
-
-		if ( player->connect_time)
+		if (get_player_info)
 		{
-		    fprintf( OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time( player->connect_time,1)));
+			server->type->display_xml_player_func(server);
 		}
+	}
 
-		xml_display_player_info_info(player);
+	fprintf(OF, "\t</server>\n");
+}
 
-		fprintf( OF, "\t\t\t</player>\n");
-    }
+void xml_header()
+{
+	if (xml_encoding == ENCODING_LATIN_1)
+	{
+		fprintf(OF, "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<qstat>\n");
+	}
+	else if (output_bom)
+	{
+		fprintf(OF, "%c%c%c<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<qstat>\n", 0xEF, 0xBB, 0xBF);
+	}
+	else
+	{
+		fprintf(OF, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<qstat>\n");
+	}
+}
 
-    fprintf( OF, "\t\t</players>\n");
+void xml_footer()
+{
+	fprintf(OF, "</qstat>\n");
 }
 
-void
-xml_display_armyops_player_info( struct qserver *server)
+void xml_display_server_rules(struct qserver *server)
 {
-	struct player *player;
+	struct rule *rule;
+	rule = server->rules;
 
-	player= server->players;
-	for ( ; player != NULL; player= player->next)
+	fprintf(OF, "\t\t<rules>\n");
+	for (; rule != NULL; rule = rule->next)
 	{
-		player->score = calculate_armyops_score( player );
+		fprintf(OF, "\t\t\t<rule name=\"%s\">%s</rule>\n", xml_escape(rule->name), xml_escape(rule->value));
 	}
-
-	xml_display_gs2_player_info(server);
+	fprintf(OF, "\t\t</rules>\n");
 }
 
-void
-xml_display_ts2_player_info( struct qserver *server)
+void xml_display_q_player_info(struct qserver *server)
 {
-    struct player *player;
+	struct player *player;
 
-    fprintf( OF, "\t\t<players>\n");
+	fprintf(OF, "\t\t<players>\n");
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		fprintf(OF, "\t\t\t<player number=\"%d\">\n", player->number);
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<address>%s</address>\n", xml_escape(player->address));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
 
-		if ( player->connect_time )
+		if (color_names)
 		{
-		    fprintf( OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time( player->connect_time,1)));
+			fprintf(OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n", xml_escape(quake_color(player->shirt_color)));
+			fprintf(OF, "\t\t\t\t<color for=\"pants\">%s</color>\n", xml_escape(quake_color(player->pants_color)));
+		}
+		else
+		{
+			fprintf(OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n", quake_color(player->shirt_color));
+			fprintf(OF, "\t\t\t\t<color for=\"pants\">%s</color>\n", quake_color(player->pants_color));
 		}
 
-		xml_display_player_info_info(player);
-		fprintf( OF, "\t\t\t</player>\n");
-    }
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
-    fprintf( OF, "\t\t</players>\n");
+	fprintf(OF, "\t\t</players>\n");
 }
 
-void
-xml_display_tm_player_info( struct qserver *server)
+void xml_display_qw_player_info(struct qserver *server)
 {
-    struct player *player;
+	struct player *player;
 
-    fprintf( OF, "\t\t<players>\n");
+	fprintf(OF, "\t\t<players>\n");
 
-    player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		fprintf(OF, "\t\t\t<player number=\"%d\">\n", player->number);
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
 
-		if ( player->connect_time )
+		if (color_names)
+		{
+			fprintf(OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n", xml_escape(quake_color(player->shirt_color)));
+			fprintf(OF, "\t\t\t\t<color for=\"pants\">%s</color>\n", xml_escape(quake_color(player->pants_color)));
+		}
+		else
 		{
-		    fprintf( OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time( player->connect_time,1)));
+			fprintf(OF, "\t\t\t\t<color for=\"shirt\">%s</color>\n", quake_color(player->shirt_color));
+			fprintf(OF, "\t\t\t\t<color for=\"pants\">%s</color>\n", quake_color(player->pants_color));
 		}
 
-		xml_display_player_info_info(player);
-		fprintf( OF, "\t\t\t</player>\n");
-    }
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<skin>%s</skin>\n", player->skin ? xml_escape(player->skin): "");
+		fprintf(OF, "\t\t\t\t<team>%s</team>\n", player->team_name ? xml_escape(player->team_name): "");
 
-    fprintf( OF, "\t\t</players>\n");
-}
 
+		fprintf(OF, "\t\t\t</player>\n");
+	}
+
+	fprintf(OF, "\t\t</players>\n");
+}
 
-void
-xml_display_savage_player_info( struct qserver *server)
+void xml_display_q2_player_info(struct qserver *server)
 {
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
+	fprintf(OF, "\t\t<players>\n");
 
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		fprintf(OF, "\t\t\t<player>\n");
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time( player->connect_time,1)));
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		if (server->flags &FLAG_PLAYER_TEAMS)
+		{
+			fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
+		}
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
 
-		fprintf( OF, "\t\t\t</player>\n");
+		fprintf(OF, "\t\t\t</player>\n");
 	}
 
-	fprintf( OF, "\t\t</players>\n");
+	fprintf(OF, "\t\t</players>\n");
 }
 
-void
-xml_display_farcry_player_info( struct qserver *server)
+void xml_display_player_info_info(struct player *player)
+{
+	struct info *info;
+
+	for (info = player->info; info; info = info->next)
+	{
+		if (info->name)
+		{
+			char *name = xml_escape(info->name);
+			char *value = xml_escape(info->value);
+			fprintf(OF, "\t\t\t\t<%s>%s</%s>\n", name, value, name);
+		}
+	}
+}
+
+void xml_display_unreal_player_info(struct qserver *server)
 {
 	struct player *player;
 
-	fprintf( OF, "\t\t<players>\n");
+	fprintf(OF, "\t\t<players>\n");
 
-	player= server->players;
-    for ( ; player != NULL; player= player->next)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		fprintf( OF, "\t\t\t<player>\n");
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		if ( - 999 != player->deaths)
+		{
+			fprintf(OF, "\t\t\t\t<deaths>%d</deaths>\n", player->deaths);
+		} fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+
+		if (player->team_name)
+		{
+			fprintf(OF, "\t\t\t\t<team>%s</team>\n", xml_escape(player->team_name));
+		}
+		else if ( - 1 != player->team)
+		{
+			fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
+		}
 
-		fprintf( OF, "\t\t\t\t<name>%s</name>\n",
-			xml_escape(xform_name( player->name, server)));
-		fprintf( OF, "\t\t\t\t<score>%d</score>\n",
-			player->frags);
-		fprintf( OF, "\t\t\t\t<time>%s</time>\n",
-			xml_escape(play_time( player->connect_time,1)));
+		// Some games dont provide
+		// so only display if they do
+		if (player->skin)
+		{
+			fprintf(OF, "\t\t\t\t<skin>%s</skin>\n", player->skin ? xml_escape(player->skin): "");
+		}
+		if (player->mesh)
+		{
+			fprintf(OF, "\t\t\t\t<mesh>%s</mesh>\n", player->mesh ? xml_escape(player->mesh): "");
+		}
+		if (player->face)
+		{
+			fprintf(OF, "\t\t\t\t<face>%s</face>\n", player->face ? xml_escape(player->face): "");
+		}
 
-		fprintf( OF, "\t\t\t</player>\n");
+		xml_display_player_info_info(player);
+		fprintf(OF, "\t\t\t</player>\n");
 	}
 
-	fprintf( OF, "\t\t</players>\n");
+	fprintf(OF, "\t\t</players>\n");
 }
 
-
-void
-display_progress()
+void xml_display_halflife_player_info(struct qserver *server)
 {
-    static struct timeval rate_start= {0,0};
-    char rate[32];
-    struct timeval now;
+	struct player *player;
 
-    gettimeofday( &now, NULL);
+	fprintf(OF, "\t\t<players>\n");
 
-    if ( ! rate_start.tv_sec)
-	{
-		rate_start= now;
-		rate[0]='\0';
-    }
-    else
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		int delta= time_delta( &now, &rate_start);
-		if ( delta > 1500 )
-			sprintf( rate, "  %d servers/sec  ", (num_servers_returned+num_servers_timed_out)*1000 / delta);
-		else
-			rate[0]='\0';
-    }
+		fprintf(OF, "\t\t\t<player>\n");
 
-	// only print out every 'progress' number of servers.
-	if (
-		0 != num_servers_returned+num_servers_timed_out &&
-		( progress == 1 ||
-		(num_servers_returned+num_servers_timed_out) % progress == 0 )
-	)
-	{
-		fprintf( stderr, "\r%d/%d (%d timed out, %d down)%s",
-			num_servers_returned+num_servers_timed_out,
-			num_servers_total,
-			num_servers_timed_out,
-			num_servers_down,
-			rate
-		);
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
+
+		fprintf(OF, "\t\t\t</player>\n");
 	}
+
+	fprintf(OF, "\t\t</players>\n");
 }
 
-/* ----- END MODIFICATION ----- Don't need to change anything below here. */
+void xml_display_fl_player_info(struct qserver *server)
+{
+	struct player *player;
 
+	fprintf(OF, "\t\t<players>\n");
 
-void set_non_blocking( int fd);
-int set_fds( fd_set *fds);
-void get_next_timeout( struct timeval *timeout);
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
 
-void set_file_descriptors();
-int wait_for_file_descriptors( struct timeval *timeout);
-struct qserver * get_next_ready_server();
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
+		fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
 
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
-/* Misc flags
- */
+	fprintf(OF, "\t\t</players>\n");
+}
 
-struct timeval packet_recv_time;
-int one_server_type_id= ~ MASTER_SERVER;
-static int one= 1;
-static int little_endian;
-static int big_endian;
-unsigned int swap_long( void *);
-unsigned short swap_short( void *);
-float swap_float_from_little( void *f);
-char * strndup( const char *string, size_t len);
-#define FORCE 1
+void xml_display_tribes_player_info(struct qserver *server)
+{
+	struct player *player;
 
-/* Print an error message and the program usage notes
- */
+	fprintf(OF, "\t\t<players>\n");
 
-void
-usage( char *msg, char **argv, char *a1)
-{
-	int i;
-    server_type *type;
-	server_type **sorted_types;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
 
-    if ( msg)
-	fprintf( stderr, msg, a1);
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<packetloss>%d</packetloss>\n", player->packet_loss);
 
-    printf( "Usage: %s [options ...]\n", argv[0]);
-    printf( "\t[-default server-type] [-cfg file] [-f file] [host[:port]] ...\n");
-    printf( "Where host is an IP address or host name\n");
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
-	sorted_types = (server_type **) malloc( sizeof(server_type *) * n_server_types );
-	type = &types[0];
-	for ( i = 0; type->id != Q_UNKNOWN_TYPE; type++, i++ )
+	fprintf(OF, "\t\t</players>\n");
+}
+
+void xml_display_tribes2_player_info(struct qserver *server)
+{
+	struct player *player;
+	char *type;
+
+	fprintf(OF, "\t\t<players>\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		sorted_types[i] = type;
-	}
-    quicksort( (void**)sorted_types, 0, n_server_types-1, (int (*)(void*,void*)) type_option_compare );
+		if (player->team_name)
+		{
+			switch (player->type_flag)
+			{
+				case PLAYER_TYPE_BOT:
+					type = "Bot";
+					break;
+				case PLAYER_TYPE_ALIAS:
+					type = "Alias";
+					break;
+				default:
+					type = "";
+					break;
+			}
 
+			fprintf(OF, "\t\t\t<player>\n");
 
-    for ( i = 0; i < n_server_types; i++ )
-    {
-    	type = sorted_types[i];
-		printf( "%s\t\tquery %s server\n", type->type_option, type->game_name );
-	}
-
-    quicksort( (void**)sorted_types, 0, n_server_types-1, (int (*)(void*,void*)) type_string_compare );
-    printf( "-default\tset default server type:");
-    for ( i = 0; i < n_server_types; type++, i++ )
-    {
-        type = sorted_types[i];
-		printf( " %s", type->type_string );
-	}
-    puts("");
-	printf( "-nocfg\t\tIgnore qstat configuration loaded from any default location. Must be the first option on the command-line.\n" );
-    printf( "-cfg\t\tread the extended types from given file not the default one\n");
-    printf( "-f\t\tread hosts from file\n");
-    printf( "-R\t\tfetch and display server rules\n");
-    printf( "-P\t\tfetch and display player info\n");
-    printf( "-sort\t\tsort servers and/or players\n");
-    printf( "-u\t\tonly display servers that are up\n");
-    printf( "-nf\t\tdo not display full servers\n");
-    printf( "-ne\t\tdo not display empty servers\n");
-	printf( "-nh\t\tdo not display header line.\n" );
-    printf( "-cn\t\tdisplay color names instead of numbers\n");
-    printf( "-ncn\t\tdisplay color numbers instead of names\n");
-    printf( "-hc\t\tdisplay colors in #rrggbb format\n");
-    printf( "-tc\t\tdisplay time in clock format (DhDDmDDs)\n");
-    printf( "-tsw\t\tdisplay time in stop-watch format (DD:DD:DD)\n");
-    printf( "-ts\t\tdisplay time in seconds\n");
-    printf( "-pa\t\tdisplay player address\n");
-    printf( "-hpn\t\tdisplay player names in hex\n");
-    printf( "-hsn\t\tdisplay server names in hex\n");
-    printf( "-nh\t\tdo not display header\n");
-    printf( "-old\t\told style display\n");
-    printf( "-progress\tdisplay progress meter (text only)\n");
-    printf( "-retry\t\tnumber of retries, default is %d\n", DEFAULT_RETRIES);
-    printf( "-interval\tinterval between retries, default is %.2f seconds\n",
-	DEFAULT_RETRY_INTERVAL / 1000.0);
-    printf( "-mi\t\tinterval between master server retries, default is %.2f seconds\n",
-	(DEFAULT_RETRY_INTERVAL*4) / 1000.0);
-    printf( "-timeout\ttotal time in seconds before giving up\n");
-    printf( "-maxsim\t\tset maximum simultaneous queries\n");
-    printf( "-sendinterval\t\tset time in ms between sending packets, default %u\n", sendinterval);
-    printf( "-errors\t\tdisplay errors\n");
-    printf( "-allowserverdups\t\tallow adding multiple servers with same ip:port (needed for ts2)\n");
-    printf( "-of\t\toutput file\n");
-	printf( "-af\t\tLike -of, but append to the file\n" );
-    printf( "-raw <delim>\toutput in raw format using <delim> as delimiter\n");
-	printf( "-mdelim <delim>\tFor rules with multi values use <delim> as delimiter\n");
-    printf( "-xml\t\toutput status data as an XML document\n");
-    printf( "-Th,-Ts,-Tpt\toutput templates: header, server and player\n");
-	printf( "-Tr,-Tt\t\toutput templates: rule, and trailer\n");
-    printf( "-srcport <range>\tSend packets from these network ports\n");
-    printf( "-srcip <IP>\tSend packets using this IP address\n");
-    printf( "-H\t\tresolve host names\n");
-    printf( "-Hcache\t\thost name cache file\n");
-	printf( "-carets\t\tDisplay carets in Quake 3 player names\n" );
-	printf( "-d\t\tEnable debug options. Specify multiple times to increase debug level.\n");
-#ifdef ENABLE_DUMP
-	printf( "-dump\t\twrite received raw packets to dumpNNN files which must not exist before\n");
-	printf( "-pkt <file>\tuse file as server reply instead of quering the server. Works only with TF_SINGLE_QUERY servers\n");
-#endif
-	printf( "-htmlmode\tConvert <, >, and & to the equivalent HTML entities\n" );
-	printf( "-htmlnames\tColorize Quake 3 and Tribes 2 player names using html font tags\n" );
-	printf( "-nohtmlnames\tDo not colorize Quake 3 and Tribes 2 player names even if $HTML is used in an output template.\n" );
-	printf( "-showgameport\tAlways display the game port in QStat output.\n" );
-	printf( "-noportoffset\tDont use builtin status port offsets ( assume query port was specified ).\n" );
-	printf( "-raw-arg\tWhen used with -raw, always display the server address as it appeared in a file or on the command-line.\n" );
-	printf( "-utf8\t\tUse the UTF-8 character encoding for XML output.\n" );
-#ifdef _WIN32
-	printf( "-noconsole\t\tFree the console\n" );
-#endif
-    printf( "\n");
-    printf( "Sort keys:\n");
-    printf( "  servers: p=by-ping, g=by-game, i=by-IP-address, h=by-hostname, n=by-#-players, l=by-list-order\n");
-    printf( "  players: P=by-ping, F=by-frags, T=by-team, N=by-name\n");
-    printf( "\nqstat version %s\n", VERSION);
-    exit(0);
-}
+			fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+			fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+			fprintf(OF, "\t\t\t\t<team number=\"%d\">%s</team>\n", player->team, xml_escape(player->team_name));
+			fprintf(OF, "\t\t\t\t<type>%s</type>\n", xml_escape(type));
+			fprintf(OF, "\t\t\t\t<clan>%s</clan>\n", player->tribe_tag ? xml_escape(xform_name(player->tribe_tag, server)): "");
 
-struct server_arg  {
-    int type_id;
-    server_type *type;
-    char *arg;
-    char *outfilename;
-    char *query_arg;
-};
+			fprintf(OF, "\t\t\t</player>\n");
+		}
+	}
 
-server_type*
-find_server_type_id( int type_id)
-{
-    server_type *type= &types[0];
-    for ( ; type->id != Q_UNKNOWN_TYPE; type++)
-	if ( type->id == type_id)
-	    return type;
-    return NULL;
+	fprintf(OF, "\t\t</players>\n");
 }
 
-server_type*
-find_server_type_string( char* type_string)
+void xml_display_bfris_player_info(struct qserver *server)
 {
-    server_type *type= &types[0];
-    char *t= type_string;
-    for ( ; *t; t++) *t= tolower( *t);
+	struct player *player;
+
+	fprintf(OF, "\t\t<players>\n");
 
-    for ( ; type->id != Q_UNKNOWN_TYPE; type++)
-	if ( strcmp( type->type_string, type_string) == 0)
-	    return type;
-    return NULL;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player number=\"%d\">\n", player->number);
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score type=\"score\">%d</score>\n", player->score);
+		fprintf(OF, "\t\t\t\t<score type=\"frags\">%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<team>%s</team>\n", xml_escape(player->team_name));
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<ship>%d</ship>\n", player->ship);
+
+		fprintf(OF, "\t\t\t</player>\n");
+	}
+
+	fprintf(OF, "\t\t</players>\n");
 }
 
-server_type*
-find_server_type_option( char* option)
+void xml_display_descent3_player_info(struct qserver *server)
 {
-    server_type *type= &types[0];
-    for ( ; type->id != Q_UNKNOWN_TYPE; type++)
-	if ( strcmp( type->type_option, option) == 0)
-	    return type;
-    return NULL;
+	struct player *player;
+
+	fprintf(OF, "\t\t<players>\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<deaths>%d</deaths>\n", player->deaths);
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
+
+		fprintf(OF, "\t\t\t</player>\n");
+	}
+
+	fprintf(OF, "\t\t</players>\n");
 }
 
-server_type*
-parse_server_type_option( char* option, int *outfile, char **query_arg)
+void xml_display_ravenshield_player_info(struct qserver *server)
 {
-    server_type *type= &types[0];
-    char *comma, *arg;
-    int len;
-
-    *outfile= 0;
-    *query_arg= 0;
+	struct player *player;
 
-    comma= strchr( option, ',');
-    if ( comma)
-	*comma++= '\0';
+	fprintf(OF, "\t\t<players>\n");
 
-    for ( ; type->id != Q_UNKNOWN_TYPE; type++)
-	if ( strcmp( type->type_option, option) == 0)
-	    break;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
 
-    if ( type->id == Q_UNKNOWN_TYPE)
-	return NULL;
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
 
-    if ( ! comma)
-	return type;
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
-    if ( strcmp( comma, "outfile") == 0)  {
-	*outfile= 1;
-	comma= strchr( comma, ',');
-	if ( ! comma)
-	    return type;
-	*comma++= '\0';
-    }
-
-    *query_arg= strdup(comma);
-    arg= comma;
-    do  {
-	comma= strchr( arg, ',');
-	if (comma)
-	    len= comma-arg;
-	else
-	    len= strlen( arg);
-	if ( strncmp( arg, "outfile", len) == 0)
-	    *outfile= 1;
-	arg= comma+1;
-    } while ( comma);
-    return type;
-}
-
-void
-add_server_arg( char *arg, int type, char *outfilename, char *query_arg,
-	struct server_arg **args, int *n, int *max)
-{
-    if ( *n == *max)  {
-	if ( *max == 0)  {
-	    *max= 4;
-	    *args= (struct server_arg*)malloc(sizeof(struct server_arg) * (*max));
-	}
-	else  {
-	    (*max)*= 2;
-	    *args= (struct server_arg*) realloc( *args,
-		sizeof(struct server_arg) * (*max));
-	}
-    }
-    (*args)[*n].type_id= type;
-/*    (*args)[*n].type= find_server_type_id( type); */
-    (*args)[*n].type= NULL;
-    (*args)[*n].arg= arg;
-    (*args)[*n].outfilename= outfilename;
-    (*args)[*n].query_arg= query_arg;
-    (*n)++;
-}
-
-
-void
-add_query_param( struct qserver *server, char *arg)
-{
-    char *equal;
-    struct query_param *param;
-
-    equal= strchr( arg, '=');
-    *equal++= '\0';
-
-    param= (struct query_param *) malloc( sizeof(struct query_param));
-    param->key= arg;
-    param->value= equal;
-    sscanf( equal, "%i", &param->i_value);
-    sscanf( equal, "%i", &param->ui_value);
-    param->next= server->params;
-    server->params= param;
-}
-
-char *
-get_param_value( struct qserver *server, const char *key, char *default_value)
-{
-    struct query_param *p= server->params;
-    for ( ; p; p= p->next)
-	if ( strcasecmp( key, p->key) == 0)
-	    return p->value;
-    return default_value;
-}
-
-int
-get_param_i_value( struct qserver *server, char *key, int default_value)
-{
-    struct query_param *p= server->params;
-    for ( ; p; p= p->next)
-	if ( strcasecmp( key, p->key) == 0)
-	    return p->i_value;
-    return default_value;
-}
-
-unsigned int
-get_param_ui_value( struct qserver *server, char *key,
-	unsigned int default_value)
-{
-    struct query_param *p= server->params;
-    for ( ; p; p= p->next)
-	if ( strcasecmp( key, p->key) == 0)
-	    return p->ui_value;
-    return default_value;
-}
-
-int
-parse_source_address( char *addr, unsigned int *ip, unsigned short *port)
-{
-    char *colon;
-    colon= strchr( addr, ':');
-    if ( colon)  {
-	*colon= '\0';
-	*port= atoi( colon+1);
-	if ( colon == addr)
-	    return 0;
-    }
-    else
-	*port= 0;
-
-    *ip= inet_addr( addr);
-    if ( *ip == INADDR_NONE && !isdigit( (unsigned char)*ip))
-	*ip= hcache_lookup_hostname( addr);
-    if ( *ip == INADDR_NONE)  {
-	fprintf( stderr, "%s: Not an IP address or unknown host name\n", addr);
-	return -1;
-    }
-    *ip= ntohl( *ip);
-    return 0;
-}
-
-int
-parse_source_port( char *port, unsigned short *low, unsigned short *high)
-{
-    char *dash;
-    *low= atoi( port);
-    dash= strchr( port, '-');
-    *high= 0;
-    if ( dash)
-	*high= atoi( dash+1);
-    if ( *high == 0)
-	*high= *low;
-
-    if ( *high < *low)  {
-	fprintf( stderr, "%s: Invalid port range\n", port);
-	return -1;
-    }
-    return 0;
-}
-
-void
-add_config_server_types()
-{
-    int n_config_types, n_builtin_types, i;
-    server_type **config_types;
-    server_type *new_types, *type;
-    config_types= qsc_get_config_server_types( &n_config_types);
-
-    if ( n_config_types == 0)
-	return;
-
-    n_builtin_types= (sizeof( builtin_types) / sizeof(server_type)) - 1;
-    new_types= (server_type*) malloc( sizeof(server_type) * (n_builtin_types +
-		n_config_types + 1));
-
-    memcpy( new_types, &builtin_types[0], n_builtin_types*sizeof(server_type));
-    type= &new_types[n_builtin_types];
-    for ( i= n_config_types; i; i--, config_types++, type++)
-	*type= **config_types;
-    n_server_types= n_builtin_types + n_config_types;
-    new_types[n_server_types].id= Q_UNKNOWN_TYPE;
-    if ( types != &builtin_types[0])
-	free( types);
-    types= new_types;
-}
-
-void
-revert_server_types()
-{
-    if ( types != &builtin_types[0])
-	free( types);
-    n_server_types= (sizeof( builtin_types) / sizeof(server_type)) - 1;
-    types= &builtin_types[0];
+	fprintf(OF, "\t\t</players>\n");
 }
 
-#ifdef ENABLE_DUMP
-unsigned pkt_dump_pos = 0;
-const char* pkt_dumps[64] = {0};
-static void add_pkt_from_file(const char* file)
+
+void xml_display_ghostrecon_player_info(struct qserver *server)
 {
-	if(pkt_dump_pos >= sizeof(pkt_dumps)/sizeof(pkt_dumps[0]))
-		return;
-	pkt_dumps[pkt_dump_pos++] = file;
+	struct player *player;
+
+	fprintf(OF, "\t\t<players>\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<deaths>%d</deaths>\n", player->deaths);
+		fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
+
+		fprintf(OF, "\t\t\t</player>\n");
+	}
+
+	fprintf(OF, "\t\t</players>\n");
 }
 
-static void replay_pkt_dumps()
+void xml_display_eye_player_info(struct qserver *server)
 {
-	struct qserver* server = servers;
-	char* pkt = NULL;
-	int fd;
-	int bytes_read = 0; // should be ssize_t but for ease with win32
-	int i;
-	struct stat statbuf;
-	gettimeofday( &packet_recv_time, NULL);
+	struct player *player;
+
+	fprintf(OF, "\t\t<players>\n");
 
-	for ( i = 0; i < pkt_dump_pos; i++ )
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		if((fd = open(pkt_dumps[i], O_RDONLY)) == -1)
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->score);
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		if (player->team_name)
 		{
-			goto err;
+			fprintf(OF, "\t\t\t\t<team>%s</team>\n", xml_escape(player->team_name));
 		}
-		if( fstat( fd, &statbuf) == -1 )
+		else
 		{
-			goto err;
+			fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
 		}
-		pkt = malloc( statbuf.st_size );
-		if ( NULL == pkt )
+		if (player->skin)
 		{
-			goto err;
+			fprintf(OF, "\t\t\t\t<skin>%s</skin>\n", xml_escape(player->skin));
 		}
-		bytes_read = read( fd, pkt, statbuf.st_size );
-		if ( bytes_read != statbuf.st_size )
+		if (player->connect_time)
 		{
-			fprintf( stderr, "Failed to read entire packet from disk got %d of %ld bytes\n", bytes_read, (long)statbuf.st_size );
-			goto err;
+			fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 1)));
 		}
 
-		server->type->packet_func( server, pkt, statbuf.st_size);
-		close(fd);
-		fd = 0;
+		fprintf(OF, "\t\t\t</player>\n");
 	}
-	goto out;
 
-err:
-	perror(__FUNCTION__);
-	close(fd);
-out:
-	fd = 0; // NOP
+	fprintf(OF, "\t\t</players>\n");
 }
-#endif // ENABLE_DUMP
-
-struct rcv_pkt
-{
-	struct qserver* server;
-	struct sockaddr_in addr;
-	struct timeval recv_time;
-	char data[PACKET_LEN];
-	int len;
-	int _errno;
-};
 
-void do_work(void)
+void xml_display_doom3_player_info(struct qserver *server)
 {
-	int pktlen, rc, fd;
-	char *pkt= NULL;
-	int bind_retry= 0;
-	struct timeval timeout;
-	struct rcv_pkt* buffer;
-	unsigned buffill = 0, i = 0;
-	unsigned bufsize = max_simultaneous*2;
-
-	struct timeval t,ts;
-	gettimeofday(&t, NULL);
-	ts = t;
-
-	buffer = malloc(sizeof(struct rcv_pkt) * bufsize);
+	struct player *player;
 
-	if(!buffer) return;
+	fprintf(OF, "\t\t<players>\n");
 
-#ifdef ENABLE_DUMP
-	if(pkt_dump_pos)
-	{
-		replay_pkt_dumps();
-	}
-	else
-#endif
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		bind_retry = bind_sockets();
-	}
-
-	send_packets();
-
-	debug(2, "connected: %d", connected);
+		fprintf(OF, "\t\t\t<player>\n");
 
-	while ( connected || (!connected && bind_retry==-2))
-	{
-		if ( ! connected && bind_retry==-2)
+		fprintf(OF, "\t\t\t\t<number>%u</number>\n", player->number);
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->score);
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		if (player->tribe_tag)
 		{
-			rc= wait_for_timeout( 60);
-			bind_retry= bind_sockets();
-			continue;
+			fprintf(OF, "\t\t\t\t<clan>%s</clan>\n", player->tribe_tag ? xml_escape(xform_name(player->tribe_tag, server)): "");
 		}
-		bind_retry= 0;
-
-		set_file_descriptors();
-
-		if ( progress)
-			display_progress();
-
-		get_next_timeout( &timeout);
-
-		rc= wait_for_file_descriptors( &timeout);
-
-		debug(2, "rc %d", rc);
-
-		if ( rc == SOCKET_ERROR)
+		else
 		{
-#ifndef _WIN32
-			if ( errno == EINTR)
-				continue;
-#endif
-			perror("select");
-			break;
+			fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
 		}
-
-		fd= 0;
-		for ( ; rc && buffill < bufsize; rc--)
+		if (player->skin)
 		{
-			int addrlen= sizeof(buffer[buffill].addr);
-			struct qserver* server= get_next_ready_server();
-			if ( server == NULL)
-				break;
-			gettimeofday( &buffer[buffill].recv_time, NULL);
-
-			pktlen = recvfrom( server->fd,
-						buffer[buffill].data,
-						sizeof(buffer[buffill].data),
-						0,
-						(struct sockaddr*)&buffer[buffill].addr,
-						(void*)&addrlen);
-
-			if ( pktlen == SOCKET_ERROR)
-			{
-				if(errno == EAGAIN)
-				{
-					malformed_packet(server, "EAGAIN on UDP socket, probably incorrect checksum");
-				}
-				else if ( connection_refused())
-				{
-					server->server_name= DOWN;
-					num_servers_down++;
-					cleanup_qserver( server, 1);
-				}
-				continue;
-			}
-
-			debug(1, "recv %3d %3d %d.%d.%d.%d:%hu\n",
-					time_delta(&buffer[buffill].recv_time, &ts),
-					time_delta(&buffer[buffill].recv_time, &t),
-					server->ipaddr&0xff,
-					(server->ipaddr>>8)&0xff,
-					(server->ipaddr>>16)&0xff,
-					(server->ipaddr>>24)&0xff,
-					server->port);
-
-			t = buffer[buffill].recv_time;
-
-			buffer[buffill].server = server;
-			buffer[buffill].len = pktlen;
-			++buffill;
+			fprintf(OF, "\t\t\t\t<skin>%s</skin>\n", xml_escape(player->skin));
 		}
-
-		for(i = 0; i < buffill; ++i)
+		if (player->type_flag)
 		{
-			struct qserver* server = buffer[i].server;
-			pkt = buffer[i].data;
-			pktlen = buffer[i].len;
-			memcpy(&packet_recv_time, &buffer[i].recv_time, sizeof(packet_recv_time));
-
-			if ( get_debug_level() > 0 )
-				print_packet( server, pkt, pktlen);
-
-#ifdef ENABLE_DUMP
-			if (do_dump)
-				dump_packet(pkt, pktlen);
-#endif
-
-			if ( server->flags & FLAG_BROADCAST)
-			{
-				struct qserver *broadcast= server;
-				unsigned short port= ntohs(buffer[i].addr.sin_port);
-				/* create new server and init */
-				if ( ! (no_port_offset || server->flags & TF_NO_PORT_OFFSET))
-				{
-					port-= server->type->port_offset;
-				}
-				server= add_qserver_byaddr( ntohl(buffer[i].addr.sin_addr.s_addr), port, server->type, NULL);
-				if ( server == NULL)
-				{
-					server= find_server_by_address( buffer[i].addr.sin_addr.s_addr,
-					ntohs(buffer[i].addr.sin_port));
-					if ( server == NULL)
-					{
-						continue;
-					}
-/*
-					if ( show_errors)
-					{
-						fprintf(stderr,
-							"duplicate or invalid packet received from 0x%08x:%hu\n",
-							ntohl(buffer[i].addr.sin_addr.s_addr), ntohs(buffer[i].addr.sin_port));
-						print_packet( NULL, pkt, pktlen);
-					}
-					continue;
-*/
-				}
-				else
-				{
-					server->packet_time1= broadcast->packet_time1;
-					server->packet_time2= broadcast->packet_time2;
-					server->ping_total= broadcast->ping_total;
-					server->n_requests= broadcast->n_requests;
-					server->n_packets= broadcast->n_packets;
-					broadcast->n_servers++;
-				}
-			}
-
-			debug(2, "connected: %d", connected);
-			server->type->packet_func( server, pkt, pktlen);
-			debug(2, "connected: %d", connected);
+			fprintf(OF, "\t\t\t\t<type>bot</type>\n");
+		}
+		else
+		{
+			fprintf(OF, "\t\t\t\t<type>player</type>\n");
 		}
-		buffill = 0;
 
-		if ( run_timeout && time(0)-start_time >= run_timeout)
+		if (player->connect_time)
 		{
-			debug(2, "run timeout reached");
-			break;
+			fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
 		}
 
-		send_packets();
-		if ( connected < max_simultaneous)
-			bind_retry= bind_sockets();
+		xml_display_player_info_info(player);
 
-		debug(2, "connected: %d", connected);
+		fprintf(OF, "\t\t\t</player>\n");
 	}
 
-	free(buffer);
+	fprintf(OF, "\t\t</players>\n");
 }
-#ifndef _WIN32
-void sigpipe( int sig )
+
+void xml_display_hl2_player_info(struct qserver *server)
 {
-	fprintf( stderr, "SIG: %d\n", sig );
+	// ATM this looks like halflife player info
+	xml_display_halflife_player_info(server);
 }
-#endif
 
-int
-main( int argc, char *argv[])
+void xml_display_haze_player_info(struct qserver *server)
 {
-    int arg, n_files, i;
-    char **files, *outfilename, *query_arg;
-    struct server_arg *server_args= NULL;
-    int n_server_args= 0, max_server_args= 0;
-    int default_server_type_id;
-
-#ifdef _WIN32
-    WORD version= MAKEWORD(1,1);
-    WSADATA wsa_data;
-    if ( WSAStartup(version,&wsa_data) != 0)  {
-	fprintf( stderr, "Could not open winsock\n");
-	exit(1);
-    }
-#else
-	signal( SIGPIPE, &sigpipe );
-#endif
-
-    types= &builtin_types[0];
-    n_server_types= (sizeof( builtin_types) / sizeof(server_type)) - 1;
+	// ATM this looks like gs2 player info
+	xml_display_gs2_player_info(server);
+}
 
-    i= qsc_load_default_config_files();
-    if ( i == -1)
-	return 1;
-    else if ( i == 0)
-	add_config_server_types();
+void xml_display_gs2_player_info(struct qserver *server)
+{
+	struct player *player;
 
-    if ( argc == 1)
-	usage(NULL,argv,NULL);
+	fprintf(OF, "\t\t<players>\n");
 
-    OF= stdout;
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
 
-    files= (char **) malloc( sizeof(char*) * (argc/2));
-    n_files= 0;
-
-    default_server_type_id= Q_SERVER;
-    little_endian= ((char*)&one)[0];
-    big_endian= !little_endian;
-
-    for ( arg= 1; arg < argc; arg++)  {
-	if ( argv[arg][0] != '-')
-	    break;
-	outfilename= NULL;
-	if ( strcmp( argv[arg], "-nocfg") == 0 && arg == 1)  {
-	    revert_server_types();
-	}
-	else if ( strcmp( argv[arg], "--help") == 0)  {
-		usage(NULL,argv,NULL);
-	}
-	else if ( strcmp( argv[arg], "-f") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -f\n", argv,NULL);
-	    files[n_files++]= argv[arg];
-	}
-	else if ( strcmp( argv[arg], "-retry") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -retry\n", argv,NULL);
-	    n_retries= atoi( argv[arg]);
-	    if ( n_retries <= 0)  {
-		fprintf( stderr, "retries must be greater than zero\n");
-		exit(1);
-	    }
-	}
-	else if ( strcmp( argv[arg], "-interval") == 0)  {
-	    double value= 0.0;
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -interval\n", argv,NULL);
-	    sscanf( argv[arg], "%lf", &value);
-	    if ( value < 0.1)  {
-		fprintf( stderr, "retry interval must be greater than 0.1\n");
-		exit(1);
-	    }
-	    retry_interval= (int)(value * 1000);
-	}
-	else if ( strcmp( argv[arg], "-mi") == 0)  {
-	    double value= 0.0;
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -mi\n", argv,NULL);
-	    sscanf( argv[arg], "%lf", &value);
-	    if ( value < 0.1)  {
-		fprintf( stderr, "interval must be greater than 0.1\n");
-		exit(1);
-	    }
-	    master_retry_interval= (int)(value * 1000);
-	}
-	else if ( strcmp( argv[arg], "-H") == 0)
-	    hostname_lookup= 1;
-	else if ( strcmp( argv[arg], "-u") == 0)
-	    up_servers_only= 1;
-	else if ( strcmp( argv[arg], "-nf") == 0)
-	    no_full_servers= 1;
-	else if ( strcmp( argv[arg], "-ne") == 0)
-	    no_empty_servers= 1;
-	else if ( strcmp( argv[arg], "-nh") == 0)
-	    no_header_display= 1;
-	else if ( strcmp( argv[arg], "-old") == 0)
-	    new_style= 0;
-	else if ( strcmp( argv[arg], "-P") == 0)
-	    get_player_info= 1;
-	else if ( strcmp( argv[arg], "-R") == 0)
-	    get_server_rules= 1;
-	else if ( strncmp( argv[arg], "-raw", 4) == 0)  {
-	    if ( argv[arg][4] == ',')
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+		if (NA_INT != player->score)
 		{
-			if ( strcmp( &argv[arg][5], "game") == 0)
-			{
-				show_game_in_raw= 1;
-			}
-			else
-			{
-				usage( "Unknown -raw option\n", argv, NULL);
-			}
-	    }
-	    arg++;
-	    if ( arg >= argc)
+			fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->score);
+		} if (NA_INT != player->deaths)
 		{
-			usage( "missing argument for -raw\n", argv,NULL);
+			fprintf(OF, "\t\t\t\t<deaths>%d</deaths>\n", player->deaths);
 		}
-	    raw_delimiter= argv[arg];
-
-		// Check the multi rule delimiter isnt the same
-		// If it is fix to maintain backwards compatibility
-		if ( 0 == strcmp( raw_delimiter, multi_delimiter ) &&
-			0 == strcmp( raw_delimiter, "|" )
-		)
+		if (NA_INT != player->frags)
 		{
-			multi_delimiter = ":";
+			fprintf(OF, "\t\t\t\t<frags>%d</frags>\n", player->frags);
 		}
-	    raw_display= 1;
-	}
-	else if ( strcmp( argv[arg], "-mdelim" ) == 0 )
-	{
-		arg++;
-		if ( arg >= argc)
+		if (player->team_name)
 		{
-			usage( "missing argument for -mdelim\n", argv,NULL);
+			fprintf(OF, "\t\t\t\t<team>%s</team>\n", xml_escape(player->team_name));
 		}
-		multi_delimiter = argv[arg];
-	}
-	else if ( strcmp( argv[arg], "-xml") == 0) {
-	    xml_display= 1;
-	    if (raw_display == 1)
-		usage( "cannot specify both -raw and -xml\n", argv,NULL);
-	}
-	else if ( strcmp( argv[arg], "-utf8") == 0) {
-	    xml_encoding= ENCODING_UTF_8;
-	    name_xforms= 0;
-	}
-	else if ( strcmp( argv[arg], "-ncn") == 0)  {
-	    color_names= 0;
- 	}
-	else if ( strcmp( argv[arg], "-cn") == 0)  {
-	    color_names= 1;
- 	}
-	else if ( strcmp( argv[arg], "-hc") == 0)  {
-	    color_names= 2;
- 	}
-	else if ( strcmp( argv[arg], "-nx") == 0)  {
-	    name_xforms= 1;
- 	}
-	else if ( strcmp( argv[arg], "-nnx") == 0)  {
-	    name_xforms= 0;
- 	}
-	else if ( strcmp( argv[arg], "-tc") == 0)  {
-	    time_format= CLOCK_TIME;
-	}
-	else if ( strcmp( argv[arg], "-tsw") == 0)  {
-	    time_format= STOPWATCH_TIME;
-	}
-	else if ( strcmp( argv[arg], "-ts") == 0)  {
-	    time_format= SECONDS;
-	}
-	else if ( strcmp( argv[arg], "-pa") == 0)  {
-	    player_address= 1;
-	}
-	else if ( strcmp( argv[arg], "-hpn") == 0)  {
-	    hex_player_names= 1;
-	}
-	else if ( strcmp( argv[arg], "-hsn") == 0)  {
-	    hex_server_names= 1;
-	}
-	else if ( strncmp( argv[arg], "-maxsimultaneous", 7) == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -maxsimultaneous\n", argv,NULL);
-	    max_simultaneous= atoi(argv[arg]);
-	    if ( max_simultaneous <= 0)
-		usage( "value for -maxsimultaneous must be > 0\n", argv,NULL);
-	    if ( max_simultaneous > FD_SETSIZE)
-		max_simultaneous= FD_SETSIZE;
- 	}
-	else if ( strcmp( argv[arg], "-sendinterval") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -sendinterval\n", argv,NULL);
-	    sendinterval= atoi(argv[arg]);
-	    if ( sendinterval < 0)
-		usage( "value for -sendinterval must be >= 0\n", argv,NULL);
- 	}
-	else if ( strcmp( argv[arg], "-raw-arg") == 0)  {
-	    raw_arg= 1000;
- 	}
-	else if ( strcmp( argv[arg], "-timeout") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -timeout\n", argv,NULL);
-	    run_timeout= atoi( argv[arg]);
-	    if ( run_timeout <= 0)
-		usage( "value for -timeout must be > 0\n", argv,NULL);
-	}
-	else if ( strncmp(argv[arg], "-progress", sizeof("-progress")-1) == 0) {
-	    char *p= argv[arg] + sizeof("-progress")-1;
-	    progress= 1;
-	    if ( *p == ',')
-		progress= atoi(p+1);
- 	}
-	else if ( strcmp( argv[arg], "-Hcache") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -Hcache\n", argv,NULL);
-	    if ( hcache_open( argv[arg], 0) == -1)
-		return 1;
-	}
-	else if ( strcmp( argv[arg], "-default") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -default\n", argv,NULL);
-	    default_server_type= find_server_type_string( argv[arg]);
-	    if ( default_server_type == NULL)  {
-		char opt[256], *o= &opt[0];
-		sprintf( opt, "-%s", argv[arg]);
-		for ( ; *o; o++) *o= tolower(*o);
-		default_server_type= find_server_type_option( opt);
-	    }
-	    if ( default_server_type == NULL)  {
-		fprintf( stderr, "unknown server type \"%s\"\n", argv[arg]);
-		usage( NULL, argv,NULL);
-	    }
-	    default_server_type_id= default_server_type->id;
-	    default_server_type= NULL;
-	}
-	else if ( strncmp( argv[arg], "-Tserver", 3) == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( read_qserver_template( argv[arg]) == -1)
-		return 1;
-	}
-	else if ( strncmp( argv[arg], "-Trule", 3) == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( read_rule_template( argv[arg]) == -1)
-		return 1;
-	}
-	else if ( strncmp( argv[arg], "-Theader", 3) == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( read_header_template( argv[arg]) == -1)
-		return 1;
-	}
-	else if ( strncmp( argv[arg], "-Ttrailer", 3) == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( read_trailer_template( argv[arg]) == -1)
-		return 1;
-	}
-	else if ( strncmp( argv[arg], "-Tplayer", 3) == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( read_player_template( argv[arg]) == -1)
-		return 1;
-	}
-	else if ( strcmp( argv[arg], "-sort") == 0)  {
-		size_t pos;
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for -sort\n", argv, NULL);
-	    strncpy( sort_keys, argv[arg], sizeof(sort_keys)-1);
-	    pos= strspn( sort_keys, SUPPORTED_SORT_KEYS);
-	    if ( pos != strlen( sort_keys))  {
-		fprintf( stderr, "Unknown sort key \"%c\", valid keys are \"%s\"\n",
-			sort_keys[pos], SUPPORTED_SORT_KEYS);
-		return 1;
-	    }
-	    server_sort= strpbrk( sort_keys, SUPPORTED_SERVER_SORT) != NULL;
-	    if ( strchr( sort_keys, 'l'))
-		server_sort= 1;
-	    player_sort= strpbrk( sort_keys, SUPPORTED_PLAYER_SORT) != NULL;
-	}
-	else if ( strcmp( argv[arg], "-errors") == 0)  {
-	    show_errors++;
-	}
-	else if ( strcmp( argv[arg], "-of") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( argv[arg][0] == '-' && argv[arg][1] == '\0')
-		OF= stdout;
-	    else
-		OF= fopen( argv[arg], "w");
-	    if ( OF == NULL)  {
-		perror( argv[arg]);
-		return 1;
-	    }
-	}
-	else if ( strcmp( argv[arg], "-af") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( argv[arg][0] == '-' && argv[arg][1] == '\0')
-		OF= stdout;
-	    else
-		OF= fopen( argv[arg], "a");
-	    if ( OF == NULL)  {
-		perror( argv[arg]);
-		return 1;
-	    }
-	}
-	else if ( strcmp( argv[arg], "-htmlnames") == 0)  {
-	    html_names= 1;
-	}
-	else if ( strcmp( argv[arg], "-nohtmlnames") == 0)  {
-	    html_names= 0;
-	}
-	else if ( strcmp( argv[arg], "-htmlmode") == 0)  {
-	    html_mode= 1;
-	}
-	else if ( strcmp( argv[arg], "-carets") == 0)  {
-	    strip_carets= 0;
-	}
-	else if ( strcmp( argv[arg], "-d") == 0)  {
-	    set_debug_level(get_debug_level() + 1);
-	}
-	else if ( strcmp( argv[arg], "-showgameport") == 0)  {
-	    show_game_port= 1;
-	}
-	else if ( strcmp( argv[arg], "-noportoffset") == 0)  {
-	    no_port_offset= 1;
-	}
-	else if ( strcmp( argv[arg], "-srcip") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( parse_source_address( argv[arg], &source_ip, &source_port) == -1)
-		return 1;
-	    if ( source_port)  {
-		source_port_low= source_port;
-		source_port_high= source_port;
-	    }
-	}
-	else if ( strcmp( argv[arg], "-srcport") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( parse_source_port( argv[arg], &source_port_low, &source_port_high) == -1)
-		return 1;
-	    source_port= source_port_low;
-	}
-	else if ( strcmp( argv[arg], "-cfg") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    if ( qsc_load_config_file( argv[arg]) == -1)
-		return 1;
-	    add_config_server_types();
-	}
-	else if ( strcmp( argv[arg], "-allowserverdups") == 0)  {
-	    noserverdups = 0;
-	}
-#ifdef ENABLE_DUMP
-	else if ( strcmp( argv[arg], "-dump") == 0)  {
-	    do_dump = 1;
-	}
-	else if ( strcmp( argv[arg], "-pkt") == 0)  {
-	    arg++;
-	    if ( arg >= argc)
-		usage( "missing argument for %s\n", argv, argv[arg-1]);
-	    add_pkt_from_file(argv[arg]);
-	}
-#endif
-#ifdef _WIN32
-	else if ( strcmp( argv[arg], "-noconsole") == 0)  {
-	    FreeConsole();
-	}
-#endif
-	else  {
-	    int outfile;
-	    server_type *type;
-	    arg++;
-	    if ( arg >= argc)  {
-		fprintf( stderr, "missing argument for \"%s\"\n", argv[arg-1]);
-		return 1;
-	    }
-	    type= parse_server_type_option( argv[arg-1], &outfile, &query_arg);
-	    if ( type == NULL)  {
-		fprintf( stderr, "unknown option \"%s\"\n", argv[arg-1]);
-		return 1;
-	    }
-	    outfilename= NULL;
-	    if ( outfile)  {
-		outfilename= strchr( argv[arg], ',');
-		if ( outfilename == NULL)  {
-		    fprintf( stderr, "missing file name for \"%s,outfile\"\n",
-			argv[arg-1]);
-		    return 1;
+		else
+		{
+			fprintf(OF, "\t\t\t\t<team>%d</team>\n", player->team);
 		}
-		*outfilename++= '\0';
-	    }
-/*
-	    if ( query_arg && !(type->flags & TF_QUERY_ARG))  {
-		fprintf( stderr, "option flag \"%s\" not allowed for this server type\n",
-			query_arg);
-		return 1;
-	    }
-*/
-	    if ( type->flags & TF_QUERY_ARG_REQUIRED && !query_arg)  {
-		fprintf( stderr, "option flag missing for server type \"%s\"\n",
-			argv[arg-1]);
-		return 1;
-	    }
-	    add_server_arg( argv[arg], type->id, outfilename, query_arg,
-		&server_args, &n_server_args, &max_server_args);
-	}
-	}
-
-	start_time= time(0);
 
-	default_server_type= find_server_type_id( default_server_type_id);
+		if (player->skin)
+		{
+			fprintf(OF, "\t\t\t\t<skin>%s</skin>\n", xml_escape(player->skin));
+		}
 
-	for ( i= 0; i < n_files; i++)
-	add_file( files[i]);
+		if (player->connect_time)
+		{
+			fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 1)));
+		}
 
-	for ( ; arg < argc; arg++)
-	add_qserver( argv[arg], default_server_type, NULL, NULL);
+		xml_display_player_info_info(player);
 
-	for ( i= 0; i < n_server_args; i++)  {
-	server_type *server_type= find_server_type_id( server_args[i].type_id);
-	add_qserver( server_args[i].arg, server_type,
-		server_args[i].outfilename, server_args[i].query_arg);
+		fprintf(OF, "\t\t\t</player>\n");
 	}
 
-	free( server_args);
+	fprintf(OF, "\t\t</players>\n");
+}
 
-	if ( servers == NULL)
-		exit(1);
+void xml_display_armyops_player_info(struct qserver *server)
+{
+	struct player *player;
 
-	max_connmap= max_simultaneous + 10;
-	connmap= (struct qserver**) calloc( 1, sizeof(struct qserver*) * max_connmap);
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		player->score = calculate_armyops_score(player);
+	}
 
-	if ( color_names == -1)
-		color_names= ( raw_display) ? DEFAULT_COLOR_NAMES_RAW :
-		DEFAULT_COLOR_NAMES_DISPLAY;
+	xml_display_gs2_player_info(server);
+}
 
-	if ( time_format == -1)
-		time_format= ( raw_display) ? DEFAULT_TIME_FMT_RAW :
-		DEFAULT_TIME_FMT_DISPLAY;
+void xml_display_ts2_player_info(struct qserver *server)
+{
+	struct player *player;
 
-	if ( (one_server_type_id & MASTER_SERVER) || one_server_type_id == 0)
-		display_prefix= 1;
+	fprintf(OF, "\t\t<players>\n");
 
-	if ( xml_display)
-		xml_header();
-	else if ( new_style && ! raw_display && ! have_server_template())
-		display_header();
-	else if ( have_header_template())
-		template_display_header();
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
 
-	q_serverinfo.length= htons( q_serverinfo.length);
-	h2_serverinfo.length= htons( h2_serverinfo.length);
-	q_player.length= htons( q_player.length);
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
 
-	do_work();
+		if (player->connect_time)
+		{
+			fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
+		}
 
-	finish_output();
-	free_server_hash();
-	free(files);
-	free(connmap);
+		xml_display_player_info_info(player);
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
-	return 0;
+	fprintf(OF, "\t\t</players>\n");
 }
 
-void
-finish_output()
+void xml_display_wic_player_info(struct qserver *server)
 {
-    int i;
-    hcache_update_file();
+	struct player *player;
 
-    if ( progress)  {
-	display_progress();
-	fputs( "\n", stderr);
-    }
-
-    if ( server_sort)  {
-	struct qserver **array, *server, *next_server;
-	if ( strchr( sort_keys, 'l') &&
-		strpbrk( sort_keys, SUPPORTED_SERVER_SORT) == NULL)  {
-	    server= servers;
-	    for ( ; server; server= next_server)  {
-		next_server= server->next;
-		display_server( server);
-	    }
-	}
-	else  {
-	    array= (struct qserver **) malloc( sizeof(struct qserver *) *
-		    num_servers_total);
-	    server= servers;
-	    for ( i= 0; server != NULL; i++)  {
-		array[i]= server;
-		server= server->next;
-	    }
-	    sort_servers( array, num_servers_total);
-	    if ( progress)
-	    fprintf( stderr, "\n");
-	    for ( i= 0; i < num_servers_total; i++)
-		display_server( array[i]);
-	    free( array);
-	}
-    }
-    else  {
-	struct qserver *server, *next_server;
-	server= servers;
-	for ( ; server; server= next_server)  {
-	    next_server= server->next;
-	    if ( server->server_name == HOSTNOTFOUND)
-		display_server( server);
-	}
-    }
+	fprintf(OF, "\t\t<players>\n");
 
-    if ( xml_display)
-	xml_footer();
-    else if ( have_trailer_template())
-	template_display_trailer();
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
 
-    if ( OF != stdout)
-	fclose( OF);
-}
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->score);
+		fprintf(OF, "\t\t\t\t<team>%s</team>\n", player->team_name);
+		fprintf(OF, "\t\t\t\t<bot>%d</bot>\n", player->type_flag );
+		if ( player->tribe_tag )
+		{
+			fprintf(OF, "\t\t\t\t<role>%s</role>\n", player->tribe_tag );
+		}
+
+
+		xml_display_player_info_info(player);
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
+	fprintf(OF, "\t\t</players>\n");
+}
 
-void
-add_file( char *filename)
+void xml_display_tm_player_info(struct qserver *server)
 {
-	FILE *file;
-	char name[200], *comma, *query_arg = NULL;
-	server_type* type;
+	struct player *player;
 
-	if ( strcmp( filename, "-") == 0)
-	{
-		file= stdin;
-		current_filename= NULL;
-	}
-	else
-	{
-		file= fopen( filename, "r");
-		current_filename= filename;
-	}
-	current_fileline= 1;
+	fprintf(OF, "\t\t<players>\n");
 
-	if ( file == NULL)
-	{
-		perror( filename);
-		return;
-	}
-	for ( ; fscanf( file, "%s", name) == 1; current_fileline++)
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		comma= strchr( name, ',');
-		if ( comma)
-		{
-			*comma++= '\0';
-			query_arg= strdup( comma);
-		}
-		type = find_server_type_string( name);
-		if ( type == NULL)
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<ping>%d</ping>\n", player->ping);
+
+		if (player->connect_time)
 		{
-			add_qserver( name, default_server_type, NULL, NULL);
+			fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
 		}
-		else if ( fscanf( file, "%s", name) == 1)
-		{
-			if ( type->flags & TF_QUERY_ARG && comma && *query_arg)
-			{
-				add_qserver( name, type, NULL, query_arg );
-			}
-			else
-			{
-				add_qserver( name, type, NULL, NULL );
-			}
-		}
-	}
 
-	if ( file != stdin)
-	fclose(file);
+		xml_display_player_info_info(player);
+		fprintf(OF, "\t\t\t</player>\n");
+	}
 
-	current_fileline= 0;
+	fprintf(OF, "\t\t</players>\n");
 }
 
-void
-print_file_location()
-{
-    if ( current_fileline != 0)
-	fprintf( stderr, "%s:%d: ", current_filename?current_filename:"<stdin>",
-		current_fileline);
-}
 
-void
-parse_query_params( struct qserver *server, char *params)
+void xml_display_savage_player_info(struct qserver *server)
 {
-    char *comma, *arg= params;
-    do  {
-	comma= strchr(arg,',');
-	if ( comma)
-	    *comma= '\0';
-	if ( strchr( arg, '='))
-	    add_query_param( server, arg);
-	else if ( strcmp( arg, "noportoffset") == 0 || strcmp( arg, "qp") == 0)
-	    server->flags |= TF_NO_PORT_OFFSET;
-	else if ( strcmp( arg, "showgameport") == 0 || strcmp( arg, "gp") == 0)
-	    server->flags |= TF_SHOW_GAME_PORT;
-	arg= comma+1;
-    } while ( comma);
+	struct player *player;
+
+	fprintf(OF, "\t\t<players>\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
+	{
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<time>%s</time>\n", xml_escape(play_time(player->connect_time, 2)));
+
+		fprintf(OF, "\t\t\t</player>\n");
+	}
+
+	fprintf(OF, "\t\t</players>\n");
 }
 
-int
-add_qserver( char *arg, server_type* type, char *outfilename, char *query_arg)
+void xml_display_farcry_player_info(struct qserver *server)
 {
-	struct qserver *server, *prev_server;
-	int flags= 0;
-	char *colon= NULL, *arg_copy, *hostname= NULL;
-	unsigned int ipaddr;
-	unsigned short port, port_max;
-	int portrange = 0;
-	unsigned colonpos = 0;
+	struct player *player;
 
-	if ( run_timeout && time(0)-start_time >= run_timeout)
+	fprintf(OF, "\t\t<players>\n");
+
+	player = server->players;
+	for (; player != NULL; player = player->next)
 	{
-		finish_output();
-		exit(0);
+		fprintf(OF, "\t\t\t<player>\n");
+
+		fprintf(OF, "\t\t\t\t<name>%s</name>\n", xml_escape(xform_name(player->name, server)));
+		fprintf(OF, "\t\t\t\t<score>%d</score>\n", player->frags);
+		fprintf(OF, "\t\t\t\t<time>%su</time>\n", xml_escape(play_time(player->connect_time, 2)));
+
+		fprintf(OF, "\t\t\t</player>\n");
 	}
 
-	port = port_max = type->default_port;
+	fprintf(OF, "\t\t</players>\n");
+}
+
 
-	if ( outfilename && strcmp( outfilename, "-") != 0)
+void display_progress()
+{
+	static struct timeval rate_start =
 	{
-		FILE *outfile= fopen( outfilename, "r+");
-		if ( outfile == NULL && (errno == EACCES || errno == EISDIR ||
-			errno == ENOSPC || errno == ENOTDIR))
-		{
-			perror( outfilename);
-			return -1;
-		}
-		if ( outfile)
-		{
-			fclose(outfile);
-		}
-    }
+		0, 0
+	};
+	char rate[32];
+	struct timeval now;
 
-    arg_copy= strdup(arg);
+	gettimeofday(&now, NULL);
 
-    colon= strchr( arg, ':');
-    if ( colon != NULL)
-    {
-		if(sscanf( colon+1, "%hu-%hu", &port, &port_max) == 2)
+	if (!rate_start.tv_sec)
+	{
+		rate_start = now;
+		rate[0] = '\0';
+	}
+	else
+	{
+		int delta = time_delta(&now, &rate_start);
+		if (delta > 1500)
 		{
-			portrange = 1;
+			sprintf(rate, "  %d servers/sec  ", (num_servers_returned + num_servers_timed_out) *1000 / delta);
 		}
 		else
 		{
-			port_max = port;
-		}
-		*colon= '\0';
-		colonpos = colon-arg;
-    }
-
-    if ( *arg == '+')
-    {
-		flags|= FLAG_BROADCAST;
-		arg++;
-    }
-
-    ipaddr= inet_addr(arg);
-    if ( ipaddr == INADDR_NONE)
-    {
-		if ( strcmp( arg, "255.255.255.255") != 0)
-		{
-			ipaddr= htonl( hcache_lookup_hostname(arg));
+			rate[0] = '\0';
 		}
-    }
-    else if ( hostname_lookup && !(flags&FLAG_BROADCAST))
-    {
-		hostname= hcache_lookup_ipaddr( ntohl(ipaddr));
 	}
 
-    if ( (ipaddr == INADDR_NONE || ipaddr == 0) && strcmp( arg, "255.255.255.255") != 0)
+	// only print out every 'progress' number of servers.
+	if (0 != num_servers_returned + num_servers_timed_out && (progress == 1 || (num_servers_returned + num_servers_timed_out) %	progress == 0))
 	{
-		print_file_location();
-		fprintf( stderr, "%s: %s\n", arg, strherror(h_errno));
-		server= (struct qserver *) calloc( 1, sizeof( struct qserver));
-		for(;port <= port_max; ++port)
-		{
-			init_qserver( server, type);
-			if(portrange)
-			{
-				server->arg = ( port==port_max ) ? arg_copy : strdup(arg_copy);
-			}
-			if(portrange)
-			{
-				sprintf(server->arg+colonpos+1, "%hu", port);
-			}
-			server->server_name= HOSTNOTFOUND;
-			server->error= strdup( strherror(h_errno));
-			server->query_port = server->port= port;
-			if ( last_server != &servers)
-			{
-				prev_server= (struct qserver*) ((char*)last_server - ((char*)&server->next - (char*)server));
-				server->prev= prev_server;
-			}
-			*last_server= server;
-			last_server= & server->next;
-			if ( one_server_type_id == ~MASTER_SERVER)
-			{
-				one_server_type_id= type->id;
-			}
-			else if ( one_server_type_id != type->id)
-			{
-				one_server_type_id= 0;
-			}
-		}
-		return -1;
+		fprintf(stderr, "\r%d/%d (%d timed out, %d down)%s", num_servers_returned + num_servers_timed_out, num_servers_total, num_servers_timed_out, num_servers_down, rate);
 	}
+}
 
-	for(; port > 0 && port <= port_max; ++port)
-	{
-		if ( noserverdups && find_server_by_address( ipaddr, port) != NULL)
-		{
-			continue;
-		}
-
-		server= (struct qserver *) calloc( 1, sizeof( struct qserver));
-		server->arg= port==port_max?arg_copy:strdup(arg_copy);
-		if(portrange)
-		{
-			sprintf(server->arg+colonpos+1, "%hu", port);
-		}
-		if ( hostname && colon)
-		{
-			server->host_name= (char*)malloc( strlen(hostname) + 5 +2);
-			sprintf( server->host_name, "%s:%hu", hostname, port);
-		}
-		else
-		{
-			server->host_name= strdup((hostname)?hostname:arg);
-		}
+/* ----- END MODIFICATION ----- Don't need to change anything below here. */
 
-		server->ipaddr= ipaddr;
-		server->query_port = server->port = port;
-		server->type= type;
-		server->outfilename= outfilename;
-		server->flags= flags;
-		if (query_arg)
-		{
-			server->query_arg = ( port == port_max ) ? query_arg : strdup(query_arg);
-			parse_query_params( server, server->query_arg);
-		}
-		else
-		{
-			server->query_arg = NULL;
-		}
-		init_qserver( server, type);
 
-		if ( server->type->master)
-		{
-			waiting_for_masters++;
-		}
+void set_non_blocking(int fd);
+int set_fds(fd_set *fds);
+void get_next_timeout(struct timeval *timeout);
 
-		if ( num_servers_total % 10 == 0)
-		{
-			hcache_update_file();
-		}
+void set_file_descriptors();
+int wait_for_file_descriptors(struct timeval *timeout);
+struct qserver *get_next_ready_server();
 
-		if ( last_server != &servers )
-		{
-			prev_server= (struct qserver*) ((char*)last_server - ((char*)&server->next - (char*)server));
-			server->prev= prev_server;
-		}
-		*last_server= server;
-		last_server= &server->next;
 
-		add_server_to_hash( server );
+/* Misc flags
+ */
 
-		if ( one_server_type_id == ~MASTER_SERVER)
-		{
-			one_server_type_id= type->id;
-		}
-		else if ( one_server_type_id != type->id)
-		{
-			one_server_type_id= 0;
-		}
+struct timeval packet_recv_time;
+int one_server_type_id = ~MASTER_SERVER;
+static int one = 1;
+static int little_endian;
+static int big_endian;
+unsigned int swap_long(void*);
+unsigned short swap_short(void*);
+float swap_float_from_little(void *f);
+char *strndup(const char *string, size_t len);
+#define FORCE 1
 
-		++num_servers;
-	}
-	return 0;
-}
+/* Print an error message and the program usage notes
+ */
 
-struct qserver *
-add_qserver_byaddr( unsigned int ipaddr, unsigned short port,
-	server_type* type, int *new_server)
+void usage(char *msg, char **argv, char *a1)
 {
-	char arg[36];
-	struct qserver *server, *prev_server;
-	char *hostname= NULL;
+	int i;
+	server_type *type;
+	server_type **sorted_types;
 
-	if ( run_timeout && time(0)-start_time >= run_timeout)
+	if (msg)
 	{
-		finish_output();
-		exit(0);
+		fprintf(stderr, msg, a1);
 	}
 
-	if ( new_server)
+	printf("Usage: %s [options ...]\n", argv[0]);
+	printf("\t[-default server-type] [-cfg file] [-f file] [host[:port]] ...\n");
+	printf("Where host is an IP address or host name\n");
+
+	sorted_types = (server_type **)malloc(sizeof(server_type*) * n_server_types);
+	type = &types[0];
+	for (i = 0; type->id != Q_UNKNOWN_TYPE; type++, i++)
 	{
-		*new_server= 0;
+		sorted_types[i] = type;
 	}
-	ipaddr= htonl(ipaddr);
-	if ( ipaddr == 0)
+
+	quicksort((void **)sorted_types, 0, n_server_types - 1, (int(*)(void *, void*))type_option_compare);
+
+
+	for (i = 0; i < n_server_types; i++)
 	{
-		return 0;
+		type = sorted_types[i];
+		printf("%s\t\tquery %s server\n", type->type_option, type->game_name);
 	}
 
-	// TODO: this prevents servers with the same ip:port being queried
-	// and hence breaks virtual servers support e.g. Teamspeak 2
-	if ( find_server_by_address( ipaddr, port) != NULL)
+	quicksort((void **)sorted_types, 0, n_server_types - 1, (int(*)(void *, void*))type_string_compare);
+	printf("-default\tset default server type:");
+	for (i = 0; i < n_server_types; type++, i++)
+	{
+		type = sorted_types[i];
+		printf(" %s", type->type_string);
+	}
+	puts("");
+	printf("-nocfg\t\tIgnore qstat configuration loaded from any default location. Must be the first option on the command-line.\n");
+	printf("-cfg\t\tread the extended types from given file not the default one\n");
+	printf("-f\t\tread hosts from file\n");
+	printf("-R\t\tfetch and display server rules\n");
+	printf("-P\t\tfetch and display player info\n");
+	printf("-sort\t\tsort servers and/or players\n");
+	printf("-u\t\tonly display servers that are up\n");
+	printf("-nf\t\tdo not display full servers\n");
+	printf("-ne\t\tdo not display empty servers\n");
+	printf("-nh\t\tdo not display header line.\n");
+	printf("-cn\t\tdisplay color names instead of numbers\n");
+	printf("-ncn\t\tdisplay color numbers instead of names\n");
+	printf("-hc\t\tdisplay colors in #rrggbb format\n");
+	printf("-tc\t\tdisplay time in clock format (DhDDmDDs)\n");
+	printf("-tsw\t\tdisplay time in stop-watch format (DD:DD:DD)\n");
+	printf("-ts\t\tdisplay time in seconds\n");
+	printf("-pa\t\tdisplay player address\n");
+	printf("-hpn\t\tdisplay player names in hex\n");
+	printf("-hsn\t\tdisplay server names in hex\n");
+	printf("-nh\t\tdo not display header\n");
+	printf("-old\t\told style display\n");
+	printf("-progress\tdisplay progress meter (text only)\n");
+	printf("-retry\t\tnumber of retries, default is %d\n", DEFAULT_RETRIES);
+	printf("-interval\tinterval between retries, default is %.2f seconds\n", DEFAULT_RETRY_INTERVAL / 1000.0);
+	printf("-mi\t\tinterval between master server retries, default is %.2f seconds\n", (DEFAULT_RETRY_INTERVAL *4) / 1000.0);
+	printf("-timeout\ttotal time in seconds before giving up\n");
+	printf("-maxsim\t\tset maximum simultaneous queries\n");
+	printf("-sendinterval\t\tset time in ms between sending packets, default %u\n", sendinterval);
+	printf("-errors\t\tdisplay errors\n");
+	printf("-allowserverdups\t\tallow adding multiple servers with same ip:port (needed for ts2)\n");
+	printf("-of\t\toutput file\n");
+	printf("-af\t\tLike -of, but append to the file\n");
+	printf("-raw <delim>\toutput in raw format using <delim> as delimiter\n");
+	printf("-mdelim <delim>\tFor rules with multi values use <delim> as delimiter\n");
+	printf("-xml\t\toutput status data as an XML document\n");
+	printf("-Th,-Ts,-Tpt\toutput templates: header, server and player\n");
+	printf("-Tr,-Tt\t\toutput templates: rule, and trailer\n");
+	printf("-srcport <range>\tSend packets from these network ports\n");
+	printf("-srcip <IP>\tSend packets using this IP address\n");
+	printf("-H\t\tresolve host names\n");
+	printf("-Hcache\t\thost name cache file\n");
+	printf("-carets\t\tDisplay carets in Quake 3 player names\n");
+	printf("-d\t\tEnable debug options. Specify multiple times to increase debug level.\n");
+#ifdef ENABLE_DUMP
+	printf("-dump\t\twrite received raw packets to dumpNNN files which must not exist before\n");
+	printf("-pkt <file>\tuse file as server reply instead of quering the server. Works only with TF_SINGLE_QUERY servers\n");
+#endif
+	printf("-htmlmode\tConvert <, >, and & to the equivalent HTML entities\n");
+	printf("-htmlnames\tColorize Quake 3 and Tribes 2 player names using html font tags\n");
+	printf("-nohtmlnames\tDo not colorize Quake 3 and Tribes 2 player names even if $HTML is used in an output template.\n");
+	printf("-showgameport\tAlways display the game port in QStat output.\n");
+	printf("-noportoffset\tDont use builtin status port offsets ( assume query port was specified ).\n");
+	printf("-raw-arg\tWhen used with -raw, always display the server address as it appeared in a file or on the command-line.\n");
+	printf("-utf8\t\tUse the UTF-8 character encoding for XML output.\n");
+	printf("-bom\t\tOutput Byte-Order-Mark for XML output.\n");
+#ifdef _WIN32
+	printf("-noconsole\t\tFree the console\n");
+#endif
+	printf("\n");
+	printf("Sort keys:\n");
+	printf("  servers: p=by-ping, g=by-game, i=by-IP-address, h=by-hostname, n=by-#-players, l=by-list-order\n");
+	printf("  players: P=by-ping, F=by-frags, T=by-team, N=by-name\n");
+	printf("\nqstat version %s\n", VERSION);
+	exit(0);
+}
+
+struct server_arg
+{
+	int type_id;
+	server_type *type;
+	char *arg;
+	char *outfilename;
+	char *query_arg;
+};
+
+server_type *find_server_type_id(int type_id)
+{
+	server_type *type = &types[0];
+	for (; type->id != Q_UNKNOWN_TYPE; type++)
+	if (type->id == type_id)
 	{
-		return 0;
+		return type;
 	}
+	return NULL;
+}
 
-	if ( new_server)
+server_type *find_server_type_string(char *type_string)
+{
+	server_type *type = &types[0];
+	char *t = type_string;
+	for (; *t; t++)
 	{
-		*new_server= 1;
+		*t = tolower(*t);
 	}
 
-	server= (struct qserver *) calloc( 1, sizeof( struct qserver));
-	server->ipaddr= ipaddr;
-	ipaddr= ntohl(ipaddr);
-	sprintf( arg, "%d.%d.%d.%d:%hu", ipaddr>>24, (ipaddr>>16)&0xff,
-	(ipaddr>>8)&0xff, ipaddr&0xff, port);
-	server->arg= strdup(arg);
-
-	if ( hostname_lookup)
+	for (; type->id != Q_UNKNOWN_TYPE; type++)
+	if (strcmp(type->type_string, type_string) == 0)
 	{
-		hostname= hcache_lookup_ipaddr( ipaddr);
+		return type;
 	}
+	return NULL;
+}
 
-	if ( hostname)
+server_type *find_server_type_option(char *option)
+{
+	server_type *type = &types[0];
+	for (; type->id != Q_UNKNOWN_TYPE; type++)
+	if (strcmp(type->type_option, option) == 0)
 	{
-		server->host_name= (char*)malloc( strlen(hostname) + 6 + 2);
-		sprintf( server->host_name, "%s:%hu", hostname, port);
+		return type;
 	}
-	else
+	return NULL;
+}
+
+server_type *parse_server_type_option(char *option, int *outfile, char **query_arg)
+{
+	server_type *type = &types[0];
+	char *comma, *arg;
+	int len;
+
+	*outfile = 0;
+	*query_arg = 0;
+
+	comma = strchr(option, ',');
+	if (comma)
 	{
-		server->host_name= strdup( arg);
+		*comma++ = '\0';
 	}
 
-	server->query_port = server->port = port;
-	init_qserver( server, type);
-
-	if ( num_servers_total % 10 == 0)
+	for (; type->id != Q_UNKNOWN_TYPE; type++)
+	if (strcmp(type->type_option, option) == 0)
 	{
-		hcache_update_file();
+		break;
 	}
 
-	if ( last_server != &servers)
+	if (type->id == Q_UNKNOWN_TYPE)
 	{
-		prev_server= (struct qserver*) ((char*)last_server - ((char*)&server->next - (char*)server));
-		server->prev= prev_server;
+		return NULL;
 	}
-	*last_server= server;
-	last_server= & server->next;
 
-	add_server_to_hash( server);
+	if (!comma)
+	{
+		return type;
+	}
 
-	++num_servers;
+	if (strcmp(comma, "outfile") == 0)
+	{
+		*outfile = 1;
+		comma = strchr(comma, ',');
+		if (!comma)
+		{
+			return type;
+		}
+		*comma++ = '\0';
+	}
 
-	return server;
+	*query_arg = strdup(comma);
+	arg = comma;
+	do
+	{
+		comma = strchr(arg, ',');
+		if (comma)
+		{
+			len = comma - arg;
+		}
+		else
+		{
+			len = strlen(arg);
+		}
+		if (strncmp(arg, "outfile", len) == 0)
+		{
+			*outfile = 1;
+		}
+		arg = comma + 1;
+	}
+	while (comma);
+	return type;
 }
 
-void
-add_servers_from_masters()
+void add_server_arg(char *arg, int type, char *outfilename, char *query_arg, struct server_arg **args, int *n, int *max)
 {
-    struct qserver *server;
-    unsigned int ipaddr, i;
-    unsigned short port;
-    int n_servers, new_server, port_adjust= 0;
-    char *pkt;
-    server_type* server_type;
-    FILE *outfile;
-
-    for ( server= servers; server != NULL; server= server->next)  {
-	if ( !server->type->master || server->master_pkt == NULL)
-	    continue;
-	pkt= server->master_pkt;
-
-	if ( server->query_arg && server->type->id == GAMESPY_MASTER)  {
-	    server_type= find_server_type_string( server->query_arg);
-	    if ( server_type == NULL)
-		server_type= find_server_type_id( server->type->master);
-	}
-	else
-	    server_type= find_server_type_id( server->type->master);
-
-	if ( server->type->id == GAMESPY_MASTER && server_type)  {
-	    if ( server_type->id == UN_SERVER)
-		port_adjust= -1;
-	    else if ( server_type->id == KINGPIN_SERVER)
-		port_adjust= 10;
-	}
-
-	outfile= NULL;
-	if ( server->outfilename)  {
-	    if ( strcmp( server->outfilename, "-") == 0)
-		outfile= stdout;
-	    else
-	        outfile= fopen( server->outfilename, "w");
-	    if ( outfile == NULL)  {
-		perror( server->outfilename);
-		continue;
-	    }
-	}
-	n_servers= 0;
-	for ( i= 0; i < server->master_pkt_len; i+= 6)  {
-	    memcpy( &ipaddr, &pkt[i], 4);
-	    memcpy( &port, &pkt[i+4], 2);
-	    ipaddr= ntohl( ipaddr);
-	    port= ntohs( port) + port_adjust;
-	    new_server= 1;
-	    if ( outfile)
-		fprintf( outfile, "%s %d.%d.%d.%d:%hu\n",
-			server_type ? server_type->type_string : "",
-			(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-			(ipaddr>>8)&0xff, ipaddr&0xff, port);
-	    else if ( server_type == NULL)
-		fprintf( OF, "%d.%d.%d.%d:%hu\n",
-			(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-			(ipaddr>>8)&0xff, ipaddr&0xff, port);
-	    else
-		add_qserver_byaddr( ipaddr, port, server_type, &new_server);
-	    n_servers+= new_server;
-	}
-	free( server->master_pkt);
-	server->master_pkt= NULL;
-	server->master_pkt_len= 0;
-	server->n_servers= n_servers;
-	if ( outfile)
-	    fclose( outfile);
-    }
-    if ( hostname_lookup)
-	hcache_update_file();
-    bind_sockets();
+	if (*n == *max)
+	{
+		if (*max == 0)
+		{
+			*max = 4;
+			*args = (struct server_arg*)malloc(sizeof(struct server_arg)*(*max));
+		}
+		else
+		{
+			(*max) *= 2;
+			*args = (struct server_arg*)realloc(*args, sizeof(struct server_arg)*(*max));
+		}
+	}
+	(*args)[ *n].type_id = type;
+	/*    (*args)[*n].type= find_server_type_id( type); */
+	(*args)[ *n].type = NULL;
+	(*args)[ *n].arg = arg;
+	(*args)[ *n].outfilename = outfilename;
+	(*args)[ *n].query_arg = query_arg;
+	(*n)++;
 }
 
-void
-init_qserver( struct qserver *server, server_type* type)
-{
-    server->server_name= NULL;
-    server->map_name= NULL;
-    server->game= NULL;
-    server->num_players= 0;
-    server->fd= -1;
-    if ( server->flags & FLAG_BROADCAST)  {
-	server->retry1= 1;
-	server->retry2= 1;
-    }
-    else  {
-	server->retry1= n_retries;
-	server->retry2= n_retries;
-    }
-    server->n_retries= 0;
-    server->ping_total= 0;
-    server->n_packets= 0;
-    server->n_requests= 0;
-
-    server->n_servers= 0;
-    server->master_pkt_len= 0;
-    server->master_pkt= NULL;
-    server->error= NULL;
-
-    server->saved_data.data= NULL;
-    server->saved_data.datalen= 0;
-    server->saved_data.pkt_index= -1;
-    server->saved_data.pkt_max= 0;
-    server->saved_data.next= NULL;
-
-    server->type = type;
-    server->next_rule= (get_server_rules) ? "" : NO_SERVER_RULES;
-    server->next_player_info= (get_player_info &&
-		    type->player_packet) ? 0 : NO_PLAYER_INFO;
-
-    server->n_player_info= 0;
-    server->players= NULL;
-    server->n_rules= 0;
-    server->rules= NULL;
-    server->last_rule= &server->rules;
-    server->missing_rules= 0;
-
-    num_servers_total++;
-}
 
-// ipaddr should be network byte-order
-// port should be host byte-order
-struct qserver *
-find_server_by_address( unsigned int ipaddr, unsigned short port)
+void add_query_param(struct qserver *server, char *arg)
 {
-    struct qserver **hashed;
-    unsigned int hash, i;
-    hash= (ipaddr + port) % ADDRESS_HASH_LENGTH;
-
-    if ( ipaddr == 0)  {
-	for ( hash= 0; hash < ADDRESS_HASH_LENGTH; hash++)
-	    printf( "%3d %d\n", hash, server_hash_len[hash]);
-	return NULL;
-    }
+	char *equal;
+	struct query_param *param;
 
-    hashed = server_hash[hash];
-    for ( i= server_hash_len[hash]; i; i--, hashed++)
-	if ( *hashed && (*hashed)->ipaddr == ipaddr && (*hashed)->port == port)
-	    return *hashed;
-    return NULL;
-}
-
-void
-add_server_to_hash( struct qserver *server)
-{
-    unsigned int hash;
-    hash = (server->ipaddr + server->port) % ADDRESS_HASH_LENGTH;
+	equal = strchr(arg, '=');
+	*equal++ = '\0';
 
-    if ( server_hash_len[hash] % 16 == 0)
-    {
-		server_hash[hash]= (struct qserver**) realloc( server_hash[hash],
-			sizeof( struct qserver **) * (server_hash_len[hash]+16));
-		memset( &server_hash[hash][server_hash_len[hash]], 0,
-			sizeof( struct qserver **) * 16);
-    }
-    server_hash[hash][server_hash_len[hash]]= server;
-    server_hash_len[hash]++;
+	param = (struct query_param*)malloc(sizeof(struct query_param));
+	param->key = arg;
+	param->value = equal;
+	sscanf(equal, "%i", &param->i_value);
+	sscanf(equal, "%i", &param->ui_value);
+	param->next = server->params;
+	server->params = param;
 }
 
-void
-remove_server_from_hash( struct qserver *server)
+char *get_param_value(struct qserver *server, const char *key, char *default_value)
 {
-    struct qserver **hashed;
-    unsigned int hash, i, ipaddr;
-    unsigned short port;
-    hash= (server->ipaddr + server->port) % ADDRESS_HASH_LENGTH;
-
-    ipaddr= server->ipaddr;
-    port= server->port;
-    hashed= server_hash[hash];
-    for ( i= server_hash_len[hash]; i; i--, hashed++)
-	if ( *hashed && (*hashed)->ipaddr == ipaddr && (*hashed)->port == port)  {
-	    *hashed= NULL;
-	    break;
-	}
+	struct query_param *p = server->params;
+	for (; p; p = p->next)
+	if (strcasecmp(key, p->key) == 0)
+	{
+		return p->value;
+	} return default_value;
 }
 
-void
-free_server_hash()
+int get_param_i_value(struct qserver *server, char *key, int default_value)
 {
-    int i;
-    for ( i= 0; i < ADDRESS_HASH_LENGTH; i++)
-	if ( server_hash[i]) free( server_hash[i]);
+	struct query_param *p = server->params;
+	for (; p; p = p->next)
+	if (strcasecmp(key, p->key) == 0)
+	{
+		return p->i_value;
+	} return default_value;
 }
 
-
-/* Functions for binding sockets to Quake servers
- */
-int
-bind_qserver( struct qserver *server)
+unsigned int get_param_ui_value(struct qserver *server, char *key, unsigned int default_value)
 {
-    struct sockaddr_in addr;
-    static int one= 1;
-
-    if ( server->type->flags & TF_TCP_CONNECT)
-	server->fd= socket( AF_INET, SOCK_STREAM, 0);
-    else
-	server->fd= socket( AF_INET, SOCK_DGRAM, 0);
-
-    if ( server->fd == INVALID_SOCKET) {
-	if ( sockerr() == EMFILE)  {
-	    server->fd= -1;
-	    return -2;
-	}
-        perror( "socket" );
-	server->server_name= SYSERROR;
-        return -1;
-    }
-
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = htonl( source_ip);
-    if ( server->type->id == Q2_MASTER)
-	addr.sin_port= htons(26500);
-    else if ( source_port == 0)
-	addr.sin_port= 0;
-    else  {
-	addr.sin_port= htons( source_port);
-	source_port++;
-	if ( source_port > source_port_high)
-	    source_port= source_port_low;
-    }
-    memset( &(addr.sin_zero), 0, sizeof(addr.sin_zero) );
-
-    if ( bind( server->fd, (struct sockaddr *)&addr,
-		sizeof(struct sockaddr)) == SOCKET_ERROR) {
-	if ( sockerr() != EADDRINUSE)  {
-	    perror( "bind" );
-	    server->server_name= SYSERROR;
-	}
-	close(server->fd);
-	server->fd= -1;
-        return -1;
-    }
-
-    if ( server->flags & FLAG_BROADCAST)
-	setsockopt( server->fd, SOL_SOCKET, SO_BROADCAST, (char*)&one,
-		sizeof(one));
-
-    if ( server->type->id != Q2_MASTER &&
-		!(server->flags & FLAG_BROADCAST))  {
-	addr.sin_family= AF_INET;
-	if ( no_port_offset || server->flags & TF_NO_PORT_OFFSET)
-	    addr.sin_port= htons(server->port);
-	else
-	    addr.sin_port= htons( (unsigned short)( server->port + server->type->port_offset ) );
-	addr.sin_addr.s_addr= server->ipaddr;
-	memset( &(addr.sin_zero), 0, sizeof(addr.sin_zero) );
-
-	if ( connect( server->fd, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)  {
-		char error[50];
-	    if ( server->type->id == UN_MASTER)  {
-		if ( connection_refused())  {
-		/*  server->fd= -2; */
-		/* set up for connect retry */
-		}
-	    }
-		sprintf( error, "connect:%s:%u", inet_ntoa( addr.sin_addr ), ntohs( addr.sin_port ) );
-	    perror( error );
-	    server->server_name= SYSERROR;
-	    close(server->fd);
-	    server->fd= -1;
-	    return -1;
-	}
-    }
-
-    // we need nonblocking always. poll on an udp socket would wake
-    // up and recv blocks if a packet with incorrect checksum is
-    // received
-    set_non_blocking( server->fd);
-
-    if ( server->type->flags & TF_TCP_CONNECT)  {
-	int one= 1;
-	setsockopt( server->fd, IPPROTO_TCP, TCP_NODELAY,
-		(char*) &one, sizeof(one));
-    }
-
-#ifndef _WIN32
-    if ( server->fd >= max_connmap)  {
-	int old_max= max_connmap;
-	max_connmap= server->fd + 32;
-	connmap= (struct qserver **) realloc( connmap, max_connmap *
-		sizeof( struct qserver *));
-	memset( &connmap[old_max], 0, (max_connmap - old_max) *
-		sizeof( struct qserver *));
-    }
-    connmap[server->fd]= server;
-#endif
-#ifdef _WIN32
-    { int i;
-    for ( i= 0; i < max_connmap; i++)  {
-	if ( connmap[i] == NULL)  {
-	    connmap[i]= server;
-	    break;
-	}
-    }
-	if ( i >= max_connmap) printf( "could not put server in connmap\n");
-    }
-#endif
-
-    return 0;
+	struct query_param *p = server->params;
+	for (; p; p = p->next)
+	if (strcasecmp(key, p->key) == 0)
+	{
+		return p->ui_value;
+	} return default_value;
 }
 
-static struct timeval t_lastsend = {0,0};
-
-int
-bind_sockets()
+int parse_source_address(char *addr, unsigned int *ip, unsigned short *port)
 {
-	struct qserver *server;
-	struct timeval now;
-	int rc, retry_count= 0;;
-
-	gettimeofday(&now, NULL);
-	if(connected && sendinterval && time_delta(&now, &t_lastsend) < sendinterval)
-	{
-		server = NULL;
-	}
-	else if ( !waiting_for_masters)
+	char *colon;
+	colon = strchr(addr, ':');
+	if (colon)
 	{
-		if ( last_server_bind == NULL)
+		*colon = '\0';
+		*port = atoi(colon + 1);
+		if (colon == addr)
 		{
-			last_server_bind= servers;
+			return 0;
 		}
-		server= last_server_bind;
 	}
 	else
 	{
-		server= servers;
+		*port = 0;
 	}
 
-	for ( ; server != NULL && connected < max_simultaneous; server= server->next)
+	*ip = inet_addr(addr);
+	if (*ip == INADDR_NONE && !isdigit((unsigned char) *ip))
 	{
-		if ( server->server_name == NULL && server->fd == -1)
-		{
-			if ( waiting_for_masters && !server->type->master)
-			{
-				continue;
-			}
-
-			if ( (rc= bind_qserver( server)) == 0)
-			{
-				debug(1, "send %d.%d.%d.%d:%hu\n",
-						server->ipaddr&0xff,
-						(server->ipaddr>>8)&0xff,
-						(server->ipaddr>>16)&0xff,
-						(server->ipaddr>>24)&0xff,
-						server->port);
-
-				gettimeofday(&t_lastsend, NULL);
-				server->type->status_query_func( server);
-				connected++;
-				if ( !waiting_for_masters)
-				{
-					last_server_bind= server;
-				}
-				break;
-			}
-			else if ( rc == -2 && ++retry_count > 2)
-			{
-				return -2;
-			}
-		}
+		*ip = hcache_lookup_hostname(addr);
 	}
-
-	if ( ! connected && retry_count)
+	if (*ip == INADDR_NONE)
 	{
-		return -2;
+		fprintf(stderr, "%s: Not an IP address or unknown host name\n", addr);
+		return -1;
 	}
-
+	*ip = ntohl(*ip);
 	return 0;
 }
 
-
-/*
- * Functions for sending packets
- */
-// this is so broken, someone please rewrite the timeout handling
-void
-send_packets()
+int parse_source_port(char *port, unsigned short *low, unsigned short *high)
 {
-	struct qserver *server;
-	struct timeval now;
-	int interval, n_sent=0, prev_n_sent;
-	unsigned i;
-	debug( 3, "processing..." );
-
-	gettimeofday( &now, NULL);
-
-	if(!t_lastsend.tv_sec)
+	char *dash;
+	*low = atoi(port);
+	dash = strchr(port, '-');
+	*high = 0;
+	if (dash)
 	{
-		// nothing
+		*high = atoi(dash + 1);
 	}
-	else if(connected && sendinterval && time_delta(&now, &t_lastsend) < sendinterval)
+	if (*high == 0)
 	{
-		return;
+		*high = *low;
 	}
 
-	for ( i = 0; i < max_connmap; ++i )
+	if (*high < *low)
 	{
-		server = connmap[i];
-		if( ! server )
-		{
-			continue;
-		}
+		fprintf(stderr, "%s: Invalid port range\n", port);
+		return -1;
+	}
+	return 0;
+}
+
+void add_config_server_types()
+{
+	int n_config_types, n_builtin_types, i;
+	server_type **config_types;
+	server_type *new_types, *type;
+	config_types = qsc_get_config_server_types(&n_config_types);
+
+	if (n_config_types == 0)
+	{
+		return ;
+	}
+
+	n_builtin_types = (sizeof(builtin_types) / sizeof(server_type)) - 1;
+	new_types = (server_type*)malloc(sizeof(server_type)*(n_builtin_types + n_config_types + 1));
+
+	memcpy(new_types, &builtin_types[0], n_builtin_types *sizeof(server_type));
+	type = &new_types[n_builtin_types];
+	for (i = n_config_types; i; i--, config_types++, type++)
+	{
+		*type = **config_types;
+	}
+	n_server_types = n_builtin_types + n_config_types;
+	new_types[n_server_types].id = Q_UNKNOWN_TYPE;
+	if (types != &builtin_types[0])
+	{
+		free(types);
+	}
+	types = new_types;
+}
+
+void revert_server_types()
+{
+	if (types != &builtin_types[0])
+	{
+		free(types);
+	}
+	n_server_types = (sizeof(builtin_types) / sizeof(server_type)) - 1;
+	types = &builtin_types[0];
+}
+
+#ifdef ENABLE_DUMP
+unsigned pkt_dump_pos = 0;
+const char *pkt_dumps[64] = { 0 };
+static void add_pkt_from_file(const char *file)
+{
+	if (pkt_dump_pos >= sizeof(pkt_dumps) / sizeof(pkt_dumps[0]))
+	{
+		return ;
+	}
+	pkt_dumps[pkt_dump_pos++] = file;
+}
+
+static void replay_pkt_dumps()
+{
+	struct qserver *server = servers;
+	char *pkt = NULL;
+	int fd;
+	int bytes_read = 0; // should be ssize_t but for ease with win32
+	int i;
+	struct stat statbuf;
+	gettimeofday(&packet_recv_time, NULL);
 
-		if(server->fd == -1)
+	for (i = 0; i < pkt_dump_pos; i++)
+	{
+		if ((fd = open(pkt_dumps[i], O_RDONLY)) == -1)
 		{
-			debug(0, "invalid entry in connmap\n");
+			goto err;
 		}
 
-		if ( server->type->id & MASTER_SERVER)
+		if (fstat(fd, &statbuf) == -1)
 		{
-			interval = master_retry_interval;
+			goto err;
 		}
-		else
+		pkt = malloc(statbuf.st_size);
+		if (NULL == pkt)
 		{
-			interval = retry_interval;
+			goto err;
 		}
+		bytes_read = read(fd, pkt, statbuf.st_size);
+		if (bytes_read != statbuf.st_size)
+		{
+			fprintf(stderr, "Failed to read entire packet from disk got %d of %ld bytes\n", bytes_read, (long)statbuf.st_size);
+			goto err;
+		}
+		close(fd);
+		fd = 0;
 
-		debug(2, "server %p, name %s, retry1 %d, next_rule %p, next_player_info %d, num_players %d, n_retries %d", server, server->server_name, server->retry1, server->next_rule, server->next_player_info, server->num_players, n_retries);
-		prev_n_sent = n_sent;
-		if ( server->server_name == NULL )
+		debug(2, "replay, pre-packet_func");
+		proccess_func_ret( server, server->type->packet_func( server, pkt, statbuf.st_size ) );
+		debug(2, "replay, post-packet_func");
+	}
+	goto out;
+
+	err: perror(__FUNCTION__);
+	close(fd);
+	out: fd = 0; // NOP
+}
+#endif // ENABLE_DUMP
+
+struct rcv_pkt
+{
+	struct qserver *server;
+	struct sockaddr_in addr;
+	struct timeval recv_time;
+	char data[PACKET_LEN];
+	int len;
+	int _errno;
+};
+
+void do_work(void)
+{
+	int pktlen, rc, fd;
+	char *pkt = NULL;
+	int bind_retry = 0;
+	struct timeval timeout;
+	struct rcv_pkt *buffer;
+	unsigned buffill = 0, i = 0;
+	unsigned bufsize = max_simultaneous * 2;
+
+	struct timeval t, ts;
+	gettimeofday(&t, NULL);
+	ts = t;
+
+	buffer = malloc(sizeof(struct rcv_pkt) *bufsize);
+
+	if (!buffer)
+	{
+		return ;
+	}
+
+#ifdef ENABLE_DUMP
+	if (pkt_dump_pos)
+	{
+		replay_pkt_dumps();
+	}
+	else
+#endif
+	{
+		bind_retry = bind_sockets();
+	}
+
+	send_packets();
+
+	debug(2, "connected: %d", connected);
+
+	while (connected || (!connected && bind_retry == -2))
+	{
+		if (!connected && bind_retry == -2)
 		{
-			// We havent seen the server yet?
-			if (
-				server->retry1 != n_retries &&
-				time_delta( &now, &server->packet_time1) < (interval*(n_retries-server->retry1+1))
-			)
-			{
-				continue;
-			}
+			rc = wait_for_timeout(60);
+			bind_retry = bind_sockets();
+			continue;
+		}
+		bind_retry = 0;
 
-			if ( ! server->retry1 )
-			{
-				// No more retries
-				cleanup_qserver( server, 1);
-				continue;
-			}
+		set_file_descriptors();
+
+		if (progress)
+		{
+			display_progress();
+		}
 
-			if( qserver_get_timeout(server, &now) <= 0 )
+		get_next_timeout(&timeout);
+
+		rc = wait_for_file_descriptors(&timeout);
+
+		debug(2, "rc %d", rc);
+
+		if (rc == SOCKET_ERROR)
+		{
+#ifndef _WIN32
+			if (errno == EINTR)
 			{
-				// Query status
-				debug(2, "calling status_query_func for %p", server);
-				server->type->status_query_func( server);
-				gettimeofday(&t_lastsend, NULL);
-				n_sent++;
 				continue;
 			}
+#endif
+			perror("select");
+			break;
 		}
 
-		if ( server->next_rule != NO_SERVER_RULES )
+		fd = 0;
+		for (; rc && buffill < bufsize; rc--)
 		{
-			// We want server rules
-			if (
-				server->retry1 != n_retries &&
-				time_delta( &now, &server->packet_time1) < (interval*(n_retries-server->retry1+1))
-			)
+			int addrlen = sizeof(buffer[buffill].addr);
+			struct qserver *server = get_next_ready_server();
+			if (server == NULL)
 			{
-				continue;
+				break;
 			}
 
-			if ( ! server->retry1 )
+			gettimeofday(&buffer[buffill].recv_time, NULL);
+
+			pktlen = recvfrom(server->fd, buffer[buffill].data, sizeof(buffer[buffill].data), 0, (struct sockaddr*) &buffer[buffill].addr, (void*) &addrlen);
+
+			debug( 2, "recvfrom: %d", pktlen );
+
+			if (pktlen == SOCKET_ERROR || 0 == pktlen)
 			{
-				// no more retries
-				server->next_rule= NULL;
-				server->missing_rules = 1;
-				cleanup_qserver( server, 0);
+				if (connection_would_block())
+				{
+					malformed_packet(server, "EAGAIN on UDP socket, probably incorrect checksum");
+				}
+				else if (connection_refused() || connection_reset())
+				{
+					server->server_name = DOWN;
+					num_servers_down++;
+					cleanup_qserver( server, FORCE );
+				}
 				continue;
 			}
-			send_rule_request_packet( server);
-			gettimeofday(&t_lastsend, NULL);
-			n_sent++;
+
+			debug(1, "recv %3d %3d %d.%d.%d.%d:%hu\n",
+				time_delta(&buffer[buffill].recv_time, &ts),
+				time_delta(&buffer[buffill].recv_time, &t),
+				server->ipaddr &0xff,
+				(server->ipaddr >> 8) &0xff,
+				(server->ipaddr >> 16) &0xff,
+				(server->ipaddr >> 24) &0xff,
+				server->port
+			);
+
+			t = buffer[buffill].recv_time;
+
+			buffer[buffill].server = server;
+			buffer[buffill].len = pktlen;
+			++buffill;
 		}
 
-		if ( server->next_player_info < server->num_players)
+		debug( 2, "fill: %d < %d",  buffill, bufsize) ;
+
+		for (i = 0; i < buffill; ++i)
 		{
-			// Expecting player details
-			if (
-				server->retry2 != n_retries &&
-				time_delta( &now, &server->packet_time2) < (interval*(n_retries-server->retry2+1))
-			)
+			struct qserver *server = buffer[i].server;
+			pkt = buffer[i].data;
+			pktlen = buffer[i].len;
+			memcpy(&packet_recv_time, &buffer[i].recv_time, sizeof(packet_recv_time));
+
+			if (get_debug_level() > 2)
 			{
-				continue;
+				print_packet(server, pkt, pktlen);
 			}
-			if ( ! server->retry2 )
+
+#ifdef ENABLE_DUMP
+			if (do_dump)
 			{
-				server->next_player_info++;
-				if ( server->next_player_info >= server->num_players )
+				dump_packet(pkt, pktlen);
+			}
+#endif
+			if (server->flags &FLAG_BROADCAST)
+			{
+				struct qserver *broadcast = server;
+				unsigned short port = ntohs(buffer[i].addr.sin_port);
+				/* create new server and init */
+				if (!(no_port_offset || server->flags &TF_NO_PORT_OFFSET))
 				{
-					// no more retries
-					cleanup_qserver( server, 0);
+					port -= server->type->port_offset;
+				}
+				server = add_qserver_byaddr(ntohl(buffer[i].addr.sin_addr.s_addr), port, server->type, NULL);
+				if (server == NULL)
+				{
+					server = find_server_by_address(buffer[i].addr.sin_addr.s_addr, ntohs(buffer[i].addr.sin_port));
+					if (server == NULL)
+					{
+						continue;
+					}
+					/*
+					if ( show_errors)
+					{
+					fprintf(stderr,
+					"duplicate or invalid packet received from 0x%08x:%hu\n",
+					ntohl(buffer[i].addr.sin_addr.s_addr), ntohs(buffer[i].addr.sin_port));
+					print_packet( NULL, pkt, pktlen);
+					}
 					continue;
+					 */
+				}
+				else
+				{
+					server->packet_time1 = broadcast->packet_time1;
+					server->packet_time2 = broadcast->packet_time2;
+					server->ping_total = broadcast->ping_total;
+					server->n_requests = broadcast->n_requests;
+					server->n_packets = broadcast->n_packets;
+					broadcast->n_servers++;
 				}
-				server->retry2 = n_retries;
 			}
-			send_player_request_packet( server);
-			gettimeofday(&t_lastsend, NULL);
-			n_sent++;
+
+			debug(2, "connected, pre-packet_func: %d", connected);
+			proccess_func_ret( server, server->type->packet_func(server, pkt, pktlen) );
+			debug(2, "connected, post-packet_func: %d", connected);
 		}
+		buffill = 0;
 
-		if ( prev_n_sent == n_sent )
+		if (run_timeout && time(0) - start_time >= run_timeout)
 		{
-			// we didnt send any additional queries
-			debug(2, "%d %d", time_delta( &now, &server->packet_time1 ), (interval*(n_retries+1)));
-			if ( ! server->retry1 )
+			debug(2, "run timeout reached");
+			break;
+		}
+
+		send_packets();
+		if (connected < max_simultaneous)
+		{
+			bind_retry = bind_sockets();
+		}
+
+		debug(2, "connected: %d", connected);
+	}
+
+	free(buffer);
+}
+
+int main(int argc, char *argv[])
+{
+	int arg, n_files, i;
+	char **files, *outfilename, *query_arg;
+	struct server_arg *server_args = NULL;
+	int n_server_args = 0, max_server_args = 0;
+	int default_server_type_id;
+
+#ifdef _WIN32
+	WORD version = MAKEWORD(1, 1);
+	WSADATA wsa_data;
+	if (WSAStartup(version, &wsa_data) != 0)
+	{
+		fprintf(stderr, "Could not open winsock\n");
+		exit(1);
+	}
+#else
+	signal(SIGPIPE, SIG_IGN);
+#endif
+
+	types = &builtin_types[0];
+	n_server_types = (sizeof(builtin_types) / sizeof(server_type)) - 1;
+
+	i = qsc_load_default_config_files();
+	if (i == -1)
+	{
+		return 1;
+	}
+	else if (i == 0)
+	{
+		add_config_server_types();
+	}
+
+	if (argc == 1)
+	{
+		usage(NULL, argv, NULL);
+	}
+
+	OF = stdout;
+
+	files = (char **)malloc(sizeof(char*)*(argc / 2));
+	n_files = 0;
+
+	default_server_type_id = Q_SERVER;
+	little_endian = ((char*) &one)[0];
+	big_endian = !little_endian;
+
+	for (arg = 1; arg < argc; arg++)
+	{
+		if (argv[arg][0] != '-')
+		{
+			break;
+		}
+		outfilename = NULL;
+		if (strcmp(argv[arg], "-nocfg") == 0 && arg == 1)
+		{
+			revert_server_types();
+		}
+		else if (strcmp(argv[arg], "--help") == 0)
+		{
+			usage(NULL, argv, NULL);
+		}
+		else if (strcmp(argv[arg], "-f") == 0)
+		{
+			arg++;
+			if (arg >= argc)
 			{
-				// no retries left
-				if ( time_delta( &now, &server->packet_time1 ) > (interval*(n_retries+1) ) )
-				{
-					cleanup_qserver( server, 1 );
-				}
+				usage("missing argument for -f\n", argv, NULL);
 			}
-			else
+			files[n_files++] = argv[arg];
+		}
+		else if (strcmp(argv[arg], "-retry") == 0)
+		{
+			arg++;
+			if (arg >= argc)
 			{
-				// decrement as we didnt send any packets
-				server->retry1--;
+				usage("missing argument for -retry\n", argv, NULL);
+			}
+			n_retries = atoi(argv[arg]);
+			if (n_retries <= 0)
+			{
+				fprintf(stderr, "retries must be greater than zero\n");
+				exit(1);
+			}
+		}
+		else if (strcmp(argv[arg], "-interval") == 0)
+		{
+			double value = 0.0;
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -interval\n", argv, NULL);
+			}
+			sscanf(argv[arg], "%lf", &value);
+			if (value < 0.1)
+			{
+				fprintf(stderr, "retry interval must be greater than 0.1\n");
+				exit(1);
+			}
+			retry_interval = (int)(value *1000);
+		}
+		else if (strcmp(argv[arg], "-mi") == 0)
+		{
+			double value = 0.0;
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -mi\n", argv, NULL);
 			}
+			sscanf(argv[arg], "%lf", &value);
+			if (value < 0.1)
+			{
+				fprintf(stderr, "interval must be greater than 0.1\n");
+				exit(1);
+			}
+			master_retry_interval = (int)(value *1000);
+		}
+		else if (strcmp(argv[arg], "-H") == 0)
+		{
+			hostname_lookup = 1;
+		}
+		else if (strcmp(argv[arg], "-u") == 0)
+		{
+			up_servers_only = 1;
+		}
+		else if (strcmp(argv[arg], "-nf") == 0)
+		{
+			no_full_servers = 1;
+		}
+		else if (strcmp(argv[arg], "-ne") == 0)
+		{
+			no_empty_servers = 1;
+		}
+		else if (strcmp(argv[arg], "-nh") == 0)
+		{
+			no_header_display = 1;
+		}
+		else if (strcmp(argv[arg], "-old") == 0)
+		{
+			new_style = 0;
+		}
+		else if (strcmp(argv[arg], "-P") == 0)
+		{
+			get_player_info = 1;
+		}
+		else if (strcmp(argv[arg], "-R") == 0)
+		{
+			get_server_rules = 1;
+		}
+		else if (strncmp(argv[arg], "-raw", 4) == 0)
+		{
+			if (argv[arg][4] == ',')
+			{
+				if (strcmp(&argv[arg][5], "game") == 0)
+				{
+					show_game_in_raw = 1;
+				}
+				else
+				{
+					usage("Unknown -raw option\n", argv, NULL);
+				}
+			}
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -raw\n", argv, NULL);
+			}
+			raw_delimiter = argv[arg];
+
+			// Check the multi rule delimiter isnt the same
+			// If it is fix to maintain backwards compatibility
+			if (0 == strcmp(raw_delimiter, multi_delimiter) && 0 == strcmp(raw_delimiter, "|"))
+			{
+				multi_delimiter = ":";
+			}
+			raw_display = 1;
+		}
+		else if (strcmp(argv[arg], "-mdelim") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -mdelim\n", argv, NULL);
+			}
+			multi_delimiter = argv[arg];
+		}
+		else if (strcmp(argv[arg], "-xml") == 0)
+		{
+			xml_display = 1;
+			if (raw_display == 1)
+			{
+				usage("cannot specify both -raw and -xml\n", argv, NULL);
+			}
+		}
+		else if (strcmp(argv[arg], "-utf8") == 0)
+		{
+			xml_encoding = ENCODING_UTF_8;
+			name_xforms = 0;
+		}
+		else if (strcmp(argv[arg], "-ncn") == 0)
+		{
+			color_names = 0;
+		}
+		else if (strcmp(argv[arg], "-cn") == 0)
+		{
+			color_names = 1;
+		}
+		else if (strcmp(argv[arg], "-hc") == 0)
+		{
+			color_names = 2;
+		}
+		else if (strcmp(argv[arg], "-nx") == 0)
+		{
+			name_xforms = 1;
+		}
+		else if (strcmp(argv[arg], "-nnx") == 0)
+		{
+			name_xforms = 0;
+		}
+		else if (strcmp(argv[arg], "-tc") == 0)
+		{
+			time_format = CLOCK_TIME;
+		}
+		else if (strcmp(argv[arg], "-tsw") == 0)
+		{
+			time_format = STOPWATCH_TIME;
+		}
+		else if (strcmp(argv[arg], "-ts") == 0)
+		{
+			time_format = SECONDS;
+		}
+		else if (strcmp(argv[arg], "-pa") == 0)
+		{
+			player_address = 1;
+		}
+		else if (strcmp(argv[arg], "-hpn") == 0)
+		{
+			hex_player_names = 1;
+		}
+		else if (strcmp(argv[arg], "-hsn") == 0)
+		{
+			hex_server_names = 1;
+		}
+		else if (strncmp(argv[arg], "-maxsimultaneous", 7) == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -maxsimultaneous\n", argv, NULL);
+			}
+			max_simultaneous = atoi(argv[arg]);
+			if (max_simultaneous <= 0)
+			{
+				usage("value for -maxsimultaneous must be > 0\n", argv, NULL);
+			}
+			if (max_simultaneous > FD_SETSIZE)
+			{
+				max_simultaneous = FD_SETSIZE;
+			}
+		}
+		else if (strcmp(argv[arg], "-sendinterval") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -sendinterval\n", argv, NULL);
+			}
+			sendinterval = atoi(argv[arg]);
+			if (sendinterval < 0)
+			{
+				usage("value for -sendinterval must be >= 0\n", argv, NULL);
+			}
+		}
+		else if (strcmp(argv[arg], "-raw-arg") == 0)
+		{
+			raw_arg = 1000;
+		}
+		else if (strcmp(argv[arg], "-timeout") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -timeout\n", argv, NULL);
+			}
+			run_timeout = atoi(argv[arg]);
+			if (run_timeout <= 0)
+			{
+				usage("value for -timeout must be > 0\n", argv, NULL);
+			}
+		}
+		else if (strncmp(argv[arg], "-progress", sizeof("-progress") - 1) == 0)
+		{
+			char *p = argv[arg] + sizeof("-progress") - 1;
+			progress = 1;
+			if (*p == ',')
+			{
+				progress = atoi(p + 1);
+			}
+		}
+		else if (strcmp(argv[arg], "-Hcache") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -Hcache\n", argv, NULL);
+			}
+			if (hcache_open(argv[arg], 0) == -1)
+			{
+				return 1;
+			}
+		}
+		else if (strcmp(argv[arg], "-default") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -default\n", argv, NULL);
+			}
+			default_server_type = find_server_type_string(argv[arg]);
+			if (default_server_type == NULL)
+			{
+				char opt[256], *o = &opt[0];
+				sprintf(opt, "-%s", argv[arg]);
+				for (; *o; o++)
+				{
+					*o = tolower(*o);
+				}
+				default_server_type = find_server_type_option(opt);
+			}
+			if (default_server_type == NULL)
+			{
+				fprintf(stderr, "unknown server type \"%s\"\n", argv[arg]);
+				usage(NULL, argv, NULL);
+			}
+			default_server_type_id = default_server_type->id;
+			default_server_type = NULL;
+		}
+		else if (strncmp(argv[arg], "-Tserver", 3) == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (read_qserver_template(argv[arg]) == -1)
+			{
+				return 1;
+			}
+		}
+		else if (strncmp(argv[arg], "-Trule", 3) == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (read_rule_template(argv[arg]) == -1)
+			{
+				return 1;
+			}
+		}
+		else if (strncmp(argv[arg], "-Theader", 3) == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (read_header_template(argv[arg]) == -1)
+			{
+				return 1;
+			}
+		}
+		else if (strncmp(argv[arg], "-Ttrailer", 3) == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (read_trailer_template(argv[arg]) == -1)
+			{
+				return 1;
+			}
+		}
+		else if (strncmp(argv[arg], "-Tplayer", 3) == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (read_player_template(argv[arg]) == -1)
+			{
+				return 1;
+			}
+		}
+		else if (strcmp(argv[arg], "-sort") == 0)
+		{
+			size_t pos;
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for -sort\n", argv, NULL);
+			}
+			strncpy(sort_keys, argv[arg], sizeof(sort_keys) - 1);
+			pos = strspn(sort_keys, SUPPORTED_SORT_KEYS);
+			if (pos != strlen(sort_keys))
+			{
+				fprintf(stderr, "Unknown sort key \"%c\", valid keys are \"%s\"\n", sort_keys[pos], SUPPORTED_SORT_KEYS);
+				return 1;
+			}
+			server_sort = strpbrk(sort_keys, SUPPORTED_SERVER_SORT) != NULL;
+			if (strchr(sort_keys, 'l'))
+			{
+				server_sort = 1;
+			}
+			player_sort = strpbrk(sort_keys, SUPPORTED_PLAYER_SORT) != NULL;
+		}
+		else if (strcmp(argv[arg], "-errors") == 0)
+		{
+			show_errors++;
+		}
+		else if (strcmp(argv[arg], "-of") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (argv[arg][0] == '-' && argv[arg][1] == '\0')
+			{
+				OF = stdout;
+			}
+			else
+			{
+				OF = fopen(argv[arg], "w");
+			}
+			if (OF == NULL)
+			{
+				perror(argv[arg]);
+				return 1;
+			}
+		}
+		else if (strcmp(argv[arg], "-af") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (argv[arg][0] == '-' && argv[arg][1] == '\0')
+			{
+				OF = stdout;
+			}
+			else
+			{
+				OF = fopen(argv[arg], "a");
+			}
+			if (OF == NULL)
+			{
+				perror(argv[arg]);
+				return 1;
+			}
+		}
+		else if (strcmp(argv[arg], "-htmlnames") == 0)
+		{
+			html_names = 1;
+		}
+		else if (strcmp(argv[arg], "-nohtmlnames") == 0)
+		{
+			html_names = 0;
+		}
+		else if (strcmp(argv[arg], "-htmlmode") == 0)
+		{
+			html_mode = 1;
+		}
+		else if (strcmp(argv[arg], "-carets") == 0)
+		{
+			strip_carets = 0;
+		}
+		else if (strcmp(argv[arg], "-d") == 0)
+		{
+			set_debug_level(get_debug_level() + 1);
+		}
+		else if (strcmp(argv[arg], "-showgameport") == 0)
+		{
+			show_game_port = 1;
+		}
+		else if (strcmp(argv[arg], "-noportoffset") == 0)
+		{
+			no_port_offset = 1;
+		}
+		else if (strcmp(argv[arg], "-srcip") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (parse_source_address(argv[arg], &source_ip, &source_port) == -1)
+			{
+				return 1;
+			}
+			if (source_port)
+			{
+				source_port_low = source_port;
+				source_port_high = source_port;
+			}
+		}
+		else if (strcmp(argv[arg], "-srcport") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (parse_source_port(argv[arg], &source_port_low, &source_port_high) == -1)
+			{
+				return 1;
+			}
+			source_port = source_port_low;
+		}
+		else if (strcmp(argv[arg], "-cfg") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			if (qsc_load_config_file(argv[arg]) == -1)
+			{
+				return 1;
+			}
+			add_config_server_types();
+		}
+		else if (strcmp(argv[arg], "-allowserverdups") == 0)
+		{
+			noserverdups = 0;
+		}
+		else if (strcmp(argv[arg], "-bom") == 0)
+		{
+			output_bom = 1;
+		}
+#ifdef ENABLE_DUMP
+		else if (strcmp(argv[arg], "-dump") == 0)
+		{
+			do_dump = 1;
+		}
+		else if (strcmp(argv[arg], "-pkt") == 0)
+		{
+			arg++;
+			if (arg >= argc)
+			{
+				usage("missing argument for %s\n", argv, argv[arg - 1]);
+			}
+			add_pkt_from_file(argv[arg]);
+		}
+#endif
+#ifdef _WIN32
+		else if (strcmp(argv[arg], "-noconsole") == 0)
+		{
+			FreeConsole();
+		}
+#endif
+		else
+		{
+			int outfile;
+			server_type *type;
+			arg++;
+			if (arg >= argc)
+			{
+				fprintf(stderr, "missing argument for \"%s\"\n", argv[arg - 1]);
+				return 1;
+			}
+			type = parse_server_type_option(argv[arg - 1], &outfile, &query_arg);
+			if (type == NULL)
+			{
+				fprintf(stderr, "unknown option \"%s\"\n", argv[arg - 1]);
+				return 1;
+			}
+			outfilename = NULL;
+			if (outfile)
+			{
+				outfilename = strchr(argv[arg], ',');
+				if (outfilename == NULL)
+				{
+					fprintf(stderr, "missing file name for \"%s,outfile\"\n", argv[arg - 1]);
+					return 1;
+				}
+				*outfilename++ = '\0';
+			}
+			/*
+			if ( query_arg && !(type->flags & TF_QUERY_ARG)) {
+			fprintf( stderr, "option flag \"%s\" not allowed for this server type\n",
+			query_arg);
+			return 1;
+			}
+			 */
+			if (type->flags &TF_QUERY_ARG_REQUIRED && !query_arg)
+			{
+				fprintf(stderr, "option flag missing for server type \"%s\"\n", argv[arg - 1]);
+				return 1;
+			}
+			add_server_arg(argv[arg], type->id, outfilename, query_arg, &server_args, &n_server_args, &max_server_args);
+		}
+	}
+
+	start_time = time(0);
+
+	default_server_type = find_server_type_id(default_server_type_id);
+
+	for (i = 0; i < n_files; i++)
+	{
+		add_file(files[i]);
+	}
+
+	for (; arg < argc; arg++)
+	{
+		add_qserver(argv[arg], default_server_type, NULL, NULL);
+	}
+
+	for (i = 0; i < n_server_args; i++)
+	{
+		server_type *server_type = find_server_type_id(server_args[i].type_id);
+		add_qserver(server_args[i].arg, server_type, server_args[i].outfilename, server_args[i].query_arg);
+	}
+
+	free(server_args);
+
+	if (servers == NULL)
+	{
+		exit(1);
+	}
+
+	max_connmap = max_simultaneous + 10;
+	connmap = (struct qserver **)calloc(1, sizeof(struct qserver*) * max_connmap);
+
+	if (color_names == -1)
+	{
+		color_names = (raw_display) ? DEFAULT_COLOR_NAMES_RAW : DEFAULT_COLOR_NAMES_DISPLAY;
+	}
+
+	if (time_format == -1)
+	{
+		time_format = (raw_display) ? DEFAULT_TIME_FMT_RAW : DEFAULT_TIME_FMT_DISPLAY;
+	}
+
+	if ((one_server_type_id &MASTER_SERVER) || one_server_type_id == 0)
+	{
+		display_prefix = 1;
+	}
+
+	if (xml_display)
+	{
+		xml_header();
+	}
+	else if (new_style && !raw_display && !have_server_template())
+	{
+		display_header();
+	}
+	else if (have_header_template())
+	{
+		template_display_header();
+	}
+
+	q_serverinfo.length = htons(q_serverinfo.length);
+	h2_serverinfo.length = htons(h2_serverinfo.length);
+	q_player.length = htons(q_player.length);
+
+	do_work();
+
+	finish_output();
+	free_server_hash();
+	free(files);
+	free(connmap);
+
+	return 0;
+}
+
+void finish_output()
+{
+	int i;
+	hcache_update_file();
+
+	if (progress)
+	{
+		display_progress();
+		fputs("\n", stderr);
+	}
+
+	if (server_sort)
+	{
+		struct qserver **array, *server, *next_server;
+		if (strchr(sort_keys, 'l') && strpbrk(sort_keys, SUPPORTED_SERVER_SORT) == NULL)
+		{
+			server = servers;
+			for (; server; server = next_server)
+			{
+				next_server = server->next;
+				display_server(server);
+			}
+		}
+		else
+		{
+			array = (struct qserver **)malloc(sizeof(struct qserver*) * num_servers_total);
+			server = servers;
+			for (i = 0; server != NULL; i++)
+			{
+				array[i] = server;
+				server = server->next;
+			}
+			sort_servers(array, num_servers_total);
+			if (progress)
+			{
+				fprintf(stderr, "\n");
+			}
+			for (i = 0; i < num_servers_total; i++)
+			{
+				display_server(array[i]);
+			}
+			free(array);
+		}
+	}
+	else
+	{
+		struct qserver *server, *next_server;
+		server = servers;
+		for (; server; server = next_server)
+		{
+			next_server = server->next;
+			if (server->server_name == HOSTNOTFOUND)
+			{
+				display_server(server);
+			}
+		}
+	}
+
+	if (xml_display)
+	{
+		xml_footer();
+	}
+	else if (have_trailer_template())
+	{
+		template_display_trailer();
+	}
+
+	if (OF != stdout)
+	{
+		fclose(OF);
+	}
+}
+
+
+void add_file(char *filename)
+{
+	FILE *file;
+	char name[200], *comma, *query_arg = NULL;
+	server_type *type;
+
+	if (strcmp(filename, "-") == 0)
+	{
+		file = stdin;
+		current_filename = NULL;
+	}
+	else
+	{
+		file = fopen(filename, "r");
+		current_filename = filename;
+	}
+	current_fileline = 1;
+
+	if (file == NULL)
+	{
+		perror(filename);
+		return ;
+	}
+	for (; fscanf(file, "%s", name) == 1; current_fileline++)
+	{
+		comma = strchr(name, ',');
+		if (comma)
+		{
+			*comma++ = '\0';
+			query_arg = strdup(comma);
+		}
+		type = find_server_type_string(name);
+		if (type == NULL)
+		{
+			add_qserver(name, default_server_type, NULL, NULL);
+		}
+		else if (fscanf(file, "%s", name) == 1)
+		{
+			if (type->flags &TF_QUERY_ARG && comma && *query_arg)
+			{
+				add_qserver(name, type, NULL, query_arg);
+			}
+			else
+			{
+				add_qserver(name, type, NULL, NULL);
+			}
+		}
+	}
+
+	if (file != stdin)
+	{
+		fclose(file);
+	}
+
+	current_fileline = 0;
+}
+
+void print_file_location()
+{
+	if (current_fileline != 0)
+	{
+		fprintf(stderr, "%s:%d: ", current_filename ? current_filename : "<stdin>", current_fileline);
+	}
+}
+
+void parse_query_params(struct qserver *server, char *params)
+{
+	char *comma, *arg = params;
+	do
+	{
+		comma = strchr(arg, ',');
+		if (comma)
+		{
+			*comma = '\0';
+		} if (strchr(arg, '='))
+		{
+			add_query_param(server, arg);
+		}
+		else if (strcmp(arg, "noportoffset") == 0 || strcmp(arg, "qp") == 0)
+		{
+			server->flags |= TF_NO_PORT_OFFSET;
+		}
+		else if (strcmp(arg, "showgameport") == 0 || strcmp(arg, "gp") == 0)
+		{
+			server->flags |= TF_SHOW_GAME_PORT;
+		}
+		arg = comma + 1;
+	}
+	while (comma);
+}
+
+int add_qserver(char *arg, server_type *type, char *outfilename, char *query_arg)
+{
+	struct qserver *server, *prev_server;
+	int flags = 0;
+	char *colon = NULL, *arg_copy, *hostname = NULL;
+	unsigned int ipaddr;
+	unsigned short port, port_max;
+	int portrange = 0;
+	unsigned colonpos = 0;
+
+	if (run_timeout && time(0) - start_time >= run_timeout)
+	{
+		finish_output();
+		exit(0);
+	}
+
+	port = port_max = type->default_port;
+
+	if (outfilename && strcmp(outfilename, "-") != 0)
+	{
+		FILE *outfile = fopen(outfilename, "r+");
+		if (outfile == NULL && (errno == EACCES || errno == EISDIR || errno == ENOSPC || errno == ENOTDIR))
+		{
+			perror(outfilename);
+			return -1;
+		}
+		if (outfile)
+		{
+			fclose(outfile);
+		}
+	}
+
+	arg_copy = strdup(arg);
+
+	colon = strchr(arg, ':');
+	if (colon != NULL)
+	{
+		if (sscanf(colon + 1, "%hu-%hu", &port, &port_max) == 2)
+		{
+			portrange = 1;
+		}
+		else
+		{
+			port_max = port;
+		}
+		*colon = '\0';
+		colonpos = colon - arg;
+	}
+
+	if (*arg == '+')
+	{
+		flags |= FLAG_BROADCAST;
+		arg++;
+	}
+
+	ipaddr = inet_addr(arg);
+	if (ipaddr == INADDR_NONE)
+	{
+		if (strcmp(arg, "255.255.255.255") != 0)
+		{
+			ipaddr = htonl(hcache_lookup_hostname(arg));
+		}
+	}
+	else if (hostname_lookup && !(flags &FLAG_BROADCAST))
+	{
+		hostname = hcache_lookup_ipaddr(ntohl(ipaddr));
+	}
+
+	if ((ipaddr == INADDR_NONE || ipaddr == 0) && strcmp(arg, "255.255.255.255") != 0)
+	{
+		print_file_location();
+		fprintf(stderr, "%s: %s\n", arg, strherror(h_errno));
+		server = (struct qserver*)calloc(1, sizeof(struct qserver));
+		for (; port <= port_max; ++port)
+		{
+			init_qserver(server, type);
+			if (portrange)
+			{
+				server->arg = (port == port_max) ? arg_copy : strdup(arg_copy);
+			} if (portrange)
+			{
+				sprintf(server->arg + colonpos + 1, "%hu", port);
+			}
+			server->server_name = HOSTNOTFOUND;
+			server->error = strdup(strherror(h_errno));
+			server->orig_port = server->query_port = server->port = port;
+			if (last_server != &servers)
+			{
+				prev_server = (struct qserver*)((char*)last_server - ((char*) &server->next - (char*)server));
+				server->prev = prev_server;
+			}
+			*last_server = server;
+			last_server = &server->next;
+			if (one_server_type_id == ~MASTER_SERVER)
+			{
+				one_server_type_id = type->id;
+			}
+			else if (one_server_type_id != type->id)
+			{
+				one_server_type_id = 0;
+			}
+		}
+		return -1;
+	}
+
+	for (; port > 0 && port <= port_max; ++port)
+	{
+		if (noserverdups && find_server_by_address(ipaddr, port) != NULL)
+		{
+			continue;
+		}
+
+		server = (struct qserver*)calloc(1, sizeof(struct qserver));
+		server->arg = port == port_max ? arg_copy : strdup(arg_copy);
+		if (portrange)
+		{
+			sprintf(server->arg + colonpos + 1, "%hu", port);
+		}
+		if (hostname && colon)
+		{
+			server->host_name = (char*)malloc(strlen(hostname) + 5+2);
+			sprintf(server->host_name, "%s:%hu", hostname, port);
+		}
+		else
+		{
+			server->host_name = strdup((hostname) ? hostname : arg);
+		}
+
+		server->ipaddr = ipaddr;
+		server->orig_port = server->query_port = server->port = port;
+		server->type = type;
+		server->outfilename = outfilename;
+		server->flags = flags;
+		if (query_arg)
+		{
+			server->query_arg = (port == port_max) ? query_arg : strdup(query_arg);
+			parse_query_params(server, server->query_arg);
+		}
+		else
+		{
+			server->query_arg = NULL;
+		}
+		init_qserver(server, type);
+
+		if (server->type->master)
+		{
+			waiting_for_masters++;
+		}
+
+		if (num_servers_total % 10 == 0)
+		{
+			hcache_update_file();
+		}
+
+		if (last_server != &servers)
+		{
+			prev_server = (struct qserver*)((char*)last_server - ((char*) &server->next - (char*)server));
+			server->prev = prev_server;
+		}
+		*last_server = server;
+		last_server = &server->next;
+
+		add_server_to_hash(server);
+
+		if (one_server_type_id == ~MASTER_SERVER)
+		{
+			one_server_type_id = type->id;
+		}
+		else if (one_server_type_id != type->id)
+		{
+			one_server_type_id = 0;
+		}
+
+		++num_servers;
+	}
+	return 0;
+}
+
+struct qserver *add_qserver_byaddr(unsigned int ipaddr, unsigned short port, server_type *type, int *new_server)
+{
+	char arg[36];
+	struct qserver *server, *prev_server;
+	char *hostname = NULL;
+
+	if (run_timeout && time(0) - start_time >= run_timeout)
+	{
+		finish_output();
+		exit(0);
+	}
+
+	if (new_server)
+	{
+		*new_server = 0;
+	}
+	ipaddr = htonl(ipaddr);
+	if (ipaddr == 0)
+	{
+		return 0;
+	}
+
+	// TODO: this prevents servers with the same ip:port being queried
+	// and hence breaks virtual servers support e.g. Teamspeak 2
+	if (find_server_by_address(ipaddr, port) != NULL)
+	{
+		return 0;
+	}
+
+	if (new_server)
+	{
+		*new_server = 1;
+	}
+
+	server = (struct qserver*)calloc(1, sizeof(struct qserver));
+	server->ipaddr = ipaddr;
+	ipaddr = ntohl(ipaddr);
+	sprintf(arg, "%d.%d.%d.%d:%hu", ipaddr >> 24, (ipaddr >> 16) &0xff, (ipaddr >> 8) &0xff, ipaddr &0xff, port);
+	server->arg = strdup(arg);
+
+	if (hostname_lookup)
+	{
+		hostname = hcache_lookup_ipaddr(ipaddr);
+	}
+
+	if (hostname)
+	{
+		server->host_name = (char*)malloc(strlen(hostname) + 6+2);
+		sprintf(server->host_name, "%s:%hu", hostname, port);
+	}
+	else
+	{
+		server->host_name = strdup(arg);
+	}
+
+	server->orig_port = server->query_port = server->port = port;
+	init_qserver(server, type);
+
+	if (num_servers_total % 10 == 0)
+	{
+		hcache_update_file();
+	}
+
+	if (last_server != &servers)
+	{
+		prev_server = (struct qserver*)((char*)last_server - ((char*) &server->next - (char*)server));
+		server->prev = prev_server;
+	}
+	*last_server = server;
+	last_server = &server->next;
+
+	add_server_to_hash(server);
+
+	++num_servers;
+
+	return server;
+}
+
+void add_servers_from_masters()
+{
+	struct qserver *server;
+	unsigned int ipaddr, i;
+	unsigned short port;
+	int n_servers, new_server, port_adjust = 0;
+	char *pkt;
+	server_type *server_type;
+	FILE *outfile;
+
+	for (server = servers; server != NULL; server = server->next)
+	{
+		if (!server->type->master || server->master_pkt == NULL)
+		{
+			continue;
+		}
+		pkt = server->master_pkt;
+
+		if (server->query_arg && server->type->id == GAMESPY_MASTER)
+		{
+			server_type = find_server_type_string(server->query_arg);
+			if (server_type == NULL)
+			{
+				server_type = find_server_type_id(server->type->master);
+			}
+		}
+		else
+		{
+			server_type = find_server_type_id(server->type->master);
+		}
+
+		if (server->type->id == GAMESPY_MASTER && server_type)
+		{
+			if (server_type->id == UN_SERVER)
+			{
+				port_adjust = - 1;
+			}
+			else if (server_type->id == KINGPIN_SERVER)
+			{
+				port_adjust = 10;
+			}
+		}
+
+		outfile = NULL;
+		if (server->outfilename)
+		{
+			if (strcmp(server->outfilename, "-") == 0)
+			{
+				outfile = stdout;
+			}
+			else
+			{
+				outfile = fopen(server->outfilename, "w");
+			}
+			if (outfile == NULL)
+			{
+				perror(server->outfilename);
+				continue;
+			}
+		}
+		n_servers = 0;
+		for (i = 0; i < server->master_pkt_len; i += 6)
+		{
+			memcpy(&ipaddr, &pkt[i], 4);
+			memcpy(&port, &pkt[i + 4], 2);
+			ipaddr = ntohl(ipaddr);
+			port = ntohs(port) + port_adjust;
+			new_server = 1;
+			if (outfile)
+			{
+				fprintf(outfile, "%s %d.%d.%d.%d:%hu\n",
+					server_type ? server_type->type_string: "",
+					(ipaddr >> 24) &0xff,
+					(ipaddr >> 16) &0xff,
+					(ipaddr >> 8) &0xff,
+					ipaddr &0xff, port
+				);
+			}
+			else if (server_type == NULL)
+			{
+				fprintf(OF, "%d.%d.%d.%d:%hu\n", (ipaddr >> 24) &0xff, (ipaddr >> 16) &0xff, (ipaddr >> 8) &0xff, ipaddr &0xff, port);
+			}
+			else
+			{
+				add_qserver_byaddr(ipaddr, port, server_type, &new_server);
+			}
+			n_servers += new_server;
+		}
+		free(server->master_pkt);
+		server->master_pkt = NULL;
+		server->master_pkt_len = 0;
+		server->n_servers = n_servers;
+		if (outfile)
+		{
+			fclose(outfile);
+		}
+	}
+	if (hostname_lookup)
+	{
+		hcache_update_file();
+	}
+	bind_sockets();
+}
+
+void init_qserver(struct qserver *server, server_type *type)
+{
+	server->server_name = NULL;
+	server->map_name = NULL;
+	server->game = NULL;
+	server->num_players = 0;
+	server->num_spectators = 0;
+	server->fd = - 1;
+	if (server->flags &FLAG_BROADCAST)
+	{
+		server->retry1 = 1;
+		server->retry2 = 1;
+	}
+	else
+	{
+		server->retry1 = n_retries;
+		server->retry2 = n_retries;
+	}
+	server->n_retries = 0;
+	server->ping_total = 0;
+	server->n_packets = 0;
+	server->n_requests = 0;
+
+	server->n_servers = 0;
+	server->master_pkt_len = 0;
+	server->master_pkt = NULL;
+	server->error = NULL;
+
+	server->saved_data.data = NULL;
+	server->saved_data.datalen = 0;
+	server->saved_data.pkt_index = - 1;
+	server->saved_data.pkt_max = 0;
+	server->saved_data.next = NULL;
+
+	server->type = type;
+	server->next_rule = (get_server_rules) ? "" : NO_SERVER_RULES;
+	server->next_player_info = (get_player_info && type->player_packet) ? 0 : NO_PLAYER_INFO;
+
+	server->n_player_info = 0;
+	server->players = NULL;
+	server->n_rules = 0;
+	server->rules = NULL;
+	server->last_rule = &server->rules;
+	server->missing_rules = 0;
+
+	num_servers_total++;
+}
+
+// ipaddr should be network byte-order
+// port should be host byte-order
+struct qserver *find_server_by_address(unsigned int ipaddr, unsigned short port)
+{
+	struct qserver **hashed;
+	unsigned int hash, i;
+	hash = (ipaddr + port) % ADDRESS_HASH_LENGTH;
+
+	if (ipaddr == 0)
+	{
+		for (hash = 0; hash < ADDRESS_HASH_LENGTH; hash++)
+		{
+			printf("%3d %d\n", hash, server_hash_len[hash]);
+		}
+		return NULL;
+	}
+
+	hashed = server_hash[hash];
+	for (i = server_hash_len[hash]; i; i--, hashed++)
+	{
+		if (*hashed && (*hashed)->ipaddr == ipaddr && (*hashed)->port == port)
+		{
+			return *hashed;
+		}
+	}
+	return NULL;
+}
+
+void add_server_to_hash(struct qserver *server)
+{
+	unsigned int hash;
+	hash = (server->ipaddr + server->port) % ADDRESS_HASH_LENGTH;
+
+	if (server_hash_len[hash] % 16 == 0)
+	{
+		server_hash[hash] = (struct qserver **)realloc(server_hash[hash], sizeof(struct qserver **)*(server_hash_len[hash] + 16));
+		memset(&server_hash[hash][server_hash_len[hash]], 0, sizeof(struct qserver **) * 16);
+	}
+	server_hash[hash][server_hash_len[hash]] = server;
+	server_hash_len[hash]++;
+}
+
+void remove_server_from_hash(struct qserver *server)
+{
+	struct qserver **hashed;
+	unsigned int hash, i, ipaddr = server->ipaddr;
+	unsigned short port = server->orig_port;
+	hash = ( ipaddr + port ) % ADDRESS_HASH_LENGTH;
+
+	hashed = server_hash[hash];
+	for (i = server_hash_len[hash]; i; i--, hashed++)
+	{
+		if (*hashed && (*hashed)->ipaddr == ipaddr && (*hashed)->orig_port == port)
+		{
+			*hashed = NULL;
+			break;
+		}
+	}
+}
+
+void free_server_hash()
+{
+	int i;
+	for (i = 0; i < ADDRESS_HASH_LENGTH; i++)
+	{
+		if (server_hash[i])
+		{
+			free(server_hash[i]);
+		}
+	}
+}
+
+
+/* Functions for binding sockets to Quake servers
+ */
+int bind_qserver(struct qserver *server)
+{
+	struct sockaddr_in addr;
+	static int one = 1;
+	int sockbuf = RECV_BUF;
+
+	if (server->type->flags &TF_TCP_CONNECT)
+	{
+		server->fd = socket(AF_INET, SOCK_STREAM, 0);
+	}
+	else
+	{
+		server->fd = socket(AF_INET, SOCK_DGRAM, 0);
+	}
+
+	if (server->fd == INVALID_SOCKET)
+	{
+		if (sockerr() == EMFILE)
+		{
+			server->fd = - 1;
+			return -2;
+		}
+
+		perror("socket");
+		server->server_name = SYSERROR;
+		return -1;
+	}
+
+	addr.sin_family = AF_INET;
+	addr.sin_addr.s_addr = htonl(source_ip);
+	if (server->type->id == Q2_MASTER)
+	{
+		addr.sin_port = htons(26500);
+	}
+	else if (source_port == 0)
+	{
+		addr.sin_port = 0;
+	}
+	else
+	{
+		addr.sin_port = htons(source_port);
+		source_port++;
+		if (source_port > source_port_high)
+		{
+			source_port = source_port_low;
+		}
+	}
+	memset(&(addr.sin_zero), 0, sizeof(addr.sin_zero));
+
+	if (bind(server->fd, (struct sockaddr*) &addr, sizeof(struct sockaddr)) == SOCKET_ERROR)
+	{
+		if (sockerr() != EADDRINUSE)
+		{
+			perror("bind");
+			server->server_name = SYSERROR;
+		}
+		close(server->fd);
+		server->fd = - 1;
+		return -1;
+	}
+
+	if (server->flags &FLAG_BROADCAST)
+	{
+		if ( -1 == setsockopt(server->fd, SOL_SOCKET, SO_BROADCAST, (char*) &one, sizeof(one)) )
+		{
+			perror( "Failed to set broadcast" );
+		}
+	}
+
+	// we need nonblocking always. poll on an udp socket would wake
+	// up and recv blocks if a packet with incorrect checksum is
+	// received
+	set_non_blocking(server->fd);
+
+	if (server->type->id != Q2_MASTER && !(server->flags &FLAG_BROADCAST))
+	{
+		addr.sin_family = AF_INET;
+		if (no_port_offset || server->flags &TF_NO_PORT_OFFSET)
+		{
+			addr.sin_port = htons(server->port);
+		}
+		else
+		{
+			addr.sin_port = htons((unsigned short)(server->port + server->type->port_offset));
+		}
+		addr.sin_addr.s_addr = server->ipaddr;
+		memset(&(addr.sin_zero), 0, sizeof(addr.sin_zero));
+
+		if (connect(server->fd, (struct sockaddr*) &addr, sizeof(addr)) == SOCKET_ERROR)
+		{
+			int ignore = 0;
+			char error[50];
+			if ( connection_inprogress() )
+			{
+				while( 1 )
+				{
+					int ret;
+					struct timeval tv;
+					fd_set connect_set;
+
+					tv.tv_sec = retry_interval / 1000; 
+					tv.tv_usec = ( retry_interval % 1000 ) * 1000;
+					FD_ZERO( &connect_set ); 
+					FD_SET( server->fd, &connect_set );
+
+					// NOTE: We may need to check exceptfds here on windows instead of writefds
+					ret = select( server->fd + 1, NULL, &connect_set, NULL, &tv );
+					if ( 0 > ret && errno != EINTR )
+					{ 
+						fprintf( stderr, "Error connecting %d - %s\n", errno, strerror(errno) ); 
+						break;
+					} 
+					else if ( 0 < ret )
+					{ 
+						// Socket selected for write 
+						int valopt;
+						unsigned int lon = sizeof(int); 
+						if ( 0 != getsockopt( server->fd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon) )
+						{ 
+							fprintf( stderr, "Error in getsockopt() %d - %s\n", errno, strerror(errno) ); 
+							break;
+						} 
+
+						// Check the value returned... 
+						if (valopt)
+						{ 
+							fprintf( stderr, "Error in delayed connection() %d - %s\n", valopt, strerror(valopt) ); 
+							break;
+						} 
+						ignore = 1;
+						break; 
+					} 
+					else
+					{ 
+						break;
+					} 
+				}
+			}
+
+			if ( ! ignore )
+			{
+				sprintf(error, "connect:%s:%u", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
+				perror(error);
+				server->server_name = SYSERROR;
+				close(server->fd);
+				server->fd = - 1;
+				return -1;
+			}
+		}
+	}
+
+	if (server->type->flags &TF_TCP_CONNECT)
+	{
+		int one = 1;
+		if ( -1 == setsockopt(server->fd, IPPROTO_TCP, TCP_NODELAY, (char*) &one, sizeof(one)) )
+		{
+			perror( "Failed to set TCP no delay" );
+		}
+	}
+
+	if ( server->type->id & MASTER_SERVER )
+	{
+		// Use a large buffer so we dont miss packets
+		if ( -1 == setsockopt(server->fd, SOL_SOCKET, SO_RCVBUF, (void*)&sockbuf, sizeof(sockbuf)) )
+		{
+			perror( "Failed to set socket buffer" );
+		}
+	}
+
+#ifndef _WIN32
+	if (server->fd >= max_connmap)
+	{
+		int old_max = max_connmap;
+		max_connmap = server->fd + 32;
+		connmap = (struct qserver **)realloc(connmap, max_connmap *sizeof(struct qserver*));
+		memset(&connmap[old_max], 0, (max_connmap - old_max) *sizeof(struct qserver*));
+	}
+	connmap[server->fd] = server;
+#endif
+#ifdef _WIN32
+	{
+		int i;
+		for (i = 0; i < max_connmap; i++)
+		{
+			if (connmap[i] == NULL)
+			{
+				connmap[i] = server;
+				break;
+			}
+		}
+		if (i >= max_connmap)
+		{
+			printf("could not put server in connmap\n");
+		}
+	}
+#endif
+
+	return 0;
+}
+
+static struct timeval t_lastsend = { 0, 0 };
+
+int bind_sockets()
+{
+	struct qserver *server, *next_server;
+	struct timeval now;
+	int rc, retry_count = 0;
+
+	gettimeofday(&now, NULL);
+	if (connected && sendinterval && time_delta(&now, &t_lastsend) < sendinterval)
+	{
+		server = NULL;
+	}
+	else if (!waiting_for_masters)
+	{
+		if (last_server_bind == NULL)
+		{
+			last_server_bind = servers;
+		}
+		server = last_server_bind;
+	}
+	else
+	{
+		server = servers;
+	}
+
+	for (; server != NULL && connected < max_simultaneous; )
+	{
+		// note the next server for use as process_func can free the server
+		next_server = server->next;
+		if (server->server_name == NULL && server->fd == -1)
+		{
+			if (waiting_for_masters && !server->type->master)
+			{
+				server = next_server;
+				continue;
+			}
+
+			if ((rc = bind_qserver(server)) == 0)
+			{
+				debug(1, "send %d.%d.%d.%d:%hu\n",
+					server->ipaddr &0xff,
+					(server->ipaddr >> 8) &0xff,
+					(server->ipaddr >> 16) &0xff,
+					(server->ipaddr >> 24) &0xff,
+					server->port
+				);
+
+				gettimeofday(&t_lastsend, NULL);
+				debug(2, "calling status_query_func for %p", server);
+				proccess_func_ret( server, server->type->status_query_func(server) );
+
+				connected++;
+				if (!waiting_for_masters)
+				{
+					last_server_bind = server;
+				}
+				break;
+			}
+			else if (rc == -2 && ++retry_count > 2)
+			{
+				return -2;
+			}
+		}
+
+		server = next_server;
+	}
+
+	if (!connected && retry_count)
+	{
+		return -2;
+	}
+
+	return 0;
+}
+
+int proccess_func_ret( struct qserver *server, int ret )
+{
+	debug( 3, "proccess_func_ret %p, %d", server, ret );
+	switch ( ret )
+	{
+	case INPROGRESS:
+		break;
+
+	case DONE_AUTO:
+		cleanup_qserver( server, NO_FORCE );
+		break;
+
+	// For documenation only :)
+	//case DONE_FORCE:
+	//case SOCKET_ERROR:
+	//case MEM_ERROR:
+	//case PKT_ERROR:
+	//case ORD_ERROR:
+	default:
+		cleanup_qserver( server, FORCE );
+		break;
+	}
+
+	return ret;
+}
+
+
+/*
+ * Functions for sending packets
+ */
+// this is so broken, someone please rewrite the timeout handling
+void send_packets()
+{
+	struct qserver *server;
+	struct timeval now;
+	int interval, n_sent = 0, prev_n_sent;
+	unsigned i;
+	debug(3, "processing...");
+
+	gettimeofday(&now, NULL);
+
+	if (!t_lastsend.tv_sec)
+	{
+		// nothing
+	}
+	else if (connected && sendinterval && time_delta(&now, &t_lastsend) < sendinterval)
+	{
+		return ;
+	}
+
+	for (i = 0; i < max_connmap; ++i)
+	{
+		server = connmap[i];
+		if (!server)
+		{
+			continue;
+		}
+
+		if (server->fd == -1)
+		{
+			debug(0, "invalid entry in connmap\n");
+		}
+
+		if (server->type->id &MASTER_SERVER)
+		{
+			interval = master_retry_interval;
+		}
+		else
+		{
+			interval = retry_interval;
+		}
+
+		debug(2, "server %p, name %s, retry1 %d, next_rule %p, next_player_info %d, num_players %d, n_retries %d",
+			server,
+			server->server_name,
+			server->retry1,
+			server->next_rule,
+			server->next_player_info,
+			server->num_players,
+			n_retries
+		);
+		prev_n_sent = n_sent;
+		if (server->server_name == NULL)
+		{
+			// We havent seen the server yet?
+			if (server->retry1 != n_retries && time_delta(&now, &server->packet_time1) < (interval *(n_retries - server->retry1 + 1)))
+			{
+				continue;
+			}
+
+			if (!server->retry1)
+			{
+				// No more retries
+				cleanup_qserver( server, FORCE );
+				continue;
+			}
+
+			if (qserver_get_timeout(server, &now) <= 0)
+			{
+				// Query status
+				debug(2, "calling status_query_func for %p", server);
+				proccess_func_ret( server, server->type->status_query_func(server) );
+				gettimeofday(&t_lastsend, NULL);
+				n_sent++;
+				continue;
+			}
+		}
+
+		if (server->next_rule != NO_SERVER_RULES)
+		{
+			// We want server rules
+			if (server->retry1 != n_retries && time_delta(&now, &server->packet_time1) < (interval *(n_retries - server->retry1 + 1)))
+			{
+				continue;
+			}
+
+			if (!server->retry1)
+			{
+				// no more retries
+				server->next_rule = NULL;
+				server->missing_rules = 1;
+				cleanup_qserver( server, NO_FORCE );
+				continue;
+			}
+			send_rule_request_packet(server);
+			gettimeofday(&t_lastsend, NULL);
+			n_sent++;
+		}
+
+		if (server->next_player_info < server->num_players)
+		{
+			// Expecting player details
+			if (server->retry2 != n_retries && time_delta(&now, &server->packet_time2) < (interval *(n_retries - server->retry2 + 1)))
+			{
+				continue;
+			}
+			if (!server->retry2)
+			{
+				server->next_player_info++;
+				if (server->next_player_info >= server->num_players)
+				{
+					// no more retries
+					cleanup_qserver( server, FORCE );
+					continue;
+				}
+				server->retry2 = n_retries;
+			}
+			send_player_request_packet(server);
+			gettimeofday(&t_lastsend, NULL);
+			n_sent++;
+		}
+
+		if (prev_n_sent == n_sent)
+		{
+			// we didnt send any additional queries
+			debug(2, "no queries sent: %d %d", time_delta(&now, &server->packet_time1), (interval *(n_retries + 1)));
+			if (!server->retry1)
+			{
+				// no retries left
+				if (time_delta(&now, &server->packet_time1) > (interval *(n_retries + 1)))
+				{
+					cleanup_qserver( server, FORCE );
+				}
+			}
+			else
+			{
+				// decrement as we didnt send any packets
+				server->retry1--;
+			}
+		}
+	}
+
+	debug(3, "done");
+}
+
+/* server starts sending data immediately, so we need not do anything */
+int send_bfris_request_packet(struct qserver *server)
+{
+	return register_send(server);
+}
+
+
+/* First packet for a normal Quake server
+ */
+int send_qserver_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->status_packet, server->type->status_len);
+}
+
+/* First packet for a QuakeWorld server
+ */
+int send_qwserver_request_packet(struct qserver *server)
+{
+	int rc;
+
+	if (server->flags &FLAG_BROADCAST)
+	{
+		rc = send_broadcast(server, server->type->status_packet, server->type->status_len);
+	}
+	else if (server->server_name == NULL)
+	{
+		rc = send(server->fd, server->type->status_packet, server->type->status_len, 0);
+	}
+	else if (server->server_name != NULL && server->type->rule_packet)
+	{
+		rc = send(server->fd, server->type->rule_packet, server->type->rule_len, 0);
+	}
+	else
+	{
+		rc = SOCKET_ERROR;
+	}
+
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+	if (server->retry1 == n_retries || server->flags &FLAG_BROADCAST)
+	{
+		gettimeofday(&server->packet_time1, NULL);
+		server->n_requests++;
+	}
+	else if (server->server_name == NULL)
+	{
+		server->n_retries++;
+	}
+	server->retry1--;
+	if (server->server_name == NULL)
+	{
+		server->n_packets++;
+	}
+	server->next_player_info = NO_PLAYER_INFO; // we don't have a player packet
+
+	return 0;
+}
+
+// First packet for an Unreal Tournament 2003 server
+int send_ut2003_request_packet(struct qserver *server)
+{
+	int ret = send_packet(server, server->type->status_packet, server->type->status_len);
+	server->next_player_info = NO_PLAYER_INFO;
+
+	return ret;
+}
+
+// First packet for an Half-Life 2 server
+int send_hl2_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->status_packet, server->type->status_len);
+}
+
+/* First packet for an Unreal master
+ */
+int send_unrealmaster_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->status_packet, server->type->status_len);
+}
+
+static const char *steam_region[] =
+{
+	"US East Coast", "US West Coast", "South America", "Europe", "Asia", "Australia", "Middle East", "Africa", NULL
+};
+
+char *build_hlmaster_packet(struct qserver *server, int *len)
+{
+	static char packet[1600];
+	char *pkt, *r, *sep = "";
+	char *gamedir, *map, *flags;
+	int flen;
+
+	pkt = &packet[0];
+	memcpy(pkt, server->type->master_packet, *len);
+
+	if (server->type->flags &TF_MASTER_STEAM)
+	{
+		// default the region to 0xff
+		const char *regionstring = get_param_value(server, "region", NULL);
+		int region = 0xFF;
+		if (regionstring)
+		{
+			char *tmp = NULL;
+			region = strtol(regionstring, &tmp, 10);
+			if (tmp == regionstring)
+			{
+				int i = 0;
+				region = 0xFF;
+				for (; steam_region[i]; ++i)
+				{
+					if (!strcmp(regionstring, steam_region[i]))
+					{
+						region = i;
+						break;
+					}
+				}
+			}
+		}
+		*(pkt + 1) = region;
+	}
+
+	pkt += *len;
+
+	gamedir = get_param_value(server, "game", NULL);
+	if (gamedir)
+	{
+		pkt += sprintf(pkt, "\\gamedir\\%s", gamedir);
+	}
+
+	// not valid for steam?
+	map = get_param_value(server, "map", NULL);
+	if (map)
+	{
+		pkt += sprintf(pkt, "\\map\\%s", map);
+	}
+
+	// not valid for steam?
+	flags = get_param_value(server, "status", NULL);
+	r = flags;
+	while (flags && sep)
+	{
+		sep = strchr(r, ':');
+		if (sep)
+		{
+			flen = sep - r;
+		}
+		else
+		{
+			flen = strlen(r);
+		}
+
+		if (strncmp(r, "notempty", flen) == 0)
+		{
+			pkt += sprintf(pkt, "\\empty\\1");
+		}
+		else if (strncmp(r, "notfull", flen) == 0)
+		{
+			pkt += sprintf(pkt, "\\full\\1");
+		}
+		else if (strncmp(r, "dedicated", flen) == 0)
+		{
+			if (server->type->flags &TF_MASTER_STEAM)
+			{
+				pkt += sprintf(pkt, "\\type\\d");
+			}
+			else
+			{
+				pkt += sprintf(pkt, "\\dedicated\\1");
+			}
+		}
+		else if (strncmp(r, "linux", flen) == 0)
+		{
+			pkt += sprintf(pkt, "\\linux\\1");
+		}
+		else if (strncmp(r, "proxy", flen) == 0)
+		// steam
+		{
+			pkt += sprintf(pkt, "\\proxy\\1");
+		}
+		else if (strncmp(r, "secure", flen) == 0)
+		// steam
+		{
+			pkt += sprintf(pkt, "\\secure\\1");
+		}
+		r = sep + 1;
+	}
+
+	// always need null terminator
+	*pkt = 0x00;
+	pkt++;
+
+	*len = pkt - packet;
+
+	return packet;
+}
+
+/* First packet for a QuakeWorld master server
+ */
+int send_qwmaster_request_packet(struct qserver *server)
+{
+	int rc = 0;
+
+	server->next_player_info = NO_PLAYER_INFO;
+
+	if (server->type->id == Q2_MASTER)
+	{
+		struct sockaddr_in addr;
+		addr.sin_family = AF_INET;
+		if (no_port_offset || server->flags &TF_NO_PORT_OFFSET)
+		{
+			addr.sin_port = htons(server->port);
+		}
+		else
+		{
+			addr.sin_port = htons((unsigned short)(server->port + server->type->port_offset));
+		}
+		addr.sin_addr.s_addr = server->ipaddr;
+		memset(&(addr.sin_zero), 0, sizeof(addr.sin_zero));
+		rc = sendto(server->fd, server->type->master_packet, server->type->master_len, 0, (struct sockaddr*) &addr, sizeof(addr));
+	}
+	else
+	{
+		char *packet;
+		int packet_len;
+		char query_buf[4096] = { 0 };
+
+		packet = server->type->master_packet;
+		packet_len = server->type->master_len;
+
+		if (server->type->id == HL_MASTER)
+		{
+			memcpy(server->type->master_packet + 1, server->master_query_tag, 3);
+			if (server->query_arg)
+			{
+				packet_len = server->type->master_len;
+				packet = build_hlmaster_packet(server, &packet_len);
+			}
+		}
+		else if (server->type->flags &TF_MASTER_STEAM)
+		{
+			// region
+			int tag_len = strlen(server->master_query_tag);
+			if (tag_len < 9)
+			{
+				// initial case
+				tag_len = 9;
+				strcpy(server->master_query_tag, "0.0.0.0:0");
+			}
+
+			// 1 byte packet id
+			// 1 byte region
+			// ip:port
+			// 1 byte null
+			packet_len = 2+tag_len + 1;
+
+			if (server->query_arg)
+			{
+				// build_hlmaster_packet uses server->type->master_packet
+				// as the basis so copy from server->master_query_tag
+				strcpy(server->type->master_packet + 2, server->master_query_tag);
+				packet = build_hlmaster_packet(server, &packet_len);
+			}
+			else
+			{
+				// default region
+				*(packet + 1) = 0xff;
+				memcpy(packet + 2, server->master_query_tag, tag_len);
+
+				// filter null
+				*(packet + packet_len) = 0x00;
+				packet_len++;
+			}
+		}
+		else if (server->type->flags &TF_QUERY_ARG)
+		{
+			// fill in the master protocol details
+			char *master_protocol = server->query_arg;
+			if (master_protocol == NULL)
+			{
+				master_protocol = server->type->master_protocol;
+			}
+			packet_len = sprintf(query_buf, server->type->master_packet,
+				master_protocol ? master_protocol : "",
+				server->type->master_query 	? server->type->master_query: ""
+			);
+			packet = query_buf;
+		}
+
+		rc = send(server->fd, packet, packet_len, 0);
+	}
+
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+	if (server->retry1 == n_retries)
+	{
+		gettimeofday(&server->packet_time1, NULL);
+		server->n_requests++;
+	}
+	else
+	{
+		server->n_retries++;
+	}
+	server->retry1--;
+	server->n_packets++;
+
+	return INPROGRESS;
+}
+
+
+int send_tribes_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->player_packet, server->type->player_len);
+}
+
+int send_tribes2_request_packet(struct qserver *server)
+{
+	int rc;
+
+	if (server->flags &FLAG_BROADCAST && server->server_name == NULL)
+	{
+		rc = send_broadcast(server, server->type->status_packet, server->type->status_len);
+	}
+	else if (server->server_name == NULL)
+	{
+		rc = send(server->fd, server->type->status_packet, server->type->status_len, 0);
+	}
+	else
+	{
+		rc = send(server->fd, server->type->player_packet, server->type->player_len, 0);
+	}
+
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+	register_send(server);
+
+	return rc;
+}
+
+int send_ghostrecon_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->status_packet, server->type->status_len);
+}
+
+int send_eye_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->status_packet, server->type->status_len);
+}
+
+int send_ravenshield_request_packet(struct qserver *server)
+{
+	return send_packet(server, server->type->status_packet, server->type->status_len);
+}
+
+int send_savage_request_packet(struct qserver *server)
+{
+	int len;
+	char *pkt;
+
+	if (get_player_info)
+	{
+		pkt = server->type->player_packet;
+		len = server->type->player_len;
+	}
+	else
+	{
+		pkt = server->type->status_packet;
+		len = server->type->status_len;
+	}
+
+	return send_packet(server, pkt, len);
+}
+
+int send_farcry_request_packet(struct qserver *server)
+{
+	int len;
+	char *pkt;
+
+	if (get_player_info)
+	{
+		pkt = server->type->player_packet;
+		len = server->type->player_len;
+	}
+	else
+	{
+		pkt = server->type->status_packet;
+		len = server->type->status_len;
+	}
+
+	return send_packet(server, pkt, len);
+}
+
+int send_tribes2master_request_packet(struct qserver *server)
+{
+	int rc;
+	unsigned char packet[1600], *pkt;
+	unsigned int len, min_players, max_players, region_mask = 0;
+	unsigned int build_version, max_bots, min_cpu, status;
+	char *game, *mission, *buddies;
+	static char *region_list[] =
+	{
+		"naeast", "nawest", "sa", "aus", "asia", "eur", NULL
+	};
+	static char *status_list[] =
+	{
+		"dedicated", "nopassword", "linux"
+	};
+
+	if (strcmp(get_param_value(server, "query", ""), "types") == 0)
+	{
+		rc = send(server->fd, tribes2_game_types_request, sizeof(tribes2_game_types_request), 0);
+		goto send_done;
+	}
+
+	memcpy(packet, server->type->master_packet, server->type->master_len);
+
+	pkt = packet + 7;
+
+	game = get_param_value(server, "game", "any");
+	len = strlen(game);
+	if (len > 255)
+	{
+		len = 255;
+	}
+	*pkt++ = len;
+	memcpy(pkt, game, len);
+	pkt += len;
+
+	mission = get_param_value(server, "mission", "any");
+	len = strlen(mission);
+	if (len > 255)
+	{
+		len = 255;
+	}
+	*pkt++ = len;
+	memcpy(pkt, mission, len);
+	pkt += len;
+
+	min_players = get_param_ui_value(server, "minplayers", 0);
+	max_players = get_param_ui_value(server, "maxplayers", 255);
+	*pkt++ = min_players;
+	*pkt++ = max_players;
+
+	region_mask = get_param_ui_value(server, "regions", 0xffffffff);
+	if (region_mask == 0)
+	{
+		char *regions = get_param_value(server, "regions", "");
+		char *r = regions;
+		char **list, *sep;
+		do
+		{
+			sep = strchr(r, ':');
+			if (sep)
+			{
+				len = sep - r;
+			}
+			else
+			{
+				len = strlen(r);
+			}
+			for (list = region_list; *list; list++)
+			if (strncasecmp(r, *list, len) == 0)
+			{
+				break;
+			}
+			if (*list)
+			{
+				region_mask |= 1 << (list - region_list);
+			}
+			r = sep + 1;
+		}
+		while (sep);
+	}
+	if (little_endian)
+	{
+		memcpy(pkt, &region_mask, 4);
+	}
+	else
+	{
+		pkt[0] = region_mask &0xff;
+		pkt[1] = (region_mask >> 8) &0xff;
+		pkt[2] = (region_mask >> 16) &0xff;
+		pkt[3] = (region_mask >> 24) &0xff;
+	}
+	pkt += 4;
+
+	build_version = get_param_ui_value(server, "build", 0);
+	/*
+	if ( build_version && build_version < 22337) {
+	packet[1]= 0;
+	build_version= 0;
+	}
+	 */
+	if (little_endian)
+	{
+		memcpy(pkt, &build_version, 4);
+	}
+	else
+	{
+		pkt[0] = build_version &0xff;
+		pkt[1] = (build_version >> 8) &0xff;
+		pkt[2] = (build_version >> 16) &0xff;
+		pkt[3] = (build_version >> 24) &0xff;
+	}
+	pkt += 4;
+
+	status = get_param_ui_value(server, "status", - 1);
+	if (status == 0)
+	{
+		char *flags = get_param_value(server, "status", "");
+		char *r = flags;
+		char **list, *sep;
+		do
+		{
+			sep = strchr(r, ':');
+			if (sep)
+			{
+				len = sep - r;
+			}
+			else
+			{
+				len = strlen(r);
+			}
+			for (list = status_list; *list; list++)
+			if (strncasecmp(r, *list, len) == 0)
+			{
+				break;
+			}
+			if (*list)
+			{
+				status |= 1 << (list - status_list);
+			}
+			r = sep + 1;
+		}
+		while (sep);
+	}
+	else if (status == -1)
+	{
+		status = 0;
+	}
+	*pkt++ = status;
+
+	max_bots = get_param_ui_value(server, "maxbots", 255);
+	*pkt++ = max_bots;
+
+	min_cpu = get_param_ui_value(server, "mincpu", 0);
+	if (little_endian)
+	{
+		memcpy(pkt, &min_cpu, 2);
+	}
+	else
+	{
+		pkt[0] = min_cpu &0xff;
+		pkt[1] = (min_cpu >> 8) &0xff;
+	}
+	pkt += 2;
+
+	buddies = get_param_value(server, "buddies", NULL);
+	if (buddies)
+	{
+		char *b = buddies, *sep;
+		unsigned int buddy, n_buddies = 0;
+		unsigned char *n_loc = pkt++;
+		do
+		{
+			sep = strchr(b, ':');
+			if (sscanf(b, "%u", &buddy))
+			{
+				n_buddies++;
+				if (little_endian)
+				{
+					memcpy(pkt, &buddy, 4);
+				}
+				else
+				{
+					pkt[0] = buddy &0xff;
+					pkt[1] = (buddy >> 8) &0xff;
+					pkt[2] = (buddy >> 16) &0xff;
+					pkt[3] = (buddy >> 24) &0xff;
+				}
+				pkt += 4;
+			}
+			b = sep + 1;
+		}
+		while (sep && n_buddies < 255);
+		*n_loc = n_buddies;
+	}
+	else
+	{
+		*pkt++ = 0;
+	}
+
+	rc = send(server->fd, (char*)packet, pkt - packet, 0);
+
+send_done:
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+	if (server->retry1 == n_retries)
+	{
+		gettimeofday(&server->packet_time1, NULL);
+		server->n_requests++;
+	}
+	else
+	{
+		server->n_retries++;
+	}
+	server->retry1--;
+	server->n_packets++;
+
+	return 1;
+}
+
+static struct _gamespy_query_map
+{
+	char *qstat_type;
+	char *gamespy_type;
+}
+gamespy_query_map[] =
+{
+	{ "qws", "quakeworld" },
+	{ "q2s", "quake2" },
+	{ "q3s", "quake3" },
+	{ "tbs", "tribes" },
+	{ "uns", "ut" },
+	{ "sgs", "shogo" },
+	{ "hls", "halflife" },
+	{ "kps", "kingpin" },
+	{ "hrs", "heretic2" },
+	{ "sfs", "sofretail" },
+	{ NULL, NULL }
+};
+
+int send_gamespy_master_request(struct qserver *server)
+{
+	int rc, i;
+	char request[1024];
+
+	if (server->n_packets)
+	{
+		return 0;
+	}
+
+	rc = send(server->fd, server->type->master_packet, server->type->master_len, 0);
+	if (rc != server->type->master_len)
+	{
+		perror("send");
+	}
+
+	strcpy(request, server->type->status_packet);
+
+	for (i = 0; gamespy_query_map[i].qstat_type; i++)
+	if (strcasecmp(server->query_arg, gamespy_query_map[i].qstat_type) == 0)
+	{
+		break;
+	}
+	if (gamespy_query_map[i].gamespy_type == NULL)
+	{
+		strcat(request, server->query_arg);
+	}
+	else
+	{
+		strcat(request, gamespy_query_map[i].gamespy_type);
+	}
+	strcat(request, "\\final\\");
+	assert(strlen(request) < sizeof(request));
+
+	rc = send(server->fd, request, strlen(request), 0);
+	if (rc != strlen(request))
+	{
+		perror("send");
+	}
+
+	if (server->retry1 == n_retries)
+	{
+		gettimeofday(&server->packet_time1, NULL);
+		server->n_requests++;
+	}
+
+	server->n_packets++;
+
+	return 1;
+}
+
+int send_rule_request_packet(struct qserver *server)
+{
+	int rc, len;
+
+	debug(3, "send_rule_request_packet: %p", server);
+
+	/* Server created via broadcast, so bind it */
+	if (server->fd == -1)
+	{
+		if (bind_qserver(server) < 0)
+		{
+			goto setup_retry;
+		}
+	}
+
+	if (server->type->rule_query_func && server->type->rule_query_func != send_rule_request_packet)
+	{
+		return server->type->rule_query_func(server);
+	}
+
+	if (server->type->id == Q_SERVER)
+	{
+		strcpy((char*)q_rule.data, server->next_rule);
+		len = Q_HEADER_LEN + strlen((char*)q_rule.data) + 1;
+		q_rule.length = htons((short)len);
+	}
+	else
+	{
+		len = server->type->rule_len;
+	}
+
+	rc = send(server->fd, (const char*)server->type->rule_packet, len, 0);
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+setup_retry:
+	if (server->retry1 == n_retries)
+	{
+		gettimeofday(&server->packet_time1, NULL);
+		server->n_requests++;
+	}
+	else if (server->server_name == NULL)
+	{
+		server->n_retries++;
+	}
+	server->retry1--;
+	if (server->server_name == NULL)
+	{
+		server->n_packets++;
+	}
+
+	return 1;
+}
+
+int send_player_request_packet(struct qserver *server)
+{
+	int rc;
+
+	debug( 3, "send_player_request_packet %p", server );
+
+	if (!server->type->player_packet)
+	{
+		return 0;
+	}
+
+	/* Server created via broadcast, so bind it */
+	if (server->fd == -1)
+	{
+		if (bind_qserver(server) < 0)
+		{
+			goto setup_retry;
+		}
+	}
+
+	if (server->type->player_query_func && server->type->player_query_func != send_player_request_packet)
+	{
+		return server->type->player_query_func(server);
+	}
+
+	if (!server->type->player_packet)
+	{
+		debug(0, "error: server %p has no player_packet", server);
+		return 0;
+	}
+
+	if (server->type->id == Q_SERVER)
+	{
+		q_player.data[0] = server->next_player_info;
+	}
+	rc = send(server->fd, (const char*)server->type->player_packet, server->type->player_len, 0);
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+setup_retry:
+	if (server->retry2 == n_retries)
+	{
+		gettimeofday(&server->packet_time2, NULL);
+		server->n_requests++;
+	}
+	else
+	{
+		server->n_retries++;
+	}
+	server->retry2--;
+	server->n_packets++;
+
+	return 1;
+}
+
+void qserver_disconnect(struct qserver *server)
+{
+#ifdef _WIN32
+	int i;
+#endif
+	if (server->fd != - 1)
+	{
+		close(server->fd);
+#ifndef _WIN32
+		connmap[server->fd] = NULL;
+#else
+		for (i = 0; i < max_connmap; i++)
+		{
+			if (connmap[i] == server)
+			{
+				connmap[i] = NULL;
+				break;
+			}
+		}
+#endif
+		server->fd = - 1;
+		connected--;
+	}
+}
+
+/* Functions for figuring timeouts and when to give up
+ * Returns 1 if the query is done (server may be freed) and 0 if not.
+ */
+int cleanup_qserver(struct qserver *server, int force)
+{
+	int close_it = force;
+	debug( 3, "cleanup_qserver %p, %d", server, force );
+	if (server->server_name == NULL)
+	{
+		debug(3, "server has no name, forcing close");
+		close_it = 1;
+		if (server->type->id &MASTER_SERVER && server->master_pkt != NULL)
+		{
+			server->server_name = MASTER;
+		}
+		else
+		{
+			server->server_name = TIMEOUT;
+			num_servers_timed_out++;
+		}
+	}
+	else if (server->type->flags &TF_SINGLE_QUERY)
+	{
+		debug(3, "TF_SINGLE_QUERY, forcing close");
+		close_it = 1;
+	}
+	else if (server->next_rule == NO_SERVER_RULES && server->next_player_info >= server->num_players)
+	{
+		debug(3, "no server rules and next_player_info >= num_players, forcing close");
+		close_it = 1;
+	}
+
+	debug(3, "close_it %d", close_it);
+	if (close_it)
+	{
+		if (server->saved_data.data)
+		{
+			SavedData *sdata = server->saved_data.next;
+			free(server->saved_data.data);
+			server->saved_data.data = NULL;
+			while (sdata != NULL)
+			{
+				SavedData *next;
+				free(sdata->data);
+				next = sdata->next;
+				free(sdata);
+				sdata = next;
+			}
+			server->saved_data.next = NULL;
+		}
+
+		qserver_disconnect(server);
+
+		if (server->server_name != TIMEOUT)
+		{
+			num_servers_returned++;
+			if (server->server_name != DOWN)
+			{
+				num_players_total += server->num_players;
+				max_players_total += server->max_players;
+			}
+		}
+		if (server->server_name == TIMEOUT || server->server_name == DOWN)
+		{
+			server->ping_total = 999999;
+		}
+		if (server->type->master)
+		{
+			waiting_for_masters--;
+			if (waiting_for_masters == 0)
+			{
+				add_servers_from_masters();
+			}
+		}
+		if (!server_sort)
+		{
+			display_server(server);
+		}
+		return 1;
+	}
+	return 0;
+}
+
+/** must be called only on connected servers
+ * @returns time in ms until server needs timeout handling. timeout handling is needed if <= zero
+ */
+static int qserver_get_timeout(struct qserver *server, struct timeval *now)
+{
+	int diff, diff1, diff2, interval;
+
+	if (server->type->id &MASTER_SERVER)
+	{
+		interval = master_retry_interval;
+	}
+	else
+	{
+		interval = retry_interval;
+	}
+
+	diff2 = 0xffff;
+
+	diff1 = interval *(n_retries - server->retry1 + 1) - time_delta(now, &server->packet_time1);
+
+	if (server->next_player_info < server->num_players)
+	{
+		diff2 = interval *(n_retries - server->retry2 + 1) - time_delta(now, &server->packet_time2);
+	}
+
+	debug(2, "timeout for %p is diff1 %d diff2 %d", server, diff1, diff2);
+
+
+	diff = (diff1 < diff2) ? diff1 : diff2;
+
+	return diff;
+}
+
+void get_next_timeout(struct timeval *timeout)
+{
+	struct qserver *server = servers;
+	struct timeval now;
+	int diff, smallest = retry_interval + master_retry_interval;
+	int bind_count = 0;
+
+	if (first_server_bind == NULL)
+	{
+		first_server_bind = servers;
+	}
+
+	server = first_server_bind;
+
+	for (; server != NULL && server->fd == -1; server = server->next)
+		;
+
+	/* if there are unconnected servers and slots left we retry in 10ms */
+	if (server == NULL || (num_servers > connected && connected < max_simultaneous))
+	{
+		timeout->tv_sec = 0;
+		timeout->tv_usec = 10 * 1000;
+		return ;
+	}
+
+	first_server_bind = server;
+
+	gettimeofday(&now, NULL);
+	for (; server != NULL && bind_count < connected; server = server->next)
+	{
+		if (server->fd == -1)
+		{
+			continue;
+		}
+
+		diff = qserver_get_timeout(server, &now);
+		if (diff < smallest)
+		{
+			smallest = diff;
+		}
+		bind_count++;
+	}
+
+	if (smallest < 10)
+	{
+		smallest = 10;
+	}
+
+	timeout->tv_sec = smallest / 1000;
+	timeout->tv_usec = (smallest % 1000) *1000;
+}
+
+
+#ifdef USE_SELECT
+static fd_set select_read_fds;
+static int select_maxfd;
+static int select_cursor;
+
+int set_fds(fd_set *fds)
+{
+	int maxfd = - 1, i;
+
+	for (i = 0; i < max_connmap; i++)
+	{
+		if (connmap[i] != NULL)
+		{
+			FD_SET(connmap[i]->fd, fds);
+			if (connmap[i]->fd > maxfd)
+			{
+				maxfd = connmap[i]->fd;
+			}
+		}
+	}
+
+	return maxfd;
+}
+
+void set_file_descriptors()
+{
+	FD_ZERO(&select_read_fds);
+	select_maxfd = set_fds(&select_read_fds);
+}
+
+int wait_for_file_descriptors(struct timeval *timeout)
+{
+	select_cursor = 0;
+	return select(select_maxfd + 1, &select_read_fds, NULL, NULL, timeout);
+}
+
+struct qserver *get_next_ready_server()
+{
+	while (select_cursor < max_connmap && (connmap[select_cursor] == NULL || !FD_ISSET(connmap[select_cursor]->fd, &select_read_fds)))
+	{
+		select_cursor++;
+	}
+
+	if (select_cursor >= max_connmap)
+	{
+		return NULL;
+	}
+	return connmap[select_cursor++];
+}
+
+int wait_for_timeout(unsigned int ms)
+{
+	struct timeval timeout;
+	timeout.tv_sec = ms / 1000;
+	timeout.tv_usec = (ms % 1000) *1000;
+	return select(0, 0, NULL, NULL, &timeout);
+}
+
+#endif /* USE_SELECT */
+
+#ifdef USE_POLL
+static struct pollfd *pollfds;
+static int n_pollfds;
+static int max_pollfds = 0;
+static int poll_cursor;
+
+void set_file_descriptors()
+{
+	struct pollfd *p;
+	int i;
+
+	if (max_connmap > max_pollfds)
+	{
+		max_pollfds = max_connmap;
+		pollfds = (struct pollfd*)realloc(pollfds, max_pollfds *sizeof(struct pollfd));
+	}
+
+	p = pollfds;
+	for (i = 0; i < max_connmap; i++)
+	if (connmap[i] != NULL)
+	{
+		p->fd = connmap[i]->fd;
+		p->events = POLLIN;
+		p->revents = 0;
+		p++;
+	}
+	n_pollfds = p - pollfds;
+}
+
+int wait_for_file_descriptors(struct timeval *timeout)
+{
+	poll_cursor = 0;
+	return poll(pollfds, n_pollfds, timeout->tv_sec *1000+timeout->tv_usec / 1000);
+}
+
+struct qserver *get_next_ready_server()
+{
+	for (; poll_cursor < n_pollfds; poll_cursor++)
+	{
+		if (pollfds[poll_cursor].revents)
+		{
+			break;
+		}
+	}
+
+	if (poll_cursor >= n_pollfds)
+	{
+		return NULL;
+	}
+	return connmap[pollfds[poll_cursor++].fd];
+}
+
+int wait_for_timeout(unsigned int ms)
+{
+	return poll(0, 0, ms);
+}
+
+#endif /* USE_POLL */
+
+
+void free_server(struct qserver *server)
+{
+	struct player *player, *next_player;
+	struct rule *rule, *next_rule;
+
+	/* remove from servers list */
+	if (server == servers)
+	{
+		servers = server->next;
+		if (servers)
+		{
+			servers->prev = NULL;
+		}
+	}
+
+	if ((void*) &server->next == (void*)last_server)
+	{
+		if (server->prev)
+		{
+			last_server = &server->prev->next;
+		}
+		else
+		{
+			last_server = &servers;
+		}
+	}
+	if (server == first_server_bind)
+	{
+		first_server_bind = server->next;
+	}
+	if (server == last_server_bind)
+	{
+		last_server_bind = server->next;
+	}
+
+	if (server->prev)
+	{
+		server->prev->next = server->next;
+	}
+	if (server->next)
+	{
+		server->next->prev = server->prev;
+	}
+
+	/* remove from server hash table */
+	remove_server_from_hash(server);
+
+	/* free all the data */
+	for (player = server->players; player; player = next_player)
+	{
+		next_player = player->next;
+		free_player(player);
+	}
+
+	for (rule = server->rules; rule; rule = next_rule)
+	{
+		next_rule = rule->next;
+		free_rule(rule);
+	}
+
+	if (server->arg)
+	{
+		free(server->arg);
+	}
+	if (server->host_name)
+	{
+		free(server->host_name);
+	}
+	if (server->error)
+	{
+		free(server->error);
+	}
+	if (server->address)
+	{
+		free(server->address);
+	}
+	if (server->map_name)
+	{
+		free(server->map_name);
+	}
+	if (!(server->flags &FLAG_DO_NOT_FREE_GAME) && server->game)
+	{
+		free(server->game);
+	}
+	if (server->master_pkt)
+	{
+		free(server->master_pkt);
+	}
+	if ( server->query_arg )
+	{
+		free(server->query_arg);
+	}
+
+	/* These fields are never malloc'd: outfilename
+	 */
+
+	if (
+		server->server_name != NULL &&
+		server->server_name != DOWN &&
+		server->server_name != HOSTNOTFOUND &&
+		server->server_name != SYSERROR &&
+		server->server_name != MASTER &&
+		server->server_name != SERVERERROR &&
+		server->server_name != TIMEOUT &&
+		server->server_name != GAMESPY_MASTER_NAME &&
+		server->server_name != BFRIS_SERVER_NAME
+	)
+	{
+		free(server->server_name);
+	}
+
+	/*
+	params ...
+	saved_data ...
+	 */
+
+	free(server);
+	--num_servers;
+}
+
+void free_player(struct player *player)
+{
+	if (player->name)
+	{
+		free(player->name);
+	}
+	if (!(player->flags &PLAYER_FLAG_DO_NOT_FREE_TEAM) && player->team_name)
+	{
+		free(player->team_name);
+	}
+	if (player->address)
+	{
+		free(player->address);
+	}
+	if (player->tribe_tag)
+	{
+		free(player->tribe_tag);
+	}
+	if (player->skin)
+	{
+		free(player->skin);
+	}
+	if (player->mesh)
+	{
+		free(player->mesh);
+	}
+	if (player->face)
+	{
+		free(player->face);
+	}
+	free(player);
+}
+
+void free_rule(struct rule *rule)
+{
+	if (rule->name)
+	{
+		free(rule->name);
+	}
+
+	if (rule->value)
+	{
+		free(rule->value);
+	}
+	free(rule);
+}
+
+/* Functions for handling response packets
+ */
+
+/* Packet from normal Quake server
+ */
+int deal_with_q_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	struct q_packet *pkt = (struct q_packet*)rawpkt;
+	int rc;
+
+	debug( 2, "deal_with_q_packet %p, %d", server, pktlen );
+
+	if (ntohs(pkt->length) != pktlen)
+	{
+		fprintf(stderr, "%s Ignoring bogus packet; length %d != %d\n", server->arg, ntohs(pkt->length), pktlen);
+		return PKT_ERROR;
+	}
+
+	rawpkt[pktlen] = '\0';
+
+	switch (pkt->op_code)
+	{
+		case Q_CCREP_ACCEPT:
+		case Q_CCREP_REJECT:
+			return 0;
+		case Q_CCREP_SERVER_INFO:
+			server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+			rc = server_info_packet(server, pkt, pktlen - Q_HEADER_LEN);
+			break;
+		case Q_CCREP_PLAYER_INFO:
+			server->ping_total += time_delta(&packet_recv_time, &server->packet_time2);
+			rc = player_info_packet(server, pkt, pktlen - Q_HEADER_LEN);
+			break;
+		case Q_CCREP_RULE_INFO:
+			server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+			rc = rule_info_packet(server, pkt, pktlen - Q_HEADER_LEN);
+			break;
+		case Q_CCREQ_CONNECT:
+		case Q_CCREQ_SERVER_INFO:
+		case Q_CCREQ_PLAYER_INFO:
+		case Q_CCREQ_RULE_INFO:
+		default:
+			return 0;
+	}
+
+	if ( SOCKET_ERROR == rc )
+	{
+		fprintf(stderr, "%s error on packet opcode %x\n", server->arg, (int)pkt->op_code);
+	}
+
+	return rc;
+}
+
+
+/* Packet from QuakeWorld server
+ */
+int deal_with_qw_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	debug( 2, "deal_with_qw_packet %p, %d", server, pktlen );
+	if (server->server_name == NULL)
+	{
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+	}
+
+	if (((rawpkt[0] != '\377' && rawpkt[0] != '\376') || rawpkt[1] != '\377' || rawpkt[2] != '\377' || rawpkt[3] != '\377') &&	show_errors)
+	{
+		unsigned int ipaddr = ntohl(server->ipaddr);
+		fprintf(stderr, "Odd packet from server %d.%d.%d.%d:%hu, processing ...\n",
+			(ipaddr >> 24) &0xff,
+			(ipaddr >> 16) &0xff,
+			(ipaddr	>> 8) &0xff,
+			ipaddr &0xff,
+			ntohs(server->port)
+		);
+		print_packet(server, rawpkt, pktlen);
+	}
+
+	rawpkt[pktlen] = '\0';
+
+	if (rawpkt[4] == 'n')
+	{
+		if (server->type->id != QW_SERVER)
+		{
+			server->type = find_server_type_id(QW_SERVER);
+		}
+		return deal_with_q1qw_packet(server, rawpkt, pktlen);
+	}
+	else if (rawpkt[4] == '\377' && rawpkt[5] == 'n')
+	{
+		if (server->type->id != HW_SERVER)
+		{
+			server->type = find_server_type_id(HW_SERVER);
+		}
+		return deal_with_q1qw_packet(server, rawpkt, pktlen);
+	}
+	else if (strncmp(&rawpkt[4], "print\n\\", 7) == 0)
+	{
+		return deal_with_q2_packet(server, rawpkt + 10, pktlen - 10 );
+	}
+	else if (strncmp(&rawpkt[4], "print\n", 6) == 0)
+	{
+		/* work-around for occasional bug in Quake II status packets
+		 */
+		char *c, *p;
+		p = c = &rawpkt[10];
+		while (*p != '\\' && (c = strchr(p, '\n')))
+		{
+			p = c + 1;
+		}
+		if (*p == '\\' && c != NULL)
+		{
+			return deal_with_q2_packet(server, p, pktlen - (p - rawpkt) );
+		}
+	}
+	else if (strncmp(&rawpkt[4], "infoResponse", 12) == 0 || (rawpkt[4] == '\001' && strncmp(&rawpkt[5], "infoResponse", 12) == 0))
+	{
+		/* quake3 info response */
+		int ret;
+		if (rawpkt[4] == '\001')
+		{
+			rawpkt++;
+			pktlen--;
+		}
+		rawpkt += 12;
+		pktlen -= 12;
+		for (; pktlen && *rawpkt != '\\'; pktlen--, rawpkt++)
+			;
+		if (!pktlen)
+		{
+			return INPROGRESS;
+		}
+		if (rawpkt[pktlen - 1] == '"')
+		{
+			rawpkt[pktlen - 1] = '\0';
+			pktlen--;
+		}
+		if (get_player_info || get_server_rules)
+		{
+			server->next_rule = "";
+		}
+
+		ret = deal_with_q2_packet(server, rawpkt, pktlen );
+		if ( DONE_AUTO == ret && ( get_player_info || get_server_rules ) )
+		{
+			send_rule_request_packet( server);
+			server->retry1= n_retries-1;
+			return INPROGRESS;
+		}
+
+		return ret;
+	}
+	else if (strncmp(&rawpkt[4], "statusResponse\n", 15) == 0 || (rawpkt[4] == '\001' && strncmp(&rawpkt[5], "statusResponse\n", 15) 	== 0))
+	{
+		/* quake3 status response */
+		server->next_rule = NO_SERVER_RULES;
+		server->retry1 = 0;
+		if (rawpkt[4] == '\001')
+		{
+			rawpkt++;
+			pktlen--;
+		}
+		server->flags |= CHECK_DUPLICATE_RULES;
+		return deal_with_q2_packet(server, rawpkt + 19, pktlen - 19 );
+	}
+	else if (strncmp(&rawpkt[4], "infostringresponse", 19) == 0)
+	{
+		return deal_with_q2_packet(server, rawpkt + 23, pktlen - 23 );
+	}
+
+	if (show_errors)
+	{
+		unsigned int ipaddr = ntohl(server->ipaddr);
+		fprintf(stderr, "Odd packet from server %d.%d.%d.%d:%hu, ignoring ...\n",
+			(ipaddr >> 24) &0xff,
+			(ipaddr >> 16) &0xff,
+			(ipaddr >>	8) &0xff,
+			ipaddr &0xff,
+			ntohs(server->port)
+		);
+		print_packet(server, rawpkt, pktlen);
+		return PKT_ERROR;
+	}
+
+	return DONE_AUTO;
+}
+
+int deal_with_q1qw_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	char *key, *value, *end, *users;
+	struct player *player = NULL, **last_player = &server->players;
+	int len, rc, complete = 0;
+	int number, frags, connect_time, ping;
+	char *pkt = &rawpkt[5];
+
+	debug( 2, "deal_with_q1qw_packet %p, %d", server, pktlen );
+
+	if (server->type->id == HW_SERVER)
+	{
+		pkt = &rawpkt[6];
+	}
+
+	*(users = strchr(pkt, '\n')) = '\0';
+	while (*pkt && pkt - rawpkt < pktlen)
+	{
+		if (*pkt == '\\')
+		{
+			pkt++;
+			end = strchr(pkt, '\\');
+			if (end == NULL)
+			{
+				break;
+			}
+			*end = '\0';
+			key = pkt;
+			pkt += strlen(pkt) + 1;
+			end = strchr(pkt, '\\');
+			if (end == NULL)
+			{
+				end = users;
+			}
+			value = (char*)malloc(end - pkt + 1);
+			memcpy(value, pkt, end - pkt);
+			value[end - pkt] = '\0';
+			pkt = end;
+			if (strcmp(key, "hostname") == 0)
+			{
+				server->server_name = value;
+			}
+			else if (strcmp(key, "map") == 0)
+			{
+				server->map_name = value;
+			}
+			else if (strcmp(key, "maxclients") == 0)
+			{
+				server->max_players = atoi(value);
+				free(value);
+			}
+			else if (strcmp(key, "maxspectators") == 0)
+			{
+				server->max_spectators = atoi(value);
+				free(value);
+			}
+			else if (get_server_rules || strncmp(key, "*game", 5) == 0)
+			{
+				add_rule(server, key, value, NO_VALUE_COPY);
+				if (strcmp(key, "*gamedir") == 0)
+				{
+					server->game = value;
+					server->flags |= FLAG_DO_NOT_FREE_GAME;
+				}
+			}
+		}
+		else
+		{
+			pkt++;
+		}
+		complete = 1;
+	}
+	*pkt = '\n';
+	while (*pkt && pkt - rawpkt < pktlen)
+	{
+		if (*pkt == '\n')
+		{
+			pkt++;
+			if (pkt - rawpkt >= pktlen || *pkt == '\0')
+			{
+				break;
+			}
+			rc = sscanf(pkt, "%d %d %d %d %n", &number, &frags, &connect_time, &ping, &len);
+			if (rc != 4)
+			{
+				char *nl; /* assume it's an error packet */
+				server->error = (char*)malloc(pktlen + 1);
+				nl = strchr(pkt, '\n');
+				if (nl != NULL)
+				{
+					strncpy(server->error, pkt, nl - pkt);
+					server->error[nl - pkt] = '\0';
+				}
+				else
+				{
+					strcpy(server->error, pkt);
+				}
+				server->server_name = SERVERERROR;
+				complete = 1;
+				break;
+			}
+			if (get_player_info)
+			{
+				player = (struct player*)calloc(1, sizeof(struct player));
+				player->number = number;
+				player->frags = frags;
+				player->connect_time = connect_time * 60;
+				player->ping = ping > 0 ? ping : - ping;
+			}
+			else
+			{
+				player = NULL;
+			}
+
+			pkt += len;
+
+			if (*pkt != '"')
+			{
+				break;
+			}
+			pkt += ping > 0 ? 1 : 4; // if 4 then no "\s\" in spectators name
+			// protocol "under construction"
+			end = strchr(pkt, '"');
+			if (end == NULL)
+			{
+				break;
+			}
+			if (player != NULL)
+			{
+				player->name = (char*)malloc(end - pkt + 1);
+				memcpy(player->name, pkt, end - pkt);
+				player->name[end - pkt] = '\0';
+			}
+
+			pkt = end + 2;
+
+			if (*pkt != '"')
+			{
+				break;
+			}
+			pkt++;
+			end = strchr(pkt, '"');
+			if (end == NULL)
+			{
+				break;
+			}
+			if (player != NULL)
+			{
+				player->skin = (char*)malloc(end - pkt + 1);
+				memcpy(player->skin, pkt, end - pkt);
+				player->skin[end - pkt] = '\0';
+			}
+			pkt = end + 2;
+
+			if (player != NULL)
+			{
+				sscanf(pkt, "%d %d%n", &player->shirt_color, &player->pants_color, &len);
+				*last_player = player;
+				last_player = &player->next;
+			}
+			else
+			{
+				sscanf(pkt, "%*d %*d%n", &len);
+			}
+			pkt += len;
+
+			if (pkt + 3 < rawpkt + pktlen && *pkt == ' ')
+			// mvdsv is at last rev 377, 23.06.2006
+			{
+				pkt++;
+
+				if (*pkt != '"')
+				{
+					break;
+				}
+				pkt++;
+				end = strchr(pkt, '"');
+				if (end == NULL)
+				{
+					break;
+				}
+
+				if (player != NULL)
+				{
+					player->team_name = (char*)malloc(end - pkt + 1);
+					memcpy(player->team_name, pkt, end - pkt);
+					player->team_name[end - pkt] = '\0';
+				}
+				pkt = end + 1;
+			}
+
+			if (ping > 0)
+			{
+				server->num_players++;
+			}
+			else
+			{
+				server->num_spectators++;
+			}
+		}
+		else
+		{
+			pkt++;
+		}
+		complete = 1;
+	}
+
+	if (!complete)
+	{
+		if (rawpkt[4] != 'n' || rawpkt[5] != '\0')
+		{
+			fprintf(stderr, "Odd packet from QW server %d.%d.%d.%d:%hu ...\n",
+				(server->ipaddr >> 24) &0xff,
+				(server->ipaddr >> 16) &0xff,
+				(server->ipaddr >> 8) &0xff,
+				server->ipaddr &0xff,
+				ntohs(server->port)
+			);
+			print_packet(server, rawpkt, pktlen);
+		}
+	}
+	else if (server->server_name == NULL)
+	{
+		server->server_name = strdup("");
+	}
+
+	return DONE_AUTO;
+}
+
+int deal_with_q2_packet(struct qserver *server, char *rawpkt, int pktlen )
+{
+	char *key, *value, *end;
+	struct player *player = NULL;
+	struct player **last_player = &server->players;
+	int len, rc, complete = 0;
+	int frags = 0, ping = 0, num_players = 0;
+	char *pkt = rawpkt;
+
+	debug( 2, "deal_with_q2_packet %p, %d", server, pktlen );
+
+	while (*pkt && pkt - rawpkt < pktlen)
+	{
+		// we have variable, value pairs seperated by slash
+		if (*pkt == '\\')
+		{
+			pkt++;
+			if (*pkt == '\n' && server->type->id == SOF_SERVER)
+			{
+				goto player_info;
+			}
+
+			// Find the key
+			end = strchr(pkt, '\\');
+			if (NULL == end)
+			{
+				break;
+			}
+			*end = '\0';
+			key = pkt;
+			pkt += strlen(key) + 1;
+
+			// Find the value
+			end = strpbrk(pkt, "\\\n");
+			if (NULL == end)
+			{
+				// Last value
+				end = rawpkt + pktlen;
+			}
+
+			// Make a copy of the value
+			value = (char*)malloc(end - pkt + 1);
+			memcpy(value, pkt, end - pkt);
+			value[end - pkt] = '\0';
+			pkt = end;
+			debug(3, "%s = %s", key, value);
+			if (server->server_name == NULL && (strcmp(key, "hostname") == 0 || strcmp(key, "sv_hostname") == 0))
+			{
+				// Server name
+				server->server_name = value;
+			}
+			else if (strcmp(key, "mapname") == 0 || (strcmp(key, "map") == 0 && server->map_name == NULL))
+			{
+				// Map name
+				if (NULL != server->map_name)
+				{
+					free(server->map_name);
+				}
+				server->map_name = value;
+			}
+			else if (strcmp(key, "maxclients") == 0 || strcmp(key, "sv_maxclients") == 0 || strcmp(key, "max") == 0)
+			{
+				// Max Players
+				server->max_players = atoi(value);
+				// Note: COD 4 infoResponse returns max as sv_maxclients - sv_privateClients where as statusResponse returns the true max
+				// MOHAA Q3 protocol max players is always 0
+				if (0 == server->max_players)
+				{
+					server->max_players = - 1;
+				}
+				free(value);
+			}
+			else if (strcmp(key, "clients") == 0 || strcmp(key, "players") == 0)
+			{
+				// Num Players
+				server->num_players = atoi(value);
+				free(value);
+			}
+			else if (server->server_name == NULL && strcmp(key, "pure") == 0)
+			{
+				add_rule(server, key, value, NO_VALUE_COPY);
+			}
+			else if (get_server_rules || strncmp(key, "game", 4) == 0)
+			{
+				int dofree = 0;
+				int flags = ( server->flags & CHECK_DUPLICATE_RULES ) ? CHECK_DUPLICATE_RULES | NO_VALUE_COPY : NO_VALUE_COPY;
+				if (add_rule(server, key, value, flags ) == NULL)
+				{
+					// duplicate, so free value
+					dofree = 1;
+				}
+
+				if (server->game == NULL && strcmp(key, server->type->game_rule) == 0)
+				{
+					server->game = value;
+					if (0 == dofree)
+					{
+						server->flags |= FLAG_DO_NOT_FREE_GAME;
+					}
+				}
+				else if (1 == dofree)
+				{
+					free(value);
+				}
+			}
+			else
+			{
+				free(value);
+			}
+		}
+		else if (*pkt == '\n')
+		{
+			player_info: debug(3, "player info");
+			pkt++;
+			if (*pkt == '\0')
+			{
+				break;
+			}
+
+			if (0 == strncmp(pkt, "\\challenge\\", 11))
+			{
+				// qfusion
+				// This doesnt support getstatus looking at warsow source:
+				// server/sv_main.c: SV_ConnectionlessPacket
+				server->next_rule = NO_SERVER_RULES;
+				debug(3, "no more server rules");
+				break;
+			}
+
+			rc = sscanf(pkt, "%d %n", &frags, &len);
+			if (rc == 1 && pkt[len] != '"')
+			{
+				pkt += len;
+				rc = sscanf(pkt, "%d %n", &ping, &len);
+			}
+			else if (rc == 1)
+			{
+				/* MOHAA Q3 protocol only provides player ping */
+				ping = frags;
+				frags = 0;
+			}
+
+			if (rc != 1)
+			{
+				char *nl; /* assume it's an error packet */
+				server->error = (char*)malloc(pktlen + 1);
+				nl = strchr(pkt, '\n');
+				if (nl != NULL)
+				{
+					strncpy(server->error, pkt, nl - pkt);
+				}
+				else
+				{
+					strcpy(server->error, pkt);
+				}
+				server->server_name = SERVERERROR;
+				complete = 1;
+				break;
+			}
+
+			if (get_player_info)
+			{
+				player = (struct player*)calloc(1, sizeof(struct player));
+				player->number = 0;
+				player->connect_time = - 1;
+				player->frags = frags;
+				player->ping = ping;
+			}
+			else
+			{
+				player = NULL;
+			}
+
+			pkt += len;
+
+			if (isdigit((unsigned char) *pkt))
+			{
+				/* probably an SOF2 1.01 server, includes team # */
+				int team;
+				rc = sscanf(pkt, "%d %n", &team, &len);
+				if (rc == 1)
+				{
+					pkt += len;
+					if (player)
+					{
+						player->team = team;
+						server->flags |= FLAG_PLAYER_TEAMS;
+					}
+				}
+			}
+
+			if (*pkt != '"')
+			{
+				break;
+			}
+
+			pkt++;
+			end = strchr(pkt, '"');
+			if (end == NULL)
+			{
+				break;
+			}
+			if (player != NULL)
+			{
+				player->name = (char*)malloc(end - pkt + 1);
+				memcpy(player->name, pkt, end - pkt);
+				player->name[end - pkt] = '\0';
+			}
+			pkt = end + 1;
+
+			//WarSoW team number
+			if (*pkt != '\n')
+			{
+				int team;
+				rc = sscanf(pkt, "%d%n", &team, &len);
+				if (rc == 1)
+				{
+					pkt += len;
+					if (player)
+					{
+						player->team = team;
+						server->flags |= FLAG_PLAYER_TEAMS;
+					}
+				}
+			}
+
+			if (player != NULL)
+			{
+				player->skin = NULL;
+				player->shirt_color = - 1;
+				player->pants_color = - 1;
+				*last_player = player;
+				last_player = &player->next;
+			}
+			num_players++;
+		}
+		else
+		{
+			pkt++;
+		}
+		complete = 1;
+	}
+
+	if (server->num_players == 0 || num_players > server->num_players)
+	{
+		server->num_players = num_players;
+	}
+
+	if (!complete)
+	{
+		return PKT_ERROR;
+	}
+	else if (server->server_name == NULL)
+	{
+		server->server_name = strdup("");
+	}
+
+	return DONE_AUTO;
+}
+
+int ack_descent3master_packet(struct qserver *server, char *curtok)
+{
+	int rc;
+	char packet[0x1e];
+	memcpy(packet, descent3_masterquery, 0x1a);
+	packet[1] = 0x1d;
+	packet[0x16] = 1;
+	memcpy(packet + 0x1a, curtok, 4);
+	rc = send(server->fd, packet, sizeof(packet), 0);
+	if (rc == SOCKET_ERROR)
+	{
+		return send_error( server, rc );
+	}
+
+	return rc;
+}
+
+/* Packet from Descent3 master server (PXO)
+ */
+int deal_with_descent3master_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	int i = 0, lastpacket = 0;
+	char *names = rawpkt + 0x1f;
+	char *ips = rawpkt + 0x29f;
+	char *ports = rawpkt + 0x2ef;
+
+	debug( 2, "deal_with_descent3master_packet %p, %d", server, pktlen );
+
+	while (i < 20)
+	{
+		if (*names)
+		{
+			char *c;
+			server->master_pkt_len += 6;
+			server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len);
+			c = server->master_pkt + server->master_pkt_len - 6;
+			memcpy(c, ips, 4);
+			memcpy(c + 4, ports, 2);
+		}
+		else if (i > 0)
+		{
+			lastpacket = 1;
+		}
+		names += 0x20;
+		ips += 4;
+		ports += 2;
+		i++;
+	}
+
+	ack_descent3master_packet(server, rawpkt + 0x1a);
+
+	server->n_servers = server->master_pkt_len / 6;
+
+	server->next_player_info = - 1;
+	server->retry1 = 0;
+
+	if (lastpacket)
+	{
+		return DONE_AUTO;
+	}
+
+	return INPROGRESS;
+}
+
+/* Packet from QuakeWorld master server
+ */
+int deal_with_qwmaster_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	int ret = 0;
+
+	debug( 2, "deal_with_qwmaster_packet %p, %d", server, pktlen );
+
+	server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+
+	if (rawpkt[0] == QW_NACK)
+	{
+		server->error = strdup(&rawpkt[2]);
+		server->server_name = SERVERERROR;
+		return PKT_ERROR;
+	}
+
+	if (*((unsigned int*)rawpkt) == 0xffffffff)
+	{
+		rawpkt += 4; /* QW 1.5 */
+		pktlen -= 4;
+		if (rawpkt[0] == '\377' && rawpkt[1] == QW_SERVERS)
+		{
+			rawpkt++;	/* hwmaster */
+			pktlen--;
+		}
+	}
+
+	if (rawpkt[0] == QW_SERVERS && rawpkt[1] == QW_NEWLINE)
+	{
+		rawpkt += 2;
+		pktlen -= 2;
+	}
+	else if (rawpkt[0] == HL_SERVERS && rawpkt[1] == 0x0d)
+	{
+		// 2 byte id + 4 byte sequence
+		memcpy(server->master_query_tag, rawpkt + 2, 3);
+		rawpkt += 6;
+		pktlen -= 6;
+	}
+	else if (rawpkt[0] == HL_SERVERS && rawpkt[1] == 0x0a)
+	{
+		// no sequence id for steam
+		// instead we use the ip:port of the last recieved server
+		struct in_addr *sin_addr = (struct in_addr*)(rawpkt + pktlen - 6);
+		char *ip = inet_ntoa(*sin_addr);
+		unsigned short port = htons(*((unsigned short*)(rawpkt + pktlen - 2)));
+
+		//fprintf( stderr, "NEXT IP=%s:%u\n", ip, port );
+		sprintf(server->master_query_tag, "%s:%u", ip, port);
+
+		// skip over the 2 byte id
+		rawpkt += 2;
+		pktlen -= 2;
+	}
+	else if (strncmp(rawpkt, "servers", 7) == 0)
+	{
+		rawpkt += 8;
+		pktlen -= 8;
+	}
+	else if (strncmp(rawpkt, "getserversResponse", 18) == 0)
+	{
+		rawpkt += 18;
+		pktlen -= 18;
+
+		for (; *rawpkt != '\\' && pktlen; pktlen--, rawpkt++){}
+
+		if (!pktlen)
+		{
+			return 1;
+		}
+		rawpkt++;
+		pktlen--;
+
+		debug( 2, "q3m pktlen %d lastchar %x\n", pktlen, (unsigned int)rawpkt[pktlen - 1]);
+
+		server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len + pktlen + 1);
+
+		if (server->type->id == STEF_MASTER)
+		{
+			ret = decode_stefmaster_packet(server, rawpkt, pktlen);
+		}
+		else
+		{
+			ret = decode_q3master_packet(server, rawpkt, pktlen);
+		}
+		debug( 2, "q3m %d servers\n", server->n_servers);
+
+		return ret;
+	}
+	else if (show_errors)
+	{
+		unsigned int ipaddr = ntohl(server->ipaddr);
+		fprintf(stderr, "Odd packet from QW master %d.%d.%d.%d, processing ...\n",
+			(ipaddr >> 24) &0xff,
+			(ipaddr >> 16) &0xff,
+			(ipaddr >>	8) &0xff,
+			ipaddr &0xff
+		);
+		print_packet(server, rawpkt, pktlen);
+	}
+
+	server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len + pktlen + 1);
+	rawpkt[pktlen] = '\0';
+	memcpy(server->master_pkt + server->master_pkt_len, rawpkt, pktlen + 1);
+	server->master_pkt_len += pktlen;
+
+	server->n_servers = server->master_pkt_len / 6;
+
+	if (server->type->flags &TF_MASTER_MULTI_RESPONSE)
+	{
+		server->next_player_info = - 1;
+		server->retry1 = 0;
+	}
+	else if (server->type->id == HL_MASTER)
+	{
+		if (server->master_query_tag[0] == 0 && server->master_query_tag[1] == 0 && server->master_query_tag[2] == 0)
+		{
+			// all done
+			server->server_name = MASTER;
+			bind_sockets();
+			ret = DONE_FORCE;
+		}
+		else
+		{
+			// more to come
+			server->retry1++;
+			send_qwmaster_request_packet(server);
+		}
+	}
+	else if (server->type->flags &TF_MASTER_STEAM)
+	{
+		// should the HL_MASTER be the same as this?
+		int i;
+		for (i = pktlen - 6; i < pktlen && 0x00 == rawpkt[i]; i++){}
+
+		if (i == pktlen)
+		{
+			// last 6 bytes where 0x00 so we have reached the last packet
+			server->n_servers--;
+			server->master_pkt_len -= 6;
+			server->server_name = MASTER;
+			bind_sockets();
+			ret = DONE_FORCE;
+		}
+		else
+		{
+			// more to come
+			server->retry1++;
+			send_qwmaster_request_packet(server);
 		}
 	}
-}
+	else
+	{
+		server->server_name = MASTER;
+		ret = DONE_AUTO;
+		bind_sockets();
+	}
 
-/* server starts sending data immediately, so we need not do anything */
-void
-send_bfris_request_packet( struct qserver *server)
-{
-	register_send( server );
+	return ret;
 }
 
-
-/* First packet for a normal Quake server
- */
-void
-send_qserver_request_packet( struct qserver *server)
+int decode_q3master_packet(struct qserver *server, char *pkt, int pktlen)
 {
+	char *p;
+	char *end = pkt + pktlen;
+	char *last = end - 6;
 
-	int rc = send_packet( server, server->type->status_packet, server->type->status_len );
+	pkt[pktlen] = 0;
+	p = pkt;
 
-    if ( rc == SOCKET_ERROR )
+	while ( p < last )
 	{
-		cleanup_qserver( server, 1 );
-    }
-}
-
-/* First packet for a QuakeWorld server
- */
-void
-send_qwserver_request_packet( struct qserver *server)
-{
-    int rc;
+		// IP & Port
+		memcpy(server->master_pkt + server->master_pkt_len, &p[0], 6);
+		server->master_pkt_len += 6;
+		p += 6;
+		// Sometimes we get some bad IP's so we search for the entry terminator '\' to avoid issues with this
+		while ( p < end && *p != '\\' )
+		{
+			p++;
+		}
 
-    if ( server->flags & FLAG_BROADCAST)
-	rc= send_broadcast( server, server->type->status_packet,
-		server->type->status_len);
-    else if ( server->server_name == NULL)
-	rc= send( server->fd, server->type->status_packet,
-		server->type->status_len, 0);
-    else if ( server->server_name != NULL && server->type->rule_packet)
-	rc= send( server->fd, server->type->rule_packet,
-		server->type->rule_len, 0);
-    else
-	rc= SOCKET_ERROR;
-
-    if ( rc == SOCKET_ERROR)  {
-	unsigned int ipaddr= ntohl(server->ipaddr);
-	fprintf( stderr,
-		"Error on %d.%d.%d.%d, skipping ...\n",
-		(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-		(ipaddr>>8)&0xff, ipaddr&0xff);
-	perror( "send");
-	cleanup_qserver( server, 1);
-	return;
-    }
-    if ( server->retry1 == n_retries || server->flags & FLAG_BROADCAST)  {
-	gettimeofday( &server->packet_time1, NULL);
-	server->n_requests++;
-    }
-    else if ( server->server_name == NULL)
-	server->n_retries++;
-    server->retry1--;
-    if ( server->server_name == NULL)
-	server->n_packets++;
-    server->next_player_info = NO_PLAYER_INFO; // we don't have a player packet
-}
+		if ( p < end )
+		{
+			// Skip over the '\'
+			p++;
+		}
 
-// First packet for an Unreal Tournament 2003 server
-void
-send_ut2003_request_packet( struct qserver *server)
-{
-    send_packet( server, server->type->status_packet, server->type->status_len );
-    server->next_player_info = NO_PLAYER_INFO;
-}
+		if ( *p && p + 3 == end && 0 == strncmp( "EOF", p, 3 ) )
+		{
+			// Last packet ID ( seen in COD4 )
+			server->n_servers = server->master_pkt_len / 6;
+			server->retry1 = 0; // received at least one packet so no need to retry
+			return DONE_FORCE;
+		}
+	}
 
-// First packet for an Half-Life 2 server
-void
-send_hl2_request_packet( struct qserver *server)
-{
-	send_packet( server, server->type->status_packet, server->type->status_len );
-}
+	server->n_servers = server->master_pkt_len / 6;
+	//  server->next_player_info= -1; evil, causes busy loop!
+	server->retry1 = 0; // received at least one packet so no need to retry
 
-/* First packet for an Unreal master
- */
-void
-send_unrealmaster_request_packet( struct qserver *server)
-{
-    send_packet( server, server->type->status_packet, server->type->status_len );
+	return INPROGRESS;
 }
 
-static const char* steam_region[] =
-{
-	"US East Coast",
-	"US West Coast",
-	"South America",
-	"Europe",
-	"Asia",
-	"Australia",
-	"Middle East",
-	"Africa",
-	NULL
-};
-
-char *
-build_hlmaster_packet( struct qserver *server, int *len)
+int decode_stefmaster_packet(struct qserver *server, char *pkt, int pktlen)
 {
-	static char packet[1600];
-	char *pkt, *r, *sep= "";
-	char *gamedir, *map, *flags;
-	int flen;
+	unsigned char *p, *m, *end;
+	unsigned int i, b;
 
-	pkt= &packet[0];
-	memcpy( pkt, server->type->master_packet, *len );
+	pkt[pktlen] = 0;
 
-	if ( server->type->flags & TF_MASTER_STEAM )
+	p = (unsigned char*)pkt;
+	m = (unsigned char*)server->master_pkt + server->master_pkt_len;
+	end = (unsigned char*) &pkt[pktlen - 12];
+	while (*p && p < end)
 	{
-		// default the region to 0xff
-		const char* regionstring = get_param_value( server, "region", NULL );
-		int region = 0xFF;
-		if(regionstring)
+		for (i = 6; i; i--)
 		{
-			char* tmp = NULL;
-			region = strtol( regionstring, &tmp, 10);
-			if(tmp == regionstring)
-			{
-				int i = 0;
-				region = 0xFF;
-				for(;steam_region[i]; ++i)
-				{
-					if(!strcmp(regionstring, steam_region[i]))
-					{
-						region = i;
-						break;
-					}
-				}
-			}
+			sscanf((char*)p, "%2x", &b);
+			p += 2;
+			*m++ = b;
+		}
+		server->master_pkt_len += 6;
+		while (*p && *p == '\\')
+		{
+			p++;
 		}
-		*(pkt+1) = region;
 	}
+	server->n_servers = server->master_pkt_len / 6;
+	server->next_player_info = - 1;
+	server->retry1 = 0;
 
-	pkt+= *len;
+	return 1;
+}
 
-	gamedir = get_param_value( server, "game", NULL);
-	if ( gamedir )
-	{
-		pkt+= sprintf( pkt, "\\gamedir\\%s", gamedir);
-	}
+/* Packet from Tribes master server
+ */
+int deal_with_tribesmaster_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	unsigned char *upkt = (unsigned char*)rawpkt;
+	int packet_number = upkt[2];
+	int n_packets = upkt[3];
+	unsigned char *p;
+	char *mpkt;
+	int len;
+	unsigned int ipaddr;
 
-	// not valid for steam?
-	map = get_param_value( server, "map", NULL);
-	if ( map )
-	{
-		pkt+= sprintf( pkt, "\\map\\%s", map);
-	}
+	debug( 2, "deal_with_tribesmaster_packet %p, %d", server, pktlen );
 
-	// not valid for steam?
-	flags= get_param_value( server, "status", NULL);
-	r= flags;
-	while ( flags && sep )
-	{
-		sep= strchr( r, ':');
-		if ( sep )
-			flen= sep-r;
-		else
-			flen= strlen( r);
-
-		if ( strncmp( r, "notempty", flen) == 0)
-			pkt+= sprintf( pkt, "\\empty\\1");
-		else if ( strncmp( r, "notfull", flen) == 0)
-			pkt+= sprintf( pkt, "\\full\\1");
-		else if ( strncmp( r, "dedicated", flen) == 0)
-		{
-			if ( server->type->flags & TF_MASTER_STEAM )
-				pkt+= sprintf( pkt, "\\type\\d");
-			else
-				pkt+= sprintf( pkt, "\\dedicated\\1");
-		}
-		else if ( strncmp( r, "linux", flen) == 0)
-			pkt+= sprintf( pkt, "\\linux\\1");
-		else if ( strncmp( r, "proxy", flen) == 0) // steam
-			pkt+= sprintf( pkt, "\\proxy\\1");
-		else if ( strncmp( r, "secure", flen) == 0) // steam
-			pkt+= sprintf( pkt, "\\secure\\1");
-		r= sep+1;
+	if (memcmp(rawpkt, tribes_master_response, sizeof(tribes_master_response)) != 0)
+	{
+		fprintf(stderr, "Odd packet from Tribes master server\n");
+		print_packet(server, rawpkt, pktlen);
 	}
 
-	// always need null terminator
-	*pkt = 0x00;
-	pkt++;
-
-	*len = pkt - packet;
+	/*	0x1006
+		01		packet number
+		08		# packets
+		02
+		0000
+		66
+		0d		length of following string
+		"Tribes Master"
+		3c		length of following string
+		"Check out the Starsiege demo now!   www.starsiegeplayers.com"
+		0035
+		06 d143 4764 812c
+		06 d1e2 8df3 616d
+		06 1804 6d50 616d
+		06 d81c 6dc0 616d
+	 */
+	/*	0x1006
+		02
+		08
+		02 0000
+		66
+		00 3f
+		06 cf88 344c 1227
+	 */
 
-	return packet;
-}
+	/* printf( "packet_number %d n_packets %d\n", packet_number, n_packets);
+	 */
 
-/* First packet for a QuakeWorld master server
- */
-void
-send_qwmaster_request_packet( struct qserver *server)
-{
-	int rc= 0;
+	len = upkt[8];
+	if (len > 0)
+	{
+		p = (unsigned char*)rawpkt + 9;
+		// printf( "%.*s\n", len, p);
+		p += len;
+		len = upkt[8+len + 1];
+		// printf( "%.*s\n", len, p+1);
+		p += len + 1;
+		p += 2;
+	}
+	else
+	{
+		p = (unsigned char*)rawpkt + 10;
+	}
 
-	server->next_player_info = NO_PLAYER_INFO;
+	if (server->master_pkt == NULL)
+	{
+		server->master_pkt = (char*)malloc(n_packets *64 * 6);
+		mpkt = server->master_pkt;
+	}
+	else
+	{
+		mpkt = server->master_pkt + server->n_servers *6;
+	}
 
-	if ( server->type->id == Q2_MASTER)
+	while ((char*)p < rawpkt + pktlen)
 	{
-		struct sockaddr_in addr;
-		addr.sin_family= AF_INET;
-		if ( no_port_offset || server->flags & TF_NO_PORT_OFFSET)
+		if (*p != 0x6)
 		{
-			addr.sin_port= htons(server->port);
+			printf("*p %u\n", (unsigned) *p);
+		}
+		memcpy(mpkt, p + 1, sizeof(ipaddr));
+		if (0)
+		{
+			mpkt[4] = p[5];
+			mpkt[5] = p[6];
 		}
 		else
 		{
-			addr.sin_port= htons((unsigned short)( server->port + server->type->port_offset ));
+			mpkt[5] = p[5];
+			mpkt[4] = p[6];
 		}
-		addr.sin_addr.s_addr= server->ipaddr;
-		memset( &(addr.sin_zero), 0, sizeof(addr.sin_zero));
-		rc= sendto( server->fd, server->type->master_packet,
-			server->type->master_len, 0,
-			(struct sockaddr *) &addr, sizeof(addr));
+		//printf( "%08x:%hu %u.%u.%u.%u:%hu\n", ipaddr, port, ipaddr>>24, (ipaddr>>16)&0xff, (ipaddr>>8)&0xff, ipaddr&0xff, port);
+		p += 7;
+		mpkt += 6;
+	}
+	/*
+	if ( (char*)p != rawpkt+pktlen)
+	printf( "%x %x\n", p, rawpkt+pktlen);
+	 */
+	server->master_pkt_len = mpkt - server->master_pkt;
+	server->n_servers = server->master_pkt_len / 6;
+	server->server_name = MASTER;
+	server->next_player_info = - 1;
+
+	if (packet_number >= n_packets)
+	{
+		return DONE_FORCE;
 	}
 	else
 	{
-		char *packet;
-		int packet_len;
-		char query_buf[4096] = {0};
-
-		packet= server->type->master_packet;
-		packet_len= server->type->master_len;
+		return DONE_AUTO;
+	}
+}
 
-		if ( server->type->id == HL_MASTER)
+char *display_tribes2_string_list(unsigned char *pkt)
+{
+	char *delim = "";
+	unsigned int count, len;
+	count = *pkt;
+	pkt++;
+	for (; count; count--)
+	{
+		len = *pkt;
+		pkt++;
+		if (len > 0)
 		{
-			memcpy( server->type->master_packet+1, server->master_query_tag, 3);
-			if ( server->query_arg)
+			if (raw_display)
 			{
-				packet_len = server->type->master_len;
-				packet= build_hlmaster_packet( server, &packet_len);
+				fprintf(OF, "%s%.*s", delim, (int)len, pkt);
+				delim = raw_delimiter;
 			}
-		}
-		else if ( server->type->flags & TF_MASTER_STEAM)
-		{
-			// region
-			int tag_len = strlen( server->master_query_tag );
-			if ( tag_len < 9 )
+			else
 			{
-				// initial case
-				tag_len = 9;
-				strcpy( server->master_query_tag, "0.0.0.0:0" );
+				fprintf(OF, "%.*s\n", (int)len, pkt);
 			}
+		}
+		pkt += len;
+	}
+	if (raw_display)
+	{
+		fputs("\n", OF);
+	}
+	return (char*)pkt;
+}
 
-			// 1 byte packet id
-			// 1 byte region
-			// ip:port
-			// 1 byte null
-			packet_len = 2 + tag_len + 1;
+int deal_with_tribes2master_packet(struct qserver *server, char *pkt, int pktlen)
+{
+	unsigned int n_servers, index, total, server_limit;
+	char *p, *mpkt;
 
-			if ( server->query_arg )
-			{
-				// build_hlmaster_packet uses server->type->master_packet
-				// as the basis so copy from server->master_query_tag
-				strcpy( server->type->master_packet+2, server->master_query_tag );
-				packet = build_hlmaster_packet( server, &packet_len );
-			}
-			else
-			{
-				// default region
-				*(packet + 1) = 0xff;
-				memcpy( packet+2, server->master_query_tag, tag_len );
+	debug( 2, "deal_with_tribes2master_packet %p, %d", server, pktlen );
 
-				// filter null
-				*(packet + packet_len ) = 0x00;
-				packet_len++;
-			}
+	if (pkt[0] == TRIBES2_RESPONSE_GAME_TYPES)
+	{
+		pkt += 6;
+		if (raw_display)
+		{
+			fprintf(OF, "%s%s%s%s", server->type->type_prefix, raw_delimiter, server->arg, raw_delimiter);
 		}
-		else if ( server->type->flags & TF_QUERY_ARG)
+		else
 		{
-			// fill in the master protocol details
-			char *master_protocol= server->query_arg;
-			if ( master_protocol == NULL)
-			{
-				master_protocol= server->type->master_protocol;
-			}
-			packet_len = sprintf( query_buf, server->type->master_packet,
-				master_protocol?master_protocol:"",
-				server->type->master_query?server->type->master_query:"");
-			packet = query_buf;
+			fprintf(OF, "Game Types\n");
+			fprintf(OF, "----------\n");
+		}
+		pkt = display_tribes2_string_list((unsigned char*)pkt);
+		if (raw_display)
+		{
+			fprintf(OF, "%s%s%s%s", server->type->type_prefix, raw_delimiter, server->arg, raw_delimiter);
+		}
+		else
+		{
+			fprintf(OF, "\nMission Types\n");
+			fprintf(OF, "-------------\n");
 		}
+		display_tribes2_string_list((unsigned char*)pkt);
 
-		rc= send( server->fd, packet, packet_len, 0);
+		server->master_pkt_len = 0;
+		server->n_servers = 0;
+		server->server_name = MASTER;
+		server->next_player_info = - 1;
+		return DONE_FORCE;
 	}
 
-	if ( rc == SOCKET_ERROR)
+	if (pkt[0] != TRIBES2_RESPONSE_MASTER)
 	{
-		perror( "send");
+		/* error */
+		return PKT_ERROR;
 	}
 
-	if ( server->retry1 == n_retries)
+	server_limit = get_param_ui_value(server, "limit", ~0);
+
+	n_servers = little_endian ? *(unsigned short*)(pkt + 8): swap_short(pkt + 8);
+	index = *(unsigned char*)(pkt + 6);
+	total = *(unsigned char*)(pkt + 7);
+	if (server->master_pkt == NULL)
 	{
-		gettimeofday( &server->packet_time1, NULL);
-		server->n_requests++;
+		server->master_pkt = (char*)malloc(total *n_servers * 6);
+		mpkt = server->master_pkt;
 	}
 	else
 	{
-		server->n_retries++;
+		mpkt = server->master_pkt + server->n_servers *6;
 	}
-	server->retry1--;
-	server->n_packets++;
-}
 
-void
-send_tribes_request_packet( struct qserver *server )
-{
-	send_packet( server, server->type->player_packet, server->type->player_len );
+	p = pkt + 10;
+	for (; n_servers && ((char*)mpkt - server->master_pkt) / 6 < server_limit; n_servers--, p += 6, mpkt += 6)
+	{
+		memcpy(mpkt, p, 4);
+		mpkt[4] = p[5];
+		mpkt[5] = p[4];
+	}
+	server->master_pkt_len = (char*)mpkt - server->master_pkt;
+	server->n_servers = server->master_pkt_len / 6;
+	server->server_name = MASTER;
+	server->next_player_info = - 1;
+
+	if (index >= total - 1 || server->n_servers >= server_limit)
+	{
+		return PKT_ERROR;
+	}
+
+	return DONE_AUTO;
 }
 
-void
-send_tribes2_request_packet( struct qserver *server )
+int server_info_packet(struct qserver *server, struct q_packet *pkt, int datalen)
 {
-    int rc;
+	int off = 0;
 
-    if ( server->flags & FLAG_BROADCAST && server->server_name == NULL)
-	rc= send_broadcast( server, server->type->status_packet,
-		server->type->status_len);
-    else if ( server->server_name == NULL)
-	rc= send( server->fd, server->type->status_packet,
-		server->type->status_len, 0);
-    else
-	rc= send( server->fd, server->type->player_packet,
-		server->type->player_len, 0);
+	/* ignore duplicate packets */
+	if (server->server_name != NULL)
+	{
+		return 0;
+	}
 
-    if ( rc == SOCKET_ERROR)
-	perror( "send");
+	server->address = strdup((char*) &pkt->data[off]);
+	off += strlen(server->address) + 1;
+	if (off >= datalen)
+	{
+		return -1;
+	}
 
-	register_send( server );
-}
+	server->server_name = strdup((char*) &pkt->data[off]);
+	off += strlen(server->server_name) + 1;
+	if (off >= datalen)
+	{
+		return -1;
+	}
 
-void
-send_ghostrecon_request_packet( struct qserver *server)
-{
-	send_packet( server, server->type->status_packet, server->type->status_len );
-}
+	server->map_name = strdup((char*) &pkt->data[off]);
+	off += strlen(server->map_name) + 1;
+	if (off > datalen)
+	{
+		return -1;
+	}
 
-void
-send_eye_request_packet( struct qserver *server)
-{
-	send_packet( server, server->type->status_packet, server->type->status_len );
+	server->num_players = pkt->data[off++];
+	server->max_players = pkt->data[off++];
+	server->protocol_version = pkt->data[off++];
+
+	server->retry1 = n_retries;
+
+	if (get_server_rules)
+	{
+		send_rule_request_packet(server);
+	}
+	if (get_player_info)
+	{
+		send_player_request_packet(server);
+	}
+
+	return 0;
 }
 
-void
-send_ravenshield_request_packet( struct qserver *server)
+int player_info_packet(struct qserver *server, struct q_packet *pkt, int datalen)
 {
-	send_packet( server, server->type->status_packet, server->type->status_len );
+	char *name, *address;
+	int off, colors, frags, connect_time, player_number;
+	struct player *player, *last;
+
+	off = 0;
+	player_number = pkt->data[off++];
+	name = (char*) &pkt->data[off];
+	off += strlen(name) + 1;
+	if (off >= datalen)
+	{
+		return -1;
+	}
+
+	colors = pkt->data[off + 3];
+	colors = (colors << 8) + pkt->data[off + 2];
+	colors = (colors << 8) + pkt->data[off + 1];
+	colors = (colors << 8) + pkt->data[off];
+	off += sizeof(colors);
+
+	frags = pkt->data[off + 3];
+	frags = (frags << 8) + pkt->data[off + 2];
+	frags = (frags << 8) + pkt->data[off + 1];
+	frags = (frags << 8) + pkt->data[off];
+	off += sizeof(frags);
+
+	connect_time = pkt->data[off + 3];
+	connect_time = (connect_time << 8) + pkt->data[off + 2];
+	connect_time = (connect_time << 8) + pkt->data[off + 1];
+	connect_time = (connect_time << 8) + pkt->data[off];
+	off += sizeof(connect_time);
+
+	address = (char*) &pkt->data[off];
+	off += strlen(address) + 1;
+	if (off > datalen)
+	{
+		return -1;
+	}
+
+	last = server->players;
+	while (last != NULL && last->next != NULL)
+	{
+		if (last->number == player_number)
+		{
+			return 0;
+		}
+		last = last->next;
+	}
+
+	if (last != NULL && last->number == player_number)
+	{
+		return 0;
+	}
+
+	player = (struct player*)calloc(1, sizeof(struct player));
+	player->number = player_number;
+	player->name = strdup(name);
+	player->address = strdup(address);
+	player->connect_time = connect_time;
+	player->frags = frags;
+	player->shirt_color = colors >> 4;
+	player->pants_color = colors &0xf;
+	player->next = NULL;
+
+	if (last == NULL)
+	{
+		server->players = player;
+	}
+	else
+	{
+		last->next = player;
+	}
+
+	server->next_player_info++;
+	server->retry2 = n_retries;
+	if (server->next_player_info < server->num_players)
+	{
+		send_player_request_packet(server);
+	}
+
+	return 0;
 }
 
-void
-send_savage_request_packet( struct qserver *server)
+int rule_info_packet(struct qserver *server, struct q_packet *pkt, int datalen)
 {
-	int len;
-	char* pkt;
+	int off = 0;
+	struct rule *rule, *last;
+	char *name, *value;
 
-	if ( get_player_info )
+	/* Straggler packet after we've already given up fetching rules */
+	if (server->next_rule == NULL)
 	{
-		pkt = server->type->player_packet;
-		len = server->type->player_len;
+		return 0;
 	}
-	else
+
+	if (ntohs(pkt->length) == Q_HEADER_LEN)
+	{
+		server->next_rule = NULL;
+		return 0;
+	}
+
+	name = (char*) &pkt->data[off];
+	off += strlen(name) + 1;
+	if (off >= datalen)
+	{
+		return -1;
+	}
+
+	value = (char*) &pkt->data[off];
+	off += strlen(value) + 1;
+	if (off > datalen)
+	{
+		return -1;
+	}
+
+	last = server->rules;
+	while (last != NULL && last->next != NULL)
+	{
+		if (strcmp(last->name, name) == 0)
+		{
+			return 0;
+		}
+		last = last->next;
+	}
+	if (last != NULL && strcmp(last->name, name) == 0)
 	{
-		pkt = server->type->status_packet;
-		len = server->type->status_len;
+		return 0;
 	}
 
-	send_packet( server, pkt, len );
-}
-
-void
-send_farcry_request_packet( struct qserver *server)
-{
-	int len;
-	char* pkt;
+	rule = (struct rule*)malloc(sizeof(struct rule));
+	rule->name = strdup(name);
+	rule->value = strdup(value);
+	rule->next = NULL;
 
-	if ( get_player_info )
+	if (last == NULL)
 	{
-		pkt = server->type->player_packet;
-		len = server->type->player_len;
+		server->rules = rule;
 	}
 	else
 	{
-		pkt = server->type->status_packet;
-		len = server->type->status_len;
+		last->next = rule;
 	}
 
-    send_packet( server, pkt, len );
-}
-
-void
-send_tribes2master_request_packet( struct qserver *server)
-{
-    int rc;
-    unsigned char packet[1600], *pkt;
-    unsigned int len, min_players, max_players, region_mask=0;
-    unsigned int build_version, max_bots, min_cpu, status;
-    char *game, *mission, *buddies;
-    static char *region_list[]= { "naeast", "nawest", "sa", "aus", "asia", "eur", NULL };
-    static char *status_list[]= { "dedicated", "nopassword", "linux" };
-
-    if ( strcmp( get_param_value( server, "query", ""), "types") == 0)  {
-	rc= send( server->fd, tribes2_game_types_request,
-		sizeof(tribes2_game_types_request), 0);
-	goto send_done;
-    }
-
-    memcpy( packet, server->type->master_packet, server->type->master_len);
-
-    pkt= packet + 7;
-
-    game= get_param_value( server, "game", "any");
-    len= strlen(game);
-    if ( len > 255) len= 255;
-    *pkt++= len;
-    memcpy( pkt, game, len);
-    pkt+= len;
-
-    mission= get_param_value( server, "mission", "any");
-    len= strlen(mission);
-    if ( len > 255) len= 255;
-    *pkt++= len;
-    memcpy( pkt, mission, len);
-    pkt+= len;
-
-    min_players= get_param_ui_value( server, "minplayers", 0);
-    max_players= get_param_ui_value( server, "maxplayers", 255);
-    *pkt++= min_players;
-    *pkt++= max_players;
-
-    region_mask= get_param_ui_value( server, "regions", 0xffffffff);
-    if ( region_mask == 0)  {
-	char *regions= get_param_value( server, "regions", "");
-	char *r= regions;
-	char **list, *sep;
-	do  {
-	    sep= strchr( r, ':');
-	    if ( sep)
-		len= sep-r;
-	    else
-		len= strlen( r);
-	    for ( list= region_list; *list; list++)
-		if ( strncasecmp( r, *list, len) == 0)
-		    break;
-	    if ( *list)
-		region_mask|= 1<<(list-region_list);
-	    r= sep+1;
-	} while ( sep);
-    }
-    if ( little_endian)
-	memcpy( pkt, &region_mask, 4);
-    else  {
-    	pkt[0]= region_mask&0xff;
-    	pkt[1]= (region_mask>>8)&0xff;
-    	pkt[2]= (region_mask>>16)&0xff;
-    	pkt[3]= (region_mask>>24)&0xff;
-    }
-    pkt+= 4;
-
-    build_version= get_param_ui_value( server, "build", 0);
-/*
-    if ( build_version && build_version < 22337)  {
-	packet[1]= 0;
-	build_version= 0;
-    }
-*/
-    if ( little_endian)
-	memcpy( pkt, &build_version, 4);
-    else  {
-    	pkt[0]= build_version&0xff;
-    	pkt[1]= (build_version>>8)&0xff;
-    	pkt[2]= (build_version>>16)&0xff;
-    	pkt[3]= (build_version>>24)&0xff;
-    }
-    pkt+= 4;
-
-    status= get_param_ui_value( server, "status", -1);
-    if ( status == 0)  {
-	char *flags= get_param_value( server, "status", "");
-	char *r= flags;
-	char **list, *sep;
-	do  {
-	    sep= strchr( r, ':');
-	    if ( sep)
-		len= sep-r;
-	    else
-		len= strlen( r);
-	    for ( list= status_list; *list; list++)
-		if ( strncasecmp( r, *list, len) == 0)
-		    break;
-	    if ( *list)
-		status|= 1<<(list-status_list);
-	    r= sep+1;
-	} while ( sep);
-    }
-    else if ( status == -1)
-	status= 0;
-    *pkt++= status;
-
-    max_bots= get_param_ui_value( server, "maxbots", 255);
-    *pkt++= max_bots;
-
-    min_cpu= get_param_ui_value( server, "mincpu", 0);
-    if ( little_endian)
-	memcpy( pkt, &min_cpu, 2);
-    else  {
-    	pkt[0]= min_cpu&0xff;
-    	pkt[1]= (min_cpu>>8)&0xff;
-    }
-    pkt+= 2;
-
-    buddies= get_param_value( server, "buddies", NULL);
-    if ( buddies)  {
-	char *b= buddies, *sep;
-	unsigned int buddy, n_buddies= 0;
-	unsigned char *n_loc= pkt++;
-	do  {
-	    sep= strchr( b, ':');
-	    if ( sscanf( b, "%u", &buddy))  {
-		n_buddies++;
-		if ( little_endian)
-		    memcpy( pkt, &buddy, 4);
-		else  {
-		    pkt[0]= buddy&0xff;
-		    pkt[1]= (buddy>>8)&0xff;
-		    pkt[2]= (buddy>>16)&0xff;
-		    pkt[3]= (buddy>>24)&0xff;
-		}
-		pkt+= 4;
-	    }
-	    b= sep+1;
-	} while ( sep && n_buddies < 255);
-	*n_loc= n_buddies;
-    }
-    else
-	*pkt++= 0;
-
-    rc= send( server->fd, (char*)packet, pkt-packet, 0);
-
-send_done:
-    if ( rc == SOCKET_ERROR)
-	perror( "send");
-    if ( server->retry1 == n_retries)  {
-	gettimeofday( &server->packet_time1, NULL);
-	server->n_requests++;
-    }
-    else
-	server->n_retries++;
-    server->retry1--;
-    server->n_packets++;
-}
-
-static struct _gamespy_query_map  {
-    char *qstat_type;
-    char *gamespy_type;
-} gamespy_query_map[] = {
-    { "qws", "quakeworld" },
-    { "q2s", "quake2" },
-    { "q3s", "quake3" },
-    { "tbs", "tribes" },
-    { "uns", "ut" },
-    { "sgs", "shogo" },
-    { "hls", "halflife" },
-    { "kps", "kingpin" },
-    { "hrs", "heretic2" },
-    { "sfs", "sofretail" },
-    { NULL, NULL }
-};
-
-void
-send_gamespy_master_request( struct qserver *server)
-{
-    int rc, i;
-    char request[1024];
-
-    if ( server->n_packets)
-	return;
-
-    rc= send( server->fd, server->type->master_packet,
-	server->type->master_len, 0);
-    if ( rc != server->type->master_len)
-	perror( "send");
-
-    strcpy( request, server->type->status_packet);
-
-    for ( i= 0; gamespy_query_map[i].qstat_type; i++)
-	if ( strcasecmp( server->query_arg, gamespy_query_map[i].qstat_type) == 0)
-	    break;
-    if ( gamespy_query_map[i].gamespy_type == NULL)
-	strcat( request, server->query_arg);
-    else
-	strcat( request, gamespy_query_map[i].gamespy_type);
-    strcat(request, "\\final\\");
-    assert(strlen(request) < sizeof(request));
-
-    rc= send( server->fd, request, strlen( request), 0);
-    if ( rc != strlen( request))
-	perror( "send");
-
-    if ( server->retry1 == n_retries)  {
-	gettimeofday( &server->packet_time1, NULL);
-	server->n_requests++;
-    }
-    server->n_packets++;
-}
-
-void
-send_rule_request_packet( struct qserver *server)
-{
-    int rc, len;
-
-    debug(3, "%p", server);
-
-    /* Server created via broadcast, so bind it */
-    if ( server->fd == -1)  {
-	if ( bind_qserver( server) < 0)
-	    goto setup_retry;
-    }
-
-    if(server->type->rule_query_func && server->type->rule_query_func != send_rule_request_packet)
-    {
-	server->type->rule_query_func(server);
-	return;
-    }
-
-    if ( server->type->id == Q_SERVER)  {
-	strcpy( (char*)q_rule.data, server->next_rule);
-	len= Q_HEADER_LEN + strlen((char*)q_rule.data) + 1;
-	q_rule.length= htons( (short)len);
-    }
-    else
-	len= server->type->rule_len;
-
-    rc= send( server->fd, (const char *) server->type->rule_packet, len, 0);
-    if ( rc == SOCKET_ERROR)
-	perror( "send");
+	server->n_rules++;
+	server->next_rule = rule->name;
+	server->retry1 = n_retries;
+	send_rule_request_packet(server);
 
-setup_retry:
-    if ( server->retry1 == n_retries)  {
-	gettimeofday( &server->packet_time1, NULL);
-	server->n_requests++;
-    }
-    else if ( server->server_name == NULL)
-	server->n_retries++;
-    server->retry1--;
-    if ( server->server_name == NULL)
-	server->n_packets++;
+	return 0;
 }
 
-void
-send_player_request_packet( struct qserver *server)
+struct info *player_add_info(struct player *player, char *key, char *value, int flags)
 {
-    int rc;
-
-    if(!server->type->player_packet)
-	return;
-
-    /* Server created via broadcast, so bind it */
-    if ( server->fd == -1)  {
-	if ( bind_qserver( server) < 0)
-	    goto setup_retry;
-    }
-
-    if(server->type->player_query_func && server->type->player_query_func != send_player_request_packet)
-    {
-	server->type->player_query_func(server);
-	return;
-    }
-
-    if(!server->type->player_packet)
-    {
-	debug(0, "error: server %p has no player_packet", server);
-	return;
-    }
-
-    if ( server->type->id == Q_SERVER)
-	q_player.data[0]= server->next_player_info;
-    rc= send( server->fd, (const char *) server->type->player_packet,
-	server->type->player_len, 0);
-    if ( rc == SOCKET_ERROR)
-	perror( "send");
-
-setup_retry:
-    if ( server->retry2 == n_retries)  {
-	gettimeofday( &server->packet_time2, NULL);
-	server->n_requests++;
-    }
-    else
-	server->n_retries++;
-    server->retry2--;
-    server->n_packets++;
-}
+	struct info *info;
+	if ( flags & OVERWITE_DUPLICATES )
+	{
+		for (info = player->info; info; info = info->next)
+		{
+			if (0 == strcmp(info->name, key))
+			{
+				// We should be able to free this
+				free(info->value);
+				if ( flags & NO_VALUE_COPY )
+				{
+					info->value = value;
+				}
+				else
+				{
+					info->value = strdup(value);
+				}
 
-void qserver_disconnect(struct qserver* server)
-{
-#ifdef _WIN32
-    int i;
-#endif
-    if ( server->fd != -1)  {
-	close( server->fd);
-#ifndef _WIN32
-	connmap[server->fd]= NULL;
-#else
-	for ( i= 0; i < max_connmap; i++)  {
-	    if ( connmap[i] == server)  {
-		connmap[i]= NULL;
-		break;
-	    }
+				return info;
+			}
+		}
 	}
-#endif
-	server->fd= -1;
-	connected--;
-    }
-}
 
-/* Functions for figuring timeouts and when to give up
- * Returns 1 if the query is done (server may be freed) and 0 if not.
- */
-int
-cleanup_qserver( struct qserver *server, int force )
-{
-	int close_it = force;
-	if ( server->server_name == NULL)
+	if ( flags & CHECK_DUPLICATE_RULES )
 	{
-		close_it = 1;
-		if ( server->type->id & MASTER_SERVER && server->master_pkt != NULL)
+		for (info = player->info; info; info = info->next)
 		{
-			server->server_name = MASTER;
+			if (0 == strcmp(info->name, key))
+			{
+				return NULL;
+			}
 		}
-		else
+	}
+
+	if ( flags & COMBINE_VALUES )
+	{
+		for (info = player->info; info; info = info->next)
 		{
-			server->server_name = TIMEOUT;
-			num_servers_timed_out++;
+			if (0 == strcmp(info->name, key))
+			{
+				char *full_value = (char*)calloc(sizeof(char), strlen(info->value) + strlen(value) + 2);
+				if (NULL == full_value)
+				{
+					fprintf(stderr, "Failed to malloc combined value\n");
+					exit(1);
+				}
+				sprintf(full_value, "%s%s%s", info->value, multi_delimiter, value);
+
+				// We should be able to free this
+				free(info->value);
+				info->value = full_value;
+
+
+				return info;
+			}
 		}
 	}
-	else if ( server->type->flags & TF_SINGLE_QUERY )
+
+	info = (struct info*)malloc(sizeof(struct info));
+	if ( flags & NO_KEY_COPY )
 	{
-		close_it = 1;
+		info->name = key;
 	}
-	else if (
-		server->next_rule == NO_SERVER_RULES &&
-		server->next_player_info >= server->num_players
-	)
+	else
 	{
-		close_it = 1;
+		info->name = strdup(key);
+	}
+	if ( flags & NO_VALUE_COPY )
+	{
+		info->value = value;
 	}
+	else
+	{
+		info->value = strdup(value);
+	}
+	info->next = NULL;
+
+	if (NULL == player->info)
+	{
+		player->info = info;
+	}
+	else
+	{
+		*player->last_info = info;
+	}
+	player->last_info = &info->next;
+	player->n_info++;
 
-	debug( 3, "close_it %d", close_it );
-	if ( close_it )
+	return info;
+}
+
+struct rule *add_rule(struct qserver *server, char *key, char *value, int flags)
+{
+	struct rule *rule;
+	if ( flags & OVERWITE_DUPLICATES )
 	{
-		if ( server->saved_data.data)
+		for (rule = server->rules; rule; rule = rule->next)
 		{
-			SavedData *sdata= server->saved_data.next;
-			free(server->saved_data.data);
-			server->saved_data.data= NULL;
-			while ( sdata != NULL)
+			if ( 0 == strcmp( rule->name, key) )
 			{
-				SavedData *next;
-				free(sdata->data);
-				next= sdata->next;
-				free(sdata);
-				sdata= next;
+				// We should be able to free this
+				free(rule->value);
+				if ( flags & NO_VALUE_COPY )
+				{
+					rule->value = value;
+				}
+				else
+				{
+					rule->value = strdup(value);
+				}
+
+				return rule;
 			}
-			server->saved_data.next= NULL;
 		}
+	}
 
-		qserver_disconnect(server);
-
-		if ( server->server_name != TIMEOUT)
+	if ( flags & CHECK_DUPLICATE_RULES )
+	{
+		for (rule = server->rules; rule; rule = rule->next)
 		{
-			num_servers_returned++;
-			if ( server->server_name != DOWN)
+			if (0 == strcmp(rule->name, key))
 			{
-				num_players_total+= server->num_players;
-				max_players_total+= server->max_players;
+				return NULL;
 			}
 		}
-		if ( server->server_name == TIMEOUT || server->server_name == DOWN)
-		{
-			server->ping_total= 999999;
-		}
-		if ( server->type->master)
+	}
+
+	if ( flags & COMBINE_VALUES )
+	{
+		for (rule = server->rules; rule; rule = rule->next)
 		{
-			waiting_for_masters--;
-			if ( waiting_for_masters == 0)
+			if (0 == strcmp(rule->name, key))
 			{
-				add_servers_from_masters();
+				char *full_value = (char*)calloc(sizeof(char), strlen(rule->value) + strlen(value) + strlen(multi_delimiter) + 1);
+				if (NULL == full_value)
+				{
+					fprintf(stderr, "Failed to malloc combined value\n");
+					exit(1);
+				}
+				sprintf(full_value, "%s%s%s", rule->value, multi_delimiter, value);
+
+				// We should be able to free this
+				free(rule->value);
+				rule->value = full_value;
+
+				return rule;
 			}
 		}
-		if ( ! server_sort)
-		{
-			display_server( server);
-		}
-		return 1;
 	}
-	return 0;
-}
-
-/** must be called only on connected servers
- * @returns time in ms until server needs timeout handling. timeout handling is needed if <= zero
- */
-static int qserver_get_timeout(struct qserver* server, struct timeval* now)
-{
-	int diff, diff1, diff2, interval;
 
-	if ( server->type->id & MASTER_SERVER)
-		interval= master_retry_interval;
+	rule = (struct rule*)malloc(sizeof(struct rule));
+	if ( flags & NO_KEY_COPY )
+	{
+		rule->name = key;
+	}
 	else
-		interval= retry_interval;
-
-	diff2= 0xffff;
-
-	diff1= interval*(n_retries-server->retry1+1) -
-		time_delta( now, &server->packet_time1);
-
-	if (server->next_player_info < server->num_players)
 	{
-		diff2= interval*(n_retries-server->retry2+1) -
-			time_delta( now, &server->packet_time2);
+		rule->name = strdup(key);
 	}
 
-	debug(2, "timeout for %p is diff1 %d diff2 %d", server, diff1, diff2);
-
-
-	diff= (diff1<diff2)?diff1:diff2;
+	if ( flags &NO_VALUE_COPY )
+	{
+		rule->value = value;
+	}
+	else
+	{
+		rule->value = strdup(value);
+	}
+	rule->next = NULL;
+	*server->last_rule = rule;
+	server->last_rule = &rule->next;
+	server->n_rules++;
 
-	return diff;
+	return rule;
 }
 
-void
-get_next_timeout( struct timeval *timeout)
+void add_nrule(struct qserver *server, char *key, char *value, int len)
 {
-    struct qserver *server= servers;
-    struct timeval now;
-    int diff, smallest= retry_interval+master_retry_interval;
-    int bind_count= 0;
-
-    if ( first_server_bind == NULL)
-	first_server_bind= servers;
-
-    server= first_server_bind;
-
-    for ( ; server != NULL && server->fd == -1; server= server->next)
-	;
-
-    /* if there are unconnected servers and slots left we retry in 10ms */
-    if ( server == NULL || (num_servers > connected && connected < max_simultaneous))  {
-	timeout->tv_sec= 0;
-	timeout->tv_usec= 10 * 1000;
-	return;
-    }
-    first_server_bind= server;
-
-    gettimeofday( &now, NULL);
-    for ( ; server != NULL && bind_count < connected; server= server->next)  {
-	if ( server->fd == -1)
-	    continue;
-
-	diff = qserver_get_timeout(server, &now);
-	if ( diff < smallest)
-	    smallest= diff;
-	bind_count++;
-    }
-
-    if ( smallest < 10)
-	smallest= 10;
+	struct rule *rule;
+	for (rule = server->rules; rule; rule = rule->next)
+	if (strcmp(rule->name, key) == 0)
+	{
+		return ;
+	}
 
-    timeout->tv_sec= smallest / 1000;
-    timeout->tv_usec= (smallest % 1000) * 1000;
+	rule = (struct rule*)malloc(sizeof(struct rule));
+	rule->name = strdup(key);
+	rule->value = strndup(value, len);
+	rule->next = NULL;
+	*server->last_rule = rule;
+	server->last_rule = &rule->next;
+	server->n_rules++;
 }
 
-
-#ifdef USE_SELECT
-static fd_set select_read_fds;
-static int select_maxfd;
-static int select_cursor;
-
-int
-set_fds( fd_set *fds)
+struct player *add_player(struct qserver *server, int player_number)
 {
-	int maxfd= -1, i;
+	struct player *player;
 
-	for ( i= 0; i < max_connmap; i++)
+	for (player = server->players; player; player = player->next)
 	{
-		if ( connmap[i] != NULL)
+		if (player->number == player_number)
 		{
-			FD_SET( connmap[i]->fd, fds);
-			if ( connmap[i]->fd > maxfd)
-			{
-				maxfd= connmap[i]->fd;
-			}
+			return NULL;
 		}
 	}
 
-	return maxfd;
-}
-
-void
-set_file_descriptors()
-{
-    FD_ZERO( &select_read_fds);
-    select_maxfd= set_fds( &select_read_fds);
+	player = (struct player*)calloc(1, sizeof(struct player));
+	player->number = player_number;
+	player->next = server->players;
+	player->n_info = 0;
+	player->score = NA_INT;
+	player->deaths = NA_INT;
+	player->frags = NA_INT;
+	player->last_info = NULL;
+	server->players = player;
+	server->n_player_info++;
+	return player;
 }
 
-int
-wait_for_file_descriptors( struct timeval *timeout)
+STATIC struct player *get_player_by_number(struct qserver *server, int player_number)
 {
-    select_cursor= 0;
-    return select( select_maxfd+1, &select_read_fds, NULL, NULL, timeout);
+	struct player *player;
+	for (player = server->players; player; player = player->next)
+	if (player->number == player_number)
+	{
+		return player;
+	} return NULL;
 }
 
-struct qserver *
-get_next_ready_server()
+// Updates a servers port information.
+// Sets the rules:
+// _queryport <queryport>
+// hostport <port>
+void change_server_port(struct qserver *server, unsigned short port, int force)
 {
-	while ( select_cursor < max_connmap &&
-		( connmap[select_cursor] == NULL ||
-		! FD_ISSET( connmap[select_cursor]->fd, &select_read_fds)) )
+	if (port > 0 && port != server->port)
 	{
-		select_cursor++;
-	}
-	if ( select_cursor >= max_connmap)
-		return NULL;
-	return connmap[select_cursor++];
-}
+		// valid port and changing
+		char arg[64];
+		unsigned int ipaddr = ntohl(server->ipaddr);
 
-int
-wait_for_timeout( unsigned int ms)
-{
-    struct timeval timeout;
-    timeout.tv_sec= ms/1000;
-    timeout.tv_usec= (ms%1000) * 1000;
-    return select( 0, 0, NULL, NULL, &timeout);
-}
+		// Update the servers hostname as required
+		sprintf(arg, "%d.%d.%d.%d:%hu", ipaddr >> 24, (ipaddr >> 16) &0xff, (ipaddr >> 8) &0xff, ipaddr &0xff, port);
 
-#endif /* USE_SELECT */
+		if (show_game_port || force || server->flags &TF_SHOW_GAME_PORT)
+		{
+			// Update the server arg
+			free(server->arg);
+			server->arg = strdup(arg);
 
-#ifdef USE_POLL
-static struct pollfd *pollfds;
-static int n_pollfds;
-static int max_pollfds= 0;
-static int poll_cursor;
+			// Add a rule noting the previous query port
+			sprintf(arg, "%hu", server->port);
+			add_rule(server, "_queryport", arg, NO_FLAGS);
 
-void
-set_file_descriptors()
-{
-    struct pollfd *p;
-    int i;
+			// Update the servers port
+			server->port = port;
+		}
 
-    if ( max_connmap > max_pollfds)  {
-	max_pollfds= max_connmap;
-	pollfds= (struct pollfd *) realloc( pollfds, max_pollfds *
-		sizeof(struct pollfd));
-    }
+		if ( 0 != strcmp(server->arg, server->host_name) )
+		{
+			// hostname isnt the query arg
+			char *colon = strchr(server->host_name, ':');
+			// dns hostname or hostname:port
+			char *hostname = malloc( strlen(server->host_name) + 7 );
+			if ( NULL == hostname )
+			{
+				fprintf(stderr, "Failed to malloc hostname memory\n");
+			}
+			else
+			{
+				if (colon)
+				{
+					*colon = '\0';
+				}
+				sprintf(hostname, "%s:%hu", server->host_name, port);
+				free(server->host_name);
+				server->host_name = hostname;
+			}
+		}
 
-    p= pollfds;
-    for ( i= 0; i < max_connmap; i++)
-	if ( connmap[i] != NULL)  {
-	    p->fd= connmap[i]->fd;
-	    p->events= POLLIN;
-	    p->revents= 0;
-	    p++;
+		// Add a rule noting the servers hostport
+		sprintf(arg, "%hu", port);
+		add_rule(server, "hostport", arg, OVERWITE_DUPLICATES);
 	}
-    n_pollfds= p - pollfds;
 }
 
-int
-wait_for_file_descriptors( struct timeval *timeout)
+STATIC void players_set_teamname(struct qserver *server, int teamid, char *teamname)
 {
-    poll_cursor= 0;
-    return poll( pollfds, n_pollfds, timeout->tv_sec*1000 + timeout->tv_usec/1000);
+	struct player *player;
+	for (player = server->players; player; player = player->next)
+	{
+		if (player->team == teamid)
+		{
+			player->team_name = strdup(teamname);
+		}
+	}
 }
 
-struct qserver *
-get_next_ready_server()
+STATIC char *dup_nstring(const char *pkt, const char *end, char **next)
 {
-    for ( ; poll_cursor < n_pollfds; poll_cursor++)
+	char *pt = (char*)pkt;
+	int len = ((unsigned char*)pkt)[0];
+	pt++;
+	if (*pt == '\1')
 	{
-		if ( pollfds[ poll_cursor].revents)
-			break;
+		len++;
 	}
-    if ( poll_cursor >= n_pollfds)
+	if (pt + len > end)
+	{
 		return NULL;
-    return connmap[pollfds[poll_cursor++].fd];
+	}
+
+	*next = pt + len;
+	return strndup(pt, len);
 }
 
-int
-wait_for_timeout( unsigned int ms)
+STATIC char *dup_n1string(char *pkt, char *end, char **next)
 {
-    return poll( 0, 0, ms);
-}
+	unsigned len;
 
-#endif /* USE_POLL */
+	if (!pkt || pkt >= end)
+	{
+		return NULL;
+	}
+
+	len = (unsigned char)pkt[0] - 1;
+	pkt++;
+	if (pkt + len > end)
+	{
+		return NULL;
+	}
 
+	*next = pkt + len;
+	return strndup(pkt, len);
+}
 
-void
-free_server( struct qserver *server)
+STATIC int pariah_basic_packet(struct qserver *server, char *rawpkt, char *end)
 {
-    struct player *player, *next_player;
-    struct rule *rule, *next_rule;
-
-    /* remove from servers list */
-    if ( server == servers)  {
-	servers= server->next;
-	if ( servers)
-	    servers->prev= NULL;
-    }
-    if ( (void*) &server->next == (void*) last_server)  {
-	if ( server->prev)
-	    last_server= & server->prev->next;
-	else
-	    last_server= & servers;
-    }
-    if ( server == first_server_bind)
-	first_server_bind= server->next;
-    if ( server == last_server_bind)
-	last_server_bind= server->next;
-
-    if ( server->prev)
-	server->prev->next= server->next;
-    if ( server->next)
-	server->next->prev= server->prev;
-
-    /* remove from server hash table */
-    remove_server_from_hash( server);
-
-    /* free all the data */
-    for ( player= server->players; player; player= next_player)  {
-	next_player= player->next;
-	free_player( player);
-    }
-
-    for ( rule= server->rules; rule; rule= next_rule)  {
-	next_rule= rule->next;
-	free_rule( rule);
-    }
-
-    if ( server->arg) free( server->arg);
-    if ( server->host_name) free( server->host_name);
-    if ( server->error) free( server->error);
-    if ( server->address) free( server->address);
-    if ( server->map_name) free( server->map_name);
-    if ( !(server->flags&FLAG_DO_NOT_FREE_GAME) && server->game)
-	free(server->game);
-    if ( server->master_pkt) free( server->master_pkt);
-
-    free(server->query_arg);
-
-    /* These fields are never malloc'd: outfilename
-    */
-
-    if ( server->server_name != NULL &&
-	    server->server_name != DOWN &&
-	    server->server_name != HOSTNOTFOUND &&
-	    server->server_name != SYSERROR &&
-	    server->server_name != MASTER &&
-	    server->server_name != SERVERERROR &&
-	    server->server_name != TIMEOUT &&
-	    server->server_name != GAMESPY_MASTER_NAME &&
-	    server->server_name != BFRIS_SERVER_NAME)  {
-	free( server->server_name);
-    }
+	char *next;
+	char *string;
+	change_server_port(server, swap_short_from_little(&rawpkt[14]), 0);
+	if (NULL == (string = ut2003_strdup(&rawpkt[18], end, &next)))
+	{
+		return -1;
+	}
 
-/*
-params ...
-saved_data ...
-*/
-
-    free( server);
-    --num_servers;
-}
-
-void
-free_player( struct player *player)
-{
-    if ( player->name) free( player->name);
-    if ( ! (player->flags&PLAYER_FLAG_DO_NOT_FREE_TEAM) && player->team_name)
-	free( player->team_name);
-    if ( player->address) free( player->address);
-    if ( player->tribe_tag) free( player->tribe_tag);
-    if ( player->skin) free( player->skin);
-    if ( player->mesh) free( player->mesh);
-    if ( player->face) free( player->face);
-    free( player);
-}
-
-void
-free_rule( struct rule *rule)
-{
-    if ( rule->name) free( rule->name);
-    if ( rule->value) free( rule->value);
-    free( rule);
-}
+	if (server->server_name == NULL)
+	{
+		server->server_name = string;
+	}
+	else
+	{
+		free(string);
+	}
 
-/* Functions for handling response packets
- */
+	if (NULL == (string = ut2003_strdup(next, end, &next)))
+	{
+		return -1;
+	}
 
-/* Packet from normal Quake server
- */
-void
-deal_with_q_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    struct q_packet *pkt= (struct q_packet *)rawpkt;
-    int rc;
+	if (server->map_name == NULL)
+	{
+		server->map_name = string;
+	}
+	else
+	{
+		free(string);
+	}
 
-    if ( ntohs( pkt->length) != pktlen)  {
-	fprintf( stderr, "%s Ignoring bogus packet; length %d != %d\n",
-		server->arg, ntohs( pkt->length), pktlen);
-	cleanup_qserver(server,FORCE);
-	return;
-    }
-
-    rawpkt[pktlen]= '\0';
-
-    switch ( pkt->op_code)  {
-    case Q_CCREP_ACCEPT:
-    case Q_CCREP_REJECT:
-	return;
-    case Q_CCREP_SERVER_INFO:
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
-	rc= server_info_packet( server, pkt, pktlen-Q_HEADER_LEN);
-	break;
-    case Q_CCREP_PLAYER_INFO:
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time2);
-	rc= player_info_packet( server, pkt, pktlen-Q_HEADER_LEN);
-	break;
-    case Q_CCREP_RULE_INFO:
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
-	rc= rule_info_packet( server, pkt, pktlen-Q_HEADER_LEN);
-	break;
-    case Q_CCREQ_CONNECT:
-    case Q_CCREQ_SERVER_INFO:
-    case Q_CCREQ_PLAYER_INFO:
-    case Q_CCREQ_RULE_INFO:
-    default:
-	return;
-    }
-
-    if ( rc == -1)
-	fprintf( stderr, "%s error on packet opcode %x\n", server->arg,
-		(int)pkt->op_code);
+	if (NULL == (string = ut2003_strdup(next, end, &next)))
+	{
+		return -1;
+	}
 
-    cleanup_qserver( server, (rc == -1) ? FORCE : 0);
-}
+	if (server->game == NULL)
+	{
+		server->game = string;
+		add_rule(server, "gametype", server->game, NO_FLAGS | CHECK_DUPLICATE_RULES);
+	}
+	else
+	{
+		free(string);
+	}
 
-/* Packet from QuakeWorld server
- */
-void
-deal_with_qw_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    if ( server->server_name == NULL)
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
-
-    if ( ((rawpkt[0] != '\377' && rawpkt[0] != '\376') || rawpkt[1] != '\377' ||
-	    rawpkt[2] != '\377' || rawpkt[3] != '\377') && show_errors)  {
-	unsigned int ipaddr= ntohl(server->ipaddr);
-	fprintf( stderr,
-		"Odd packet from server %d.%d.%d.%d:%hu, processing ...\n",
-		(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-		(ipaddr>>8)&0xff, ipaddr&0xff, ntohs(server->port));
-	print_packet( server, rawpkt, pktlen);
-    }
-
-    rawpkt[pktlen]= '\0';
-
-    if ( rawpkt[4] == 'n')  {
-	if ( server->type->id != QW_SERVER)
-	    server->type= find_server_type_id( QW_SERVER);
-	deal_with_q1qw_packet( server, rawpkt, pktlen);
-	return;
-    }
-    else if ( rawpkt[4] == '\377' && rawpkt[5] == 'n')  {
-	if ( server->type->id != HW_SERVER)
-	    server->type= find_server_type_id( HW_SERVER);
-	deal_with_q1qw_packet( server, rawpkt, pktlen);
-	return;
-    }
-    else if ( strncmp( &rawpkt[4], "print\n\\", 7) == 0)  {
-	deal_with_q2_packet( server, rawpkt+10, pktlen-10, 0);
-	return;
-    }
-    else if ( strncmp( &rawpkt[4], "print\n", 6) == 0)  {
-	/* work-around for occasional bug in Quake II status packets
-	*/
-	char *c, *p;
-	p= c= &rawpkt[10];
-	while ( *p != '\\' && (c= strchr( p, '\n')))
-	    p= c+1;
-	if ( *p == '\\' && c != NULL)  {
-	    deal_with_q2_packet( server, p, pktlen-(p-rawpkt), 0);
-	    return;
-	}
-    }
-    else if ( strncmp( &rawpkt[4], "infoResponse", 12) == 0 ||
-		(rawpkt[4] == '\001' && strncmp( &rawpkt[5], "infoResponse", 12) == 0) )  {
-	/* quake3 info response */
-	if ( rawpkt[4] == '\001')  {
-	    rawpkt++;
-	    pktlen--;
-	}
-	rawpkt+= 12;
-	pktlen-= 12;
-	for ( ; pktlen && *rawpkt != '\\'; pktlen--, rawpkt++)
-	    ;
-	if ( !pktlen)
-	    return;
-	if ( rawpkt[pktlen-1] == '"')  {
-	    rawpkt[pktlen-1]= '\0';
-	    pktlen--;
-	}
-	if ( get_player_info || get_server_rules)
-	    server->next_rule= "";
-	deal_with_q2_packet( server, rawpkt, pktlen, 0);
-	if ( (get_player_info || get_server_rules) &&
-			( server->flags & FLAG_BROADCAST || server->fd != -1)) {
-	    send_rule_request_packet( server);
-	    server->retry1= n_retries-1;
-	}
-	return;
-    }
-    else if ( strncmp( &rawpkt[4], "statusResponse\n", 15) == 0 ||
-		(rawpkt[4] == '\001' && strncmp( &rawpkt[5], "statusResponse\n", 15) == 0) )  {
-	/* quake3 status response */
-	server->next_rule= NO_SERVER_RULES;
-	server->retry1 = 0;
-	if ( rawpkt[4] == '\001')  {
-	    rawpkt++;
-	    pktlen--;
-	}
-    	deal_with_q2_packet( server, rawpkt + 19, pktlen - 19,
-		CHECK_DUPLICATE_RULES);
-	return;
-    }
-    else if ( strncmp( &rawpkt[4], "infostringresponse", 19) == 0)  {
-	deal_with_q2_packet( server, rawpkt+23, pktlen-23, 0);
-	return;
-    }
-
-    if ( show_errors)  {
-	unsigned int ipaddr= ntohl(server->ipaddr);
-	fprintf( stderr,
-		"Odd packet from server %d.%d.%d.%d:%hu, ignoring ...\n",
-		(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-		(ipaddr>>8)&0xff, ipaddr&0xff, ntohs(server->port));
-	print_packet( server, rawpkt, pktlen);
-	cleanup_qserver( server, 1);
-    }
-    else
-	cleanup_qserver( server, 0);
-}
-
-void
-deal_with_q1qw_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    char *key, *value, *end;
-    struct player *player= NULL, **last_player= &server->players;
-    int len, rc, complete= 0;
-    int number, frags, connect_time, ping;
-    char *pkt= &rawpkt[5];
-
-    if ( server->type->id == HW_SERVER)
-	pkt= &rawpkt[6];
-
-    while ( *pkt && pkt-rawpkt < pktlen)  {
-	if ( *pkt == '\\')  {
-	    pkt++;
-	    end= strchr( pkt, '\\');
-	    if ( end == NULL)
-		break;
-	    *end= '\0';
-	    key= pkt;
-	    pkt+= strlen(pkt)+1;
-	    end= strchr( pkt, '\\');
-	    if ( end == NULL)
-		end= strchr( pkt, '\n');
-	    value= (char*) malloc(end-pkt+1);
-	    memcpy( value, pkt, end-pkt);
-	    value[end-pkt]= '\0';
-	    pkt= end;
-	    if ( strcmp( key, "hostname") == 0)
-		server->server_name= value;
-	    else if  ( strcmp( key, "map") == 0)
-		server->map_name= value;
-	    else if  ( strcmp( key, "maxclients") == 0)  {
-		server->max_players= atoi(value);
-		free( value);
-	    }
-	    else if ( get_server_rules || strncmp( key, "*game", 5) == 0)  {
-		add_rule( server, key, value, NO_VALUE_COPY);
-		if ( strcmp( key, "*gamedir") == 0)  {
-		    server->game= value;
-		    server->flags |= FLAG_DO_NOT_FREE_GAME;
-		}
-	    }
-	}
-	else if ( *pkt == '\n')  {
-	    pkt++;
-	    if ( pkt-rawpkt>=pktlen || *pkt == '\0')
-		break;
-	    rc= sscanf( pkt, "%d %d %d %d %n", &number, &frags, &connect_time,
-		&ping, &len);
-	    if ( rc != 4)  {
-		char *nl;	/* assume it's an error packet */
-		server->error= (char*)malloc( pktlen+1);
-	        nl= strchr( pkt, '\n');
-		if ( nl != NULL)  {
-		    strncpy( server->error, pkt, nl-pkt);
-		    server->error[nl-pkt]= '\0';
-		}
-		else
-		    strcpy( server->error, pkt);
-		server->server_name= SERVERERROR;
-		complete= 1;
-		break;
-	    }
-	    if ( get_player_info)  {
-		player= (struct player *) calloc( 1, sizeof( struct player));
-		player->number= number;
-		player->frags= frags;
-		player->connect_time= connect_time * 60;
-		player->ping= ping;
-	    }
-	    else
-		player= NULL;
-
-	    pkt+= len;
-
-	    if ( *pkt != '"') break;
-	    pkt++;
-	    end= strchr( pkt, '"');
-	    if ( end == NULL) break;
-	    if ( player != NULL)  {
-		player->name= (char*) malloc(end-pkt+1);
-		memcpy( player->name, pkt, end-pkt);
-		player->name[end-pkt]= '\0';
-	    }
-	    pkt= end+2;
-
-	    if ( *pkt != '"') break;
-	    pkt++;
-	    end= strchr( pkt, '"');
-	    if ( end == NULL) break;
-	    if ( player != NULL)  {
-		player->skin= (char*) malloc(end-pkt+1);
-		memcpy( player->skin, pkt, end-pkt);
-		player->skin[end-pkt]= '\0';
-	    }
-	    pkt= end+2;
-
-	    if ( player != NULL)  {
-		sscanf( pkt, "%d %d%n", &player->shirt_color,
-			&player->pants_color, &len);
-		*last_player= player;
-		last_player= & player->next;
-	    }
-	    else
-		sscanf( pkt, "%*d %*d%n", &len);
-	    pkt+= len;
-
-	    server->num_players++;
-	}
-	else
-	    pkt++;
-	complete= 1;
-    }
-
-    if ( !complete)  {
-	if ( rawpkt[4] != 'n' || rawpkt[5] != '\0')  {
-	    fprintf( stderr,
-		"Odd packet from QW server %d.%d.%d.%d:%hu ...\n",
-		(server->ipaddr>>24)&0xff, (server->ipaddr>>16)&0xff,
-		(server->ipaddr>>8)&0xff, server->ipaddr&0xff,
-		ntohs(server->port));
-	    print_packet( server, rawpkt, pktlen);
-	}
-    }
-    else if ( server->server_name == NULL)
-	server->server_name= strdup("");
-
-    cleanup_qserver( server, 0);
-}
-
-void
-deal_with_q2_packet( struct qserver *server, char *rawpkt, int pktlen,
-	int check_duplicate_rules)
-{
-    char *key, *value, *end;
-    struct player *player= NULL;
-    struct player **last_player= & server->players;
-    int len, rc, complete= 0;
-    int frags=0, ping=0, num_players= 0;
-    char *pkt= rawpkt;
-
-    while ( *pkt && pkt-rawpkt < pktlen)  {
-	if ( *pkt == '\\')  {
-	    pkt++;
-	    if ( *pkt == '\n' && server->type->id == SOF_SERVER)
-		goto player_info;
-	    end= strchr( pkt, '\\');
-	    if ( end == NULL)
-		break;
-	    *end= '\0';
-	    key= pkt;
-	    pkt+= strlen(pkt)+1;
-	    end= strpbrk( pkt, "\\\n");
-	    if(!end) {
-		    end= rawpkt+pktlen;
-	    }
-	    value= (char*) malloc(end-pkt+1);
-	    memcpy( value, pkt, end-pkt);
-	    value[end-pkt]= '\0';
-	    pkt= end;
-	    debug(3, "%s = %s", key, value);
-	    if ( server->server_name == NULL &&
-			(strcmp( key, "hostname") == 0 ||
-			strcmp( key, "sv_hostname") == 0))
-		server->server_name= value;
-	    else if  ( strcmp( key, "mapname") == 0 ||
-		    (strcmp( key, "map") == 0 && server->map_name == NULL))  {
-		if ( server->map_name != NULL)
-		    free( server->map_name);
-		server->map_name= value;
-	    }
-	    else if  ( strcmp( key, "maxclients") == 0 ||
-	    		strcmp( key, "sv_maxclients") == 0 ||
-			strcmp( key, "max") == 0)  {
-		server->max_players= atoi(value);
-		/* MOHAA Q3 protocol max players is always 0 */
-		if ( server->max_players == 0)
-		    server->max_players= -1;
-		free(value);
-	    }
-	    else if  ( strcmp( key, "clients") == 0 ||
-			strcmp( key, "players") == 0)  {
-		server->num_players= atoi(value);
-		free(value);
-	    }
-	    else if ( server->server_name == NULL &&
-			strcmp( key, "pure") == 0)  {
-		add_rule( server, key, value, NO_VALUE_COPY);
-	    }
-	    else if ( get_server_rules || strncmp( key, "game", 4) == 0)
-		{
-			if ( add_rule( server, key, value, NO_VALUE_COPY|check_duplicate_rules) == NULL)
-			{
-				free(value);      /* duplicate, so free value */
-			}
-			if ( server->game == NULL && strcmp( key, server->type->game_rule) == 0)
-			{
-				server->game= value;
-				server->flags |= FLAG_DO_NOT_FREE_GAME;
-			}
-	    }
-	    else
-		free(value);
-	}
-	else if ( *pkt == '\n')  {
-player_info:
-	    pkt++;
-	    if ( *pkt == '\0')
-		break;
-	    if(!strncmp(pkt, "\\challenge\\", 11))
-		{
-			// qfusion
-			// This doesnt support getstatus looking at warsow source:
-			// server/sv_main.c: SV_ConnectionlessPacket
-			server->next_rule = NO_SERVER_RULES;
-		    break;
-		}
-	    rc= sscanf( pkt, "%d %n", &frags, &len);
-	    if ( rc == 1 && pkt[len] != '"')  {
-		pkt+= len;
-		rc= sscanf( pkt, "%d %n", &ping, &len);
-	    }
-	    else if ( rc == 1)  {
-		/* MOHAA Q3 protocol only provides player ping */
-		ping= frags;
-		frags= 0;
-	    }
-	    if ( rc != 1)  {
-		char *nl;	/* assume it's an error packet */
-		server->error= (char*)malloc( pktlen+1);
-	        nl= strchr( pkt, '\n');
-		if ( nl != NULL)
-		    strncpy( server->error, pkt, nl-pkt);
-		else
-		    strcpy( server->error, pkt);
-		server->server_name= SERVERERROR;
-		complete= 1;
-		break;
-	    }
-	    if ( get_player_info)  {
-		player= (struct player *) calloc( 1, sizeof( struct player));
-		player->number= 0;
-		player->connect_time= -1;
-		player->frags= frags;
-		player->ping= ping;
-	    }
-	    else
-		player= NULL;
-
-	    pkt+= len;
-
-	    if ( isdigit((unsigned char)*pkt))  {
-		/* probably an SOF2 1.01 server, includes team # */
-		int team;
-		rc= sscanf( pkt, "%d %n", &team, &len);
-		if ( rc == 1)  {
-		    pkt+= len;
-		    if ( player)  {
-			player->team= team;
-			server->flags|= FLAG_PLAYER_TEAMS;
-		    }
-		}
-	    }
-
-	    if ( *pkt != '"') break;
-
-	    pkt++;
-	    end= strchr( pkt, '"');
-	    if ( end == NULL) break;
-	    if ( player != NULL)  {
-		player->name= (char*) malloc(end-pkt+1);
-		memcpy( player->name, pkt, end-pkt);
-		player->name[end-pkt]= '\0';
-	    }
-	    pkt= end+1;
-
-	    //WarSoW team number
-	    if ( *pkt != '\n') {
-		int team;
-		rc= sscanf( pkt, "%d%n", &team, &len);
-		if ( rc == 1)  {
-		    pkt+= len;
-		    if ( player)  {
-			player->team= team;
-			server->flags|= FLAG_PLAYER_TEAMS;
-		    }
-		}
-	    }
-
-	    if ( player != NULL)  {
-		player->skin= NULL;
-		player->shirt_color= -1;
-		player->pants_color= -1;
-		*last_player= player;
-		last_player= & player->next;
-	    }
-	    num_players++;
-	}
-	else
-	    pkt++;
-	complete= 1;
-    }
-
-    if ( server->num_players == 0 || num_players > server->num_players)
-	server->num_players= num_players;
-
-    if ( !complete)  {
-	cleanup_qserver( server, 1);
-	return;
-    }
-    else if ( server->server_name == NULL)
-	server->server_name= strdup("");
-
-    cleanup_qserver( server, 0);
-}
-
-void
-ack_descent3master_packet( struct qserver *server, char *curtok )
-{
-    int rc;
-    char packet[0x1e];
-    memcpy( packet, descent3_masterquery,0x1a);
-    packet[1]= 0x1d;
-    packet[0x16]= 1;
-    memcpy( packet + 0x1a, curtok, 4);
-    rc= send( server->fd, packet, sizeof(packet), 0);
-    if ( rc == SOCKET_ERROR)
-	perror( "send");
-}
+	server->num_players = (unsigned char)next[0];
+	server->max_players = (unsigned char)next[1];
 
-/* Packet from Descent3 master server (PXO)
- */
-void
-deal_with_descent3master_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    int i= 0, lastpacket= 0;
-    char *names= rawpkt + 0x1f;
-    char *ips= rawpkt + 0x29f;
-    char *ports= rawpkt + 0x2ef;
-    /* printf ("s=%p p=%p l=%i\n",server,rawpkt,pktlen); */
-    while ( i<20) {
-	if ( *names) {
-	    char *c;
-	    server->master_pkt_len += 6;
-	    server->master_pkt= (char*)realloc( server->master_pkt,
-		    server->master_pkt_len);
-	    c= server->master_pkt + server->master_pkt_len - 6;
-	    memcpy( c, ips, 4);
-	    memcpy( c + 4, ports, 2);
-	}else if (i>0)
-	    lastpacket= 1;
-	names+= 0x20;
-	ips+= 4;
-	ports+= 2;
-	i++;
-    }
-
-    ack_descent3master_packet( server, rawpkt+0x1a);
-
-    server->n_servers= server->master_pkt_len / 6;
-
-    server->next_player_info= -1;
-    server->retry1= 0;
-
-    if (lastpacket) {
-	cleanup_qserver( server, 0);
-    }
+	return 0;
 }
 
-/* Packet from QuakeWorld master server
- */
-void
-deal_with_qwmaster_packet( struct qserver *server, char *rawpkt, int pktlen)
+STATIC int ut2003_basic_packet(struct qserver *server, char *rawpkt, char *end)
 {
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
+	char *next;
+	char *string;
+	change_server_port(server, swap_short_from_little(&rawpkt[6]), 0);
 
-	if ( rawpkt[0] == QW_NACK)
+	if (NULL == (string = ut2003_strdup(&rawpkt[14], end, &next)))
 	{
-		server->error= strdup( &rawpkt[2]);
-		server->server_name= SERVERERROR;
-		cleanup_qserver( server, 1);
-		return;
+		return -1;
 	}
 
-	if ( *((unsigned int*)rawpkt) == 0xffffffff)
+	if (server->server_name == NULL)
+	{
+		server->server_name = string;
+	}
+	else
 	{
-		rawpkt+= 4;	/* QW 1.5 */
-		pktlen-= 4;
+		free(string);
 	}
 
-	if ( rawpkt[0] == QW_SERVERS && rawpkt[1] == QW_NEWLINE)
+	if (NULL == (string = ut2003_strdup(next, end, &next)))
 	{
-		rawpkt+= 2;
-		pktlen-= 2;
+		return -1;
 	}
-	else if ( rawpkt[0] == HL_SERVERS && rawpkt[1] == 0x0d )
+
+	if (server->map_name == NULL)
 	{
-		// 2 byte id + 4 byte sequence
-		memcpy( server->master_query_tag, rawpkt+2, 3);
-		rawpkt+= 6;
-		pktlen-= 6;
+		server->map_name = string;
 	}
-	else if ( rawpkt[0] == HL_SERVERS && rawpkt[1] == 0x0a )
+	else
 	{
-		// no sequence id for steam
-		// instead we use the ip:port of the last recieved server
-		struct in_addr *sin_addr = (struct in_addr*)(rawpkt+pktlen-6);
-		char *ip = inet_ntoa( *sin_addr );
-		unsigned short port = htons( *((unsigned short*)(rawpkt+pktlen-2)) );
-
-		//fprintf( stderr, "NEXT IP=%s:%u\n", ip, port );
-		sprintf( server->master_query_tag, "%s:%u", ip, port );
+		free(string);
+	}
 
-		// skip over the 2 byte id
-		rawpkt+= 2;
-		pktlen-= 2;
+	if (NULL == (string = ut2003_strdup(next, end, &next)))
+	{
+		return -1;
 	}
-	else if ( strncmp( rawpkt, "servers", 7) == 0)
+
+	if (server->game == NULL)
 	{
-		rawpkt+= 8;
-		pktlen-= 8;
+		server->game = string;
+		add_rule(server, "gametype", server->game, NO_FLAGS | CHECK_DUPLICATE_RULES);
 	}
-	else if ( strncmp( rawpkt, "getserversResponse", 18) == 0)
+	else
 	{
-		static int q3m_debug= 0;
+		free(string);
+	}
+
+	server->num_players = swap_long_from_little(next);
+	next += 4;
+	server->max_players = swap_long_from_little(next);
+	return 0;
+}
+
+STATIC int pariah_rule_packet(struct qserver *server, char *rawpkt, char *end)
+{
+	char *key, *value;
+
+	unsigned char no_rules = (unsigned char)rawpkt[1];
+	unsigned char seen = 0;
 
-		rawpkt+= 18;
-		pktlen-= 18;
+	// type + no_rules
+	rawpkt += 2;
 
-		for ( ; *rawpkt != '\\' && pktlen; pktlen--, rawpkt++)
+	// we get size encoded key = value pairs
+	while (rawpkt < end && no_rules > seen)
+	{
+		// first byte is the rule count
+		seen = (unsigned char)rawpkt[0];
+		rawpkt++;
+		if (NULL == (key = ut2003_strdup(rawpkt, end, &rawpkt)))
 		{
+			break;
 		}
 
-		if ( !pktlen)
+		if ('\0' == rawpkt[0])
 		{
-			return;
+			value = strdup("");
+			rawpkt++;
 		}
-		rawpkt++;
-		pktlen--;
-
-		if ( q3m_debug) printf( "q3m pktlen %d lastchar %x\n", pktlen, (unsigned int)rawpkt[pktlen-1]);
-
-		server->master_pkt= (char*)realloc( server->master_pkt,
-				server->master_pkt_len + pktlen+1);
-
-		if ( server->type->id == STEF_MASTER)
+		else if (NULL == (value = ut2003_strdup(rawpkt, end, &rawpkt)))
 		{
-			decode_stefmaster_packet( server, rawpkt, pktlen);
+			break;
 		}
-		else
+
+		if (NULL == add_rule(server, key, value, NO_KEY_COPY | NO_VALUE_COPY | COMBINE_VALUES))
 		{
-			decode_q3master_packet( server, rawpkt, pktlen);
+			/* duplicate, so free key and value */
+			free(value);
+			free(key);
 		}
-		if ( q3m_debug) printf( "q3m %d servers\n", server->n_servers);
 
-		return;
+		seen++;
 	}
-	else if ( show_errors)
+
+	if (no_rules == seen)
 	{
-		unsigned int ipaddr= ntohl(server->ipaddr);
-		fprintf( stderr,
-			"Odd packet from QW master %d.%d.%d.%d, processing ...\n",
-			(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-			(ipaddr>>8)&0xff, ipaddr&0xff
-		);
-		print_packet( server, rawpkt, pktlen);
+		// all done
+		server->next_rule = NULL;
+		return 1;
 	}
 
-	server->master_pkt= (char*)realloc( server->master_pkt,
-	server->master_pkt_len+pktlen+1);
-	rawpkt[pktlen]= '\0';
-	memcpy( server->master_pkt+server->master_pkt_len, rawpkt, pktlen+1);
-	server->master_pkt_len+= pktlen;
+	return 0;
+}
 
-	server->n_servers= server->master_pkt_len / 6;
+STATIC int ut2003_rule_packet(struct qserver *server, char *rawpkt, char *end)
+{
+	char *key, *value;
+	int result = 0;
 
-	if ( server->type->flags & TF_MASTER_MULTI_RESPONSE)
-	{
-		server->next_player_info= -1;
-		server->retry1= 0;
-	}
-	else if ( server->type->id == HL_MASTER )
+	// Packet Type
+	rawpkt++;
+
+	// we get size encoded key = value pairs
+	while (rawpkt < end)
 	{
-		if ( server->master_query_tag[0] == 0 &&
-			server->master_query_tag[1] == 0 &&
-			server->master_query_tag[2] == 0
-		)
+		if (NULL == (key = ut2003_strdup(rawpkt, end, &rawpkt)))
 		{
-			// all done
-			server->server_name = MASTER;
-			cleanup_qserver( server, 1);
-			bind_sockets();
+			break;
 		}
-		else
+
+		if (NULL == (value = ut2003_strdup(rawpkt, end, &rawpkt)))
 		{
-			// more to come
-			server->retry1++;
-			send_qwmaster_request_packet( server);
+			break;
+		}
+
+		if (strcmp(key, "minplayers") == 0)
+		{
+			result = atoi(value);
 		}
+
+		if (NULL == add_rule(server, key, value, NO_KEY_COPY | NO_VALUE_COPY | COMBINE_VALUES))
+		{
+			/* duplicate, so free key and value */
+			free(value);
+			free(key);
+		}
+	}
+
+	return result;
+}
+
+char *ut2003_strdup(const char *string, const char *end, char **next)
+{
+	unsigned char len = string[0];
+	char *result = NULL;
+
+	if (len < 128)
+	{
+		// type 1 string
+		//fprintf( stderr, "Type 1:" );
+		result = dup_nstring(string, end, next);
 	}
-	else if ( server->type->flags & TF_MASTER_STEAM )
+	else
 	{
-		// should the HL_MASTER be the same as this?
-		int i;
-		for ( i = pktlen - 6; i < pktlen && 0x00 == rawpkt[i] ; i++ )
+		// type 2 string
+		//fprintf( stderr, "Type 2:\n" );
+		const char *last;
+		char *resp, *pos;
+		// minus indicator
+		len -= 128;
+		// double byte chars so * 2
+		len = len * 2;
+		last = string + len;
+		if (last > end)
 		{
+			*next = (char*)end;
+			fprintf(stderr, "Type 2 string format error ( too short )\n");
+			return NULL;
 		}
 
-		if ( i == pktlen )
+		*next = (char*)last + 1;
+		if (NULL == (result = (char*)calloc(last - string, sizeof(char))))
 		{
-			// last 6 bytes where 0x00 so we have reached the last packet
-			server->n_servers--;
-			server->master_pkt_len -= 6;
-			server->server_name = MASTER;
-			cleanup_qserver( server, 1);
-			bind_sockets();
+			fprintf(stderr, "Failed to malloc string memory\n");
+			return NULL;
 		}
-		else
+		resp = result;
+		pos = (char*)string + 1;
+		while (pos <= last)
 		{
-			// more to come
-			server->retry1++;
-			send_qwmaster_request_packet( server );
+			// check for a color code
+			if (pos + 6 <= last && 0 == memcmp(pos, "^\0#\0", 4))
+			{
+				// we have a color code
+				//fprintf( stderr, "color:%02hhx%02hhx\n", pos[4], pos[5] );
+				// indicator transformed to ^\1
+				*resp = *pos;
+				resp++;
+				pos++;
+				*resp = '\1';
+				resp++;
+				pos += 3;
+				// color byte
+				*resp = *pos;
+				resp++;
+				pos += 2;
+				//pos += 6;
+			}
+
+			// standard char
+			//fprintf( stderr, "char: %02hhx\n", *pos );
+			*resp = *pos;
+			resp++;
+			pos += 2;
 		}
 	}
-	else
-	{
-		server->server_name = MASTER;
-		cleanup_qserver( server, 0);
-		bind_sockets();
-	}
+
+	//fprintf( stderr, "'%s'\n", result );
+
+	return result;
 }
 
-void
-decode_q3master_packet( struct qserver *server, char *pkt, int pktlen)
+
+STATIC int pariah_player_packet(struct qserver *server, char *rawpkt, char *end)
 {
-    char *p;
+	unsigned char no_players = rawpkt[1];
+	unsigned char seen = 0; /* XXX: cannot work this way, it takes only
+	this packet into consideration. What if
+	player info is spread across multiple
+	packets? */
 
-    pkt[pktlen]= 0;
-    p= pkt;
+	// type + no_players + some unknown preamble
+	rawpkt += 3;
+	while (rawpkt < end && seen < no_players)
+	{
+		struct player *player;
 
-    while ( *p && p < &pkt[pktlen-6]) {
-	memcpy( server->master_pkt + server->master_pkt_len, &p[0], 4);
-	memcpy( server->master_pkt + server->master_pkt_len + 4, &p[4], 2);
-	server->master_pkt_len += 6;
-	p+= 6;
-	while ( *p && *p == '\\')
-	    p++;
-    }
-    server->n_servers= server->master_pkt_len / 6;
-//    server->next_player_info= -1; evil, causes busy loop!
-    server->retry1 = 0; // received at least one packet so no need to retry
-}
-
-void
-decode_stefmaster_packet( struct qserver *server, char *pkt, int pktlen)
-{
-    unsigned char *p, *m, *end;
-    unsigned int i, b;
-
-    pkt[pktlen]= 0;
-
-    p= (unsigned char*) pkt;
-    m= (unsigned char*) server->master_pkt + server->master_pkt_len;
-    end= (unsigned char*) &pkt[pktlen-12];
-    while ( *p && p < end)  {
-	for ( i= 6; i; i--)  {
-	    sscanf( (char*)p, "%2x", &b);
-	    p+= 2;
-	    *m++= b;
-	}
-	server->master_pkt_len += 6;
-	while ( *p && *p == '\\')
-	    p++;
-    }
-    server->n_servers= server->master_pkt_len / 6;
-    server->next_player_info= -1;
-    server->retry1= 0;
-}
+		// Player Number
+		rawpkt += 4;
 
-/* Packet from Tribes master server
- */
-void
-deal_with_tribesmaster_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    unsigned char *upkt= (unsigned char*) rawpkt;
-    int packet_number= upkt[2];
-    int n_packets= upkt[3];
-    unsigned char *p;
-    char *mpkt;
-    int len;
-    unsigned int ipaddr;
-
-    if ( memcmp( rawpkt, tribes_master_response, sizeof(tribes_master_response)) != 0)  {
-	fprintf( stderr, "Odd packet from Tribes master server\n");
-	print_packet( server, rawpkt, pktlen);
-    }
-
-    /* 0x1006
-       01		packet number
-       08		# packets
-       02
-       0000
-       66
-       0d		length of following string
-       "Tribes Master"
-       3c		length of following string
-       "Check out the Starsiege demo now!   www.starsiegeplayers.com"
-       0035
-       06 d143 4764 812c
-       06 d1e2 8df3 616d
-       06 1804 6d50 616d
-       06 d81c 6dc0 616d
-*/
-/* 0x1006
-   02
-   08
-   02 0000
-   66
-   00 3f
-   06 cf88 344c 1227
-*/
-
-/* printf( "packet_number %d n_packets %d\n", packet_number, n_packets);
-*/
-
-    len= upkt[8];
-    if ( len > 0)  {
-	p= (unsigned char*) rawpkt+9;
-/* printf( "%.*s\n", len, p);
-*/
-	p+= len;
-	len= upkt[8+len+1];
-/* printf( "%.*s\n", len, p+1);
-*/
-	p+= len+1;
-	p+= 2;
-    }
-    else
-	p= (unsigned char*) rawpkt+10;
-
-    if ( server->master_pkt == NULL)  {
-	server->master_pkt= (char*)malloc( n_packets*64*6);
-	mpkt= server->master_pkt;
-    }
-    else
-	mpkt= server->master_pkt + server->n_servers*6;
-
-    while ( (char*)p < rawpkt+pktlen)  {
-	if ( *p != 0x6) printf( "*p %u\n", (unsigned)*p);
-	memcpy( mpkt, p+1, sizeof(ipaddr));
-	if ( 0)  {
-	    mpkt[4]= p[5];
-	    mpkt[5]= p[6];
-	}
-	else  {
-	    mpkt[5]= p[5];
-	    mpkt[4]= p[6];
+		// Create a player
+		if (NULL == (player = add_player(server, server->n_player_info)))
+		{
+			return 0;
+		}
+
+		// Name ( min 3 bytes )
+		player->name = ut2003_strdup(rawpkt, end, &rawpkt);
+
+		// Ping
+		player->ping = swap_long_from_little(rawpkt);
+		rawpkt += 4;
+
+		// Frags
+		player->frags = (unsigned char)rawpkt[0];
+		rawpkt++;
+
+		// unknown
+		rawpkt++;
+
+		seen++;
 	}
-/*
-    printf( "%08x:%hu %u.%u.%u.%u:%hu\n", ipaddr, port, ipaddr>>24,
-	(ipaddr>>16)&0xff, (ipaddr>>8)&0xff, ipaddr&0xff, port);
-*/
-	p+= 7;
-	mpkt+= 6;
-    }
-/*
-if (  (char*)p != rawpkt+pktlen)
-printf( "%x %x\n", p, rawpkt+pktlen);
-*/
-    server->master_pkt_len= mpkt - server->master_pkt;
-    server->n_servers= server->master_pkt_len / 6;
-    server->server_name= MASTER;
-    server->next_player_info= -1;
-
-    if ( packet_number >= n_packets)
-	cleanup_qserver( server, 1);
-    else
-	cleanup_qserver( server, 0);
-}
-
-char *
-display_tribes2_string_list( unsigned char *pkt)
-{
-    char *delim="";
-    unsigned int count, len;
-    count= *pkt;
-    pkt++;
-    for ( ; count; count--)  {
-	len= *pkt;
-	pkt++;
-	if ( len > 0)  {
-	    if ( raw_display)  {
-		fprintf( OF, "%s%.*s", delim, (int)len, pkt);
-		delim= raw_delimiter;
-	    }
-	    else
-		fprintf( OF, "%.*s\n", (int)len, pkt);
-	}
-	pkt+= len;
-    }
-    if ( raw_display)
-	fputs( "\n", OF);
-    return (char*)pkt;
-}
-
-void
-deal_with_tribes2master_packet( struct qserver *server, char *pkt, int pktlen)
-{
-    unsigned int n_servers, index, total, server_limit;
-    char *p, *mpkt;
-
-    if ( pkt[0] == TRIBES2_RESPONSE_GAME_TYPES)  {
-	pkt+= 6;
-	if ( raw_display)  {
-	    fprintf( OF, "%s%s%s%s", server->type->type_prefix, raw_delimiter,
-		server->arg, raw_delimiter);
-	}
-	else  {
-	    fprintf( OF, "Game Types\n");
-	    fprintf( OF, "----------\n");
-	}
-	pkt= display_tribes2_string_list( (unsigned char *)pkt);
-	if ( raw_display)  {
-	    fprintf( OF, "%s%s%s%s", server->type->type_prefix, raw_delimiter,
-		server->arg, raw_delimiter);
-	}
-	else  {
-	    fprintf( OF, "\nMission Types\n");
-	    fprintf( OF, "-------------\n");
-	}
-	display_tribes2_string_list( (unsigned char *)pkt);
-
-	server->master_pkt_len= 0;
-	server->n_servers= 0;
-	server->server_name= MASTER;
-	server->next_player_info= -1;
-	cleanup_qserver( server, 1);
-	return;
-    }
-
-    if ( pkt[0] != TRIBES2_RESPONSE_MASTER)  {
-	/* error */
-	cleanup_qserver( server, 1);
-	return;
-    }
-
-    server_limit= get_param_ui_value( server, "limit", ~0);
-
-    n_servers= little_endian ? *(unsigned short*)(pkt+8) :
-	swap_short(pkt+8);
-    index= *(unsigned char*)(pkt+6);
-    total= *(unsigned char*)(pkt+7);
-    if ( server->master_pkt == NULL)  {
-	server->master_pkt= (char*)malloc( total * n_servers * 6);
-	mpkt= server->master_pkt;
-    }
-    else
-	mpkt= server->master_pkt + server->n_servers*6;
-
-    p= pkt+10;
-    for ( ; n_servers && ((char*)mpkt - server->master_pkt)/6 < server_limit;
-		n_servers--, p+= 6, mpkt+= 6)  {
-	memcpy( mpkt, p, 4);
-	mpkt[4]= p[5];
-	mpkt[5]= p[4];
-    }
-    server->master_pkt_len= (char*)mpkt - server->master_pkt;
-    server->n_servers= server->master_pkt_len / 6;
-    server->server_name= MASTER;
-    server->next_player_info= -1;
-
-    if ( index >= total-1 || server->n_servers >= server_limit)
-	cleanup_qserver( server, 1);
-    else
-	cleanup_qserver( server, 0);
-}
 
-int
-server_info_packet( struct qserver *server, struct q_packet *pkt, int datalen)
-{
-    int off= 0;
+	if (no_players == seen)
+	{
+		// all done
+		server->num_players = server->n_player_info;
+		return 1;
+	}
+
+	// possibly more to come
 
-    /* ignore duplicate packets */
-    if ( server->server_name != NULL)
 	return 0;
+}
+
+STATIC int ut2003_player_packet(struct qserver *server, char *rawpkt, char *end)
+{
+	// skip type
+	rawpkt++;
+	switch (server->protocol_version)
+	{
+		case 0x7e:
+			// XMP packet
+			//fprintf( stderr, "XMP packet\n" );
+			while (rawpkt < end)
+			{
+				struct player *player;
+				char *var, *val;
+				unsigned char no_props;
+				if (rawpkt + 24 > end)
+				{
+					malformed_packet(server, "player info too short");
+					rawpkt = end;
+					return 1;
+				}
 
-    server->address= strdup((char*)&pkt->data[off]);
-    off+= strlen(server->address) + 1;
-    if ( off >= datalen)
-	return -1;
-
-    server->server_name= strdup((char*)&pkt->data[off]);
-    off+= strlen(server->server_name) + 1;
-    if ( off >= datalen)
-	return -1;
-
-    server->map_name= strdup((char*)&pkt->data[off]);
-    off+= strlen(server->map_name) + 1;
-    if ( off > datalen)
-	return -1;
-
-    server->num_players= pkt->data[off++];
-    server->max_players= pkt->data[off++];
-    server->protocol_version= pkt->data[off++];
-
-    server->retry1= n_retries;
-
-    if ( get_server_rules)
-	send_rule_request_packet( server);
-    if ( get_player_info)
-	send_player_request_packet( server);
-
-    return 0;
-}
-
-int
-player_info_packet( struct qserver *server, struct q_packet *pkt, int datalen)
-{
-    char *name, *address;
-    int off, colors, frags, connect_time, player_number;
-    struct player *player, *last;
-
-    off= 0;
-    player_number= pkt->data[off++];
-    name= (char*) &pkt->data[off];
-    off+= strlen(name)+1;
-    if ( off >= datalen)
-	return -1;
-
-    colors= pkt->data[off+3];
-    colors= (colors<<8) + pkt->data[off+2];
-    colors= (colors<<8) + pkt->data[off+1];
-    colors= (colors<<8) + pkt->data[off];
-    off+= sizeof(colors);
-
-    frags= pkt->data[off+3];
-    frags= (frags<<8) + pkt->data[off+2];
-    frags= (frags<<8) + pkt->data[off+1];
-    frags= (frags<<8) + pkt->data[off];
-    off+= sizeof(frags);
-
-    connect_time= pkt->data[off+3];
-    connect_time= (connect_time<<8) + pkt->data[off+2];
-    connect_time= (connect_time<<8) + pkt->data[off+1];
-    connect_time= (connect_time<<8) + pkt->data[off];
-    off+= sizeof(connect_time);
-
-    address= (char*) &pkt->data[off];
-    off+= strlen(address)+1;
-    if ( off > datalen)
-	return -1;
-
-    last= server->players;
-    while ( last != NULL && last->next != NULL)  {
-	if ( last->number == player_number)
-	     return 0;
-	last= last->next;
-    }
-    if ( last != NULL && last->number == player_number)
-	return 0;
+				// Player Number never set
+				rawpkt += 4;
 
-    player= (struct player *) calloc( 1, sizeof(struct player));
-    player->number= player_number;
-    player->name= strdup( name);
-    player->address= strdup( address);
-    player->connect_time= connect_time;
-    player->frags= frags;
-    player->shirt_color= colors>>4;
-    player->pants_color= colors&0xf;
-    player->next= NULL;
-
-    if ( last == NULL)
-	server->players= player;
-    else
-	last->next= player;
-
-    server->next_player_info++;
-    server->retry2= n_retries;
-    if ( server->next_player_info < server->num_players)
-	send_player_request_packet( server);
-
-    return 0;
-}
-
-int
-rule_info_packet( struct qserver *server, struct q_packet *pkt, int datalen)
-{
-    int off= 0;
-    struct rule *rule, *last;
-    char *name, *value;
+				// Player ID never set
+				rawpkt += 4;
 
-    /* Straggler packet after we've already given up fetching rules */
-    if ( server->next_rule == NULL)
-	return 0;
+				if (NULL == (player = add_player(server, server->n_player_info)))
+				{
+					return 0;
+				}
 
-    if ( ntohs(pkt->length) == Q_HEADER_LEN)  {
-	server->next_rule= NULL;
-	return 0;
-    }
+				// Name ( min 3 bytes )
+				player->name = ut2003_strdup(rawpkt, end, &rawpkt);
 
-    name= (char*)&pkt->data[off];
-    off+= strlen( name)+1;
-    if ( off >= datalen)
-	return -1;
-
-    value= (char*)&pkt->data[off];
-    off+= strlen( value)+1;
-    if ( off > datalen)
-	return -1;
-
-    last= server->rules;
-    while ( last != NULL && last->next != NULL)  {
-	if ( strcmp( last->name, name) == 0)
-	     return 0;
-	last= last->next;
-    }
-    if ( last != NULL && strcmp( last->name, name) == 0)
-	return 0;
+				// Ping
+				player->ping = swap_long_from_little(rawpkt);
+				rawpkt += 4;
 
-    rule= (struct rule *) malloc( sizeof( struct rule));
-    rule->name= strdup( name);
-    rule->value= strdup( value);
-    rule->next= NULL;
+				// Frags
+				player->frags = swap_long_from_little(rawpkt);
+				rawpkt += 4;
 
-    if ( last == NULL)
-	server->rules= rule;
-    else
-	last->next= rule;
+				// Stat ID never set
+				rawpkt += 4;
 
-    server->n_rules++;
-    server->next_rule= rule->name;
-    server->retry1= n_retries;
-    send_rule_request_packet( server);
+				// Player properties
+				no_props = rawpkt[0];
+				//fprintf( stderr, "noprops %d\n", no_props );
+				rawpkt++;
+				while (rawpkt < end && no_props > 0)
+				{
+					if (NULL == (var = ut2003_strdup(rawpkt, end, &rawpkt)))
+					{
+						break;
+					}
+					if (NULL == (val = ut2003_strdup(rawpkt, end, &rawpkt)))
+					{
+						break;
+					}
+					//fprintf( stderr, "attrib: %s = %s\n", var, val );
 
-    return 0;
-}
+					// Things we can use
+					if (0 == strcmp(var, "team"))
+					{
+						player->team_name = val;
+					}
+					else if (0 == strcmp(var, "class"))
+					{
+						player->skin = val;
+					}
+					else
+					{
+						free(val);
+					}
 
-struct info *
-player_add_info( struct player *player, char *key, char *value, int flags)
-{
-    struct info *info;
-    if ( flags & CHECK_DUPLICATE_RULES )
-	{
-		for ( info = player->info; info; info = info->next )
-		{
-			if ( 0 == strcmp( info->name, key ) )
-			{
-				return NULL;
+					free(var);
+					no_props--;
+				}
 			}
-		}
-    }
-
-	if ( flags & COMBINE_VALUES )
-	{
-		for ( info = player->info; info; info = info->next )
-		{
-			if ( 0 == strcmp( info->name, key ) )
+			break;
+		default:
+			while (rawpkt < end)
 			{
-				char *full_value = (char*)calloc( sizeof(char), strlen( info->value ) + strlen( value ) + 2 );
-				if ( NULL == full_value )
+				struct player *player;
+
+				if (rawpkt + 4 > end)
 				{
-					fprintf( stderr, "Failed to malloc combined value\n" );
-					exit( 1 );
+					malformed_packet(server, "player packet too short");
+					return 1;
 				}
-				sprintf( full_value, "%s%s%s", info->value, multi_delimiter, value );
 
-				// We should be able to free this
-				free( info->value );
-				info->value = full_value;
+				if (NULL == (player = add_player(server, swap_long_from_little(rawpkt))))
+				{
+					return 0;
+				}
 
-				return info;
+				player->name = ut2003_strdup(rawpkt + 4, end, &rawpkt);
+				if (rawpkt + 8 > end)
+				{
+					malformed_packet(server, "player packet too short");
+					return 1;
+				}
+				player->ping = swap_long_from_little(rawpkt);
+				rawpkt += 4;
+				player->frags = swap_long_from_little(rawpkt);
+				rawpkt += 4;
+				{
+					unsigned team = swap_long_from_little(rawpkt);
+					rawpkt += 4;
+					player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
+					if (team &1 << 29)
+					{
+						player->team_name = "red";
+					}
+					else if (team &1 << 30)
+					{
+						player->team_name = "blue";
+					}
+				}
 			}
-		}
 	}
 
-    info = (struct info *) malloc( sizeof( struct info));
-    if ( flags & NO_KEY_COPY)
-	{
-		info->name = key;
-	}
-    else
-	{
-		info->name = strdup(key);
-	}
-    if ( flags & NO_VALUE_COPY)
-	{
-		info->value = value;
-	}
-    else
-	{
-		info->value = strdup(value);
-	}
-    info->next = NULL;
+	return 0;
+}
 
-	if ( NULL == player->info )
-	{
-		player->info = info;
-	}
-	else
+
+char *get_rule(struct qserver *server, char *name)
+{
+	struct rule *rule;
+	rule = server->rules;
+	for (; rule != NULL; rule = rule->next)
 	{
-		*player->last_info = info;
+		if (strcmp(name, rule->name) == 0)
+		{
+			return rule->value;
+		}
 	}
-    player->last_info = &info->next;
-    player->n_info++;
 
-    return info;
+	return NULL;
 }
 
-struct rule *
-add_rule( struct qserver *server, char *key, char *value, int flags)
+int deal_with_ut2003_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    struct rule *rule;
-    if ( flags & CHECK_DUPLICATE_RULES )
+
+	// For protocol spec see:
+	// http://unreal.student.utwente.nl/UT2003-queryspec.html
+
+	char *end;
+	int error = 0, before;
+	unsigned int packet_header;
+
+	debug( 2, "deal_with_ut2003_packet %p, %d", server, pktlen );
+
+	rawpkt[pktlen] = '\0';
+	end = &rawpkt[pktlen];
+
+	packet_header = swap_long_from_little(&rawpkt[0]);
+	rawpkt += 4;
+
+	server->protocol_version = packet_header;
+	if (
+		packet_header != 0x77 // Pariah Demo?
+	 && packet_header != 0x78 // UT2003 Demo
+	 && packet_header != 0x79 // UT2003 Retail
+	 && packet_header != 0x7e // Unreal2 XMP
+	 && packet_header != 0x7f // UT2004 Demo
+	 && packet_header != 0x80 // UT2004 Retail
+	)
 	{
-		for ( rule = server->rules; rule; rule = rule->next )
-		{
-			if ( 0 == strcmp( rule->name, key ) )
+		malformed_packet(server, "Unknown type 0x%x", packet_header);
+	}
+
+	switch (rawpkt[0])
+	{
+		case 0x00:
+			// Server info
+			if (server->server_name == NULL)
 			{
-				return NULL;
+				server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 			}
-		}
-    }
 
-	if ( flags & COMBINE_VALUES )
-	{
-		for ( rule = server->rules; rule; rule = rule->next )
-		{
-			if ( 0 == strcmp( rule->name, key ) )
+			error = ut2003_basic_packet(server, rawpkt, end);
+			if (!error)
 			{
-				char *full_value = (char*)calloc( sizeof(char), strlen( rule->value ) + strlen( value ) + 2 );
-				if ( NULL == full_value )
+				if (get_server_rules || get_player_info)
 				{
-					fprintf( stderr, "Failed to malloc combined value\n" );
-					exit( 1 );
+					int requests = server->n_requests;
+					server->next_rule = "";
+					server->retry1 = n_retries;
+					server->retry2 = 0; // don't wait for player packet
+					send_rule_request_packet(server);
+					server->n_requests = requests; // would produce wrong ping
 				}
-				sprintf( full_value, "%s%s%s", rule->value, multi_delimiter, value );
+			}
+			break;
 
-				// We should be able to free this
-				free( rule->value );
-				rule->value = full_value;
+		case 0x01:
+			// Game info
+			ut2003_rule_packet(server, rawpkt, end);
+			server->next_rule = "";
+			server->retry1 = 0; /* we received at least one rule packet so
+			no need to retry. We'd get double
+			entries otherwise. */
+			break;
 
-				return rule;
+		case 0x02:
+			// Player info
+			before = server->n_player_info;
+			error = ut2003_player_packet(server, rawpkt, end);
+			if (before == server->n_player_info)
+			{
+				error = 1;
 			}
-		}
-	}
+			break;
 
-    rule = (struct rule *) malloc( sizeof( struct rule));
-    if ( flags & NO_KEY_COPY)
-	{
-		rule->name = key;
-	}
-    else
-	{
-		rule->name = strdup(key);
-	}
-    if ( flags & NO_VALUE_COPY)
-	{
-		rule->value = value;
+		case 0x10:
+			// Pariah Server info
+			if (server->server_name == NULL)
+			{
+				server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+			}
+
+			error = pariah_basic_packet(server, rawpkt, end);
+			if (!error)
+			{
+				// N.B. pariah always sends a rules and players packet
+				int requests = server->n_requests;
+				server->next_rule = "";
+				server->retry1 = n_retries;
+				server->retry2 = 0;
+				server->n_requests = requests; // would produce wrong ping
+			}
+			break;
+
+		case 0x11:
+			// Game info
+			pariah_rule_packet(server, rawpkt, end);
+			server->retry1 = 0; /* we received at least one rule packet so
+			no need to retry. We'd get double
+			entries otherwise. */
+			break;
+
+		case 0x12:
+			// Player info
+			before = server->n_player_info;
+			pariah_player_packet(server, rawpkt, end);
+			if (before == server->n_player_info)
+			{
+				error = 1;
+			}
+			break;
+
+
+		default:
+			malformed_packet(server, "Unknown packet type 0x%x", (unsigned)rawpkt[0]);
+			break;
 	}
-    else
+
+	/* don't cleanup if we fetch server rules. We would lose
+	 * rule packets as we don't know how many we get
+	 * We do clean up if we don't fetch server rules so we don't
+	 * need to wait for timeout.
+	 */
+	if (
+		error ||
+		(!get_server_rules && !get_player_info) ||
+		(!get_server_rules && server->num_players == server->n_player_info) ||
+		(server->next_rule == NULL && server->num_players == server->n_player_info)
+	)
 	{
-		rule->value = strdup(value);
+		return DONE_FORCE;
 	}
-    rule->next = NULL;
-    *server->last_rule = rule;
-    server->last_rule = & rule->next;
-    server->n_rules++;
 
-    return rule;
+	return INPROGRESS;
 }
 
-void
-add_nrule( struct qserver *server, char *key, char *value, int len)
+int deal_with_unrealmaster_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    struct rule *rule;
-    for ( rule= server->rules; rule; rule= rule->next)
-	if ( strcmp( rule->name, key) == 0)
-	    return;
+	debug( 2, "deal_with_unrealmaster_packet %p, %d", server, pktlen );
 
-    rule= (struct rule *) malloc( sizeof( struct rule));
-    rule->name= strdup(key);
-    rule->value= strndup(value,len);
-    rule->next= NULL;
-    *server->last_rule= rule;
-    server->last_rule= & rule->next;
-    server->n_rules++;
+	if (pktlen == 0)
+	{
+		return PKT_ERROR;
+	}
+	print_packet(server, rawpkt, pktlen);
+	puts("--");
+	return 0;
 }
 
-struct player *
-add_player( struct qserver *server, int player_number )
+/* Returns 1 if the query is done (server may be freed) and 0 if not.
+ */
+int deal_with_halflife_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    struct player *player;
+	char *pkt;
+	char *end = &rawpkt[pktlen];
+	int pkt_index = 0, pkt_max = 0;
+	char number[16];
+	short pkt_id;
+
+	debug( 2, "deal_with_halflife_packet %p, %d", server, pktlen );
 
-    for ( player = server->players; player; player = player->next )
-    {
-	if ( player->number == player_number)
+	if (server->server_name == NULL)
 	{
-	    return NULL;
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
-    }
 
-    player = (struct player *) calloc( 1, sizeof( struct player));
-    player->number = player_number;
-    player->next = server->players;
-    player->n_info = 0;
-    player->score = NA_INT;
-    player->deaths = NA_INT;
-    player->frags = NA_INT;
-    player->last_info = NULL;
-    server->players = player;
-    server->n_player_info++;
-    return player;
-}
+	if (pktlen < 5)
+	{
+		return PKT_ERROR;
+	}
 
-STATIC struct player *
-get_player_by_number( struct qserver *server, int player_number)
-{
-    struct player *player;
-    for ( player= server->players; player; player= player->next)
-        if ( player->number == player_number)
-            return player;
-    return NULL;
-}
+	if (((rawpkt[0] != '\377' && rawpkt[0] != '\376') || rawpkt[1] != '\377' || rawpkt[2] != '\377' || rawpkt[3] != '\377') && show_errors)
+	{
+		unsigned int ipaddr = ntohl(server->ipaddr);
+		fprintf(stderr, "Odd packet from server %d.%d.%d.%d:%hu, processing ...\n",
+			(ipaddr >> 24) &0xff,
+			(ipaddr >> 16) &0xff,
+			(ipaddr >> 8) &0xff,
+			ipaddr &0xff,
+			ntohs(server->port)
+		);
+		print_packet(server, rawpkt, pktlen);
+	}
 
-// Updates a servers port information.
-// Sets the rules:
-// _queryport <queryport>
-// hostport <port>
-void
-change_server_port( struct qserver *server, unsigned short port, int force )
-{
-	if ( port > 0 && port != server->port )
+	if (((unsigned char*)rawpkt)[0] == 0xfe)
 	{
-		// valid port and changing
-		char arg[64];
+		SavedData *sdata;
+		pkt_index = ((unsigned char*)rawpkt)[8] >> 4;
+		pkt_max = ((unsigned char*)rawpkt)[8] &0xf;
+		memcpy(&pkt_id, &rawpkt[4], 2);
 
-		if ( show_game_port || force || server->flags & TF_SHOW_GAME_PORT )
+		if (server->saved_data.data == NULL)
 		{
-			unsigned int ipaddr = ntohl(server->ipaddr);
-
-			// Update the servers hostname as required
-			sprintf( arg, "%d.%d.%d.%d:%hu", ipaddr>>24, (ipaddr>>16)&0xff, (ipaddr>>8)&0xff, ipaddr&0xff, port );
-			if ( 0 != strcmp( server->arg, server->host_name ))
-			{
-				// hostname isnt the query arg
-				char *colon = strchr( server->host_name, ':' );
-				if ( colon )
-				{
-					// dns hostname or hostname:port
-					char *hostname = malloc( strlen(server->host_name) + 6 );
-					*colon= '\0';
-					sprintf( hostname, "%s:%hu", server->host_name, port);
-					free( server->host_name);
-					server->host_name= hostname;
-				}
-			}
-			// Update the server arg
-			free( server->arg );
-			server->arg = strdup( arg );
+			sdata = &server->saved_data;
+		}
+		else
+		{
+			sdata = (SavedData*)calloc(1, sizeof(SavedData));
+			sdata->next = server->saved_data.next;
+			server->saved_data.next = sdata;
+		}
 
-			// Add a rule noting the previous query port
-			sprintf( arg, "%hu", server->port );
-			add_rule( server, "_queryport", arg, NO_FLAGS);
+		sdata->pkt_index = pkt_index;
+		sdata->pkt_max = pkt_max;
+		sdata->pkt_id = pkt_id;
+		sdata->datalen = pktlen - 9;
+		sdata->data = (char*)malloc(pktlen - 9);
+		memcpy(sdata->data, &rawpkt[9], pktlen - 9);
 
-			// Update the servers port
-			server->port = port;
-		}
+		/* combine_packets will call us recursively */
+		return combine_packets(server);
 
-		// Add a rule noting the servers hostport
-		sprintf( arg, "%hu", port );
-		add_rule( server, "hostport", arg, NO_FLAGS);
+		/*
+		fprintf( OF, "pkt_index %d pkt_max %d\n", pkt_index, pkt_max);
+		rawpkt+= 9;
+		pktlen-= 9;
+		 */
 	}
-}
 
-STATIC void
-players_set_teamname( struct qserver *server, int teamid, char *teamname )
-{
-	struct player *player;
-	for ( player= server->players; player; player= player->next)
+	/* 'info' response */
+	if (rawpkt[4] == 'C' || rawpkt[4] == 'm')
 	{
-		if ( player->team == teamid )
+		if (server->server_name != NULL)
 		{
-			player->team_name = strdup( teamname );
+			return 0;
 		}
-	}
-}
+		pkt = &rawpkt[5];
+		server->address = strdup(pkt);
+		pkt += strlen(pkt) + 1;
+		server->server_name = strdup(pkt);
+		pkt += strlen(pkt) + 1;
+		server->map_name = strdup(pkt);
+		pkt += strlen(pkt) + 1;
 
-STATIC char *
-dup_nstring( const char *pkt, const char *end, char **next)
-{
-	char *pt = (char*)pkt;
-    int len= ((unsigned char*)pkt)[0];
-    pt++;
-    if ( *pt == '\1')
-    {
-		len++;
+		if (*pkt)
+		{
+			add_rule(server, "gamedir", pkt, NO_FLAGS);
+		}
+		if (*pkt && strcmp(pkt, "valve") != 0)
+		{
+			server->game = add_rule(server, "game", pkt, NO_FLAGS)->value;
+			server->flags |= FLAG_DO_NOT_FREE_GAME;
+		}
+		pkt += strlen(pkt) + 1;
+		if (*pkt)
+		{
+			add_rule(server, "gamename", pkt, NO_FLAGS);
+		}
+		pkt += strlen(pkt) + 1;
+
+		server->num_players = (unsigned int)pkt[0];
+		server->max_players = (unsigned int)pkt[1];
+		pkt += 2;
+		if (pkt < end)
+		{
+			int protocol = *((unsigned char*)pkt);
+			sprintf(number, "%d", protocol);
+			add_rule(server, "protocol", number, NO_FLAGS);
+			pkt++;
+		}
+
+		if (rawpkt[4] == 'm')
+		{
+			if (*pkt == 'd')
+			{
+				add_rule(server, "sv_type", "dedicated", NO_FLAGS);
+			}
+			else if (*pkt == 'l')
+			{
+				add_rule(server, "sv_type", "listen", NO_FLAGS);
+			}
+			else
+			{
+				add_rule(server, "sv_type", "?", NO_FLAGS);
+			}
+			pkt++;
+			if (*pkt == 'w')
+			{
+				add_rule(server, "sv_os", "windows", NO_FLAGS);
+			}
+			else if (*pkt == 'l')
+			{
+				add_rule(server, "sv_os", "linux", NO_FLAGS);
+			}
+			else
+			{
+				char str[2] = "\0";
+				str[0] = *pkt;
+				add_rule(server, "sv_os", str, NO_FLAGS);
+			}
+			pkt++;
+			add_rule(server, "sv_password", *pkt ? "1" : "0", NO_FLAGS);
+			pkt++;
+			add_rule(server, "mod", *pkt ? "1" : "0", NO_FLAGS);
+			if (*pkt)
+			{
+				int n;
+				/* pull out the mod infomation */
+				pkt++;
+				add_rule(server, "mod_info_url", pkt, NO_FLAGS);
+				pkt += strlen(pkt) + 1;
+				if (*pkt)
+				{
+					add_rule(server, "mod_download_url", pkt, NO_FLAGS);
+				}
+				pkt += strlen(pkt) + 1;
+				if (*pkt)
+				{
+					add_rule(server, "mod_detail", pkt, NO_FLAGS);
+				}
+				pkt += strlen(pkt) + 1;
+				n = swap_long_from_little(pkt);
+				sprintf(number, "%d", n);
+				add_rule(server, "modversion", number, NO_FLAGS);
+				pkt += 4;
+				n = swap_long_from_little(pkt);
+				sprintf(number, "%d", n);
+				add_rule(server, "modsize", number, NO_FLAGS);
+				pkt += 4;
+				add_rule(server, "svonly", *pkt ? "1" : "0", NO_FLAGS);
+				pkt++;
+				add_rule(server, "cldll", *pkt ? "1" : "0", NO_FLAGS);
+				pkt++;
+				if (pkt < end)
+				{
+					add_rule(server, "secure", *pkt ? "1" : "0", NO_FLAGS);
+				}
+			}
+		}
+
+		if (get_player_info && server->num_players)
+		{
+			int requests = server->n_requests;
+			server->next_player_info = server->num_players - 1;
+			send_player_request_packet(server);
+			server->n_requests = requests; // prevent wrong ping
+		}
+		if (get_server_rules)
+		{
+			int requests = server->n_requests;
+			server->next_rule = "";
+			server->retry1 = n_retries;
+			send_rule_request_packet(server);
+			server->n_requests = requests; // prevent wrong ping
+		}
+	}
+	/* 'players' response */
+	else if (rawpkt[4] == 'D' && server->players == NULL)
+	{
+		unsigned int n = 0, temp;
+		struct player *player;
+		struct player **last_player = &server->players;
+		if ((unsigned int)rawpkt[5] > server->num_players)
+		{
+			server->num_players = (unsigned int)rawpkt[5];
+		} pkt = &rawpkt[6];
+		rawpkt[pktlen] = '\0';
+		while (1)
+		{
+			if (*pkt != n + 1)
+			{
+				break;
+			}
+			n++;
+			pkt++;
+			player = (struct player*)calloc(1, sizeof(struct player));
+			player->name = strdup(pkt);
+			pkt += strlen(pkt) + 1;
+			memcpy(&player->frags, pkt, 4);
+			pkt += 4;
+			memcpy(&temp, pkt, 4);
+			pkt += 4;
+			if (big_endian)
+			{
+				player->frags = swap_long(&player->frags);
+			}
+			player->connect_time = swap_float_from_little(&temp);
+			*last_player = player;
+			last_player = &player->next;
+		}
+		if (n > server->num_players)
+		{
+			server->num_players = n;
+		}
+		server->next_player_info = server->num_players;
+	}
+	/* 'rules' response */
+	else if (rawpkt[4] == 'E' && server->next_rule != NULL)
+	{
+		int n = 0;
+		n = ((unsigned char*)rawpkt)[5] + ((unsigned char*)rawpkt)[6] *256;
+		pkt = &rawpkt[7];
+		while (n)
+		{
+			char *key = pkt;
+			char *value;
+			pkt += strlen(pkt) + 1;
+			if (pkt > end)
+			{
+				break;
+			}
+			value = pkt;
+			pkt += strlen(pkt) + 1;
+			if (pkt > end)
+			{
+				break;
+			}
+			if (key[0] == 's' && strcmp(key, "sv_password") == 0)
+			{
+				add_rule(server, key, value, CHECK_DUPLICATE_RULES);
+			}
+			else
+			{
+				add_rule(server, key, value, NO_FLAGS);
+			}
+			n--;
+		}
+		server->next_rule = NULL;
 	}
-    if ( pt + len > end)
-    {
-		return NULL;
+	else if (rawpkt[4] != 'E' && rawpkt[4] != 'D' && rawpkt[4] != 'm' && rawpkt[4] != 'C' && show_errors)
+	{
+		/*	if ( pkt_count) { rawpkt-= 9; pktlen+= 9; } */
+		fprintf(stderr, "Odd packet from HL server %s (packet len %d)\n", server->arg, pktlen);
+		print_packet(server, rawpkt, pktlen);
 	}
 
-    *next = pt+len;
-    return strndup( pt, len );
+	return DONE_AUTO;
 }
 
-STATIC char *
-dup_n1string( char *pkt, char *end, char **next)
-{
-    unsigned len;
-
-    if(!pkt || pkt >= end)
-	return NULL;
-
-    len = (unsigned char)pkt[0]-1;
-    pkt++;
-    if ( pkt + len > end)
-	return NULL;
-
-    *next= pkt+len;
-    return strndup( pkt, len);
-}
 
-STATIC int
-pariah_basic_packet( struct qserver *server, char *rawpkt, char *end)
+int deal_with_tribes_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    char *next;
-    char *string;
-	change_server_port( server, swap_short_from_little( &rawpkt[14]), 0 );
-    if ( NULL == ( string = ut2003_strdup( &rawpkt[18], end, &next) ) )
-    {
-		return -1;
-	}
-
-    if ( server->server_name == NULL)
-    {
-		server->server_name = string;
-	}
-    else
-    {
-		free(string);
-	}
+	unsigned char *pkt, *end;
+	int len, pnum, ping, packet_loss, n_teams, t;
+	struct player *player;
+	struct player **teams = NULL;
+	struct player **last_player = &server->players;
+	char buf[24];
 
-    if ( NULL == ( string = ut2003_strdup( next, end, &next) ) )
-    {
-    	return -1;
-	}
+	debug( 2, "deal_with_tribes_packet %p, %d", server, pktlen );
 
-    if ( server->map_name == NULL)
-    {
-		server->map_name = string;
+	if (server->server_name == NULL)
+	{
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
-    else
-    {
-		free(string);
+	else
+	{
+		gettimeofday(&server->packet_time1, NULL);
 	}
 
-    if ( NULL == ( string= ut2003_strdup( next, end, &next) ) )
-    {
-		return -1;
+	if (pktlen < sizeof(tribes_info_reponse))
+	{
+		return PKT_ERROR;
 	}
 
-    if ( server->game == NULL)
-    {
-		server->game = string;
-		add_rule( server, "gametype", server->game, NO_FLAGS | CHECK_DUPLICATE_RULES);
-    }
-    else
-    {
-		free(string);
+	if (strncmp(rawpkt, tribes_players_reponse, sizeof(tribes_players_reponse)) != 0)
+	{
+		return PKT_ERROR;
 	}
 
-	server->num_players = (unsigned char)next[0];
-	server->max_players = (unsigned char)next[1];
-
-    return 0;
-}
+	pkt = (unsigned char*) &rawpkt[sizeof(tribes_info_reponse)];
 
-STATIC int
-ut2003_basic_packet( struct qserver *server, char *rawpkt, char *end)
-{
-    char *next;
-    char *string;
-	change_server_port( server, swap_short_from_little( &rawpkt[6]), 0 );
+	len = *pkt; /* game name: "Tribes" */
+	add_nrule(server, "gamename", (char*)pkt + 1, len);
+	pkt += len + 1;
+	len = *pkt; /* version */
+	add_nrule(server, "version", (char*)pkt + 1, len);
+	pkt += len + 1;
+	len = *pkt; /* server name */
+	server->server_name = strndup((char*)pkt + 1, len);
+	pkt += len + 1;
+	add_rule(server, "dedicated", *pkt ? "1" : "0", NO_FLAGS);
+	pkt++; /* flag: dedicated server */
+	add_rule(server, "needpass", *pkt ? "1" : "0", NO_FLAGS);
+	pkt++; /* flag: password on server */
+	server->num_players = *pkt++;
+	server->max_players = *pkt++;
 
-    if ( NULL == ( string = ut2003_strdup( &rawpkt[14], end, &next) ) )
-    {
-		return -1;
-	}
+	sprintf(buf, "%u", (unsigned int)pkt[0] + (unsigned int)pkt[1] *256);
+	add_rule(server, "cpu", buf, NO_FLAGS);
+	pkt++; /* cpu speed, lsb */
+	pkt++; /* cpu speed, msb */
 
-    if ( server->server_name == NULL)
-    {
-		server->server_name = string;
-	}
-    else
-    {
-		free(string);
-	}
+	len = *pkt; /* Mod (game) */
+	add_nrule(server, "mods", (char*)pkt + 1, len);
+	pkt += len + 1;
 
-    if ( NULL == ( string = ut2003_strdup( next, end, &next) ) )
-    {
-    	return -1;
-	}
+	len = *pkt; /* game (mission): "C&H" */
+	add_nrule(server, "game", (char*)pkt + 1, len);
+	pkt += len + 1;
 
-    if ( server->map_name == NULL)
-    {
-		server->map_name= string;
-	}
-    else
-    {
-		free(string);
-	}
+	len = *pkt; /* Mission (map) */
+	server->map_name = strndup((char*)pkt + 1, len);
+	pkt += len + 1;
 
-    if ( NULL == ( string= ut2003_strdup( next, end, &next) ) )
-    {
-		return -1;
-	}
+	len = *pkt; /* description (contains Admin: and Email: ) */
+	debug( 2, "%.*s\n", len, pkt + 1);
+	pkt += len + 1;
 
-    if ( server->game == NULL)
-    {
-		server->game= string;
-		add_rule( server, "gametype", server->game, NO_FLAGS | CHECK_DUPLICATE_RULES);
-    }
-    else
-    {
-		free(string);
+	n_teams = *pkt++; /* number of teams */
+	if (n_teams == 255)
+	{
+		return PKT_ERROR;
 	}
+	sprintf(buf, "%d", n_teams);
+	add_rule(server, "numteams", buf, NO_FLAGS);
 
-    server->num_players= swap_long_from_little( next);
-    next+= 4;
-    server->max_players= swap_long_from_little( next);
-    return 0;
-}
+	len = *pkt; /* first title */
+	debug( 2, "%.*s\n", len, pkt + 1);
+	pkt += len + 1;
 
-STATIC int
-pariah_rule_packet( struct qserver *server, char *rawpkt, char *end )
-{
-    char *key, *value;
+	len = *pkt; /* second title */
+	debug( 2, "%.*s\n", len, pkt + 1);
+	pkt += len + 1;
 
-    unsigned char no_rules = (unsigned char)rawpkt[1];
-	unsigned char seen = 0;
+	if (n_teams > 1)
+	{
+		teams = (struct player **)calloc(1, sizeof(struct player*) * n_teams);
+		for (t = 0; t < n_teams; t++)
+		{
+			teams[t] = (struct player*)calloc(1, sizeof(struct player));
+			teams[t]->number = TRIBES_TEAM;
+			teams[t]->team = t;
+			len = *pkt; /* team name */
+			teams[t]->name = strndup((char*)pkt + 1, len);
+			debug( 2, "team#0 <%.*s>\n", len, pkt + 1);
+			pkt += len + 1;
 
-	// type + no_rules
-	rawpkt+=2;
+			len = *pkt; /* team score */
+			if (len > 2)
+			{
+				strncpy(buf, (char*)pkt + 1+3, len - 3);
+				buf[len - 3] = '\0';
+			}
+			else
+			{
+				debug( 2, "%s score len %d\n", server->arg, len);
+				buf[0] = '\0';
+			}
+			teams[t]->frags = atoi(buf);
+			debug( 2, "team#0 <%.*s>\n", len - 3, pkt + 1+3);
+			pkt += len + 1;
+		}
+	}
+	else
+	{
+		len = *pkt; /* DM team? */
+		debug( 2, "%.*s\n", len, pkt + 1);
+		pkt += len + 1;
+		pkt++;
+		n_teams = 0;
+	}
 
-	// we get size encoded key = value pairs
-    while ( rawpkt < end && no_rules > seen )
-    {
-		// first byte is the rule count
-		seen = (unsigned char)rawpkt[0];
-		rawpkt++;
-		if ( NULL == ( key = ut2003_strdup( rawpkt, end, &rawpkt) ) )
+	pnum = 0;
+	while ((char*)pkt < (rawpkt + pktlen))
+	{
+		ping = (unsigned int) *pkt << 2;
+		pkt++;
+		packet_loss = *pkt;
+		pkt++;
+		debug( 2, "player#%d, team #%d\n", pnum, (int) *pkt);
+		pkt++;
+		len = *pkt;
+		if ((char*)pkt + len > (rawpkt + pktlen))
 		{
 			break;
 		}
-
-		if ( '\0' == rawpkt[0] )
+		player = (struct player*)calloc(1, sizeof(struct player));
+		player->team = pkt[ - 1];
+		if (n_teams && player->team < n_teams)
 		{
-			value = strdup( "" );
-			rawpkt++;
+			player->team_name = teams[player->team]->name;
 		}
-		else if ( NULL == ( value = ut2003_strdup( rawpkt, end, &rawpkt) ) )
+		else if (player->team == 255 && n_teams)
 		{
-			break;
+			player->team_name = "Unknown";
 		}
-
-		if ( NULL == add_rule( server, key, value, NO_KEY_COPY | NO_VALUE_COPY | COMBINE_VALUES ) )
+		player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
+		player->ping = ping;
+		player->packet_loss = packet_loss;
+		player->name = strndup((char*)pkt + 1, len);
+		debug( 2, "player#%d, name %.*s\n", pnum, len, pkt + 1);
+		pkt += len + 1;
+		len = *pkt;
+		debug( 2, "player#%d, info <%.*s>\n", pnum, len, pkt + 1);
+		end = (unsigned char*)strchr((char*)pkt + 9, 0x9);
+		if (end)
 		{
-			/* duplicate, so free key and value */
-			free(value);
-			free(key);
+			strncpy(buf, (char*)pkt + 9, end - (pkt + 9));
+			buf[end - (pkt + 9)] = '\0';
+			player->frags = atoi(buf);
+			debug( 2, "player#%d, score <%.*s>\n", pnum, (unsigned)(end - (pkt + 9)), pkt + 9);
 		}
 
-		seen++;
-    }
+		 *last_player = player;
+		last_player = &player->next;
+
+		pkt += len + 1;
+		pnum++;
+	}
 
-	if ( no_rules == seen )
+	for (t = n_teams; t;)
 	{
-		// all done
-		server->next_rule = NULL;
-		return 1;
+		t--;
+		teams[t]->next = server->players;
+		server->players = teams[t];
 	}
+	free(teams);
 
-    return 0;
+	return DONE_AUTO;
 }
 
-STATIC int
-ut2003_rule_packet( struct qserver *server, char *rawpkt, char *end )
+void get_tribes2_player_type(struct player *player)
 {
-    char *key, *value;
-    int result= 0;
-
-    // Packet Type
-    rawpkt++;
-
-	// we get size encoded key = value pairs
-    while ( rawpkt < end )
-    {
-		if ( NULL == ( key = ut2003_strdup( rawpkt, end, &rawpkt) ) )
-		{
-			break;
-		}
-
-		if ( NULL == ( value = ut2003_strdup( rawpkt, end, &rawpkt) ) )
+	char *name = player->name;
+	for (; *name; name++)
+	{
+		switch (*name)
 		{
-			break;
+			case 0x8:
+				player->type_flag = PLAYER_TYPE_NORMAL;
+				continue;
+			case 0xc:
+				player->type_flag = PLAYER_TYPE_ALIAS;
+				continue;
+			case 0xe:
+				player->type_flag = PLAYER_TYPE_BOT;
+				continue;
+			case 0xb:
+				break;
+			default:
+				continue;
 		}
-
-		if ( strcmp( key, "minplayers") == 0)
+		name++;
+		if (isprint(*name))
 		{
-			result = atoi(value);
+			char *n = name;
+			for (; isprint(*n); n++)
+				;
+			player->tribe_tag = strndup(name, n - name);
+			name = n;
 		}
-
-		if ( NULL == add_rule( server, key, value, NO_KEY_COPY | NO_VALUE_COPY | COMBINE_VALUES ) )
+		if (! *name)
 		{
-			/* duplicate, so free key and value */
-			free(value);
-			free(key);
+			break;
 		}
-    }
-
-    return result;
+	}
 }
 
-char *
-ut2003_strdup( const char *string, const char *end, char **next )
+int deal_with_tribes2_packet(struct qserver *server, char *pkt, int pktlen)
 {
-	unsigned char len = string[0];
-	char *result = NULL;
+	char str[256], *pktstart = pkt, *term, *start;
+	unsigned int minimum_net_protocol, build_version, i, t, len, s, status;
+	unsigned int net_protocol;
+	unsigned short cpu_speed;
+	int n_teams = 0, n_players;
+	struct player **teams = NULL, *player;
+	struct player **last_player = &server->players;
+	int query_version;
 
-	if ( len < 128 )
+	debug( 2, "deal_with_tribes2_packet %p, %d", server, pktlen );
+
+	pkt[pktlen] = '\0';
+
+	if (server->server_name == NULL)
 	{
-		// type 1 string
-		//fprintf( stderr, "Type 1:" );
-		result = dup_nstring( string, end, next );
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
+	/*
 	else
+	gettimeofday( &server->packet_time1, NULL);
+	 */
+
+	if (pkt[0] == TRIBES2_RESPONSE_PING)
 	{
-		// type 2 string
-		//fprintf( stderr, "Type 2:\n" );
-		const char *last;
-		char *resp, *pos;
-		// minus indicator
-		len -= 128;
-		// double byte chars so * 2
-		len = len * 2;
-		last = string + len;
-		if ( last > end )
+		if (pkt[6] < 4 || pkt[6] > 12 || strncmp(pkt + 7, "VER", 3) != 0)
 		{
-			*next = (char*)end;
-			fprintf( stderr, "Type 2 string format error ( too short )\n" );
-			return NULL;
+			return PKT_ERROR;
 		}
 
-		*next = (char*)last+1;
-		if ( NULL == ( result = (char*)calloc( last - string, sizeof(char) ) ) )
-		{
-			fprintf( stderr, "Failed to malloc string memory\n" );
-			return NULL;
-		}
-		resp = result;
-		pos = (char*)string + 1;
-		while ( pos <= last )
-		{
-			// check for a color code
-			if ( pos + 6 <= last && 0 == memcmp( pos, "^\0#\0", 4 ) )
-			{
-				// we have a color code
-				//fprintf( stderr, "color:%02hhx%02hhx\n", pos[4], pos[5] );
-				// indicator transformed to ^\1
-				*resp = *pos;
-				resp++;
-				pos++;
-				*resp = '\1';
-				resp++;
-				pos+=3;
-				// color byte
-				*resp = *pos;
-				resp++;
-				pos+=2;
-				//pos += 6;
-			}
+		strncpy(str, pkt + 10, pkt[6] - 3);
+		str[pkt[6] - 3] = '\0';
+		query_version = atoi(str);
+		add_nrule(server, "queryversion", pkt + 7, pkt[6]);
+		pkt += 7+pkt[6];
 
-			// standard char
-			//fprintf( stderr, "char: %02hhx\n", *pos );
-			*resp = *pos;
-			resp++;
-			pos += 2;
+		server->protocol_version = query_version;
+		if (query_version != 3 && query_version != 5)
+		{
+			server->server_name = strdup("Unknown query version");
+			return PKT_ERROR;
 		}
-	}
-
-	//fprintf( stderr, "'%s'\n", result );
-
-	return result;
-}
-
-
-STATIC int
-pariah_player_packet( struct qserver *server, char *rawpkt, char *end)
-{
-	unsigned char no_players = rawpkt[1];
-	unsigned char seen = 0; /* XXX: cannot work this way, it takes only
-				   this packet into consideration. What if
-				   player info is spread across multiple
-				   packets? */
-
-	// type + no_players + some unknown preamble
-	rawpkt += 3;
-	while ( rawpkt < end && seen < no_players )
-	{
-		struct player *player;
-
-		// Player Number
-		rawpkt += 4;
 
-		// Create a player
-		if ( NULL == ( player = add_player( server, server->n_player_info ) ) )
+		if (query_version == 5)
 		{
-			return 0;
+			net_protocol = swap_long_from_little(pkt);
+			sprintf(str, "%u", net_protocol);
+			add_rule(server, "net_protocol", str, NO_FLAGS);
+			pkt += 4;
 		}
+		minimum_net_protocol = swap_long_from_little(pkt);
+		sprintf(str, "%u", minimum_net_protocol);
+		add_rule(server, "minimum_net_protocol", str, NO_FLAGS);
+		pkt += 4;
+		build_version = swap_long_from_little(pkt);
+		sprintf(str, "%u", build_version);
+		add_rule(server, "build_version", str, NO_FLAGS);
+		pkt += 4;
 
-		// Name ( min 3 bytes )
-		player->name = ut2003_strdup( rawpkt, end, &rawpkt );
-
-		// Ping
-		player->ping = swap_long_from_little( rawpkt );
-		rawpkt += 4;
-
-		// Frags
-		player->frags = (unsigned char)rawpkt[0];
-		rawpkt++;
-
-		// unknown
-		rawpkt++;
+		server->server_name = strndup(pkt + 1, *(unsigned char*)(pkt));
 
-		seen++;
+		/* Always send the player request because the ping packet
+		 * contains very little information */
+		send_player_request_packet(server);
+		return 0;
 	}
-
-	if ( no_players == seen )
+	else if (pkt[0] != TRIBES2_RESPONSE_INFO)
 	{
-		// all done
-		server->num_players = server->n_player_info;
-		return 1;
+		return PKT_ERROR;
 	}
 
-	// possibly more to come
-
-	return 0;
-}
+	pkt += 6;
+	for (i = 0; i < *(unsigned char*)pkt; i++)
+	if (!isprint(pkt[i + 1]))
+	{
+		return PKT_ERROR;
+	}
+	add_nrule(server, server->type->game_rule, pkt + 1, *(unsigned char*)pkt);
+	server->game = strndup(pkt + 1, *(unsigned char*)pkt);
+	pkt += *pkt + 1;
+	add_nrule(server, "mission", pkt + 1, *(unsigned char*)pkt);
+	pkt += *pkt + 1;
+	server->map_name = strndup(pkt + 1, *(unsigned char*)pkt);
+	pkt += *pkt + 1;
 
-STATIC int
-ut2003_player_packet( struct qserver *server, char *rawpkt, char *end)
-{
-	// skip type
-	rawpkt++;
-	switch ( server->protocol_version )
+	status = *(unsigned char*)pkt;
+	sprintf(str, "%u", status);
+	add_rule(server, "status", str, NO_FLAGS);
+	if (status &TRIBES2_STATUS_DEDICATED)
+	{
+		add_rule(server, "dedicated", "1", NO_FLAGS);
+	}
+	if (status &TRIBES2_STATUS_PASSWORD)
+	{
+		add_rule(server, "password", "1", NO_FLAGS);
+	}
+	if (status &TRIBES2_STATUS_LINUX)
+	{
+		add_rule(server, "linux", "1", NO_FLAGS);
+	}
+	if (status &TRIBES2_STATUS_TEAMDAMAGE)
+	{
+		add_rule(server, "teamdamage", "1", NO_FLAGS);
+	}
+	if (server->protocol_version == 3)
 	{
-	case 0x7e:
-		// XMP packet
-		//fprintf( stderr, "XMP packet\n" );
-		while ( rawpkt < end )
+		if (status &TRIBES2_STATUS_TOURNAMENT_VER3)
 		{
-			struct player *player;
-			char *var, *val;
-			unsigned char no_props;
-			if ( rawpkt + 24 > end )
-			{
-				malformed_packet( server, "player info too short" );
-				rawpkt = end;
-				return 1;
-			}
-
-			// Player Number never set
-			rawpkt += 4;
-
-			// Player ID never set
-			rawpkt += 4;
-
-			if ( NULL == ( player = add_player( server, server->n_player_info ) ) )
-			{
-				return 0;
-			}
-
-			// Name ( min 3 bytes )
-			player->name = ut2003_strdup( rawpkt, end, &rawpkt );
-
-			// Ping
-			player->ping = swap_long_from_little( rawpkt );
-			rawpkt += 4;
-
-			// Frags
-			player->frags = swap_long_from_little( rawpkt );
-			rawpkt += 4;
-
-			// Stat ID never set
-			rawpkt += 4;
-
-			// Player properties
-			no_props = rawpkt[0];
-			//fprintf( stderr, "noprops %d\n", no_props );
-			rawpkt++;
-			while( rawpkt < end && no_props > 0 )
-			{
-				if ( NULL == ( var = ut2003_strdup( rawpkt, end, &rawpkt ) ) )
-				{
-					break;
-				}
-				if ( NULL == ( val = ut2003_strdup( rawpkt, end, &rawpkt ) ) )
-				{
-					break;
-				}
-				//fprintf( stderr, "attrib: %s = %s\n", var, val );
-
-				// Things we can use
-				if ( 0 == strcmp( var, "team" ) )
-				{
-					player->team_name = val;
-				}
-				else if ( 0 == strcmp( var, "class" ) )
-				{
-					player->skin = val;
-				}
-				else
-				{
-					free( val );
-				}
-
-				free( var );
-				no_props--;
-			}
+			add_rule(server, "tournament", "1", NO_FLAGS);
+		}
+		if (status &TRIBES2_STATUS_NOALIAS_VER3)
+		{
+			add_rule(server, "no_aliases", "1", NO_FLAGS);
+		}
+	}
+	else
+	{
+		if (status &TRIBES2_STATUS_TOURNAMENT)
+		{
+			add_rule(server, "tournament", "1", NO_FLAGS);
 		}
-		break;
-	default:
-		while ( rawpkt < end )
+		if (status &TRIBES2_STATUS_NOALIAS)
 		{
-			struct player *player;
-
-			if(rawpkt+4 > end)
-			{
-				malformed_packet(server, "player packet too short");
-				return 1;
-			}
-
-			if ( NULL == ( player = add_player( server, swap_long_from_little(rawpkt) ) ) )
-			{
-				return 0;
-			}
-
-			player->name = ut2003_strdup( rawpkt+4, end, &rawpkt );
-			if(rawpkt+8 > end)
-			{
-				malformed_packet(server, "player packet too short");
-				return 1;
-			}
-			player->ping = swap_long_from_little(rawpkt);
-			rawpkt+= 4;
-			player->frags = swap_long_from_little(rawpkt);
-			rawpkt+= 4;
-			{
-				unsigned team = swap_long_from_little(rawpkt);
-				rawpkt+= 4;
-				player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
-				if(team & 1<<29)
-					player->team_name = "red";
-				else if(team & 1<<30)
-					player->team_name = "blue";
-			}
+			add_rule(server, "no_aliases", "1", NO_FLAGS);
 		}
 	}
+	pkt++;
+	server->num_players = *(unsigned char*)pkt;
+	pkt++;
+	server->max_players = *(unsigned char*)pkt;
+	pkt++;
+	sprintf(str, "%u", *(unsigned char*)pkt);
+	add_rule(server, "bot_count", str, NO_FLAGS);
+	pkt++;
+	cpu_speed = swap_short_from_little(pkt);
+	sprintf(str, "%hu", cpu_speed);
+	add_rule(server, "cpu_speed", str, NO_FLAGS);
+	pkt += 2;
 
-	return 0;
-}
-
-
-char *
-get_rule( struct qserver *server, char *name)
-{
-    struct rule *rule;
-    rule= server->rules;
-    for ( ; rule != NULL; rule= rule->next)  {
-	if ( strcmp( name, rule->name) == 0)
-	    return rule->value;
-    }
-    return NULL;
-}
+	if (strcmp(server->server_name, "VER3") == 0)
+	{
+		free(server->server_name);
+		server->server_name = strndup(pkt + 1, *(unsigned char*)pkt);
+	}
+	else
+	{
+		add_nrule(server, "info", pkt + 1, *(unsigned char*)pkt);
+	}
 
-void
-deal_with_ut2003_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
+	pkt += *(unsigned char*)pkt + 1;
+	len = swap_short_from_little(pkt);
+	pkt += 2;
+	start = pkt;
+	if (len + (pkt - pktstart) > pktlen)
+	{
+		len -= (len + (pkt - pktstart)) - pktlen;
+	}
 
-	// For protocol spec see:
-	// http://unreal.student.utwente.nl/UT2003-queryspec.html
+	if (len == 0 || pkt - pktstart >= pktlen)
+	{
+		goto info_done;
+	}
 
-	char *end;
-	int error = 0, before;
-	unsigned int packet_header;
+	term = strchr(pkt, 0xa);
+	if (!term)
+	{
+		goto info_done;
+	}
+	*term = '\0';
+	n_teams = atoi(pkt);
+	sprintf(str, "%d", n_teams);
+	add_rule(server, "numteams", str, NO_FLAGS);
+	pkt = term + 1;
 
-	rawpkt[pktlen]= '\0';
-	end = &rawpkt[pktlen];
+	if (pkt - pktstart >= pktlen)
+	{
+		goto info_done;
+	}
 
-	packet_header = swap_long_from_little( &rawpkt[0] );
-	rawpkt += 4;
+	teams = (struct player **)calloc(1, sizeof(struct player*) * n_teams);
+	for (t = 0; t < n_teams; t++)
+	{
+		teams[t] = (struct player*)calloc(1, sizeof(struct player));
+		teams[t]->number = TRIBES_TEAM;
+		teams[t]->team = t;
+		/* team name */
+		term = strchr(pkt, 0x9);
+		if (!term)
+		{
+			n_teams = t;
+			goto info_done;
+		} teams[t]->name = strndup(pkt, term - pkt);
+		pkt = term + 1;
+		term = strchr(pkt, 0xa);
+		if (!term)
+		{
+			n_teams = t;
+			goto info_done;
+		}
+		*term = '\0';
+		teams[t]->frags = atoi(pkt);
+		pkt = term + 1;
+		if (pkt - pktstart >= pktlen)
+		{
+			goto info_done;
+		}
+	}
 
-	server->protocol_version = packet_header;
-	if (
-		packet_header != 0x77 // Pariah Demo?
-		&& packet_header != 0x78 // UT2003 Demo
-	    && packet_header != 0x79 // UT2003 Retail
-	    && packet_header != 0x7e // Unreal2 XMP
-	    && packet_header != 0x7f // UT2004 Demo
-	    && packet_header != 0x80 // UT2004 Retail
-	    )
+	term = strchr(pkt, 0xa);
+	if (!term || term - start >= len)
 	{
-		malformed_packet(server, "Unknown type 0x%x", packet_header);
+		goto info_done;
 	}
+	*term = '\0';
+	n_players = atoi(pkt);
+	pkt = term + 1;
 
-	switch( rawpkt[0] )
+	for (i = 0; i < n_players && pkt - start < len; i++)
 	{
-	case 0x00:
-		// Server info
-		if ( server->server_name == NULL )
+		pkt++; /* skip first byte (0x10) */
+		if (pkt - start >= len)
+		{
+			break;
+		}
+		player = (struct player*)calloc(1, sizeof(struct player));
+		term = strchr(pkt, 0x11);
+		if (!term || term - start >= len)
+		{
+			free(player);
+			break;
+		} player->name = strndup(pkt, term - pkt);
+		get_tribes2_player_type(player);
+		pkt = term + 1;
+		pkt++; /* skip 0x9 */
+		if (pkt - start >= len)
 		{
-			server->ping_total+= time_delta( &packet_recv_time, &server->packet_time1);
+			break;
 		}
-
-		error = ut2003_basic_packet( server, rawpkt, end );
-		if ( ! error )
+		term = strchr(pkt, 0x9);
+		if (!term || term - start >= len)
+		{
+			free(player->name);
+			free(player);
+			break;
+		}
+		for (t = 0; t < n_teams; t++)
 		{
-			if(get_server_rules || get_player_info)
+			if (term - pkt == strlen(teams[t]->name) && strncmp(pkt, teams[t]->name, term - pkt) == 0)
 			{
-				int requests = server->n_requests;
-				server->next_rule = "";
-				server->retry1 = n_retries;
-				server->retry2 = 0; // don't wait for player packet
-				send_rule_request_packet( server);
-				server->n_requests = requests; // would produce wrong ping
+				break;
 			}
 		}
-		break;
-
-	case 0x01:
-		// Game info
-		ut2003_rule_packet( server, rawpkt, end );
-		server->next_rule = "";
-		server->retry1 = 0; /* we received at least one rule packet so
-				       no need to retry. We'd get double
-				       entries otherwise. */
-		break;
-
-	case 0x02:
-		// Player info
-		before = server->n_player_info;
-		error = ut2003_player_packet( server, rawpkt, end);
-		if (before == server->n_player_info )
+		if (t == n_teams)
 		{
-			error = 1;
+			player->team = - 1;
+			player->team_name = "Unassigned";
 		}
-		break;
-
-	case 0x10:
-		// Pariah Server info
-		if ( server->server_name == NULL )
+		else
 		{
-			server->ping_total+= time_delta( &packet_recv_time, &server->packet_time1);
+			player->team = t;
+			player->team_name = teams[t]->name;
 		}
-
-		error = pariah_basic_packet( server, rawpkt, end );
-		if ( ! error )
+		player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
+		pkt = term + 1;
+		for (s = 0; *pkt != 0xa && pkt - start < len; pkt++)
 		{
-			// N.B. pariah always sends a rules and players packet
-			int requests = server->n_requests;
-			server->next_rule = "";
-			server->retry1 = n_retries;
-			server->retry2 = 0;
-			server->n_requests = requests; // would produce wrong ping
+			str[s++] = *pkt;
 		}
-		break;
-
-	case 0x11:
-		// Game info
-		pariah_rule_packet( server, rawpkt, end );
-		server->retry1 = 0; /* we received at least one rule packet so
-				       no need to retry. We'd get double
-				       entries otherwise. */
-		break;
-
-	case 0x12:
-		// Player info
-		before = server->n_player_info;
-		pariah_player_packet( server, rawpkt, end );
-		if ( before == server->n_player_info )
+		str[s] = '\0';
+		player->frags = atoi(str);
+		if (*pkt == 0xa)
 		{
-			error = 1;
+			pkt++;
 		}
-		break;
-
 
-	default:
-		malformed_packet(server, "Unknown packet type 0x%x", (unsigned)rawpkt[0]);
-		break;
+		*last_player = player;
+		last_player = &player->next;
 	}
 
-	/* don't cleanup if we fetch server rules. We would lose
-	 * rule packets as we don't know how many we get
-	 * We do clean up if we don't fetch server rules so we don't
-	 * need to wait for timeout.
-	 */
-	if (error
-	|| (!get_server_rules && !get_player_info)
-	|| (!get_server_rules && server->num_players == server->n_player_info)
-	|| (server->next_rule == NULL && server->num_players == server->n_player_info))
+info_done:
+	for (t = n_teams; t;)
 	{
-		cleanup_qserver( server, 1 );
+		t--;
+		teams[t]->next = server->players;
+		server->players = teams[t];
+	}
+	if (teams)
+	{
+		free(teams);
 	}
-}
 
-int
-deal_with_unrealmaster_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    if ( pktlen == 0)  {
-	cleanup_qserver( server, 1);
-	return 0;
-    }
-    print_packet( server, rawpkt, pktlen);
-	puts( "--");
-    return 0;
+	return DONE_FORCE;
 }
 
-/* Returns 1 if the query is done (server may be freed) and 0 if not.
- */
-int
-deal_with_halflife_packet( struct qserver *server, char *rawpkt, int pktlen)
+static const char GrPacketHead[] =
 {
-    char *pkt;
-    char *end= &rawpkt[pktlen];
-    int pkt_index= 0, pkt_max= 0;
-    char number[16];
-    short pkt_id;
-
-    if ( server->server_name == NULL)
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
-
-    if ( pktlen < 5)
-	return cleanup_qserver( server, 1);
-
-    if ( ((rawpkt[0] != '\377' && rawpkt[0] != '\376') || rawpkt[1] != '\377' ||
-	    rawpkt[2] != '\377' || rawpkt[3] != '\377') && show_errors)  {
-	unsigned int ipaddr= ntohl(server->ipaddr);
-	fprintf( stderr,
-		"Odd packet from server %d.%d.%d.%d:%hu, processing ...\n",
-		(ipaddr>>24)&0xff, (ipaddr>>16)&0xff,
-		(ipaddr>>8)&0xff, ipaddr&0xff, ntohs(server->port));
-	print_packet( server, rawpkt, pktlen);
-    }
-
-    if ( ((unsigned char*)rawpkt)[0] == 0xfe)  {
-	SavedData *sdata;
-	pkt_index= ((unsigned char*)rawpkt)[8] >> 4;
-	pkt_max= ((unsigned char*)rawpkt)[8] & 0xf;
-	memcpy( &pkt_id, &rawpkt[4], 2);
-
-	if ( server->saved_data.data == NULL)
-	    sdata= & server->saved_data;
-	else  {
-	    sdata= (SavedData*) calloc( 1, sizeof(SavedData));
-	    sdata->next= server->saved_data.next;
-	    server->saved_data.next= sdata;
-	}
-
-	sdata->pkt_index= pkt_index;
-	sdata->pkt_max= pkt_max;
-	sdata->pkt_id= pkt_id;
-	sdata->datalen= pktlen-9;
-	sdata->data= (char*) malloc( pktlen-9);
-	memcpy( sdata->data, &rawpkt[9], pktlen-9);
-
-	/* combine_packets will call us recursively */
-	return combine_packets( server);
-
-/*
-fprintf( OF, "pkt_index %d pkt_max %d\n", pkt_index, pkt_max);
-	rawpkt+= 9;
-	pktlen-= 9;
-*/
-    }
-
-    /* 'info' response */
-    if ( rawpkt[4] == 'C' || rawpkt[4] == 'm')  {
-	if ( server->server_name != NULL)
-	    return 0;
-	pkt= &rawpkt[5];
-	server->address= strdup( pkt);
-	pkt+= strlen(pkt)+1;
-	server->server_name= strdup( pkt);
-	pkt+= strlen(pkt)+1;
-	server->map_name= strdup( pkt);
-	pkt+= strlen(pkt)+1;
-
-	if ( *pkt)
-	    add_rule( server, "gamedir", pkt, NO_FLAGS);
-	if ( *pkt && strcmp( pkt, "valve") != 0)  {
-	    server->game= add_rule( server, "game", pkt, NO_FLAGS)->value;
-	    server->flags |= FLAG_DO_NOT_FREE_GAME;
-	}
-	pkt+= strlen(pkt)+1;
-	if ( *pkt)
-	    add_rule( server, "gamename", pkt, NO_FLAGS);
-	pkt+= strlen(pkt)+1;
-
-	server->num_players= (unsigned int)pkt[0];
-	server->max_players= (unsigned int)pkt[1];
-	pkt+= 2;
-	if ( pkt < end)  {
-	    int protocol= *((unsigned char *)pkt);
-	    sprintf( number, "%d", protocol);
-	    add_rule( server, "protocol", number, NO_FLAGS);
-	    pkt++;
-	}
-
-	if ( rawpkt[4] == 'm')  {
-	    if ( *pkt == 'd')
-		add_rule( server, "sv_type", "dedicated", NO_FLAGS);
-	    else if ( *pkt == 'l')
-		add_rule( server, "sv_type", "listen", NO_FLAGS);
-	    else
-		add_rule( server, "sv_type", "?", NO_FLAGS);
-	    pkt++;
-	    if ( *pkt == 'w')
-		add_rule( server, "sv_os", "windows", NO_FLAGS);
-	    else if ( *pkt == 'l')
-		add_rule( server, "sv_os", "linux", NO_FLAGS);
-	    else  {
-		char str[2]= "\0";
-		str[0]= *pkt;
-		add_rule( server, "sv_os", str, NO_FLAGS);
-	    }
-	    pkt++;
-	    add_rule( server, "sv_password", *pkt ? "1" : "0", NO_FLAGS);
-	    pkt++;
-	    add_rule( server, "mod", *pkt ? "1" : "0", NO_FLAGS);
-	    if ( *pkt)  {
-		int n;
-		/* pull out the mod infomation */
-		pkt++;
-		add_rule( server, "mod_info_url", pkt, NO_FLAGS);
-		pkt+= strlen( pkt)+1;
-		if ( *pkt)
-		    add_rule( server, "mod_download_url", pkt, NO_FLAGS);
-		pkt+= strlen( pkt)+1;
-		if ( *pkt)
-		    add_rule( server, "mod_detail", pkt, NO_FLAGS);
-		pkt+= strlen( pkt)+1;
-		n= swap_long_from_little( pkt);
-		sprintf( number, "%d", n);
-		add_rule( server, "modversion", number, NO_FLAGS);
-		pkt+= 4;
-		n= swap_long_from_little( pkt);
-		sprintf( number, "%d", n);
-		add_rule( server, "modsize", number, NO_FLAGS);
-		pkt+= 4;
-		add_rule( server, "svonly", *pkt ? "1" : "0", NO_FLAGS);
-		pkt++;
-		add_rule( server, "cldll", *pkt ? "1" : "0", NO_FLAGS);
-		pkt++;
-		if ( pkt < end)
-		    add_rule( server, "secure", *pkt ? "1" : "0", NO_FLAGS);
-	    }
-	}
-
-	if ( get_player_info && server->num_players)  {
-	    int requests = server->n_requests;
-	    server->next_player_info= server->num_players-1;
-	    send_player_request_packet( server);
-	    server->n_requests = requests; // prevent wrong ping
-	}
-	if ( get_server_rules)  {
-	    int requests = server->n_requests;
-	    server->next_rule= "";
-	    server->retry1= n_retries;
-	    send_rule_request_packet( server);
-	    server->n_requests = requests; // prevent wrong ping
-	}
-    }
-    /* 'players' response */
-    else if ( rawpkt[4] == 'D' && server->players == NULL)  {
-	unsigned int n= 0, temp;
-	struct player *player;
-	struct player **last_player= & server->players;
-	if ( (unsigned int)rawpkt[5] > server->num_players)
-	    server->num_players= (unsigned int)rawpkt[5];
-	pkt= &rawpkt[6];
-	rawpkt[pktlen]= '\0';
-	while (1)  {
-	    if ( *pkt != n+1)
-		break;
-	    n++;
-	    pkt++;
-	    player= (struct player*) calloc( 1, sizeof(struct player));
-	    player->name= strdup( pkt);
-	    pkt+= strlen(pkt)+1;
-	    memcpy( &player->frags, pkt, 4);
-	    pkt+= 4;
-	    memcpy( &temp, pkt, 4);
-	    pkt+= 4;
-	    if ( big_endian)  {
-		player->frags= swap_long( &player->frags);
-	    }
-	    player->connect_time= swap_float_from_little(&temp);
-	    *last_player= player;
-	    last_player= & player->next;
-	}
-	if ( n > server->num_players)
-	    server->num_players= n;
-	server->next_player_info= server->num_players;
-    }
-    /* 'rules' response */
-    else if ( rawpkt[4] == 'E' && server->next_rule != NULL)  {
-	int n= 0;
-	n= ((unsigned char*)rawpkt)[5] + ((unsigned char *)rawpkt)[6]*256;
-	pkt= &rawpkt[7];
-	while ( n)  {
-	    char *key= pkt;
-	    char *value;
-	    pkt+= strlen(pkt)+1;
-	    if ( pkt > end)
-		break;
-	    value= pkt;
-	    pkt+= strlen(pkt)+1;
-	    if ( pkt > end)
-		break;
-	    if ( key[0] == 's' && strcmp( key, "sv_password") == 0)
-		add_rule( server, key, value, CHECK_DUPLICATE_RULES);
-	    else
-		add_rule( server, key, value, NO_FLAGS);
-	    n--;
-	}
-	server->next_rule= NULL;
-    }
-    else if ( rawpkt[4] != 'E' && rawpkt[4] != 'D' && rawpkt[4] != 'm' &&
-		rawpkt[4] != 'C' && show_errors)  {
-/*	if ( pkt_count) { rawpkt-= 9; pktlen+= 9; } */
-	fprintf( stderr, "Odd packet from HL server %s (packet len %d)\n",
-		server->arg, pktlen);
-	print_packet( server, rawpkt, pktlen);
-    }
-
-    return cleanup_qserver( server, 0);
-}
-
-
-static int tribes_debug= 0;
-
-void
-deal_with_tribes_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    unsigned char *pkt, *end;
-    int len, pnum, ping, packet_loss, n_teams, t;
-    struct player *player;
-    struct player **teams= NULL;
-    struct player **last_player= & server->players;
-    char buf[24];
-
-    if ( server->server_name == NULL)
-	{
-		server->ping_total+= time_delta( &packet_recv_time,
-			&server->packet_time1);
-	}
-    else
-	{
-		gettimeofday( &server->packet_time1, NULL);
-	}
-
-    if ( pktlen < sizeof( tribes_info_reponse))
-	{
-		cleanup_qserver( server, 1);
-		return;
-    }
-
-	if ( strncmp( rawpkt, tribes_players_reponse,
-			sizeof( tribes_players_reponse)) != 0)
-	{
-		cleanup_qserver( server, 1);
-		return;
-	}
-
-    pkt= (unsigned char*) &rawpkt[sizeof( tribes_info_reponse)];
-
-    len= *pkt;		/* game name: "Tribes" */
-    add_nrule( server, "gamename", (char*)pkt+1, len);
-    pkt+= len+1;
-    len= *pkt;		/* version */
-    add_nrule( server, "version", (char*)pkt+1, len);
-    pkt+= len+1;
-    len= *pkt;		/* server name */
-    server->server_name= strndup( (char*)pkt+1, len);
-    pkt+= len+1;
-    add_rule( server, "dedicated", *pkt?"1":"0", NO_FLAGS);
-    pkt++;		/* flag: dedicated server */
-    add_rule( server, "needpass", *pkt?"1":"0", NO_FLAGS);
-    pkt++;		/* flag: password on server */
-    server->num_players= *pkt++;
-    server->max_players= *pkt++;
-
-    sprintf( buf, "%u", (unsigned int)pkt[0] + (unsigned int)pkt[1]*256);
-    add_rule( server, "cpu", buf, NO_FLAGS);
-    pkt++;		/* cpu speed, lsb */
-    pkt++;		/* cpu speed, msb */
-
-    len= *pkt;		/* Mod (game) */
-    add_nrule( server, "mods", (char*)pkt+1, len);
-    pkt+= len+1;
-
-    len= *pkt;		/* game (mission): "C&H" */
-    add_nrule( server, "game", (char*)pkt+1, len);
-    pkt+= len+1;
-
-    len= *pkt;		/* Mission (map) */
-    server->map_name= strndup( (char*)pkt+1, len);
-    pkt+= len+1;
-
-    len= *pkt;		/* description (contains Admin: and Email: ) */
-if ( tribes_debug) printf( "%.*s\n", len, pkt+1);
-    pkt+= len+1;
-
-    n_teams= *pkt++;		/* number of teams */
-    if ( n_teams == 255)  {
-	cleanup_qserver( server, 1);
-	return;
-    }
-    sprintf( buf, "%d", n_teams);
-    add_rule( server, "numteams", buf, NO_FLAGS);
-
-    len= *pkt;		/* first title */
-if ( tribes_debug) printf( "%.*s\n", len, pkt+1);
-    pkt+= len+1;
-
-    len= *pkt;		/* second title */
-if ( tribes_debug) printf( "%.*s\n", len, pkt+1);
-    pkt+= len+1;
-
-    if ( n_teams > 1)  {
-	teams= (struct player**) calloc( 1, sizeof(struct player*) * n_teams);
-	for ( t= 0; t < n_teams; t++)  {
-	    teams[t]= (struct player*) calloc(1, sizeof(struct player));
-	    teams[t]->number= TRIBES_TEAM;
-	    teams[t]->team= t;
-	    len= *pkt;		/* team name */
-	    teams[t]->name= strndup( (char*)pkt+1, len);
-if ( tribes_debug) printf( "team#0 <%.*s>\n", len, pkt+1);
-	    pkt+= len+1;
-
-	    len= *pkt;		/* team score */
-if ( len <= 2 && tribes_debug) printf( "%s score len %d\n", server->arg, len);
-	    if ( len > 2)  {
-		strncpy( buf, (char*)pkt+1+3, len-3);
-		buf[len-3]= '\0';
-	    }
-	    else
-		buf[0]= '\0';
-	    teams[t]->frags= atoi( buf);
-if ( tribes_debug) printf( "team#0 <%.*s>\n", len-3, pkt+1+3);
-	    pkt+= len+1;
-	}
-    }
-    else  {
-	len= *pkt;		/* DM team? */
-if ( tribes_debug) printf( "%.*s\n", len, pkt+1);
-	pkt+= len+1;
-	pkt++;
-	n_teams= 0;
-    }
-
-    pnum= 0;
-    while ( (char*)pkt < (rawpkt+pktlen))  {
-	ping= (unsigned int)*pkt << 2;
-	pkt++;
-	packet_loss= *pkt;
-	pkt++;
-if ( tribes_debug) printf( "player#%d, team #%d\n", pnum, (int)*pkt);
-	pkt++;
-	len= *pkt;
-	if ( (char*)pkt+len > (rawpkt+pktlen))
-	    break;
-	player= (struct player*) calloc( 1, sizeof(struct player));
-	player->team= pkt[-1];
-	if ( n_teams && player->team < n_teams)
-	    player->team_name= teams[player->team]->name;
-	else if ( player->team == 255 && n_teams)
-	    player->team_name= "Unknown";
-	player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
-	player->ping= ping;
-	player->packet_loss= packet_loss;
-	player->name= strndup( (char*)pkt+1, len);
-if ( tribes_debug) 	printf( "player#%d, name %.*s\n", pnum, len, pkt+1);
-	pkt+= len+1;
-	len= *pkt;
-if ( tribes_debug) printf( "player#%d, info <%.*s>\n", pnum, len, pkt+1);
-	end= (unsigned char*) strchr( (char*)pkt+9, 0x9);
-	if ( end)  {
-	    strncpy( buf, (char*)pkt+9, end-(pkt+9));
-	    buf[end-(pkt+9)]= '\0';
-	    player->frags= atoi( buf);
-if ( tribes_debug) printf( "player#%d, score <%.*s>\n", pnum, (unsigned)(end-(pkt+9)), pkt+9);
-	}
-	*last_player= player;
-	last_player= & player->next;
-
-	pkt+= len+1;
-	pnum++;
-    }
-
-    for ( t= n_teams; t;)  {
-	t--;
-	teams[t]->next= server->players;
-	server->players= teams[t];
-    }
-    free( teams);
-
-    cleanup_qserver( server, 0);
-}
-
-void
-get_tribes2_player_type( struct player *player)
-{
-    char *name= player->name;
-    for ( ; *name; name++)  {
-	switch ( *name)  {
-	case 0x8: player->type_flag= PLAYER_TYPE_NORMAL; continue;
-	case 0xc: player->type_flag= PLAYER_TYPE_ALIAS; continue;
-	case 0xe: player->type_flag= PLAYER_TYPE_BOT; continue;
-	case 0xb: break;
-	default: continue;
-	}
-	name++;
-	if ( isprint( *name))  {
-	    char *n= name;
-	    for ( ; isprint(*n); n++)
-		;
-	    player->tribe_tag= strndup( name, n-name);
-	    name= n;
-	}
-	if ( !*name)
-	    break;
-    }
-}
-
-void
-deal_with_tribes2_packet( struct qserver *server, char *pkt, int pktlen)
-{
-    char str[256], *pktstart= pkt, *term, *start;
-    unsigned int minimum_net_protocol, build_version, i, t, len, s, status;
-    unsigned int net_protocol;
-    unsigned short cpu_speed;
-    int n_teams= 0, n_players;
-    struct player **teams= NULL, *player;
-    struct player **last_player= & server->players;
-    int query_version;
-
-    pkt[pktlen]= '\0';
-
-    if ( server->server_name == NULL)
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
-/*
-    else
-	gettimeofday( &server->packet_time1, NULL);
-*/
-
-    if ( pkt[0] == TRIBES2_RESPONSE_PING)  {
-	if ( pkt[6] < 4 || pkt[6] > 12 || strncmp( pkt+7, "VER", 3) != 0)  {
-	    cleanup_qserver( server, 1);
-	    return;
-	}
-	strncpy( str, pkt+10, pkt[6]-3);
-	str[ pkt[6]-3]= '\0';
-	query_version= atoi( str);
-	add_nrule(server,"queryversion", pkt+7, pkt[6]);
-	pkt+= 7 + pkt[6];
-
-	server->protocol_version= query_version;
-	if ( query_version != 3 && query_version != 5) {
-	    server->server_name= strdup( "Unknown query version");
-	    cleanup_qserver( server, 1);
-	    return;
-	}
-
-	if ( query_version == 5)  {
-	    net_protocol= swap_long_from_little( pkt);
-	    sprintf( str, "%u", net_protocol);
-	    add_rule(server,"net_protocol",str, NO_FLAGS);
-	    pkt+= 4;
-	}
-	minimum_net_protocol= swap_long_from_little( pkt);
-	sprintf( str, "%u", minimum_net_protocol);
-	add_rule(server,"minimum_net_protocol",str, NO_FLAGS);
-	pkt+= 4;
-	build_version= swap_long_from_little( pkt);
-	sprintf( str, "%u", build_version);
-	add_rule(server,"build_version",str, NO_FLAGS);
-	pkt+= 4;
-
-	server->server_name= strndup( pkt+1, *(unsigned char*)(pkt));
-
-	/* Always send the player request because the ping packet
-	 * contains very little information */
-	send_player_request_packet(server);
-	return;
-    }
-    else if ( pkt[0] != TRIBES2_RESPONSE_INFO)  {
-	cleanup_qserver( server, 1);
-	return;
-    }
-
-    pkt+= 6;
-    for ( i= 0; i < *(unsigned char *)pkt; i++)
-	if ( !isprint(pkt[i+1]))  {
-	    cleanup_qserver( server, 1);
-	    return;
-	}
-    add_nrule( server, server->type->game_rule, pkt+1, *(unsigned char *)pkt);
-    server->game= strndup( pkt+1, *(unsigned char *)pkt);
-    pkt+= *pkt + 1;
-    add_nrule( server, "mission", pkt+1, *(unsigned char *)pkt);
-    pkt+= *pkt + 1;
-    server->map_name= strndup( pkt+1, *(unsigned char *)pkt);
-    pkt+= *pkt + 1;
-
-    status= *(unsigned char *)pkt;
-    sprintf( str, "%u", status);
-    add_rule( server, "status", str, NO_FLAGS);
-    if ( status & TRIBES2_STATUS_DEDICATED)
-	add_rule( server, "dedicated", "1", NO_FLAGS);
-    if ( status & TRIBES2_STATUS_PASSWORD)
-	add_rule( server, "password", "1", NO_FLAGS);
-    if ( status & TRIBES2_STATUS_LINUX)
-	add_rule( server, "linux", "1", NO_FLAGS);
-    if ( status & TRIBES2_STATUS_TEAMDAMAGE)
-	add_rule( server, "teamdamage", "1", NO_FLAGS);
-    if ( server->protocol_version == 3)  {
-	if ( status & TRIBES2_STATUS_TOURNAMENT_VER3)
-	    add_rule( server, "tournament", "1", NO_FLAGS);
-	if ( status & TRIBES2_STATUS_NOALIAS_VER3)
-	    add_rule( server, "no_aliases", "1", NO_FLAGS);
-    }
-    else  {
-	if ( status & TRIBES2_STATUS_TOURNAMENT)
-	    add_rule( server, "tournament", "1", NO_FLAGS);
-	if ( status & TRIBES2_STATUS_NOALIAS)
-	    add_rule( server, "no_aliases", "1", NO_FLAGS);
-    }
-    pkt++;
-    server->num_players= *(unsigned char *)pkt;
-    pkt++;
-    server->max_players= *(unsigned char *)pkt;
-    pkt++;
-    sprintf( str, "%u", *(unsigned char *)pkt);
-    add_rule( server, "bot_count", str, NO_FLAGS);
-    pkt++;
-    cpu_speed= swap_short_from_little( pkt);
-    sprintf( str, "%hu", cpu_speed);
-    add_rule( server, "cpu_speed", str, NO_FLAGS);
-    pkt+= 2;
-
-    if ( strcmp( server->server_name, "VER3") == 0)  {
-	free( server->server_name);
-	server->server_name= strndup( pkt+1, *(unsigned char*)pkt);
-    }
-    else
-	add_nrule( server, "info", pkt+1, *(unsigned char*)pkt);
-
-    pkt+= *(unsigned char*)pkt + 1;
-    len= swap_short_from_little( pkt);
-    pkt+= 2;
-    start= pkt;
-    if ( len+(pkt-pktstart) > pktlen)
-	len-= (len+(pkt-pktstart)) - pktlen;
-
-    if ( len == 0 || pkt-pktstart >= pktlen) goto info_done;
-
-    term= strchr( pkt, 0xa);
-    if ( !term) goto info_done;
-    *term= '\0';
-    n_teams= atoi( pkt);
-    sprintf( str, "%d", n_teams);
-    add_rule( server, "numteams", str, NO_FLAGS);
-    pkt= term + 1;
-
-    if ( pkt-pktstart >= pktlen) goto info_done;
-
-    teams= (struct player**) calloc( 1, sizeof(struct player*) * n_teams);
-    for ( t= 0; t < n_teams; t++)  {
-	teams[t]= (struct player*) calloc(1, sizeof(struct player));
-	teams[t]->number= TRIBES_TEAM;
-	teams[t]->team= t;
-	/* team name */
-	term= strchr( pkt, 0x9);
-	if ( !term) { n_teams= t; goto info_done; }
-	teams[t]->name= strndup( pkt, term-pkt);
-	pkt= term+1;
-	term= strchr( pkt, 0xa);
-	if ( !term) { n_teams= t; goto info_done; }
-	*term='\0';
-	teams[t]->frags= atoi(pkt);
-	pkt= term+1;
-	if ( pkt-pktstart >= pktlen) goto info_done;
-    }
-
-    term= strchr( pkt, 0xa);
-    if ( !term || term-start >= len) goto info_done;
-    *term= '\0';
-    n_players= atoi( pkt);
-    pkt= term + 1;
-
-    for ( i= 0; i < n_players && pkt-start < len; i++)  {
-	pkt++;		/* skip first byte (0x10) */
-	if ( pkt-start >= len) break;
-	player= (struct player*) calloc( 1, sizeof(struct player));
-	term= strchr( pkt, 0x11);
-	if ( !term || term-start >= len) {
-	    free( player);
-	    break;
-	}
-	player->name= strndup( pkt, term-pkt);
-	get_tribes2_player_type( player);
-	pkt= term+1;
-	pkt++;		/* skip 0x9 */
-	if ( pkt-start >= len) break;
-	term= strchr( pkt, 0x9);
-	if ( !term || term-start >= len) {
-	    free( player->name);
-	    free( player);
-	    break;
-	}
-	for ( t= 0; t < n_teams; t++)  {
-	    if ( term-pkt == strlen(teams[t]->name) &&
-			strncmp( pkt, teams[t]->name, term-pkt) == 0)
-		break;
-	}
-	if ( t == n_teams)  {
-	    player->team= -1;
-	    player->team_name= "Unassigned";
-	}
-	else  {
-	    player->team= t;
-	    player->team_name= teams[t]->name;
-	}
-	player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
-	pkt= term+1;
-	for ( s= 0; *pkt != 0xa && pkt-start < len; pkt++)
-	    str[s++]= *pkt;
-	str[s]= '\0';
-	player->frags= atoi(str);
-	if ( *pkt == 0xa)
-	    pkt++;
-
-	*last_player= player;
-	last_player= & player->next;
-    }
-
-info_done:
-    for ( t= n_teams; t;)  {
-	t--;
-	teams[t]->next= server->players;
-	server->players= teams[t];
-    }
-    if ( teams) free( teams);
-
-    cleanup_qserver( server, 1);
-    return;
-}
-
-static const char GrPacketHead[]={'\xc0','\xde','\xf1','\x11'};
-static const char PacketStart='\x42';
-static char Dat2Reply1_2_10[]={'\xf4','\x03','\x14','\x02','\x0a','\x41','\x02','\x0a','\x41','\x00','\x00','\x78','\x30','\x63'};
-static char Dat2Reply1_3[]   ={'\xf4','\x03','\x14','\x03','\x05','\x41','\x03','\x05','\x41','\x00','\x00','\x78','\x30','\x63'};
-static char Dat2Reply1_4[]   ={'\xf4','\x03','\x14','\x04','\x00','\x41','\x04','\x00','\x41','\x00','\x00','\x78','\x30','\x63'};
+	'\xc0', '\xde', '\xf1', '\x11'
+};
+static const char PacketStart = '\x42';
+static char Dat2Reply1_2_10[] =
+{
+	'\xf4', '\x03', '\x14', '\x02', '\x0a', '\x41', '\x02', '\x0a', '\x41', '\x00', '\x00', '\x78', '\x30', '\x63'
+};
+static char Dat2Reply1_3[] =
+{
+	'\xf4', '\x03', '\x14', '\x03', '\x05', '\x41', '\x03', '\x05', '\x41', '\x00', '\x00', '\x78', '\x30', '\x63'
+};
+static char Dat2Reply1_4[] =
+{
+	'\xf4', '\x03', '\x14', '\x04', '\x00', '\x41', '\x04', '\x00', '\x41', '\x00', '\x00', '\x78', '\x30', '\x63'
+};
 //static char HDat2[]={'\xea','\x03','\x02','\x00','\x14'};
 
 #define SHORT_GR_LEN	75
@@ -8343,349 +9359,394 @@
 #define VERSION_1_3	2
 #define VERSION_1_4	3
 
-void
-deal_with_ghostrecon_packet( struct qserver *server, char *pkt, int pktlen)
+int deal_with_ghostrecon_packet(struct qserver *server, char *pkt, int pktlen)
 {
-    char str[256], *start, *end, StartFlag, *lpszIgnoreServerPlayer;
-    char *lpszMission;
-    unsigned int iIgnoreServerPlayer, iDedicatedServer, iUseStartTimer;
-    unsigned short GrPayloadLen;
-    int i;
-    struct player *player;
-    int iLen, iTemp;
+	char str[256], *start, *end, StartFlag, *lpszIgnoreServerPlayer;
+	char *lpszMission;
+	unsigned int iIgnoreServerPlayer, iDedicatedServer, iUseStartTimer;
+	unsigned short GrPayloadLen;
+	int i;
+	struct player *player;
+	int iLen, iTemp;
 	short sLen;
 	int iSecsPlayed;
 	long iSpawnType;
-	int ServerVersion=UNKNOWN_VERSION;
+	int ServerVersion = UNKNOWN_VERSION;
 	float flStartTimerSetPoint;
 
+	debug( 2, "deal_with_ghostrecon_packet %p, %d", server, pktlen );
+
 	start = pkt;
-	end=&pkt[pktlen];
-    pkt[pktlen]= '\0';
+	end = &pkt[pktlen];
+	pkt[pktlen] = '\0';
 
-/*
-	This function walks a packet that is recieved from a ghost recon server - default from port 2348.  It does quite a few
-	sanity checks along the way as the structure is not documented.  The packet is mostly binary in nature with many string
-	fields being variable in length,  ie the length is listed foloowed by that many bytes.  There are two structure arrays
-	that have an array size followed by structure size * number of elements (player name and player data).  This routine
+	/*
+	This function walks a packet that is recieved from a ghost recon server - default from port 2348. It does quite a few
+	sanity checks along the way as the structure is not documented. The packet is mostly binary in nature with many string
+	fields being variable in length, ie the length is listed foloowed by that many bytes. There are two structure arrays
+	that have an array size followed by structure size * number of elements (player name and player data). This routine
 	walks this packet and increments a pointer "pkt" to extract the info.
-*/
+	 */
 
 
-    if ( server->server_name == NULL)
-	server->ping_total+= time_delta( &packet_recv_time,
-		&server->packet_time1);
+	if (server->server_name == NULL)
+	{
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+	}
 
 	/* sanity check against packet */
-	if (memcmp(pkt,GrPacketHead,sizeof(GrPacketHead))!=0)
+	if (memcmp(pkt, GrPacketHead, sizeof(GrPacketHead)) != 0)
 	{
-		server->server_name= strdup( "Unknown Packet Header");
-		cleanup_qserver( server, 1);
-		return;
-	};
+		server->server_name = strdup("Unknown Packet Header");
+		return PKT_ERROR;
+	}
 
 	pkt += sizeof(GrPacketHead);
-	StartFlag=pkt[0];
+	StartFlag = pkt[0];
 	pkt += 1;
 	if (StartFlag != 0x42)
 	{
-		server->server_name= strdup( "Unknown Start Flag");
-		cleanup_qserver( server, 1);
-		return;
-	};
+		server->server_name = strdup("Unknown Start Flag");
+		return PKT_ERROR;
+	}
 
 	/* compare packet length recieved to included size - header info */
 	sLen = swap_short_from_little(pkt);
 	pkt += 2;
-	GrPayloadLen = pktlen - sizeof(GrPacketHead) -3; // 3 = size slen + size start flag
+	GrPayloadLen = pktlen - sizeof(GrPacketHead) - 3;
+	// 3 = size slen + size start flag
 
 	if (sLen != GrPayloadLen)
 	{
-		server->server_name= strdup( "Packet Size Mismatch");
-		cleanup_qserver( server, 1);
-		return;
-	};
+		server->server_name = strdup("Packet Size Mismatch");
+		return PKT_ERROR;
+	}
 
-/*
-Will likely need to verify and add to this "if" construct with every patch / add-on.
-*/
-	if (memcmp(pkt, Dat2Reply1_2_10, sizeof(Dat2Reply1_2_10)) == 0) ServerVersion=VERSION_1_2_10;
-	else if (memcmp(pkt, Dat2Reply1_3, sizeof(Dat2Reply1_3)) == 0) ServerVersion=VERSION_1_3;
-	else if (memcmp(pkt, Dat2Reply1_4, sizeof(Dat2Reply1_4)) == 0) ServerVersion=VERSION_1_4;
+	/*
+	Will likely need to verify and add to this "if" construct with every patch / add-on.
+	 */
+	if (memcmp(pkt, Dat2Reply1_2_10, sizeof(Dat2Reply1_2_10)) == 0)
+	{
+		ServerVersion = VERSION_1_2_10;
+	}
+	else if (memcmp(pkt, Dat2Reply1_3, sizeof(Dat2Reply1_3)) == 0)
+	{
+		ServerVersion = VERSION_1_3;
+	}
+	else if (memcmp(pkt, Dat2Reply1_4, sizeof(Dat2Reply1_4)) == 0)
+	{
+		ServerVersion = VERSION_1_4;
+	}
 
 	if (ServerVersion == UNKNOWN_VERSION)
 	{
-		server->server_name= strdup( "Unknown GR Version");
-		cleanup_qserver( server, 1);
-		return;
-    };
+		server->server_name = strdup("Unknown GR Version");
+		return PKT_ERROR;
+	}
 
 	switch (ServerVersion)
 	{
 	case VERSION_1_2_10:
-		{
-			strcpy(str,"1.2.10");
-			pkt+=sizeof(Dat2Reply1_2_10);
-			break;
-		};
+		strcpy(str, "1.2.10");
+		pkt += sizeof(Dat2Reply1_2_10);
+		break;
+
 	case VERSION_1_3:
-		{
-			strcpy(str,"1.3");
-			pkt+=sizeof(Dat2Reply1_3);
-			break;
-		};
+		strcpy(str, "1.3");
+		pkt += sizeof(Dat2Reply1_3);
+		break;
+
 	case VERSION_1_4:
-		{
-			strcpy(str,"1.4");
-			pkt+=sizeof(Dat2Reply1_4);
-			break;
-		};
+		strcpy(str, "1.4");
+		pkt += sizeof(Dat2Reply1_4);
+		break;
 
-	};
+	}
 	add_rule(server, "patch", str, NO_FLAGS);
 
 	/* have player packet */
 
-	// Ghost recon has one of the player slots filled up with the server program itself.  By default we will
-	// drop the first player listed.  This causes a bit of a mess here and below but makes for the best display
+	// Ghost recon has one of the player slots filled up with the server program itself. By default we will
+	// drop the first player listed. This causes a bit of a mess here and below but makes for the best display
 	// a user can specify -grs,ignoreserverplayer=no to override this behaviour.
 
-	lpszIgnoreServerPlayer = get_param_value( server, "ignoreserverplayer", "yes");
-	for (i=0; i<4; i++) str[i]=tolower(lpszIgnoreServerPlayer[i]);
-	if (strcmp(str,"yes")==0)iIgnoreServerPlayer=1;
-	else iIgnoreServerPlayer=0;
+	lpszIgnoreServerPlayer = get_param_value(server, "ignoreserverplayer", "yes");
+	for (i = 0; i < 4; i++)
+	{
+		str[i] = tolower(lpszIgnoreServerPlayer[i]);
+	}
+	if (strcmp(str, "yes") == 0)
+	{
+		iIgnoreServerPlayer = 1;
+	}
+	else
+	{
+		iIgnoreServerPlayer = 0;
+	}
 
-	pkt+=4; /* unknown */
+	pkt += 4; /* unknown */
 
 
-	// this is the first of many variable strings.  get the length,
+	// this is the first of many variable strings. get the length,
 	// increment pointer over length, check for sanity,
 	// get the string, increment the pointer over string (using length)
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >SHORT_GR_LEN))
+	if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 	{
-		server->server_name= strdup( "Server Name too Long");
-		cleanup_qserver(server, 1);
-		return;
-	};
-	server->server_name = strndup( pkt, iLen);
+		server->server_name = strdup("Server Name too Long");
+		return PKT_ERROR;
+	}
+	server->server_name = strndup(pkt, iLen);
 	pkt += iLen;
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >SHORT_GR_LEN))
+	if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 	{
 		add_rule(server, "error", "Map Name too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	server->map_name = strndup( pkt, iLen);
+		return PKT_ERROR;
+	}
+	server->map_name = strndup(pkt, iLen);
 	pkt += iLen;
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >SHORT_GR_LEN))
+	if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 	{
-		add_rule(server, "error",  "Mission Name too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	/* mission does not make sense unless a coop game type.  Since
-	   we dont know that now, we will save the mission and set
-	   the rule and free memory below when we know game type */
-	lpszMission = strndup( pkt, iLen);
+		add_rule(server, "error", "Mission Name too Long", NO_FLAGS);
+		return PKT_ERROR;
+	}
+	/* mission does not make sense unless a coop game type. Since
+	we dont know that now, we will save the mission and set
+	the rule and free memory below when we know game type */
+	lpszMission = strndup(pkt, iLen);
 	pkt += iLen;
 
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >SHORT_GR_LEN))
+	if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 	{
-		add_rule(server, "error",  "Mission Type too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	add_nrule( server, "missiontype", pkt, iLen);
+		add_rule(server, "error", "Mission Type too Long", NO_FLAGS);
+		return PKT_ERROR;
+	}
+	add_nrule(server, "missiontype", pkt, iLen);
 	pkt += iLen;
 
-	if ( pkt[1])
+	if (pkt[1])
 	{
-		add_rule( server, "password", "Yes", NO_FLAGS);
-	} else
+		add_rule(server, "password", "Yes", NO_FLAGS);
+	}
+	else
 	{
-		add_rule( server, "password", "No", NO_FLAGS);
-	};
+		add_rule(server, "password", "No", NO_FLAGS);
+	}
 	pkt += 2;
 
-	server->max_players= swap_long_from_little(pkt);
+	server->max_players = swap_long_from_little(pkt);
 	pkt += 4;
 	if (server->max_players > 36)
 	{
-		add_rule(server, "error",  "Max players more then 36", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
+		add_rule(server, "error", "Max players more then 36", NO_FLAGS);
+		return PKT_ERROR;
+	}
 
-	server->num_players= swap_long_from_little(pkt);
+	server->num_players = swap_long_from_little(pkt);
 	pkt += 4;
 	if (server->num_players > server->max_players)
 	{
 		add_rule(server, "error", "More then MAX Players", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
+		return PKT_ERROR;
+	}
 
-	if (iIgnoreServerPlayer) // skip past first player
+	if (iIgnoreServerPlayer)
+	// skip past first player
 	{
 		server->num_players--;
 		server->max_players--;
 		iLen = swap_long_from_little(pkt);
 		pkt += 4;
 		pkt += iLen;
-	};
+	}
 
-	for (i=0;i<server->num_players;i++) // read each player name
+	for (i = 0; i < server->num_players; i++)
+	// read each player name
 	{
 		iLen = swap_long_from_little(pkt);
 		pkt += 4;
 
-		player= (struct player*) calloc( 1, sizeof(struct player));
+		player = (struct player*)calloc(1, sizeof(struct player));
 
-		if ((iLen<1) || (iLen >SHORT_GR_LEN))
+		if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 		{
 			add_rule(server, "error", "Player Name too Long", NO_FLAGS);
-			cleanup_qserver(server, 1);
-			return;
-		};
-		player->name= strndup( pkt, iLen);
-		pkt += iLen;  /* player name */
-		player->team= i; // tag so we can find this record when we have player dat.
-		player->team_name= "Unassigned";
+			return PKT_ERROR;
+		}
+		player->name = strndup(pkt, iLen);
+		pkt += iLen; /* player name */
+		player->team = i; // tag so we can find this record when we have player dat.
+		player->team_name = "Unassigned";
 		player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
-		player->frags=0;
+		player->frags = 0;
 
-		player->next= server->players;
-		server->players= player;
-	};
+		player->next = server->players;
+		server->players = player;
+	}
 
 	pkt += 17;
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >SHORT_GR_LEN))
+	if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 	{
-		add_rule(server, "error",  "Version too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	strncpy(str,pkt,iLen);
-	add_rule( server, "version", str, NO_FLAGS);
-	pkt += iLen;  /* version */
+		add_rule(server, "error", "Version too Long", NO_FLAGS);
+		return PKT_ERROR;
+	}
+	strncpy(str, pkt, iLen);
+	add_rule(server, "version", str, NO_FLAGS);
+	pkt += iLen; /* version */
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >LONG_GR_LEN))
+	if ((iLen < 1) || (iLen > LONG_GR_LEN))
 	{
-		add_rule(server, "error",  "Mods too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	server->game= strndup( pkt, iLen);
+		add_rule(server, "error", "Mods too Long", NO_FLAGS);
+		return PKT_ERROR;
+	}
+	server->game = strndup(pkt, iLen);
 
-	for (i=0;i<(int)strlen(server->game)-5;i++)  // clean the "/mods/" part from every entry
+	for (i = 0; i < (int)strlen(server->game) - 5; i++)
+	// clean the "/mods/" part from every entry
 	{
-		if (memcmp(&server->game[i],"\\mods\\",6)==0)
+		if (memcmp(&server->game[i], "\\mods\\", 6) == 0)
 		{
-			server->game[i]=' ';
-			strcpy(&server->game[i+1],&server->game[i+6]);
-		};
-	};
-	add_rule(server, "game",  server->game, NO_FLAGS);
+			server->game[i] = ' ';
+			strcpy(&server->game[i + 1], &server->game[i + 6]);
+		}
+	}
+	add_rule(server, "game", server->game, NO_FLAGS);
 
-	pkt += iLen;  /* mods */
+	pkt += iLen; /* mods */
 
-	iDedicatedServer=pkt[0];
-	if ( iDedicatedServer)
-		add_rule( server, "dedicated", "Yes", NO_FLAGS);
+	iDedicatedServer = pkt[0];
+	if (iDedicatedServer)
+	{
+		add_rule(server, "dedicated", "Yes", NO_FLAGS);
+	}
 	else
-		add_rule( server, "dedicated", "No", NO_FLAGS);
+	{
+		add_rule(server, "dedicated", "No", NO_FLAGS);
+	}
 
-	pkt += 1;  /* unknown */
+	pkt += 1; /* unknown */
 
 	iSecsPlayed = swap_float_from_little(pkt);
 
-	add_rule(server, "timeplayed", play_time(iSecsPlayed,2), NO_FLAGS);
+	add_rule(server, "timeplayed", play_time(iSecsPlayed, 2), NO_FLAGS);
 
-	pkt += 4;  /* time played */
+	pkt += 4; /* time played */
 
-	switch (pkt[0]) {
-	case 3 : strcpy(str,"Joining"); break;
-	case 4 : strcpy(str,"Playing"); break;
-	case 5 : strcpy(str,"Debrief"); break;
-	default : strcpy(str,"Undefined");
-	};
-	add_rule( server, "status", str, NO_FLAGS);
+	switch (pkt[0])
+	{
+	case 3:
+		strcpy(str, "Joining");
+		break;
+	case 4:
+		strcpy(str, "Playing");
+		break;
+	case 5:
+		strcpy(str, "Debrief");
+		break;
+	default:
+		strcpy(str, "Undefined");
+	}
+	add_rule(server, "status", str, NO_FLAGS);
 
 	pkt += 1;
 
-	pkt += 3;  /* unknown */
+	pkt += 3; /* unknown */
 
 
-	switch (pkt[0]) {
-	case 2: strcpy(str,"COOP"); break;
-	case 3: strcpy(str,"SOLO"); break;
-	case 4: strcpy(str,"TEAM"); break;
-	default: sprintf(str,"UNKOWN %u",pkt[0]); break;
-	};
+	switch (pkt[0])
+	{
+		case 2:
+			strcpy(str, "COOP");
+			break;
+		case 3:
+			strcpy(str, "SOLO");
+			break;
+		case 4:
+			strcpy(str, "TEAM");
+			break;
+		default:
+			sprintf(str, "UNKOWN %u", pkt[0]);
+			break;
+	}
 
-	add_rule( server, "gamemode", str, NO_FLAGS);
+	add_rule(server, "gamemode", str, NO_FLAGS);
 
-	if (pkt[0]==2)
-		add_rule( server, "mission", lpszMission, NO_FLAGS);
+	if (pkt[0] == 2)
+	{
+		add_rule(server, "mission", lpszMission, NO_FLAGS);
+	}
 	else
-		add_rule( server, "mission", "No Mission", NO_FLAGS);
+	{
+		add_rule(server, "mission", "No Mission", NO_FLAGS);
+	}
 
 	free(lpszMission);
 
-	pkt += 1;  /* Game Mode */
+	pkt += 1; /* Game Mode */
 
-	pkt += 3;  /* unknown */
+	pkt += 3; /* unknown */
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >LONG_GR_LEN))
+	if ((iLen < 1) || (iLen > LONG_GR_LEN))
 	{
-		add_rule(server, "error",  "MOTD too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	strncpy(str,pkt,sizeof(str));
-	str[sizeof(str)-1]=0;
+		add_rule(server, "error", "MOTD too Long", NO_FLAGS);
+		return PKT_ERROR;
+	}
+	strncpy(str, pkt, sizeof(str));
+	str[sizeof(str) - 1] = 0;
 	add_rule(server, "motd", str, NO_FLAGS);
-	pkt += iLen;  /* MOTD */
+	pkt += iLen; /* MOTD */
 
 	iSpawnType = swap_long_from_little(pkt);
 
-	switch (iSpawnType) {
-	case 0: strcpy(str,"None"); break;
-	case 1: strcpy(str,"Individual"); break;
-	case 2: strcpy(str,"Team"); break;
-	case 3: strcpy(str,"Infinite"); break;
-	default:strcpy(str,"Unknown");
-	};
+	switch (iSpawnType)
+	{
+	case 0:
+		strcpy(str, "None");
+		break;
+	case 1:
+		strcpy(str, "Individual");
+		break;
+	case 2:
+		strcpy(str, "Team");
+		break;
+	case 3:
+		strcpy(str, "Infinite");
+		break;
+	default:
+		strcpy(str, "Unknown");
+	}
 
-	add_rule( server, "spawntype", str, NO_FLAGS);
-	pkt += 4;  /* spawn type */
+	add_rule(server, "spawntype", str, NO_FLAGS);
+	pkt += 4; /* spawn type */
 
 	iTemp = swap_float_from_little(pkt);
-	add_rule(server, "gametime", play_time(iTemp,2), NO_FLAGS);
+	add_rule(server, "gametime", play_time(iTemp, 2), NO_FLAGS);
 
-	iTemp = iTemp-iSecsPlayed;
+	iTemp = iTemp - iSecsPlayed;
 
-	if (iTemp <= 0) iTemp=0;
-	add_rule(server, "remainingtime", play_time(iTemp,2), NO_FLAGS);
+	if (iTemp <= 0)
+	{
+		iTemp = 0;
+	}
+	add_rule(server, "remainingtime", play_time(iTemp, 2), NO_FLAGS);
 	pkt += 4; /* Game time */
 
 
@@ -8693,238 +9754,281 @@
 	if (iIgnoreServerPlayer)
 	{
 		iTemp--;
-	};
+	}
 	if (iTemp != server->num_players)
 	{
-		add_rule(server, "error",  "Number of Players Mismatch", NO_FLAGS);
-	};
+		add_rule(server, "error", "Number of Players Mismatch", NO_FLAGS);
+	}
 
 
 	pkt += 4; /* player count 2 */
 
 	if (iIgnoreServerPlayer)
 	{
-		pkt+=5;  // skip first player data
-	};
+		pkt += 5; // skip first player data
+	}
 
-	for (i=0;i<server->num_players;i++) // for each player get binary data
+	for (i = 0; i < server->num_players; i++)
+	// for each player get binary data
 	{
-		player=server->players;			// first we must find the player - lets look for the tag
-		while (player && (player->team != i)) player=player->next; /* get to player - linked list is in reverse order */
+		player = server->players;
+		// first we must find the player - lets look for the tag
+		while (player && (player->team != i))
+		{
+			player = player->next;
+		}
+		/* get to player - linked list is in reverse order */
 
 		if (player)
 		{
-			player->team= pkt[2];
+			player->team = pkt[2];
 			switch (player->team)
 			{
-			case 1: player->team_name= "Red"; break;
-			case 2: player->team_name= "Blue"; break;
-			case 3: player->team_name= "Yellow"; break;
-			case 4: player->team_name= "Green"; break;
-			case 5: player->team_name= "Unassigned"; break;
-			default: player->team_name= "Not Known"; break;
-			};
+			case 1:
+				player->team_name = "Red";
+				break;
+			case 2:
+				player->team_name = "Blue";
+				break;
+			case 3:
+				player->team_name = "Yellow";
+				break;
+			case 4:
+				player->team_name = "Green";
+				break;
+			case 5:
+				player->team_name = "Unassigned";
+				break;
+			default:
+				player->team_name = "Not Known";
+				break;
+			}
 			player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
-			player->deaths=pkt[1];
-		};
+			player->deaths = pkt[1];
+		}
 		pkt += 5; /* player data*/
-	};
+	}
 
-	for (i=0;i<5;i++)
+	for (i = 0; i < 5; i++)
 	{
 		pkt += 8; /* team data who knows what they have in here */
-	};
+	}
 
-	pkt +=1;
-	iUseStartTimer=pkt[0]; // UseStartTimer
+	pkt += 1;
+	iUseStartTimer = pkt[0]; // UseStartTimer
 
-	pkt +=1;
+	pkt += 1;
 
-	iTemp = flStartTimerSetPoint = swap_float_from_little(pkt);// Start Timer Set Point
+	iTemp = flStartTimerSetPoint = swap_float_from_little(pkt);
+	// Start Timer Set Point
 	pkt += 4;
 
 	if (iUseStartTimer)
 	{
-		add_rule( server, "usestarttime", "Yes", NO_FLAGS);
-		add_rule( server, "starttimeset", play_time(iTemp,2), NO_FLAGS);
-	} else
+		add_rule(server, "usestarttime", "Yes", NO_FLAGS);
+		add_rule(server, "starttimeset", play_time(iTemp, 2), NO_FLAGS);
+	}
+	else
 	{
-		add_rule( server, "usestarttime", "No", NO_FLAGS);
-		add_rule( server, "starttimeset", play_time(0,2), NO_FLAGS);
-	};
+		add_rule(server, "usestarttime", "No", NO_FLAGS);
+		add_rule(server, "starttimeset", play_time(0, 2), NO_FLAGS);
+	}
 
-	if ((ServerVersion == VERSION_1_3) ||  // stuff added in patch 1.3
-		(ServerVersion == VERSION_1_4))
+	if ((ServerVersion == VERSION_1_3) || // stuff added in patch 1.3
+	(ServerVersion == VERSION_1_4))
 	{
-		iTemp = swap_float_from_little(pkt);// Debrief Time
-		add_rule( server, "debrieftime", play_time(iTemp,2), NO_FLAGS);
+		iTemp = swap_float_from_little(pkt); // Debrief Time
+		add_rule(server, "debrieftime", play_time(iTemp, 2), NO_FLAGS);
 		pkt += 4;
 
-		iTemp = swap_float_from_little(pkt);// Respawn Min
-		add_rule( server, "respawnmin", play_time(iTemp,2), NO_FLAGS);
+		iTemp = swap_float_from_little(pkt); // Respawn Min
+		add_rule(server, "respawnmin", play_time(iTemp, 2), NO_FLAGS);
 		pkt += 4;
 
-		iTemp = swap_float_from_little(pkt);// Respawn Max
-		add_rule( server, "respawnmax", play_time(iTemp,2), NO_FLAGS);
+		iTemp = swap_float_from_little(pkt); // Respawn Max
+		add_rule(server, "respawnmax", play_time(iTemp, 2), NO_FLAGS);
 		pkt += 4;
 
-		iTemp = swap_float_from_little(pkt);// Respawn Invulnerable
-		add_rule( server, "respawnsafe", play_time(iTemp,2), NO_FLAGS);
+		iTemp = swap_float_from_little(pkt); // Respawn Invulnerable
+		add_rule(server, "respawnsafe", play_time(iTemp, 2), NO_FLAGS);
 		pkt += 4;
-	} else
+	}
+	else
 	{
-		add_rule( server, "debrieftime", "Undefined", NO_FLAGS);
-		add_rule( server, "respawnmin", "Undefined", NO_FLAGS);
-		add_rule( server, "respawnmax", "Undefined", NO_FLAGS);
-		add_rule( server, "respawnsafe", "Undefined", NO_FLAGS);
+		add_rule(server, "debrieftime", "Undefined", NO_FLAGS);
+		add_rule(server, "respawnmin", "Undefined", NO_FLAGS);
+		add_rule(server, "respawnmax", "Undefined", NO_FLAGS);
+		add_rule(server, "respawnsafe", "Undefined", NO_FLAGS);
 
-	};
+	}
 
 
-	pkt+=4; // 4
-	iTemp=pkt[0]; // Spawn Count
+	pkt += 4; // 4
+	iTemp = pkt[0]; // Spawn Count
 
-	if ((iSpawnType == 1) || (iSpawnType == 2))   /* Individual or team */
-		sprintf( str, "%u", iTemp);
-	else /* else not used */
-		sprintf( str, "%u", 0);
-	add_rule( server, "spawncount", str, NO_FLAGS);
+	if ((iSpawnType == 1) || (iSpawnType == 2))
+	/* Individual or team */
+	{
+		sprintf(str, "%u", iTemp);
+	}
+	else
+	/* else not used */
+	{
+		sprintf(str, "%u", 0);
+	}
+	add_rule(server, "spawncount", str, NO_FLAGS);
 	pkt += 1; // 5
 
-	pkt +=4; // 9
+	pkt += 4; // 9
 
-	iTemp=pkt[0];  // Allow Observers
+	iTemp = pkt[0]; // Allow Observers
 	if (iTemp)
-		strcpy( str, "Yes");
-	else /* else not used */
-		strcpy( str, "No");
-	add_rule( server, "allowobservers", str, NO_FLAGS);
-	pkt +=1; // 10
+	{
+		strcpy(str, "Yes");
+	}
+	else
+	/* else not used */
+	{
+		strcpy(str, "No");
+	}
+	add_rule(server, "allowobservers", str, NO_FLAGS);
+	pkt += 1; // 10
 
-	pkt +=3; // 13
+	pkt += 3; // 13
 
 	//	pkt += 13;
 
 	if (iUseStartTimer)
 	{
-		iTemp=swap_float_from_little(pkt);  // Start Timer Count
-		add_rule( server, "startwait", play_time(iTemp,2), NO_FLAGS);
+		iTemp = swap_float_from_little(pkt); // Start Timer Count
+		add_rule(server, "startwait", play_time(iTemp, 2), NO_FLAGS);
 	}
 	else
 	{
-		add_rule( server, "startwait", play_time(0,2), NO_FLAGS);
-	};
-	pkt += 4;  //17
+		add_rule(server, "startwait", play_time(0, 2), NO_FLAGS);
+	}
+	pkt += 4; //17
 
-	iTemp = pkt[0]; //  IFF
+	iTemp = pkt[0]; // IFF
 	switch (iTemp)
 	{
-	case 0 : strcpy(str,"None"); break;
-	case 1 : strcpy(str,"Reticule"); break;
-	case 2 : strcpy(str,"Names"); break;
-	default : strcpy(str,"Unknown"); break;
-	};
-	add_rule( server, "iff", str, NO_FLAGS);
+		case 0:
+			strcpy(str, "None");
+			break;
+		case 1:
+			strcpy(str, "Reticule");
+			break;
+		case 2:
+			strcpy(str, "Names");
+			break;
+		default:
+			strcpy(str, "Unknown");
+			break;
+	}
+	add_rule(server, "iff", str, NO_FLAGS);
 	pkt += 1; // 18
 
-	iTemp = pkt [0]; // Threat Indicator
-	if (iTemp) add_rule(server, "ti", "ON ", NO_FLAGS);
-	else add_rule(server, "ti", "OFF", NO_FLAGS);
+	iTemp = pkt[0]; // Threat Indicator
+	if (iTemp)
+	{
+		add_rule(server, "ti", "ON ", NO_FLAGS);
+	}
+	else
+	{
+		add_rule(server, "ti", "OFF", NO_FLAGS);
+	}
 
-	pkt += 1;  // 19
+	pkt += 1; // 19
 
-	pkt += 5;  // 24
+	pkt += 5; // 24
 
 
 	iLen = swap_long_from_little(pkt);
 	pkt += 4;
-	if ((iLen<1) || (iLen >SHORT_GR_LEN) )
+	if ((iLen < 1) || (iLen > SHORT_GR_LEN))
 	{
-		add_rule(server, "error",  "Restrictions too Long", NO_FLAGS);
-		cleanup_qserver(server, 1);
-		return;
-	};
-	add_rule( server, "restrict", pkt, NO_FLAGS);
-	pkt += iLen;  /* restrictions */
+		add_rule(server, "error", "Restrictions too Long", NO_FLAGS);
+		return PKT_ERROR;
+	}
+	add_rule(server, "restrict", pkt, NO_FLAGS);
+	pkt += iLen; /* restrictions */
 
 	pkt += 23;
 
 	/*
 	if ( ghostrecon_debug) print_packet( pkt, GrPayloadLen);
-	*/
+	 */
 
-	cleanup_qserver( server, 1);
-	return;
+	return DONE_FORCE;
 }
 
-char*
-find_ravenshield_game( char *gameno )
+char *find_ravenshield_game(char *gameno)
 {
-	switch( atoi( gameno ) )
+	switch (atoi(gameno))
 	{
-	case 8:
-		return strdup( "Team Deathmatch" );
-		break;
-	case 13:
-		return strdup( "Deathmatch" );
-		break;
-	case 14:
-		return strdup( "Team Deathmatch" );
-		break;
-	case 15:
-		return strdup( "Bomb" );
-		break;
-	case 16:
-		return strdup( "Escort Pilot" );
-		break;
-	default:
-		// 1.50 and above actually uses a string so
-		// return that
-		return strdup( gameno );
-		break;
+		case 8:
+			return strdup("Team Deathmatch");
+			break;
+		case 13:
+			return strdup("Deathmatch");
+			break;
+		case 14:
+			return strdup("Team Deathmatch");
+			break;
+		case 15:
+			return strdup("Bomb");
+			break;
+		case 16:
+			return strdup("Escort Pilot");
+			break;
+		default:
+			// 1.50 and above actually uses a string so
+			// return that
+			return strdup(gameno);
+			break;
 	}
 }
 
-char*
-find_savage_game( char *gametype )
+char *find_savage_game(char *gametype)
 {
-	if ( 0 == strcmp( "RTSS", gametype ) )
+	if (0 == strcmp("RTSS", gametype))
 	{
-		return strdup( "RTSS" );
+		return strdup("RTSS");
 	}
 	else
 	{
-		return strdup( "Unknown" );
+		return strdup("Unknown");
 	}
 }
 
-void
-deal_with_ravenshield_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_ravenshield_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    char *s, *key, *value;
+	char *s, *key, *value;
+
+	debug( 2, "deal_with_ravenshield_packet %p, %d", server, pktlen );
 
 	server->n_servers++;
-    if ( NULL == server->server_name )
+	if (NULL == server->server_name)
 	{
-		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
-    else
+	else
 	{
-		gettimeofday( &server->packet_time1, NULL );
+		gettimeofday(&server->packet_time1, NULL);
 	}
 
-    rawpkt[pktlen]= '\0';
+	rawpkt[pktlen] = '\0';
 
-    s = rawpkt;
-    while ( *s )
+	s = rawpkt;
+	while (*s)
 	{
 		// Find the seperator
-		while ( *s && *s != '\xB6' )
+		while (*s && *s != '\xB6')
 		{
 			s++;
 		}
 
-		if ( !*s )
+		if (! *s)
 		{
 			// Hit the end no more
 			break;
@@ -8932,11 +10036,11 @@
 
 		// key start
 		key = ++s;
-		while ( *s && *s != ' ' )
+		while (*s && *s != ' ')
 		{
 			s++;
 		}
-		if ( *s != ' ')
+		if (*s != ' ')
 		{
 			// malformed
 			break;
@@ -8946,189 +10050,189 @@
 		// value start
 		value = s;
 
-		while ( *s && *s != '\xB6' )
+		while (*s && *s != '\xB6')
 		{
 			s++;
 		}
 
-		if ( *s == '\xB6' )
+		if (*s == '\xB6')
 		{
-			*(s-1) = '\0';
+			*(s - 1) = '\0';
 		}
 
 		// Decode current key par
-		if ( 0 == strcmp( "A1", key ) )
+		if (0 == strcmp("A1", key))
 		{
 			// Max players
-			server->max_players = atoi( value );
+			server->max_players = atoi(value);
 		}
-		else if ( 0 == strcmp( "A2", key ) )
+		else if (0 == strcmp("A2", key))
 		{
 			// TeamKillerPenalty
-			add_rule( server, "TeamKillerPenalty", value, NO_FLAGS );
+			add_rule(server, "TeamKillerPenalty", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "B1", key ) )
+		else if (0 == strcmp("B1", key))
 		{
 			// Current players
-			server->num_players = atoi( value );
+			server->num_players = atoi(value);
 		}
-		else if ( 0 == strcmp( "B2", key ) )
+		else if (0 == strcmp("B2", key))
 		{
 			// AllowRadar
-			add_rule( server, "AllowRadar", value, NO_FLAGS );
+			add_rule(server, "AllowRadar", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "D2", key ) )
+		else if (0 == strcmp("D2", key))
 		{
 			// Version info
-			add_rule( server, "Version", value, NO_FLAGS );
+			add_rule(server, "Version", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "E1", key ) )
+		else if (0 == strcmp("E1", key))
 		{
 			// Current map
-			server->map_name = strdup( value );
+			server->map_name = strdup(value);
 		}
-		else if ( 0 == strcmp( "E2", key ) )
+		else if (0 == strcmp("E2", key))
 		{
 			// Unknown
 		}
-		else if ( 0 == strcmp( "F1", key ) )
+		else if (0 == strcmp("F1", key))
 		{
 			// Game type
-			server->game = find_ravenshield_game( value );
-			add_rule( server, server->type->game_rule, server->game, NO_FLAGS );
+			server->game = find_ravenshield_game(value);
+			add_rule(server, server->type->game_rule, server->game, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "F2", key ) )
+		else if (0 == strcmp("F2", key))
 		{
 			// Unknown
 		}
-		else if ( 0 == strcmp( "G1", key ) )
+		else if (0 == strcmp("G1", key))
 		{
 			// Password
-			add_rule( server, "Password", value, NO_FLAGS );
+			add_rule(server, "Password", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "G2", key ) )
+		else if (0 == strcmp("G2", key))
 		{
 			// Query port
 		}
-		else if ( 0 == strcmp( "H1", key ) )
+		else if (0 == strcmp("H1", key))
 		{
 			// Unknown
 		}
-		else if ( 0 == strcmp( "H2", key ) )
+		else if (0 == strcmp("H2", key))
 		{
 			// Number of Terrorists
-			add_rule( server, "nbTerro", value, NO_FLAGS );
+			add_rule(server, "nbTerro", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "I1", key ) )
+		else if (0 == strcmp("I1", key))
 		{
 			// Server name
-			server->server_name = strdup( value );
+			server->server_name = strdup(value);
 		}
-		else if ( 0 == strcmp( "I2", key ) )
+		else if (0 == strcmp("I2", key))
 		{
 			// Unknown
 		}
-		else if ( 0 == strcmp( "J1", key ) )
+		else if (0 == strcmp("J1", key))
 		{
 			// Game Type Order
 			// Not pretty ignore for now
 			//add_rule( server, "Game Type Order", value, NO_FLAGS );
 		}
-		else if ( 0 == strcmp( "J2", key ) )
+		else if (0 == strcmp("J2", key))
 		{
 			// RotateMap
-			add_rule( server, "RotateMap", value, NO_FLAGS);
+			add_rule(server, "RotateMap", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "K1", key ) )
+		else if (0 == strcmp("K1", key))
 		{
 			// Map Cycle
 			// Not pretty ignore for now
 			//add_rule( server, "Map Cycle", value, NO_FLAGS );
 		}
-		else if ( 0 == strcmp( "K2", key ) )
+		else if (0 == strcmp("K2", key))
 		{
 			// Force First Person Weapon
-			add_rule( server, "ForceFPersonWeapon", value, NO_FLAGS);
+			add_rule(server, "ForceFPersonWeapon", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "L1", key ) )
+		else if (0 == strcmp("L1", key))
 		{
 			// Players names
 			int player_number = 0;
 			char *n = value;
 
-			if ( *n == '/' )
+			if (*n == '/')
 			{
 				// atleast 1 player
 				n++;
-				while( *n && *n != '\xB6' )
+				while (*n && *n != '\xB6')
 				{
 					char *player_name = n;
-					while ( *n && *n != '/' && *n != '\xB6' )
+					while (*n && *n != '/' && *n != '\xB6')
 					{
 						n++;
 					}
 
-					if ( *n == '/' )
+					if (*n == '/')
 					{
 						*n++ = '\0';
 					}
-					else if ( *n == '\xB6' )
+					else if (*n == '\xB6')
 					{
-						*(n-1) = '\0';
+						*(n - 1) = '\0';
 					}
 
-					if ( 0 != strlen( player_name ) )
+					if (0 != strlen(player_name))
 					{
-						struct player *player = add_player( server, player_number );
-						if ( NULL != player )
+						struct player *player = add_player(server, player_number);
+						if (NULL != player)
 						{
-							player->name = strdup( player_name );
+							player->name = strdup(player_name);
 						}
 						player_number++;
 					}
 				}
 			}
 		}
-		else if ( 0 == strcmp( "L3", key ) )
+		else if (0 == strcmp("L3", key))
 		{
 			// PunkBuster state
-			add_rule( server, "PunkBuster", value, NO_FLAGS );
+			add_rule(server, "PunkBuster", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "M1", key ) )
+		else if (0 == strcmp("M1", key))
 		{
 			// Players times
 			int player_number = 0;
 			char *n = value;
-			if ( *n == '/' )
+			if (*n == '/')
 			{
 				// atleast 1 player
 				n++;
-				while( *n && *n != '\xB6' )
+				while (*n && *n != '\xB6')
 				{
 					char *time = n;
-					while ( *n && *n != '/' && *n != '\xB6' )
+					while (*n && *n != '/' && *n != '\xB6')
 					{
 						n++;
 					}
 
-					if ( *n == '/' )
+					if (*n == '/')
 					{
 						*n++ = '\0';
 					}
-					else if ( *n == '\xB6' )
+					else if (*n == '\xB6')
 					{
-						*(n-1) = '\0';
+						*(n - 1) = '\0';
 					}
 
-					if ( 0 != strlen( time ) )
+					if (0 != strlen(time))
 					{
 						int mins, seconds;
-						if ( 2 == sscanf( time, "%d:%d", &mins, &seconds ) )
+						if (2 == sscanf(time, "%d:%d", &mins, &seconds))
 						{
-							struct player *player = get_player_by_number( server, player_number );
-							if ( NULL != player )
+							struct player *player = get_player_by_number(server, player_number);
+							if (NULL != player)
 							{
-								player->connect_time = mins * 60 + seconds;
+								player->connect_time = mins * 60+seconds;
 							}
 						}
 						player_number++;
@@ -9136,164 +10240,162 @@
 				}
 			}
 		}
-		else if ( 0 == strcmp( "N1", key ) )
+		else if (0 == strcmp("N1", key))
 		{
 			// Players ping
 			int player_number = 0;
 			char *n = value;
-			if ( *n == '/' )
+			if (*n == '/')
 			{
 				// atleast 1 player
 				n++;
-				while( *n && *n != '\xB6' )
+				while (*n && *n != '\xB6')
 				{
 					char *ping = n;
-					while ( *n && *n != '/' && *n != '\xB6' )
+					while (*n && *n != '/' && *n != '\xB6')
 					{
 						n++;
 					}
 
-					if ( *n == '/' )
+					if (*n == '/')
 					{
 						*n++ = '\0';
 					}
-					else if ( *n == '\xB6' )
+					else if (*n == '\xB6')
 					{
-						*(n-1) = '\0';
+						*(n - 1) = '\0';
 					}
 
-					if ( 0 != strlen( ping ) )
+					if (0 != strlen(ping))
 					{
-						struct player *player = get_player_by_number( server, player_number );
-						if ( NULL != player )
+						struct player *player = get_player_by_number(server, player_number);
+						if (NULL != player)
 						{
-							player->ping = atoi( ping );
-						}
-						player_number++;
+							player->ping = atoi(ping);
+						} player_number++;
 					}
 				}
 			}
 		}
-		else if ( 0 == strcmp( "O1", key ) )
+		else if (0 == strcmp("O1", key))
 		{
 			// Players fags
 			int player_number = 0;
 			char *n = value;
-			if ( *n == '/' )
+			if (*n == '/')
 			{
 				// atleast 1 player
 				n++;
-				while( *n && *n != '\xB6' )
+				while (*n && *n != '\xB6')
 				{
 					char *frags = n;
-					while ( *n && *n != '/' && *n != '\xB6' )
+					while (*n && *n != '/' && *n != '\xB6')
 					{
 						n++;
 					}
 
-					if ( *n == '/' )
+					if (*n == '/')
 					{
 						*n++ = '\0';
 					}
-					else if ( *n == '\xB6' )
+					else if (*n == '\xB6')
 					{
-						*(n-1) = '\0';
+						*(n - 1) = '\0';
 					}
 
-					if ( 0 != strlen( frags ) )
+					if (0 != strlen(frags))
 					{
-						struct player *player = get_player_by_number( server, player_number );
-						if ( NULL != player )
+						struct player *player = get_player_by_number(server, player_number);
+						if (NULL != player)
 						{
-							player->frags = atoi( frags );
-						}
-						player_number++;
+							player->frags = atoi(frags);
+						} player_number++;
 					}
 				}
 			}
 		}
-		else if ( 0 == strcmp( "P1", key ) )
+		else if (0 == strcmp("P1", key))
 		{
 			// Game port
 			// Not pretty ignore for now
 			/*
 			change_server_port( server, atoi( value ), 0 );
-			*/
+			 */
 		}
-		else if ( 0 == strcmp( "Q1", key ) )
+		else if (0 == strcmp("Q1", key))
 		{
 			// RoundsPerMatch
-			add_rule( server, "RoundsPerMatch", value, NO_FLAGS );
+			add_rule(server, "RoundsPerMatch", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "R1", key ) )
+		else if (0 == strcmp("R1", key))
 		{
 			// RoundTime
-			add_rule( server, "RoundTime", value, NO_FLAGS );
+			add_rule(server, "RoundTime", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "S1", key ) )
+		else if (0 == strcmp("S1", key))
 		{
 			// BetweenRoundTime
-			add_rule( server, "BetweenRoundTime", value, NO_FLAGS );
+			add_rule(server, "BetweenRoundTime", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "T1", key ) )
+		else if (0 == strcmp("T1", key))
 		{
 			// BombTime
-			add_rule( server, "BombTime", value, NO_FLAGS );
+			add_rule(server, "BombTime", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "W1", key ) )
+		else if (0 == strcmp("W1", key))
 		{
 			// ShowNames
-			add_rule( server, "ShowNames", value, NO_FLAGS );
+			add_rule(server, "ShowNames", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "X1", key ) )
+		else if (0 == strcmp("X1", key))
 		{
 			// InternetServer
-			add_rule( server, "InternetServer", value, NO_FLAGS );
+			add_rule(server, "InternetServer", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "Y1", key ) )
+		else if (0 == strcmp("Y1", key))
 		{
 			// FriendlyFire
-			add_rule( server, "FriendlyFire", value, NO_FLAGS );
+			add_rule(server, "FriendlyFire", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "Z1", key ) )
+		else if (0 == strcmp("Z1", key))
 		{
 			// Autobalance
-			add_rule( server, "Autobalance", value, NO_FLAGS );
+			add_rule(server, "Autobalance", value, NO_FLAGS);
 		}
 	}
 
-	cleanup_qserver( server, 1 );
-	return;
+	return DONE_FORCE;
 }
 
-void
-deal_with_savage_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_savage_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    char *s, *key, *value, *end;
+	char *s, *key, *value, *end;
+
+	debug( 2, "deal_with_savage_packet %p, %d", server, pktlen );
 
 	server->n_servers++;
-    if ( NULL == server->server_name )
+	if (NULL == server->server_name)
 	{
-		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
-    else
+	else
 	{
-		gettimeofday( &server->packet_time1, NULL );
+		gettimeofday(&server->packet_time1, NULL);
 	}
 
-    rawpkt[pktlen]= '\0';
+	rawpkt[pktlen] = '\0';
 
-    end = s = rawpkt;
+	end = s = rawpkt;
 	end += pktlen;
-    while ( *s )
+	while (*s)
 	{
 		// Find the seperator
-		while ( s <= end && *s != '\xFF' )
+		while (s <= end && *s != '\xFF')
 		{
 			s++;
 		}
 
-		if ( s >= end )
+		if (s >= end)
 		{
 			// Hit the end no more
 			break;
@@ -9301,11 +10403,11 @@
 
 		// key start
 		key = ++s;
-		while ( s < end && *s != '\xFE' )
+		while (s < end && *s != '\xFE')
 		{
 			s++;
 		}
-		if ( *s != '\xFE')
+		if (*s != '\xFE')
 		{
 			// malformed
 			break;
@@ -9315,75 +10417,75 @@
 		// value start
 		value = s;
 
-		while ( s < end && *s != '\xFF' )
+		while (s < end && *s != '\xFF')
 		{
 			s++;
 		}
 
-		if ( *s == '\xFF' )
+		if (*s == '\xFF')
 		{
 			*s = '\0';
 		}
 		//fprintf( stderr, "'%s' = '%s'\n", key, value );
 
 		// Decode current key par
-		if ( 0 == strcmp( "cmax", key ) )
+		if (0 == strcmp("cmax", key))
 		{
 			// Max players
-			server->max_players = atoi( value );
+			server->max_players = atoi(value);
 		}
-		else if ( 0 == strcmp( "cnum", key ) )
+		else if (0 == strcmp("cnum", key))
 		{
 			// Current players
-			server->num_players = atoi( value );
+			server->num_players = atoi(value);
 		}
-		else if ( 0 == strcmp( "bal", key ) )
+		else if (0 == strcmp("bal", key))
 		{
 			// Balance
-			add_rule( server, "Balance", value, NO_FLAGS );
+			add_rule(server, "Balance", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "world", key ) )
+		else if (0 == strcmp("world", key))
 		{
 			// Current map
-			server->map_name = strdup( value );
+			server->map_name = strdup(value);
 		}
-		else if ( 0 == strcmp( "gametype", key ) )
+		else if (0 == strcmp("gametype", key))
 		{
 			// Game type
-			server->game = find_savage_game( value );
-			add_rule( server, server->type->game_rule, server->game, NO_FLAGS );
+			server->game = find_savage_game(value);
+			add_rule(server, server->type->game_rule, server->game, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "pure", key ) )
+		else if (0 == strcmp("pure", key))
 		{
 			// Pure
-			add_rule( server, "Pure", value, NO_FLAGS );
+			add_rule(server, "Pure", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "time", key ) )
+		else if (0 == strcmp("time", key))
 		{
 			// Current game time
-			add_rule( server, "Time", value, NO_FLAGS );
+			add_rule(server, "Time", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "notes", key ) )
+		else if (0 == strcmp("notes", key))
 		{
 			// Notes
-			add_rule( server, "Notes", value, NO_FLAGS );
+			add_rule(server, "Notes", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "needcmdr", key ) )
+		else if (0 == strcmp("needcmdr", key))
 		{
 			// Need Commander
-			add_rule( server, "Need Commander", value, NO_FLAGS );
+			add_rule(server, "Need Commander", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "name", key ) )
+		else if (0 == strcmp("name", key))
 		{
 			// Server name
-			server->server_name = strdup( value );
+			server->server_name = strdup(value);
 		}
-		else if ( 0 == strcmp( "fw", key ) )
+		else if (0 == strcmp("fw", key))
 		{
 			// Firewalled
-			add_rule( server, "Firewalled", value, NO_FLAGS );
+			add_rule(server, "Firewalled", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "players", key ) )
+		else if (0 == strcmp("players", key))
 		{
 
 			// Players names
@@ -9394,12 +10496,12 @@
 
 			// team name
 			n++;
-			while( *n && *n != '\x0a' )
+			while (*n && *n != '\x0a')
 			{
 				n++;
 			}
 
-			if ( *n != '\x0a' )
+			if (*n != '\x0a')
 			{
 				// Broken data
 				break;
@@ -9407,14 +10509,14 @@
 			*n = '\0';
 
 			player_name = ++n;
-			while( *n )
+			while (*n)
 			{
-				while( *n && *n != '\x0a' )
+				while (*n && *n != '\x0a')
 				{
 					n++;
 				}
 
-				if ( *n != '\x0a' )
+				if (*n != '\x0a')
 				{
 					// Broken data
 					break;
@@ -9422,23 +10524,22 @@
 				*n = '\0';
 				n++;
 
-				if ( 0 == strncmp( "Team ", player_name, 5 ) )
+				if (0 == strncmp("Team ", player_name, 5))
 				{
 					team_name = player_name;
 					team_number++;
 				}
 				else
 				{
-					if ( 0 != strlen( player_name ) )
+					if (0 != strlen(player_name))
 					{
-						struct player *player = add_player( server, player_number );
-						if ( NULL != player )
+						struct player *player = add_player(server, player_number);
+						if (NULL != player)
 						{
-							player->name = strdup( player_name );
+							player->name = strdup(player_name);
 							player->team = team_number;
-							player->team_name = strdup( team_name );
-						}
-						player_number++;
+							player->team_name = strdup(team_name);
+						} player_number++;
 					}
 				}
 				player_name = n;
@@ -9448,38 +10549,38 @@
 		*s = '\xFF';
 	}
 
-	cleanup_qserver( server, 1 );
-	return;
+	return DONE_FORCE;
 }
 
-void
-deal_with_farcry_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_farcry_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    char *s, *key, *value, *end;
+	char *s, *key, *value, *end;
+
+	debug( 2, "deal_with_farcry_packet %p, %d", server, pktlen );
 
 	server->n_servers++;
-    if ( NULL == server->server_name )
+	if (NULL == server->server_name)
 	{
-		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
-    else
+	else
 	{
-		gettimeofday( &server->packet_time1, NULL );
+		gettimeofday(&server->packet_time1, NULL);
 	}
 
-    rawpkt[pktlen]= '\0';
+	rawpkt[pktlen] = '\0';
 
-    end = s = rawpkt;
+	end = s = rawpkt;
 	end += pktlen;
-    while ( *s )
+	while (*s)
 	{
 		// Find the seperator
-		while ( s <= end && *s != '\xFF' )
+		while (s <= end && *s != '\xFF')
 		{
 			s++;
 		}
 
-		if ( s >= end )
+		if (s >= end)
 		{
 			// Hit the end no more
 			break;
@@ -9487,11 +10588,11 @@
 
 		// key start
 		key = ++s;
-		while ( s < end && *s != '\xFE' )
+		while (s < end && *s != '\xFE')
 		{
 			s++;
 		}
-		if ( *s != '\xFE')
+		if (*s != '\xFE')
 		{
 			// malformed
 			break;
@@ -9501,75 +10602,75 @@
 		// value start
 		value = s;
 
-		while ( s < end && *s != '\xFF' )
+		while (s < end && *s != '\xFF')
 		{
 			s++;
 		}
 
-		if ( *s == '\xFF' )
+		if (*s == '\xFF')
 		{
 			*s = '\0';
 		}
 		//fprintf( stderr, "'%s' = '%s'\n", key, value );
 
 		// Decode current key par
-		if ( 0 == strcmp( "cmax", key ) )
+		if (0 == strcmp("cmax", key))
 		{
 			// Max players
-			server->max_players = atoi( value );
+			server->max_players = atoi(value);
 		}
-		else if ( 0 == strcmp( "cnum", key ) )
+		else if (0 == strcmp("cnum", key))
 		{
 			// Current players
-			server->num_players = atoi( value );
+			server->num_players = atoi(value);
 		}
-		else if ( 0 == strcmp( "bal", key ) )
+		else if (0 == strcmp("bal", key))
 		{
 			// Balance
-			add_rule( server, "Balance", value, NO_FLAGS );
+			add_rule(server, "Balance", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "world", key ) )
+		else if (0 == strcmp("world", key))
 		{
 			// Current map
-			server->map_name = strdup( value );
+			server->map_name = strdup(value);
 		}
-		else if ( 0 == strcmp( "gametype", key ) )
+		else if (0 == strcmp("gametype", key))
 		{
 			// Game type
-			server->game = find_savage_game( value );
-			add_rule( server, server->type->game_rule, server->game, NO_FLAGS );
+			server->game = find_savage_game(value);
+			add_rule(server, server->type->game_rule, server->game, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "pure", key ) )
+		else if (0 == strcmp("pure", key))
 		{
 			// Pure
-			add_rule( server, "Pure", value, NO_FLAGS );
+			add_rule(server, "Pure", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "time", key ) )
+		else if (0 == strcmp("time", key))
 		{
 			// Current game time
-			add_rule( server, "Time", value, NO_FLAGS );
+			add_rule(server, "Time", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "notes", key ) )
+		else if (0 == strcmp("notes", key))
 		{
 			// Notes
-			add_rule( server, "Notes", value, NO_FLAGS );
+			add_rule(server, "Notes", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "needcmdr", key ) )
+		else if (0 == strcmp("needcmdr", key))
 		{
 			// Need Commander
-			add_rule( server, "Need Commander", value, NO_FLAGS );
+			add_rule(server, "Need Commander", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "name", key ) )
+		else if (0 == strcmp("name", key))
 		{
 			// Server name
-			server->server_name = strdup( value );
+			server->server_name = strdup(value);
 		}
-		else if ( 0 == strcmp( "fw", key ) )
+		else if (0 == strcmp("fw", key))
 		{
 			// Firewalled
-			add_rule( server, "Firewalled", value, NO_FLAGS );
+			add_rule(server, "Firewalled", value, NO_FLAGS);
 		}
-		else if ( 0 == strcmp( "players", key ) )
+		else if (0 == strcmp("players", key))
 		{
 
 			// Players names
@@ -9580,12 +10681,12 @@
 
 			// team name
 			n++;
-			while( *n && *n != '\x0a' )
+			while (*n && *n != '\x0a')
 			{
 				n++;
 			}
 
-			if ( *n != '\x0a' )
+			if (*n != '\x0a')
 			{
 				// Broken data
 				break;
@@ -9593,14 +10694,14 @@
 			*n = '\0';
 
 			player_name = ++n;
-			while( *n )
+			while (*n)
 			{
-				while( *n && *n != '\x0a' )
+				while (*n && *n != '\x0a')
 				{
 					n++;
 				}
 
-				if ( *n != '\x0a' )
+				if (*n != '\x0a')
 				{
 					// Broken data
 					break;
@@ -9608,23 +10709,22 @@
 				*n = '\0';
 				n++;
 
-				if ( 0 == strncmp( "Team ", player_name, 5 ) )
+				if (0 == strncmp("Team ", player_name, 5))
 				{
 					team_name = player_name;
 					team_number++;
 				}
 				else
 				{
-					if ( 0 != strlen( player_name ) )
+					if (0 != strlen(player_name))
 					{
-						struct player *player = add_player( server, player_number );
-						if ( NULL != player )
+						struct player *player = add_player(server, player_number);
+						if (NULL != player)
 						{
-							player->name = strdup( player_name );
+							player->name = strdup(player_name);
 							player->team = team_number;
-							player->team_name = strdup( team_name );
-						}
-						player_number++;
+							player->team_name = strdup(team_name);
+						} player_number++;
 					}
 				}
 				player_name = n;
@@ -9634,574 +10734,624 @@
 		*s = '\xFF';
 	}
 
-	cleanup_qserver( server, 1 );
-	return;
+	return DONE_FORCE;
 }
 
-
-
 /* postions of map name, player name (in player substring), zero-based */
 #define BFRIS_MAP_POS 18
 #define BFRIS_PNAME_POS 11
-void
-deal_with_bfris_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_bfris_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	int i, player_data_pos, nplayers;
+	SavedData *sdata;
+	unsigned char *saved_data;
+	int saved_data_size;
+
+	debug( 2, "deal_with_bfris_packet %p, %d", server, pktlen );
+
+	server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+
+	/* add to the data previously saved */
+	sdata = &server->saved_data;
+	if (!sdata->data)
+	{
+		sdata->data = (char*)malloc(pktlen);
+	}
+	else
+	{
+		sdata->data = (char*)realloc(sdata->data, sdata->datalen + pktlen);
+	}
+
+	memcpy(sdata->data + sdata->datalen, rawpkt, pktlen);
+	sdata->datalen += pktlen;
+
+	saved_data = (unsigned char*)sdata->data;
+	saved_data_size = sdata->datalen;
+
+	/* after we get the server portion of the data, server->game != NULL */
+	if (!server->game)
+	{
+
+		/* server data goes up to map name */
+		if (sdata->datalen <= BFRIS_MAP_POS)
+		{
+			return 0;
+		}
+
+		/* see if map name is complete */
+		player_data_pos = 0;
+		for (i = BFRIS_MAP_POS; i < saved_data_size; i++)
+		{
+			if (saved_data[i] == '\0')
+			{
+				player_data_pos = i + 1;
+				/* data must extend beyond map name */
+				if (saved_data_size <= player_data_pos)
+				{
+					return 0;
+				}
+				break;
+			}
+		}
+
+		/* did we find beginning of player data? */
+		if (!player_data_pos)
+		{
+			return 0;
+		}
+
+		/* now we can go ahead and fill in server data */
+		server->map_name = strdup((char*)saved_data + BFRIS_MAP_POS);
+		server->max_players = saved_data[12];
+		server->protocol_version = saved_data[11];
+
+		/* save game type */
+		switch (saved_data[13] &15)
+		{
+			case 0:
+				server->game = "FFA";
+				break;
+			case 5:
+				server->game = "Rover";
+				break;
+			case 6:
+				server->game = "Occupation";
+				break;
+			case 7:
+				server->game = "SPAAL";
+				break;
+			case 8:
+				server->game = "CTF";
+				break;
+			default:
+				server->game = "unknown";
+				break;
+		}
+		server->flags |= FLAG_DO_NOT_FREE_GAME;
+		add_rule(server, server->type->game_rule, server->game, NO_FLAGS);
+
+		if (get_server_rules)
+		{
+			char buf[24];
+
+			/* server revision */
+			sprintf(buf, "%d", (unsigned int)saved_data[11]);
+			add_rule(server, "Revision", buf, NO_FLAGS);
+
+			/* latency */
+			sprintf(buf, "%d", (unsigned int)saved_data[10]);
+			add_rule(server, "Latency", buf, NO_FLAGS);
+
+			/* player allocation */
+			add_rule(server, "Allocation", saved_data[13] &16 ? "Automatic" : "Manual", NO_FLAGS);
+
+		}
+
+	}
+
+	/* If we got this far, we know the data saved goes at least to the start of
+	the player information, and that the server data is taken care of.
+	 */
+
+	/* start of player data */
+	player_data_pos = BFRIS_MAP_POS + strlen((char*)saved_data + BFRIS_MAP_POS) + 1;
+
+	/* ensure all player data have arrived */
+	nplayers = 0;
+	while (saved_data[player_data_pos] != '\0')
+	{
+
+		player_data_pos += BFRIS_PNAME_POS;
+
+		/* does player data extend to player name? */
+		if (saved_data_size <= player_data_pos + 1)
+		{
+			return 0;
+		}
+
+		/* does player data extend to end of player name? */
+		for (i = 0; player_data_pos + i < saved_data_size; i++)
+		{
+
+			if (saved_data_size == player_data_pos + i + 1)
+			{
+				return 0;
+			}
+
+			if (saved_data[player_data_pos + i] == '\0')
+			{
+				player_data_pos += i + 1;
+				nplayers++;
+				break;
+			}
+		}
+	}
+	/* all player data are complete */
+
+	server->num_players = nplayers;
+
+	if (get_player_info)
+	{
+
+		/* start of player data */
+		player_data_pos = BFRIS_MAP_POS + strlen((char*)saved_data + BFRIS_MAP_POS) + 1;
+
+		for (i = 0; i < nplayers; i++)
+		{
+			struct player *player;
+			player = add_player(server, saved_data[player_data_pos]);
+
+			player->ship = saved_data[player_data_pos + 1];
+			player->ping = saved_data[player_data_pos + 2];
+			player->frags = saved_data[player_data_pos + 3];
+			player->team = saved_data[player_data_pos + 4];
+			switch (player->team)
+			{
+				case 0:
+					player->team_name = "silver";
+					break;
+				case 1:
+					player->team_name = "red";
+					break;
+				case 2:
+					player->team_name = "blue";
+					break;
+				case 3:
+					player->team_name = "green";
+					break;
+				case 4:
+					player->team_name = "purple";
+					break;
+				case 5:
+					player->team_name = "yellow";
+					break;
+				case 6:
+					player->team_name = "cyan";
+					break;
+				default:
+					player->team_name = "unknown";
+					break;
+			}
+			player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
+			player->room = saved_data[player_data_pos + 5];
+
+			/* score is little-endian integer */
+			player->score = saved_data[player_data_pos + 7] +
+				(saved_data[player_data_pos + 8] << 8) +
+				(saved_data[player_data_pos + 9] << 16) +
+				(saved_data[player_data_pos + 10] << 24);
+
+			/* for archs with > 4-byte int */
+			if (player->score &0x80000000)
+			{
+				player->score = - (~(player->score)) - 1;
+			}
+
+
+			player_data_pos += BFRIS_PNAME_POS;
+			player->name = strdup((char*)saved_data + player_data_pos);
+
+			player_data_pos += strlen(player->name) + 1;
+		}
+
+	}
+
+	server->server_name = BFRIS_SERVER_NAME;
+
+	return DONE_FORCE;
+}
+
+struct rule *add_uchar_rule(struct qserver *server, char *key, unsigned char value)
 {
-  int i, player_data_pos, nplayers;
-  SavedData *sdata;
-  unsigned char *saved_data;
-  int saved_data_size;
-
-  server->ping_total += time_delta( &packet_recv_time,
-				    &server->packet_time1);
-
-  /* add to the data previously saved */
-  sdata= & server->saved_data;
-  if (! sdata->data)
-    sdata->data = (char*)malloc(pktlen);
-  else
-    sdata->data = (char*)realloc(sdata->data,sdata->datalen + pktlen);
-
-  memcpy(sdata->data + sdata->datalen, rawpkt, pktlen);
-  sdata->datalen += pktlen;
-
-  saved_data= (unsigned char*) sdata->data;
-  saved_data_size= sdata->datalen;
-
-  /* after we get the server portion of the data, server->game != NULL */
-  if (!server->game) {
-
-    /* server data goes up to map name */
-    if (sdata->datalen <= BFRIS_MAP_POS)
-      return;
-
-    /* see if map name is complete */
-    player_data_pos=0;
-    for (i=BFRIS_MAP_POS; i<saved_data_size; i++) {
-      if (saved_data[i] == '\0') {
-	player_data_pos = i+1;
-	/* data must extend beyond map name */
-	if (saved_data_size <= player_data_pos)
-	  return;
-	break;
-      }
-    }
-
-    /* did we find beginning of player data? */
-    if (!player_data_pos)
-      return;
-
-    /* now we can go ahead and fill in server data */
-    server->map_name = strdup((char*)saved_data + BFRIS_MAP_POS);
-    server->max_players = saved_data[12];
-    server->protocol_version = saved_data[11];
-
-    /* save game type */
-    switch (saved_data[13] & 15) {
-    case 0: server->game = "FFA"; break;
-    case 5: server->game = "Rover"; break;
-    case 6: server->game = "Occupation"; break;
-    case 7: server->game = "SPAAL"; break;
-    case 8: server->game = "CTF"; break;
-    default:
-      server->game = "unknown"; break;
-    }
-    server->flags |= FLAG_DO_NOT_FREE_GAME;
-    add_rule(server,server->type->game_rule,server->game, NO_FLAGS);
-
-    if (get_server_rules) {
-      char buf[24];
-
-      /* server revision */
-      sprintf(buf,"%d",(unsigned int)saved_data[11]);
-      add_rule(server,"Revision",buf, NO_FLAGS);
-
-      /* latency */
-      sprintf(buf,"%d",(unsigned int)saved_data[10]);
-      add_rule(server,"Latency",buf, NO_FLAGS);
-
-      /* player allocation */
-      add_rule(server,"Allocation",saved_data[13] & 16 ? "Automatic" : "Manual", NO_FLAGS);
-
-    }
-
-  }
-
-  /* If we got this far, we know the data saved goes at least to the start of
-     the player information, and that the server data is taken care of.
-  */
-
-  /* start of player data */
-  player_data_pos = BFRIS_MAP_POS + strlen((char*)saved_data+BFRIS_MAP_POS) + 1;
-
-  /* ensure all player data have arrived */
-  nplayers = 0;
-  while (saved_data[player_data_pos] != '\0') {
-
-    player_data_pos += BFRIS_PNAME_POS;
-
-    /* does player data extend to player name? */
-    if (saved_data_size <= player_data_pos + 1)
-      return;
-
-    /* does player data extend to end of player name? */
-    for (i=0; player_data_pos + i < saved_data_size; i++) {
-
-      if (saved_data_size == player_data_pos + i + 1)
-	return;
-
-      if (saved_data[player_data_pos + i] == '\0') {
-	player_data_pos += i + 1;
-	nplayers++;
-	break;
-      }
-    }
-  }
-  /* all player data are complete */
-
-  server->num_players = nplayers;
-
-  if (get_player_info) {
-
-    /* start of player data */
-    player_data_pos = BFRIS_MAP_POS + strlen((char*)saved_data+BFRIS_MAP_POS) + 1;
-
-    for (i=0; i<nplayers; i++) {
-      struct player *player;
-      player= add_player( server, saved_data[player_data_pos]);
-
-      player->ship = saved_data[player_data_pos + 1];
-      player->ping = saved_data[player_data_pos + 2];
-      player->frags = saved_data[player_data_pos + 3];
-      player->team = saved_data[player_data_pos + 4];
-      switch (player->team) {
-      case 0: player->team_name = "silver"; break;
-      case 1: player->team_name = "red"; break;
-      case 2: player->team_name = "blue"; break;
-      case 3: player->team_name = "green"; break;
-      case 4: player->team_name = "purple"; break;
-      case 5: player->team_name = "yellow"; break;
-      case 6: player->team_name = "cyan"; break;
-      default:
-	player->team_name = "unknown"; break;
-      }
-      player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
-      player->room = saved_data[player_data_pos + 5];
-
-      /* score is little-endian integer */
-      player->score =
-	saved_data[player_data_pos+7] +
-	(saved_data[player_data_pos+8] << 8) +
-	(saved_data[player_data_pos+9] << 16) +
-	(saved_data[player_data_pos+10] << 24);
-
-	  /* for archs with > 4-byte int */
-      if (player->score & 0x80000000)
-	player->score = -(~(player->score)) - 1;
-
-
-      player_data_pos += BFRIS_PNAME_POS;
-      player->name = strdup((char*)saved_data + player_data_pos);
-
-      player_data_pos += strlen(player->name) + 1;
-    }
-
-  }
-
-  server->server_name = BFRIS_SERVER_NAME;
-  cleanup_qserver(server, 1);
-  return;
-}
-
-struct rule *
-add_uchar_rule( struct qserver *server, char *key, unsigned char value)
-{
-    char buf[24];
-    sprintf( buf, "%u", (unsigned)value);
-    return add_rule( server, key, buf, NO_FLAGS);
-}
-
-void
-deal_with_descent3_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    char *pkt;
-    char buf[24];
-
-    if ( server->server_name == NULL)
-	server->ping_total += time_delta( &packet_recv_time,
-				    &server->packet_time1);
-
-    if ( pktlen < 4)  {
-	fprintf( stderr, "short descent3 packet\n");
-	print_packet( server, rawpkt, pktlen);
-	cleanup_qserver( server, 1);
-	return;
-    }
-
-    /* 'info' response */
-    if ( rawpkt[1] == 0x1f)  {
-	if ( server->server_name != NULL)
-	{
-	    cleanup_qserver( server, 1);
-	    return;
-	}
-
-
-	pkt= &rawpkt[0x15];
-	server->server_name= strdup( pkt);
-	pkt+= strlen(pkt)+2;
-	server->map_name= strdup( pkt); /* mission name (blah.mn3) */
-	pkt+= strlen(pkt)+2;
-	add_rule( server, "level_name", pkt, NO_FLAGS);
-	pkt+= strlen(pkt)+2;
-	add_rule( server, "gametype", pkt, NO_FLAGS);
-	pkt+= strlen(pkt)+1;
-
-	sprintf( buf, "%hu", swap_short_from_little(pkt));
-	add_rule( server, "level_num", buf, NO_FLAGS);
-	pkt+=2;
-	server->num_players= swap_short_from_little(pkt);
-	pkt+=2;
-	server->max_players= swap_short_from_little(pkt);
-	pkt+=2;
-
-	/* unknown/undecoded fields.. stuff like permissible, banned items/ships, etc */
-	add_uchar_rule( server, "u0", pkt[0]);
-	add_uchar_rule( server, "u1", pkt[1]);
-	add_uchar_rule( server, "u2", pkt[2]);
-	add_uchar_rule( server, "u3", pkt[3]);
-	add_uchar_rule( server, "u4", pkt[4]);
-	add_uchar_rule( server, "u5", pkt[5]);
-	add_uchar_rule( server, "u6", pkt[6]);
-	add_uchar_rule( server, "u7", pkt[7]);
-	add_uchar_rule( server, "u8", pkt[8]);
-
-	add_uchar_rule( server, "randpowerup", !(pkt[4]&1)); /* randomize powerup spawn */
-	add_uchar_rule( server, "acccollisions", (pkt[5]&4) > 0); /* accurate collision detection */
-	add_uchar_rule( server, "brightships", (pkt[5]&16) > 0); /* bright player ships */
-	add_uchar_rule( server, "mouselook", (pkt[6]&1) > 0); /* mouselook enabled */
-	sprintf( buf, "%s%s", (pkt[4]&16)?"PP":"CS", (pkt[6]&1)?"-ML":"");
-	add_rule( server, "servertype", buf, NO_FLAGS);
-
-	sprintf( buf, "%hhu", pkt[9]);
-	add_rule( server, "difficulty", buf, NO_FLAGS);
-
-	/* unknown/undecoded fields after known flags removed */
-	add_uchar_rule( server, "x4", pkt[4] & ~(1+16));
-	add_uchar_rule( server, "x5", pkt[5] & ~(4+16));
-	add_uchar_rule( server, "x6", pkt[6] & ~1);
-
-	if ( get_player_info && server->num_players)  {
-	    server->next_player_info= 0;
-	    send_player_request_packet( server);
-	    cleanup_qserver( server, 0);
-	    return;
-	}
-
-    }
-    /* MP_PLAYERLIST_DATA */
-    else if ( rawpkt[1] == 0x73)  {
-	struct player *player;
-	struct player **last_player= & server->players;
-
-	if ( server->players != NULL)
-	{
-	    cleanup_qserver( server, 1);
-	    return;
-	}
-
-	pkt= &rawpkt[0x4];
-	while (*pkt)  {
-	    player= (struct player*) calloc( 1, sizeof(struct player));
-	    player->name= strdup( pkt);
-	    pkt+= strlen(pkt) + 1;
-	    *last_player= player;
-	    last_player= & player->next;
-	}
-	server->next_player_info= NO_PLAYER_INFO;
-    }
-    else {
-	fprintf( stderr, "unknown d3 packet\n");
-	print_packet( server, rawpkt, pktlen);
-    }
-    cleanup_qserver( server, 1);
-    return;
-}
-
-
-#define EYE_NAME_MASK   1
-#define EYE_TEAM_MASK   2
-#define EYE_SKIN_MASK   4
-#define EYE_SCORE_MASK  8
-#define EYE_PING_MASK   16
-#define EYE_TIME_MASK   32
-
-void
-deal_with_eye_packet( struct qserver *server, char *rawpkt, int pktlen)
-{
-    char *next, *end, *value, *key;
-    struct player **last_player;
-    unsigned char pkt_index, pkt_max;
-    unsigned int pkt_id;
-
-    if ( pktlen < 4)
-	{
-		cleanup_qserver( server, 1);
-		return;
-    }
-
-    if ( rawpkt[0] != 'E' || rawpkt[1] != 'Y' || rawpkt[2] != 'E')
-	{
-		cleanup_qserver( server, 1);
-		return;
-    }
+	char buf[24];
+	sprintf(buf, "%u", (unsigned)value);
+	return add_rule(server, key, buf, NO_FLAGS);
+}
+
+int deal_with_descent3_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	char *pkt;
+	char buf[24];
+
+	debug( 2, "deal_with_descent3_packet %p, %d", server, pktlen );
+
+	if (server->server_name == NULL)
+	{
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
+	}
+
+	if (pktlen < 4)
+	{
+		fprintf(stderr, "short descent3 packet\n");
+		print_packet(server, rawpkt, pktlen);
+		return PKT_ERROR;
+	}
+
+	/* 'info' response */
+	if (rawpkt[1] == 0x1f)
+	{
+		if (server->server_name != NULL)
+		{
+			return PKT_ERROR;
+		}
+
+
+		pkt = &rawpkt[0x15];
+		server->server_name = strdup(pkt);
+		pkt += strlen(pkt) + 2;
+		server->map_name = strdup(pkt); /* mission name (blah.mn3) */
+		pkt += strlen(pkt) + 2;
+		add_rule(server, "level_name", pkt, NO_FLAGS);
+		pkt += strlen(pkt) + 2;
+		add_rule(server, "gametype", pkt, NO_FLAGS);
+		pkt += strlen(pkt) + 1;
+
+		sprintf(buf, "%hu", swap_short_from_little(pkt));
+		add_rule(server, "level_num", buf, NO_FLAGS);
+		pkt += 2;
+		server->num_players = swap_short_from_little(pkt);
+		pkt += 2;
+		server->max_players = swap_short_from_little(pkt);
+		pkt += 2;
+
+		/* unknown/undecoded fields.. stuff like permissible, banned items/ships, etc */
+		add_uchar_rule(server, "u0", pkt[0]);
+		add_uchar_rule(server, "u1", pkt[1]);
+		add_uchar_rule(server, "u2", pkt[2]);
+		add_uchar_rule(server, "u3", pkt[3]);
+		add_uchar_rule(server, "u4", pkt[4]);
+		add_uchar_rule(server, "u5", pkt[5]);
+		add_uchar_rule(server, "u6", pkt[6]);
+		add_uchar_rule(server, "u7", pkt[7]);
+		add_uchar_rule(server, "u8", pkt[8]);
+
+		add_uchar_rule(server, "randpowerup", (unsigned char)!(pkt[4] &1)); /*
+		randomize powerup spawn */
+		add_uchar_rule(server, "acccollisions", (unsigned char)((pkt[5] &4) > 0));
+		/* accurate collision detection */
+		add_uchar_rule(server, "brightships", (unsigned char)((pkt[5] &16) > 0));
+		/* bright player ships */
+		add_uchar_rule(server, "mouselook", (unsigned char)((pkt[6] &1) > 0)); /*
+		mouselook enabled */
+		sprintf(buf, "%s%s", (pkt[4] &16) ? "PP" : "CS", (pkt[6] &1) ? "-ML" : "");
+		add_rule(server, "servertype", buf, NO_FLAGS);
+
+		sprintf(buf, "%hhu", pkt[9]);
+		add_rule(server, "difficulty", buf, NO_FLAGS);
+
+		/* unknown/undecoded fields after known flags removed */
+		add_uchar_rule(server, "x4", (unsigned char)(pkt[4] &~(1+16)));
+		add_uchar_rule(server, "x5", (unsigned char)(pkt[5] &~(4+16)));
+		add_uchar_rule(server, "x6", (unsigned char)(pkt[6] &~1));
+
+		if (get_player_info && server->num_players)
+		{
+			server->next_player_info = 0;
+			send_player_request_packet(server);
+			return INPROGRESS;
+		}
+
+	}
+	/* MP_PLAYERLIST_DATA */
+	else if (rawpkt[1] == 0x73)
+	{
+		struct player *player;
+		struct player **last_player = &server->players;
+
+		if (server->players != NULL)
+		{
+			return PKT_ERROR;
+		}
+
+		pkt = &rawpkt[0x4];
+		while (*pkt)
+		{
+			player = (struct player*)calloc(1, sizeof(struct player));
+			player->name = strdup(pkt);
+			pkt += strlen(pkt) + 1;
+			*last_player = player;
+			last_player = &player->next;
+		}
+		server->next_player_info = NO_PLAYER_INFO;
+	}
+	else
+	{
+		fprintf(stderr, "unknown d3 packet\n");
+		print_packet(server, rawpkt, pktlen);
+	}
+
+	return DONE_FORCE;
+}
+
+
+#define EYE_NAME_MASK  1
+#define EYE_TEAM_MASK  2
+#define EYE_SKIN_MASK  4
+#define EYE_SCORE_MASK 8
+#define EYE_PING_MASK  16
+#define EYE_TIME_MASK  32
+
+int deal_with_eye_packet(struct qserver *server, char *rawpkt, int pktlen)
+{
+	char *next, *end, *value, *key;
+	struct player **last_player;
+	unsigned char pkt_index, pkt_max;
+	unsigned int pkt_id;
+
+	debug( 2, "deal_with_eye_packet %p, %d", server, pktlen );
+
+	if (pktlen < 4)
+	{
+		return PKT_ERROR;
+	}
 
-    server->ping_total += time_delta( &packet_recv_time, &server->packet_time1);
+	if (rawpkt[0] != 'E' || rawpkt[1] != 'Y' || rawpkt[2] != 'E')
+	{
+		return PKT_ERROR;
+	}
 
-    end= rawpkt + pktlen;
-    pkt_index= rawpkt[3] - '0';
+	server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 
-    if ( pktlen == 1364 || pkt_index != 1)
+	end = rawpkt + pktlen;
+	pkt_index = rawpkt[3] - '0';
+
+	if (pktlen == 1364 || pkt_index != 1)
 	{
 		/* fragmented packet */
 		SavedData *sdata;
-		/* EYE doesn't tell us how many packets to expect.  Two packets
+		/* EYE doesn't tell us how many packets to expect. Two packets
 		 * is enough for 100+ players on a BF1942 server with standard
 		 * server rules.
 		 */
-		pkt_max= 2;
-		memcpy( &pkt_id, &rawpkt[pktlen-4], 4);
+		pkt_max = 2;
+		memcpy(&pkt_id, &rawpkt[pktlen - 4], 4);
 
-		if ( server->saved_data.data == NULL)
+		if (server->saved_data.data == NULL)
 		{
-			sdata= & server->saved_data;
+			sdata = &server->saved_data;
 		}
 		else
 		{
-			sdata= (SavedData*) calloc( 1, sizeof(SavedData));
-			sdata->next= server->saved_data.next;
-			server->saved_data.next= sdata;
+			sdata = (SavedData*)calloc(1, sizeof(SavedData));
+			sdata->next = server->saved_data.next;
+			server->saved_data.next = sdata;
 		}
 
-		sdata->pkt_index= pkt_index-1;
-		sdata->pkt_max= pkt_max;
-		sdata->pkt_id= pkt_id;
-		if ( pkt_index == 1)
+		sdata->pkt_index = pkt_index - 1;
+		sdata->pkt_max = pkt_max;
+		sdata->pkt_id = pkt_id;
+		if (pkt_index == 1)
 		{
-			sdata->datalen= pktlen-4;
+			sdata->datalen = pktlen - 4;
 		}
 		else
 		{
-			sdata->datalen= pktlen-8;
+			sdata->datalen = pktlen - 8;
 		}
-		sdata->data= (char*) malloc( sdata->datalen);
+		sdata->data = (char*)malloc(sdata->datalen);
 
-		if ( NULL == sdata->data )
+		if (NULL == sdata->data)
 		{
-			fprintf( stderr, "Out of memory\n" );
-			cleanup_qserver( server, 1 );
-			return;
+			return MEM_ERROR;
 		}
-		if ( pkt_index == 1)
+
+		if (pkt_index == 1)
 		{
-			memcpy( sdata->data, &rawpkt[0], sdata->datalen);
+			memcpy(sdata->data, &rawpkt[0], sdata->datalen);
 		}
 		else
 		{
-			memcpy( sdata->data, &rawpkt[4], sdata->datalen);
+			memcpy(sdata->data, &rawpkt[4], sdata->datalen);
 		}
 
 		/* combine_packets will call us recursively */
-		combine_packets( server);
-		return;
-    }
+		return combine_packets(server);
+	}
 
-    value= dup_n1string( &rawpkt[4], end, &next);
-    if ( value == NULL)
+	value = dup_n1string(&rawpkt[4], end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    add_rule( server, "gamename", value, NO_VALUE_COPY);
+	add_rule(server, "gamename", value, NO_VALUE_COPY);
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    add_rule( server, "hostport", value, NO_VALUE_COPY);
+	add_rule(server, "hostport", value, NO_VALUE_COPY);
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    server->server_name= value;
+	server->server_name = value;
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    server->game= value;
-	add_rule( server, server->type->game_rule, value, NO_FLAGS);
+	server->game = value;
+	add_rule(server, server->type->game_rule, value, NO_FLAGS);
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    server->map_name= value;
+	server->map_name = value;
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    add_rule( server, "_version", value, NO_VALUE_COPY);
+	add_rule(server, "_version", value, NO_VALUE_COPY);
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    add_rule( server, "_password", value, NO_VALUE_COPY);
+	add_rule(server, "_password", value, NO_VALUE_COPY);
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    server->num_players= atoi(value);
-    free(value);
+	server->num_players = atoi(value);
+	free(value);
 
-    value= dup_n1string( next, end, &next);
-    if ( value == NULL)
+	value = dup_n1string(next, end, &next);
+	if (value == NULL)
 	{
-		goto eye_protocol_error;
+		return MEM_ERROR;
 	}
-    server->max_players= atoi(value);
-    free(value);
+	server->max_players = atoi(value);
+	free(value);
 
-    /* rule1,value1,rule2,value2, ... empty string */
+	/* rule1,value1,rule2,value2, ... empty string */
 
-    do
+	do
 	{
-		key= dup_n1string( next, end, &next);
-		if ( key == NULL)
+		key = dup_n1string(next, end, &next);
+		if (key == NULL)
 		{
 			break;
 		}
-		else if ( key[0] == '\0')
+		else if (key[0] == '\0')
 		{
 			free(key);
 			break;
 		}
 
-		value= dup_n1string( next, end, &next);
-		if ( value == NULL)
+		value = dup_n1string(next, end, &next);
+		if (value == NULL)
 		{
 			free(key);
 			break;
 		}
 
-		add_rule( server, key, value, NO_VALUE_COPY | NO_KEY_COPY);
-    } while ( 1);
+		add_rule(server, key, value, NO_VALUE_COPY | NO_KEY_COPY);
+	}
+	while (1);
 
-    /* [mask1]<name1><team1><skin1><score1><ping1><time1>[mask2]... */
+	/* [mask1]<name1><team1><skin1><score1><ping1><time1>[mask2]... */
 
-    last_player= & server->players;
-    while ( next && next < end )
+	last_player = &server->players;
+	while (next && next < end)
 	{
 		struct player *player;
-		unsigned mask= *((unsigned char*)next);
+		unsigned mask = *((unsigned char*)next);
 		next++;
-		if ( next >= end)
+		if (next >= end)
 		{
 			break;
 		}
-		if ( mask == 0)
+		if (mask == 0)
 		{
 			break;
 		}
-		player= (struct player*) calloc( 1, sizeof(struct player));
-		if ( player == NULL)
+		player = (struct player*)calloc(1, sizeof(struct player));
+		if (player == NULL)
 		{
 			break;
 		}
-		if ( mask & EYE_NAME_MASK)
+		if (mask &EYE_NAME_MASK)
 		{
-			player->name= dup_n1string( next, end, &next);
+			player->name = dup_n1string(next, end, &next);
 			//fprintf( stderr, "Player '%s'\n", player->name );
-			if ( player->name == NULL)
+			if (player->name == NULL)
 			{
 				break;
 			}
 		}
-		if ( mask & EYE_TEAM_MASK)
+		if (mask &EYE_TEAM_MASK)
 		{
-			value= dup_n1string( next, end, &next);
-			if ( value == NULL)
+			value = dup_n1string(next, end, &next);
+			if (value == NULL)
 			{
 				break;
 			}
-			if ( isdigit((unsigned char)value[0]))
+			if (isdigit((unsigned char)value[0]))
 			{
-				player->team= atoi(value);
+				player->team = atoi(value);
 				free(value);
 			}
 			else
 			{
-				player->team_name= value;
+				player->team_name = value;
 			}
 		}
-		if ( mask & EYE_SKIN_MASK)
+		if (mask &EYE_SKIN_MASK)
 		{
-			player->skin= dup_n1string( next, end, &next);
-			if ( player->skin == NULL)
+			player->skin = dup_n1string(next, end, &next);
+			if (player->skin == NULL)
 			{
 				break;
 			}
 		}
-		if ( mask & EYE_SCORE_MASK)
+		if (mask &EYE_SCORE_MASK)
 		{
-			value= dup_n1string( next, end, &next);
-			if ( value == NULL)
+			value = dup_n1string(next, end, &next);
+			if (value == NULL)
 			{
 				break;
 			}
-			player->score= atoi(value);
-			player->frags= player->score;
+			player->score = atoi(value);
+			player->frags = player->score;
 			free(value);
 		}
-		if ( mask & EYE_PING_MASK)
+		if (mask &EYE_PING_MASK)
 		{
-			value= dup_n1string( next, end, &next);
-			if ( value == NULL)
+			value = dup_n1string(next, end, &next);
+			if (value == NULL)
 			{
 				break;
 			}
-			player->ping= atoi(value);
+			player->ping = atoi(value);
 			free(value);
 		}
-		if ( mask & EYE_TIME_MASK)
+		if (mask &EYE_TIME_MASK)
 		{
-			value= dup_n1string( next, end, &next);
-			if ( value == NULL)
+			value = dup_n1string(next, end, &next);
+			if (value == NULL)
 			{
 				break;
 			}
-			player->connect_time= atoi(value);
+			player->connect_time = atoi(value);
 			free(value);
 		}
-		*last_player= player;
-		last_player= & player->next;
+		*last_player = player;
+		last_player = &player->next;
 		//fprintf( stderr, "Player '%s'\n", player->name );
-    }
-
-    cleanup_qserver( server, 1);
-    return;
+	}
 
-eye_protocol_error:
-    cleanup_qserver( server, 1);
+	return DONE_FORCE;
 }
 
 static const char hl2_statusresponse[] = "\xFF\xFF\xFF\xFF\x49";
@@ -10211,9 +11361,7 @@
 #define HL2_STATUS 1
 #define HL2_PLAYERS 2
 #define HL2_RULES 3
-
-void
-deal_with_hl2_packet( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_hl2_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
 	char *ptr = rawpkt;
 	char *end = rawpkt + pktlen;
@@ -10222,734 +11370,910 @@
 	unsigned char protocolver = 0;
 	int n_sent = 0;
 
+	debug( 2, "deal_with_hl2_packet %p, %d", server, pktlen );
+
 	server->n_servers++;
-	if ( server->server_name == NULL)
+	if (server->server_name == NULL)
 	{
-		server->ping_total += time_delta( &packet_recv_time, &server->packet_time1);
+		server->ping_total += time_delta(&packet_recv_time, &server->packet_time1);
 	}
 	else
 	{
-		gettimeofday( &server->packet_time1, NULL);
+		gettimeofday(&server->packet_time1, NULL);
 	}
 
 	// Check if correct reply
-	if ( pktlen < hl2_response_size )
+	if (pktlen < hl2_response_size)
 	{
 		malformed_packet(server, "short response type");
-		cleanup_qserver( server, 1);
-		return;
+		return PKT_ERROR;
 	}
 	else
 	{
-		if ( 0 == memcmp( hl2_statusresponse, ptr, hl2_response_size ) )
+		if (0 == memcmp(hl2_statusresponse, ptr, hl2_response_size))
 		{
-			if ( pktlen < hl2_response_size + 20 )
+			if (pktlen < hl2_response_size + 20)
 			{
 				malformed_packet(server, "short packet");
-				cleanup_qserver( server, 1);
-				return;
+				return PKT_ERROR;
 			}
 			type = HL2_STATUS;
 		}
-		else if ( 0 == memcmp( hl2_playersresponse, ptr, hl2_response_size ) )
+		else if (0 == memcmp(hl2_playersresponse, ptr, hl2_response_size))
 		{
 			type = HL2_PLAYERS;
 		}
-		else if ( 0 == memcmp( hl2_rulesresponse, ptr, hl2_response_size ) )
+		else if (0 == memcmp(hl2_rulesresponse, ptr, hl2_response_size))
 		{
 			type = HL2_RULES;
 		}
 		else
 		{
 			malformed_packet(server, "unknown response");
-			cleanup_qserver( server, 1);
-			return;
+			return PKT_ERROR;
 		}
 	}
 
 	// header
 	ptr += hl2_response_size;
 
-	switch( type )
-	{
-	case HL2_STATUS:
-
-		// protocol version
-		protocolver = *ptr;
-		ptr++;
-
-		debug(2, "protocol: 0x%02X", protocolver );
-		// Commented out till out of beta
-/*
-		if( '\x02' != protocolver )
-		{
-			malformed_packet(server, "protocol version != 0x02");
-			cleanup_qserver( server, 1);
-			return;
-		}
-*/
+	switch (type)
+	{
+		case HL2_STATUS:
 
-		server->protocol_version = protocolver;
-		sprintf( temp, "%d", protocolver );
-		add_rule( server, "protocol", temp, NO_FLAGS);
+			// protocol version
+			protocolver = *ptr;
+			ptr++;
 
-		// server name
-		server->server_name = strdup( ptr );
-		ptr += strlen( ptr ) + 1;
+			debug(2, "protocol: 0x%02X", protocolver);
+			// Commented out till out of beta
+			/*
+			if( '\x02' != protocolver )
+			{
+				malformed_packet(server, "protocol version != 0x02");
+				return PKT_ERROR;
+			}
+			 */
 
-		// map
-		server->map_name = strdup( ptr );
-		ptr += strlen( ptr ) + 1;
+			server->protocol_version = protocolver;
+			sprintf(temp, "%d", protocolver);
+			add_rule(server, "protocol", temp, NO_FLAGS);
 
-		// gamedir
-		server->game = strdup( ptr );
-		add_rule( server, "gamedir", ptr, NO_FLAGS );
-		ptr += strlen( ptr ) + 1;
+			// server name
+			server->server_name = strdup(ptr);
+			ptr += strlen(ptr) + 1;
 
-		// description
-		add_rule( server, "description", ptr, NO_FLAGS );
-		ptr += strlen( ptr ) + 1;
+			// map
+			server->map_name = strdup(ptr);
+			ptr += strlen(ptr) + 1;
 
-		// appid
-		ptr += 2;
+			// gamedir
+			server->game = strdup(ptr);
+			add_rule(server, "gamedir", ptr, NO_FLAGS);
+			ptr += strlen(ptr) + 1;
 
-		// num players
-		server->num_players = *ptr;
-		ptr++;
+			// description
+			add_rule(server, "description", ptr, NO_FLAGS);
+			ptr += strlen(ptr) + 1;
 
-		// max players
-		server->max_players = *ptr;
-		ptr++;
+			// appid
+			ptr += 2;
 
-		// bot players
-		sprintf( temp, "%hhu", (*ptr) );
-		add_rule( server, "bot_players", temp, NO_FLAGS );
-		ptr++;
+			// num players
+			server->num_players = *ptr;
+			ptr++;
 
-		// dedicated
-		if ( 'd' == *ptr )
-		{
-			add_rule( server, "sv_type", "dedicated", NO_FLAGS );
-		}
-		else if ( 'l' == *ptr )
-		{
-			add_rule( server, "sv_type", "listen", NO_FLAGS );
-		}
-		else
-		{
-			char tmp[2] = { *ptr, '\0' };
-			add_rule( server, "sv_type", tmp, NO_FLAGS );
-		}
-		ptr++;
+			// max players
+			server->max_players = *ptr;
+			ptr++;
 
-		// OS
-		if ( 'l' == *ptr )
-		{
-			add_rule( server, "sv_os", "linux", NO_FLAGS );
-		}
-		else if ( 'w' == *ptr )
-		{
-			add_rule( server, "sv_os", "windows", NO_FLAGS );
-		}
-		else
-		{
-			char tmp[2] = { *ptr, '\0' };
-			add_rule( server, "sv_os", tmp, NO_FLAGS );
-		}
-		ptr++;
+			// bot players
+			sprintf(temp, "%hhu", (*ptr));
+			add_rule(server, "bot_players", temp, NO_FLAGS);
+			ptr++;
 
-		// passworded
-		add_rule( server, "sv_password", *ptr ? "1" : "0", NO_FLAGS);
-		ptr++;
+			// dedicated
+			if ('d' == *ptr)
+			{
+				add_rule(server, "sv_type", "dedicated", NO_FLAGS);
+			}
+			else if ('l' == *ptr)
+			{
+				add_rule(server, "sv_type", "listen", NO_FLAGS);
+			}
+			else
+			{
+				char tmp[2] =
+				{
+					*ptr, '\0'
+				}
+				;
+				add_rule(server, "sv_type", tmp, NO_FLAGS);
+			}
+			ptr++;
 
-		// secure
-		add_rule( server, "secure", *ptr ? "1" : "0", NO_FLAGS);
-		ptr++;
+			// OS
+			if ('l' == *ptr)
+			{
+				add_rule(server, "sv_os", "linux", NO_FLAGS);
+			}
+			else if ('w' == *ptr)
+			{
+				add_rule(server, "sv_os", "windows", NO_FLAGS);
+			}
+			else
+			{
+				char tmp[2] =
+				{
+					*ptr, '\0'
+				}
+				;
+				add_rule(server, "sv_os", tmp, NO_FLAGS);
+			}
+			ptr++;
 
-		// send the other request packets if wanted
-		if ( get_server_rules )
-		{
-			int requests = server->n_requests;
-			send_rule_request_packet( server );
-			server->n_requests = requests; // prevent wrong ping
-			n_sent++;
-		}
-		else if ( get_player_info )
-		{
-			int requests = server->n_requests;
-			send_player_request_packet( server ) ;
-			server->n_requests = requests; // prevent wrong ping
-			n_sent++;
-		}
-		break;
+			// passworded
+			add_rule(server, "sv_password", *ptr ? "1" : "0", NO_FLAGS);
+			ptr++;
 
-	case HL2_RULES:
-		// num_players
-		ptr++;
+			// secure
+			add_rule(server, "secure", *ptr ? "1" : "0", NO_FLAGS);
+			ptr++;
 
-		// max_players
-		ptr++;
-		while ( ptr < end )
-		{
-			char *var = ptr;
-			char *val;
-			ptr += strlen( var ) + 1;
-			val = ptr;
-			ptr += strlen( val ) + 1;
-			add_rule( server, var, val, NO_FLAGS );
-		}
+			// send the other request packets if wanted
+			if (get_server_rules)
+			{
+				int requests = server->n_requests;
+				send_rule_request_packet(server);
+				server->n_requests = requests; // prevent wrong ping
+				n_sent++;
+			}
+			else if (get_player_info)
+			{
+				int requests = server->n_requests;
+				send_player_request_packet(server);
+				server->n_requests = requests; // prevent wrong ping
+				n_sent++;
+			}
+			break;
 
-		if ( get_player_info )
-		{
-			send_player_request_packet( server ) ;
-			n_sent++;
-		}
-		break;
+		case HL2_RULES:
+			// num_players
+			ptr++;
 
-	case HL2_PLAYERS:
-		// num_players
-		ptr++;
+			// max_players
+			ptr++;
+			while (ptr < end)
+			{
+				char *var = ptr;
+				char *val;
+				ptr += strlen(var) + 1;
+				val = ptr;
+				ptr += strlen(val) + 1;
+				add_rule(server, var, val, NO_FLAGS);
+			}
 
-		while ( ptr < end )
-		{
-			struct player *player = add_player( server, server->n_player_info );
+			if (get_player_info)
+			{
+				send_player_request_packet(server);
+				n_sent++;
+			}
+			break;
 
-			// player no
+		case HL2_PLAYERS:
+			// num_players
 			ptr++;
 
-			// name
-			player->name = strdup( ptr );
-			ptr += strlen( ptr ) + 1;
-
-			// frags
-			player->frags = swap_long_from_little( ptr );
-			ptr += 4;
-
-			// time
-			player->connect_time = swap_float_from_little( ptr );
-			ptr += 4;
-		}
+			while (ptr < end)
+			{
+				struct player *player = add_player(server, server->n_player_info);
 
-		break;
+				// player no
+				ptr++;
 
-	default:
-		malformed_packet( server, "unknown response" );
-		cleanup_qserver( server, 1);
-		return;
-	}
+				// name
+				player->name = strdup(ptr);
+				ptr += strlen(ptr) + 1;
 
+				// frags
+				player->frags = swap_long_from_little(ptr);
+				ptr += 4;
 
-	if ( 0 == n_sent )
-	{
-		cleanup_qserver( server, 1 );
+				// time
+				player->connect_time = swap_float_from_little(ptr);
+				ptr += 4;
+			}
+
+			break;
+
+		default:
+			malformed_packet(server, "unknown response");
+			return PKT_ERROR;
 	}
-	return;
+
+	return ( 0 == n_sent ) ? DONE_FORCE : INPROGRESS;
 }
 
-void
-deal_with_gamespy_master_response( struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_gamespy_master_response(struct qserver *server, char *rawpkt, int pktlen)
 {
-    if ( pktlen == 0)  {
-	int len= server->saved_data.datalen;
-	char *data= server->saved_data.data;
-	char *ip, *portstr;
-	unsigned int ipaddr;
-	unsigned short port;
-	int master_pkt_max;
+	debug( 2, "deal_with_gamespy_master_response %p, %d", server, pktlen );
+
+	if (pktlen == 0)
+	{
+		int len = server->saved_data.datalen;
+		char *data = server->saved_data.data;
+		char *ip, *portstr;
+		unsigned int ipaddr;
+		unsigned short port;
+		int master_pkt_max;
 
-	server->server_name= GAMESPY_MASTER_NAME;
+		server->server_name = GAMESPY_MASTER_NAME;
 
-	master_pkt_max= (len / 20) * 6;
-	server->master_pkt= (char*) malloc( master_pkt_max);
-	server->master_pkt_len= 0;
-
-	while ( len)  {
-	    for ( ; len && *data == '\\'; data++, len--) ;
-	    if ( len < 3) break;
-	    if ( data[0] == 'i' && data[1] == 'p' && data[2] == '\\')  {
-		data+= 3;
-		len-= 3;
-		ip= data;
-		portstr= NULL;
-		for ( ; len && *data != '\\'; data++, len--)  {
-		    if ( *data == ':')  {
-			portstr= data+1;
-			*data= '\0';
-		    }
-		}
-		if ( len == 0)
-		    break;
-		*data++= '\0';
-		len--;
-		ipaddr= inet_addr( ip);
-		if ( portstr)
-		    port= htons( (unsigned short)atoi( portstr));
-		else
-		    port= htons( 28000);   /* ## default port */
-		if ( server->master_pkt_len >= master_pkt_max)  {
-		    master_pkt_max+= 20*6;
-		    server->master_pkt= (char*) realloc( server->master_pkt,
-			master_pkt_max);
-		}
-		memcpy( server->master_pkt + server->master_pkt_len,
-			&ipaddr, 4);
-		memcpy( server->master_pkt + server->master_pkt_len + 4,
-			&port, 2);
-		server->master_pkt_len+= 6;
-	    }
-	    else
-		for ( ; len && *data != '\\'; data++, len--) ;
-	}
-
-	server->n_servers= server->master_pkt_len / 6;
-	server->next_player_info= -1;
-	server->retry1= 0;
-
-	cleanup_qserver( server, 1);
-	return;
-    }
-
-    if (! server->saved_data.data)
-	server->saved_data.data= (char*)malloc( pktlen);
-    else
-	server->saved_data.data= (char*)realloc( server->saved_data.data,
-		server->saved_data.datalen + pktlen);
+		master_pkt_max = (len / 20) *6;
+		server->master_pkt = (char*)malloc(master_pkt_max);
+		server->master_pkt_len = 0;
+
+		while (len)
+		{
+			for (; len && *data == '\\'; data++, len--)
+				;
+			if (len < 3)
+			{
+				break;
+			}
+			if (data[0] == 'i' && data[1] == 'p' && data[2] == '\\')
+			{
+				data += 3;
+				len -= 3;
+				ip = data;
+				portstr = NULL;
+				for (; len && *data != '\\'; data++, len--)
+				{
+					if (*data == ':')
+					{
+						portstr = data + 1;
+						*data = '\0';
+					}
+				}
+				if (len == 0)
+				{
+					break;
+				}
+				*data++ = '\0';
+				len--;
+				ipaddr = inet_addr(ip);
+				if (portstr)
+				{
+					port = htons((unsigned short)atoi(portstr));
+				}
+				else
+				{
+					port = htons(28000);
+				}
+				/* ## default port */
+				if (server->master_pkt_len >= master_pkt_max)
+				{
+					master_pkt_max += 20 * 6;
+					server->master_pkt = (char*)realloc(server->master_pkt, master_pkt_max);
+				}
+				memcpy(server->master_pkt + server->master_pkt_len, &ipaddr, 4);
+				memcpy(server->master_pkt + server->master_pkt_len + 4, &port, 2);
+				server->master_pkt_len += 6;
+			}
+			else
+			{
+				for (; len && *data != '\\'; data++, len--)
+					;
+			}
+		}
+
+		server->n_servers = server->master_pkt_len / 6;
+		server->next_player_info = - 1;
+		server->retry1 = 0;
+
+		return DONE_FORCE;
+	}
+
+	if (!server->saved_data.data)
+	{
+		server->saved_data.data = (char*)malloc(pktlen);
+	}
+	else
+	{
+		server->saved_data.data = (char*)realloc(server->saved_data.data, server->saved_data.datalen + pktlen);
+	}
 
-    memcpy( server->saved_data.data + server->saved_data.datalen, rawpkt, pktlen);
-    server->saved_data.datalen+= pktlen;
+	memcpy(server->saved_data.data + server->saved_data.datalen, rawpkt, pktlen);
+	server->saved_data.datalen += pktlen;
 
+	return INPROGRESS;
 }
 
 /* Misc utility functions
  */
 
-char *
-strndup( const char *string, size_t len)
+char *strndup(const char *string, size_t len)
 {
-    char *result;
-    result= (char*) malloc( len+1);
-    memcpy( result, string, len);
-    result[len]= '\0';
-    return result;
+	char *result;
+	result = (char*)malloc(len + 1);
+	memcpy(result, string, len);
+	result[len] = '\0';
+	return result;
 }
 
-unsigned int
-swap_long( void *l)
+unsigned int swap_long(void *l)
 {
-    unsigned char *b= (unsigned char *) l;
-    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+	unsigned char *b = (unsigned char*)l;
+	return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
 }
 
-unsigned short
-swap_short( void *l)
+unsigned short swap_short(void *l)
 {
-    unsigned char *b= (unsigned char *) l;
-    return (unsigned short)b[0] | (b[1]<<8);
+	unsigned char *b = (unsigned char*)l;
+	return (unsigned short)b[0] | (b[1] << 8);
 }
 
-unsigned int
-swap_long_from_little( void *l)
+unsigned int swap_long_from_little(void *l)
 {
-    unsigned char *b= (unsigned char *) l;
-    unsigned int result;
-    if ( little_endian)
-	memcpy( &result, l, 4);
-    else
-	result= (unsigned int)b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-    return result;
+	unsigned char *b = (unsigned char*)l;
+	unsigned int result;
+	if (little_endian)
+	{
+		memcpy(&result, l, 4);
+	}
+	else
+	{
+		result = (unsigned int)b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+	}
+	return result;
 }
 
-float
-swap_float_from_little( void *f )
+float swap_float_from_little(void *f)
 {
-	union {
+	union
+	{
 		int i;
 		float fl;
 	} temp;
 
 	temp.i = swap_long_from_little(f);
 	return temp.fl;
-};
+}
 
-unsigned short
-swap_short_from_little( void *l)
+unsigned short swap_short_from_little(void *l)
 {
-    unsigned char *b= (unsigned char *) l;
-    unsigned short result;
-    if ( little_endian)
-	memcpy( &result, l, 2);
-    else
-	result= (unsigned short)b[0] | ((unsigned short)b[1]<<8);
-    return result;
+	unsigned char *b = (unsigned char*)l;
+	unsigned short result;
+	if (little_endian)
+	{
+		memcpy(&result, l, 2);
+	}
+	else
+	{
+		result = (unsigned short)b[0] | ((unsigned short)b[1] << 8);
+	}
+	return result;
 }
 
 /** write four byte to buf */
-void put_long_little(unsigned val, char* buf)
+void put_long_little(unsigned val, char *buf)
 {
-	buf[0] = val & 0xFF;
-	buf[1] = (val >> 8) & 0xFF;
-	buf[2] = (val >> 16) & 0xFF;
-	buf[3] = (val >> 24) & 0xFF;
+	buf[0] = val &0xFF;
+	buf[1] = (val >> 8) &0xFF;
+	buf[2] = (val >> 16) &0xFF;
+	buf[3] = (val >> 24) &0xFF;
 }
 
 #define MAXSTRLEN 2048
 
-char *
-xml_escape( char *string)
+char *xml_escape(char *string)
 {
-    static char _buf[4][MAXSTRLEN+8];
-    static int _buf_index= 0;
-    char *result, *b, *end;
-    unsigned char c;
+	static unsigned char _buf[4][MAXSTRLEN + 8];
+	static int _buf_index = 0;
+	unsigned char *result, *b, *end;
+	unsigned int c;
 
-    if ( string == NULL)
-	return "";
+	if (string == NULL)
+	{
+		return "";
+	}
 
-    result= &_buf[_buf_index][0];
-    _buf_index= (_buf_index+1) % 4;
+	result = &_buf[_buf_index][0];
+	_buf_index = (_buf_index + 1) % 4;
 
-    end= &result[MAXSTRLEN];
+	end = &result[MAXSTRLEN];
 
-    b= result;
-    for ( ; *string && b < end; string++)  {
-	c= *string;
-	switch ( c)  {
-	case '&':
-	    *b++= '&';
-	    *b++= 'a';
-	    *b++= 'm';
-	    *b++= 'p';
-	    *b++= ';';
-	    continue;
-	case '<':
-	    *b++= '&';
-	    *b++= 'l';
-	    *b++= 't';
-	    *b++= ';';
-	    continue;
-	case '>':
-	    *b++= '&';
-	    *b++= 'g';
-	    *b++= 't';
-	    *b++= ';';
-	    continue;
-	default:
-	    break;
-	}
-	if ( ! name_xforms)  {
-	    *b++= c;
-	}
-	else if ( xml_encoding == ENCODING_LATIN_1)  {
-	    if ( isprint(c))
-		*b++= c;
-	    else
-		b+= sprintf( b, "&#%u;", c);
-	}
-	else if ( xml_encoding == ENCODING_UTF_8)  {
-	    if ( (c & 0x80) == 0)
-		*b++= c;
-	    else  {
-		*b++= 0xC0 | (0x03 & (c >> 6)) ;
-		*b++= 0x80 | (0x3F & c) ;
-	    }
+	b = result;
+	for (; *string && b < end; string++)
+	{
+		c = *string;
+		switch (c)
+		{
+			case '&':
+				*b++ = '&';
+				*b++ = 'a';
+				*b++ = 'm';
+				*b++ = 'p';
+				*b++ = ';';
+				continue;
+			case '\'':
+				*b++ = '&';
+				*b++ = 'a';
+				*b++ = 'p';
+				*b++ = 'o';
+				*b++ = 's';
+				*b++ = ';';
+				continue;
+			case '"':
+				*b++ = '&';
+				*b++ = 'q';
+				*b++ = 'u';
+				*b++ = 'o';
+				*b++ = 't';
+				*b++ = ';';
+				continue;
+			case '<':
+				*b++ = '&';
+				*b++ = 'l';
+				*b++ = 't';
+				*b++ = ';';
+				continue;
+			case '>':
+				*b++ = '&';
+				*b++ = 'g';
+				*b++ = 't';
+				*b++ = ';';
+				continue;
+			default:
+				break;
+		}
+
+		// Validate character
+		// http://www.w3.org/TR/2000/REC-xml-20001006#charsets
+		if ( !
+			(
+				0x09 == c ||
+				0xA == c ||
+				0xD == c ||
+				( 0x20 <= c && 0xD7FF >= c ) ||
+				( 0xE000 <= c && 0xFFFD >= c ) ||
+				( 0x10000 <= c && 0x10FFFF >= c )
+			)
+		)
+		{
+			fprintf(stderr, "Encoding error (%d) for U+%x, D+%d\n", 1, c, c);
+		}
+		else if (xml_encoding == ENCODING_LATIN_1)
+		{
+			if (!name_xforms)
+			{
+				*b++ = c;
+			}
+			else
+			{
+				if (isprint(c))
+				{
+					*b++ = c;
+				}
+				else
+				{
+					b += sprintf( (char *)b, "&#%u;", c);
+				}
+			}
+		}
+		else if (xml_encoding == ENCODING_UTF_8)
+		{
+			unsigned char tempbuf[10] =
+			{
+				0
+			};
+			unsigned char *buf = &tempbuf[0];
+			int bytes = 0;
+			int error = 1;
+
+			// Valid character ranges
+			if (
+				0x09 == c ||
+				0xA == c ||
+				0xD == c ||
+				( 0x20 <= c && 0xD7FF >= c ) ||
+				( 0xE000 <= c && 0xFFFD >= c ) ||
+				( 0x10000 <= c && 0x10FFFF >= c )
+			)
+			{
+				error = 0;
+			}
+
+			if (c < 0x80)
+			/* 0XXX XXXX one byte */
+			{
+				buf[0] = c;
+				bytes = 1;
+			}
+			else if (c < 0x0800)
+			/* 110X XXXX two bytes */
+			{
+				buf[0] = 0xC0 | (0x03 &(c >> 6));
+				buf[1] = 0x80 | (0x3F &c);
+				bytes = 2;
+			}
+			else if (c < 0x10000)
+			/* 1110 XXXX three bytes */
+			{
+				buf[0] = 0xE0 | (c >> 12);
+				buf[1] = 0x80 | ((c >> 6) &0x3F);
+				buf[2] = 0x80 | (c &0x3F);
+
+				bytes = 3;
+				if (c == UTF8BYTESWAPNOTACHAR || c == UTF8NOTACHAR)
+				{
+					error = 3;
+				}
+
+			}
+			else if (c < 0x10FFFF)
+			/* 1111 0XXX four bytes */
+			{
+				buf[0] = 0xF0 | (c >> 18);
+				buf[1] = 0x80 | ((c >> 12) &0x3F);
+				buf[2] = 0x80 | ((c >> 6) &0x3F);
+				buf[3] = 0x80 | (c &0x3F);
+				bytes = 4;
+				if (c > UTF8MAXFROMUCS4)
+				{
+					error = 4;
+				}
+
+			}
+			else if (c < 0x4000000)
+			/* 1111 10XX five bytes */
+			{
+				buf[0] = 0xF8 | (c >> 24);
+				buf[1] = 0x80 | (c >> 18);
+				buf[2] = 0x80 | ((c >> 12) &0x3F);
+				buf[3] = 0x80 | ((c >> 6) &0x3F);
+				buf[4] = 0x80 | (c &0x3F);
+				bytes = 5;
+				error = 5;
+			}
+			else if (c < 0x80000000)
+			/* 1111 110X six bytes */
+			{
+				buf[0] = 0xFC | (c >> 30);
+				buf[1] = 0x80 | ((c >> 24) &0x3F);
+				buf[2] = 0x80 | ((c >> 18) &0x3F);
+				buf[3] = 0x80 | ((c >> 12) &0x3F);
+				buf[4] = 0x80 | ((c >> 6) &0x3F);
+				buf[5] = 0x80 | (c &0x3F);
+				bytes = 6;
+				error = 6;
+			}
+			else
+			{
+				error = 7;
+			}
+
+			if (error)
+			{
+				int i;
+				fprintf(stderr, "UTF-8 encoding error (%d) for U+%x, D+%d : ", error, c, c);
+				for (i = 0; i < bytes; i++)
+				{
+					fprintf(stderr, "0x%02x ", buf[i]);
+				}
+				fprintf(stderr, "\n");
+			}
+			else
+			{
+				int i;
+				for (i = 0; i < bytes; ++i)
+				{
+					*b++ = buf[i];
+				}
+			}
+
+		}
 	}
-    }
-    *b= '\0';
-    return result;
+	*b = '\0';
+	return (char*)result;
 }
 
 
-static char *quake3_escape_colors[8] = {
-"black", "red", "green", "yellow", "blue", "cyan", "magenta", "white"
+static char *quake3_escape_colors[8] =
+{
+	"black", "red", "green", "yellow", "blue", "cyan", "magenta", "white"
 };
 
-static char *sof_colors[32] = {
-"FFFFFF","FFFFFF","FF0000","00FF00","FFFF00","0000FF","FF00FF","00FFFF",
-"000000","7F7F7F","702D07","7F0000","007F00","FFFFFF","007F7F","00007F",
-"564D28","4C5E36","370B65","005572","54647E","1E2A63","66097B","705E61",
-"980053","960018","702D07","54492A","61A997","CB8F39","CF8316","FF8020"
+static char *sof_colors[32] =
+{
+	"FFFFFF", "FFFFFF", "FF0000", "00FF00", "FFFF00", "0000FF", "FF00FF", "00FFFF", "000000", "7F7F7F", "702D07", "7F0000", "007F00",
+	"FFFFFF", "007F7F", "00007F", "564D28", "4C5E36", "370B65", "005572", "54647E", "1E2A63", "66097B", "705E61", "980053",
+	"960018", "702D07", "54492A", "61A997", "CB8F39", "CF8316", "FF8020"
 };
 
 
-char *
-xform_name( char *string, struct qserver *server)
+char *xform_name(char *string, struct qserver *server)
 {
 	static char _buf1[2048], _buf2[2048];
-	static char *_q= &_buf1[0];
-	unsigned char *s= (unsigned char*) string;
+	static char *_q = &_buf1[0];
+	unsigned char *s = (unsigned char*)string;
 	char *q;
 	int is_server_name = (string == server->server_name);
-	int font_tag= 0;
+	int font_tag = 0;
 
-	_q= _q == _buf1 ? _buf2 : _buf1;
-	q= _q;
+	_q = _q == _buf1 ? _buf2 : _buf1;
+	q = _q;
 
-	if ( s == NULL)
+	if (s == NULL)
 	{
-		q[0]= '?';
-		q[1]= '\0';
+		q[0] = '?';
+		q[1] = '\0';
 		return _q;
 	}
 
-	if ( ! name_xforms)  {
-		strcpy( _q, string);
+	if (!name_xforms)
+	{
+		strcpy(_q, string);
 		return _q;
 	}
 
-	if ( (hex_player_names && !is_server_name) || (hex_server_names && is_server_name))
+	if ((hex_player_names && !is_server_name) || (hex_server_names && is_server_name))
 	{
-		for ( ; *s; s++, q+= 2)
+		for (; *s; s++, q += 2)
 		{
-			sprintf( q, "%02x", *s);
+			sprintf(q, "%02x", *s);
 		}
-		*q= '\0';
+		*q = '\0';
 		return _q;
 	}
-	if ( server->type->flags & TF_QUAKE3_NAMES)
+	if (server->type->flags &TF_QUAKE3_NAMES)
 	{
-		for ( ; *s; s++)
+		for (; *s; s++)
 		{
-			if ( *s == '^' && *(s+1) != '^')
+			if (*s == '^' && *(s + 1) != '^')
 			{
-				if ( *(s+1) == '\0')
+				if (*(s + 1) == '\0')
 				{
 					break;
 				}
-				if ( html_names == 1)
+				if (html_names == 1)
 				{
-					q+= sprintf( q, "%s<font color=\"%s\">",
-					font_tag?"</font>":"",
-					quake3_escape_colors[ *(s+1) & 0x7]);
+					q += sprintf(q, "%s<font color=\"%s\">", font_tag ? "</font>" : "", quake3_escape_colors[*(s + 1) &0x7]);
 					s++;
-					font_tag= 1;
+					font_tag = 1;
 				}
-				else if ( strip_carets)
+				else if (strip_carets)
 				{
 					s++;
 				}
 				else
 				{
-					*q++= *s;
+					*q++ = *s;
 				}
 			}
 			else
 			{
-				int inc = html_entity( *s, q );
-				if ( 0 != inc )
+				int inc = html_entity(*s, q);
+				if (0 != inc)
 				{
 					q += inc;
 				}
-				else if ( isprint(*s))
-				{
-					*q++= *s;
-				}
-				else if ( *s == '\033')
+				else if (isprint(*s))
 				{
+					*q++ = *s;
 				}
-				else if ( *s == 0x80)
+				else if (*s == '\033'){}
+				else if (*s == 0x80)
 				{
-					*q++= '(';
+					*q++ = '(';
 				}
-				else if ( *s == 0x81)
+				else if (*s == 0x81)
 				{
-					*q++= '=';
+					*q++ = '=';
 				}
-				else if ( *s == 0x82)
+				else if (*s == 0x82)
 				{
-					*q++= ')';
+					*q++ = ')';
 				}
-				else if ( *s == 0x10 || *s == 0x90)
+				else if (*s == 0x10 || *s == 0x90)
 				{
-					*q++= '[';
+					*q++ = '[';
 				}
-				else if ( *s == 0x11 || *s == 0x91)
+				else if (*s == 0x11 || *s == 0x91)
 				{
-					*q++= ']';
+					*q++ = ']';
 				}
-				else if ( *s >= 0x92 && *s <= 0x9a)
+				else if (*s >= 0x92 && *s <= 0x9a)
 				{
-					*q++= *s - 98;
+					*q++ = *s - 98;
 				}
-				else if ( *s >= 0xa0 && *s <= 0xe0)
+				else if (*s >= 0xa0 && *s <= 0xe0)
 				{
-					*q++= *s - 128;
+					*q++ = *s - 128;
 				}
-				else if ( *s >= 0xe1 && *s <= 0xfa)
+				else if (*s >= 0xe1 && *s <= 0xfa)
 				{
-					*q++= *s - 160;
+					*q++ = *s - 160;
 				}
-				else if ( *s >= 0xfb && *s <= 0xfe)
+				else if (*s >= 0xfb && *s <= 0xfe)
 				{
-					*q++= *s - 128;
+					*q++ = *s - 128;
 				}
 			}
 		}
-		*q= '\0';
+		*q = '\0';
 	}
-	else if ( !is_server_name && (server->type->flags & TF_TRIBES2_NAMES))
+	else if (!is_server_name && (server->type->flags &TF_TRIBES2_NAMES))
 	{
-		for ( ; *s; s++)
+		for (; *s; s++)
 		{
-			int inc = html_entity( *s, q );
-			if ( 0 != inc )
+			int inc = html_entity(*s, q);
+			if (0 != inc)
 			{
 				q += inc;
 				continue;
 			}
-			else if ( isprint(*s))
+			else if (isprint(*s))
 			{
-				*q++= *s;
+				*q++ = *s;
 				continue;
 			}
-			if ( html_names == 1 && s[1] != '\0')
+			if (html_names == 1 && s[1] != '\0')
 			{
 				char *font_color;
-				switch( *s)
+				switch (*s)
 				{
-				case 0x8: font_color= "white"; break;	/* normal */
-				case 0xb: font_color= "yellow"; break;	/* tribe tag */
-				case 0xc: font_color= "blue"; break;	/* alias */
-				case 0xe: font_color= "green"; break;	/* bot */
-				default: font_color= NULL;
+					case 0x8:
+						font_color = "white";
+						break; /* normal */
+					case 0xb:
+						font_color = "yellow";
+						break; /* tribe tag */
+					case 0xc:
+						font_color = "blue";
+						break; /* alias */
+					case 0xe:
+						font_color = "green";
+						break; /* bot */
+					default:
+						font_color = NULL;
 				}
-				if ( font_color)
+				if (font_color)
 				{
-					q+= sprintf( q, "%s<font color=\"%s\">",
-					font_tag?"</font>":"",
-					font_color);
-					font_tag= 1;
+					q += sprintf(q, "%s<font color=\"%s\">", font_tag ? "</font>" : "", font_color);
+					font_tag = 1;
 				}
 			}
 		}
-		*q= '\0';
+		*q = '\0';
 	}
-	else if ( server->type->flags & TF_U2_NAMES )
+	else if (server->type->flags &TF_U2_NAMES)
 	{
-		for ( ; *s; s++)
+		for (; *s; s++)
 		{
-			if ( 0 == memcmp( s, "^\1", 2 ) )
+			if (0 == memcmp(s, "^\1", 2))
 			{
 				// xmp Color follows
 				s += 2;
-				q += u2xmp_html_color( (unsigned char)*s, q, &font_tag );
+				q += u2xmp_html_color((unsigned char) *s, q, &font_tag);
 			}
-			else if ( 0 == memcmp( s, "\x1b", 1 ) )
+			else if (0 == memcmp(s, "\x1b", 1))
 			{
 				// Color follows
 				s += 1;
-				q += ut2k4_html_color( s, q, &font_tag );
+				q += ut2k4_html_color(s, q, &font_tag);
 				s += 2;
 			}
 			else
 			{
-				int inc = html_entity( *s, q );
-				if ( 0 != inc )
+				int inc = html_entity(*s, q);
+				if (0 != inc)
 				{
 					q += inc;
 				}
-				else if ( isprint(*s))
+				else if (isprint(*s))
 				{
-					*q++= *s;
+					*q++ = *s;
 				}
-				else if ( 0xa0 == *s )
+				else if (0xa0 == *s)
 				{
-					*q++= ' ';
+					*q++ = ' ';
 				}
 			}
 		}
 		*q = '\0';
 	}
-	else if ( server->type->flags & TF_TM_NAMES )
+	else if (server->type->flags &TF_TM_NAMES)
 	{
 		int open = 0;
-		for ( ; *s; s++)
+		for (; *s; s++)
 		{
-			if ( *s == '$' )
-			{
-				s++;
-				switch ( *s )
-				{
-				case 'i':
-				case 'I':
-					// italic
-					if ( 1 == html_names )
-					{
-						strcat( q, "<span style=\"font-style:italic\">" );
-						q += 32;
-						open++;
-					}
-					break;
-				case 's':
-				case 'S':
-					// shadowed
-					break;
-				case 'w':
-				case 'W':
-					// wide
-					break;
-				case 'n':
-				case 'N':
-					// narrow
-					break;
-				case 'm':
-				case 'M':
-					// normal
-					if ( 1 == html_names )
-					{
-						strcat( q, "<span style=\"font-style:normal\">" );
-						q += 32;
-						open++;
-					}
-					break;
-				case 'g':
-				case 'G':
-					// default color
-					strcat( q, "<span style=\"color:black\">" );
-					q += 26;
-					open++;
-					break;
-				case 'z':
-				case 'Z':
-					// reset all
-					while ( open )
-					{
-						strcat( q, "</span>" );
-						q += 7;
-						open--;
-					}
-					open = 0;
-					break;
-				case 't':
-				case 'T':
-					// capitalise
-					if ( 1 == html_names )
-					{
-						strcat( q, "<span style=\"text-transform:capitalize\">" );
-						q += 40;
-						open++;
-					}
-					break;
-				case '$':
-					// literal $
-					*q++ = '$';
-					break;
-				default:
-					// color
-					if ( 1 == html_names )
-					{
-						sprintf( q, "<span style=\"color:%c%c%c%c%c%c\">", *s, *s, *(s+1), *(s+1), *(s+2), *(s+2) );
-						q += 27;
+			if (*s == '$')
+			{
+				s++;
+				switch (*s)
+				{
+					case 'i':
+					case 'I':
+						// italic
+						if (1 == html_names)
+						{
+							strcat(q, "<span style=\"font-style:italic\">");
+							q += 32;
+							open++;
+						}
+						break;
+					case 's':
+					case 'S':
+						// shadowed
+						break;
+					case 'w':
+					case 'W':
+						// wide
+						break;
+					case 'n':
+					case 'N':
+						// narrow
+						break;
+					case 'm':
+					case 'M':
+						// normal
+						if (1 == html_names)
+						{
+							strcat(q, "<span style=\"font-style:normal\">");
+							q += 32;
+							open++;
+						}
+						break;
+					case 'g':
+					case 'G':
+						// default color
+						strcat(q, "<span style=\"color:black\">");
+						q += 26;
 						open++;
-					}
-					if ( *(s+1) )
-					{
-						s++;
-					}
-					if ( *(s+1) )
-					{
-						s++;
-					}
-					break;
+						break;
+					case 'z':
+					case 'Z':
+						// reset all
+						while (open)
+						{
+							strcat(q, "</span>");
+							q += 7;
+							open--;
+						}
+						open = 0;
+						break;
+					case 't':
+					case 'T':
+						// capitalise
+						if (1 == html_names)
+						{
+							strcat(q, "<span style=\"text-transform:capitalize\">");
+							q += 40;
+							open++;
+						}
+						break;
+					case '$':
+						// literal $
+						*q++ = '$';
+						break;
+					default:
+						// color
+						if (1 == html_names)
+						{
+							sprintf(q, "<span style=\"color:%c%c%c%c%c%c\">", *s, *s, *(s + 1), *(s + 1), *(s + 2), *(s + 2));
+							q += 27;
+							open++;
+						}
+						if (*(s + 1))
+						{
+							s++;
+						}
+						if (*(s + 1))
+						{
+							s++;
+						}
+						break;
 				}
 			}
 			else
@@ -10958,89 +12282,84 @@
 			}
 		}
 
-		while ( open )
+		while (open)
 		{
-			strcat( q, "</span>" );
+			strcat(q, "</span>");
 			q += 7;
 			open--;
 		}
 		*q = '\0';
 	}
-	else if ( !is_server_name || server->type->flags & TF_SOF_NAMES )
+	else if (!is_server_name || server->type->flags &TF_SOF_NAMES)
 	{
 		// Catch all for NOT is_server_name OR TF_SOF_NAMES
 		// The may not be the intention but is needed for q1 at least
-		for ( ; *s; s++)
+		for (; *s; s++)
 		{
-			int inc = html_entity( *s, q );
-			if ( 0 != inc )
+			int inc = html_entity(*s, q);
+			if (0 != inc)
 			{
 				q += inc;
 				continue;
 			}
 
-			if ( *s < ' ' )
+			if (*s < ' ')
 			{
-				if ( html_names == 1)
+				if (html_names == 1)
 				{
-					q+= sprintf( q, "%s<font color=\"#%s\">",
-					font_tag?"</font>":"",
-					sof_colors[ *(s) ]);
-					font_tag= 1;
+					q += sprintf(q, "%s<font color=\"#%s\">", font_tag ? "</font>" : "", sof_colors[*(s)]);
+					font_tag = 1;
 				}
 			}
-			else if ( isprint(*s))
+			else if (isprint(*s))
 			{
-				*q++= *s;
+				*q++ = *s;
 			}
 			// ## more fixes below; double check against real sof servers
-			else if ( *s >= 0xa0)
+			else if (*s >= 0xa0)
 			{
-				*q++= *s & 0x7f;
+				*q++ = *s &0x7f;
 			}
-			else if ( *s >= 0x92 && *s < 0x9c)
+			else if (*s >= 0x92 && *s < 0x9c)
 			{
-				*q++= '0' + (*s - 0x92);
+				*q++ = '0' + (*s - 0x92);
 			}
-			else if ( *s >= 0x12 && *s < 0x1c)
+			else if (*s >= 0x12 && *s < 0x1c)
 			{
-				*q++= '0' + (*s - 0x12);
+				*q++ = '0' + (*s - 0x12);
 			}
-			else if ( *s == 0x90 || *s == 0x10)
+			else if (*s == 0x90 || *s == 0x10)
 			{
-				*q++= '[';
+				*q++ = '[';
 			}
-			else if ( *s == 0x91 || *s == 0x11)
+			else if (*s == 0x91 || *s == 0x11)
 			{
-				*q++= ']';
+				*q++ = ']';
 			}
-			else if ( *s == 0xa || *s == 0xc || *s == 0xd)
+			else if (*s == 0xa || *s == 0xc || *s == 0xd)
 			{
-				*q++= ']';
+				*q++ = ']';
 			}
 		}
-		*q= '\0';
+		*q = '\0';
 	}
 	else
 	{
-		strcpy( _q, string);
+		strcpy(_q, string);
 	}
 
-	if ( font_tag )
+	if (font_tag)
 	{
-		q+= sprintf( q, "</font>");
+		q += sprintf(q, "</font>");
 	}
 
 	return _q;
 }
-
-int u2xmp_html_color( short color, char *dest, int *font_tag )
+int u2xmp_html_color(short color, char *dest, int *font_tag)
 {
-	if ( 1 == html_names )
+	if (1 == html_names)
 	{
-		int len = sprintf( dest, "%s<font color=\"%s\">",
-			*font_tag ? "</font>" : "", unreal_rgb_colors[ color - 1 ]
-		);
+		int len = sprintf(dest, "%s<font color=\"%s\">", *font_tag ? "</font>" : "", unreal_rgb_colors[color - 1]);
 		*font_tag = 1;
 
 		return len;
@@ -11048,16 +12367,11 @@
 	return 0;
 }
 
-int ut2k4_html_color( const unsigned char *color, char *dest, int *font_tag )
+int ut2k4_html_color(const unsigned char *color, char *dest, int *font_tag)
 {
-	if ( 1 == html_names )
+	if (1 == html_names)
 	{
-		int len = sprintf( dest, "%s<font color=\"#%02hhx%02hhx%02hhx\">",
-			*font_tag ? "</font>" : "",
-			color[0],
-			color[1],
-			color[2]
-		);
+		int len = sprintf(dest, "%s<font color=\"#%02hhx%02hhx%02hhx\">", *font_tag ? "</font>" : "", color[0], color[1], color[2]);
 		*font_tag = 1;
 
 		return len;
@@ -11065,188 +12379,216 @@
 	return 0;
 }
 
-int
-is_default_rule( struct rule *rule)
+int is_default_rule(struct rule *rule)
 {
-    if ( strcmp( rule->name, "sv_maxspeed") == 0)
-	return strcmp( rule->value, Q_DEFAULT_SV_MAXSPEED) == 0;
-    if ( strcmp( rule->name, "sv_friction") == 0)
-	return strcmp( rule->value, Q_DEFAULT_SV_FRICTION) == 0;
-    if ( strcmp( rule->name, "sv_gravity") == 0)
-	return strcmp( rule->value, Q_DEFAULT_SV_GRAVITY) == 0;
-    if ( strcmp( rule->name, "noexit") == 0)
-	return strcmp( rule->value, Q_DEFAULT_NOEXIT) == 0;
-    if ( strcmp( rule->name, "teamplay") == 0)
-	return strcmp( rule->value, Q_DEFAULT_TEAMPLAY) == 0;
-    if ( strcmp( rule->name, "timelimit") == 0)
-	return strcmp( rule->value, Q_DEFAULT_TIMELIMIT) == 0;
-    if ( strcmp( rule->name, "fraglimit") == 0)
-	return strcmp( rule->value, Q_DEFAULT_FRAGLIMIT) == 0;
-    return 0;
-}
-
-int html_entity( const char c, char *dest )
-{
-	if ( html_mode )
-	{
-		switch( c )
-		{
-		case '<':
-			strcpy( dest, "&lt;" );
-			return 4;
-		case '>':
-			strcpy( dest, "&gt;" );
-			return 4;
-		case '&':
-			strcpy( dest, "&amp;" );
-			return 5;
-		default:
-			break;
+	if (strcmp(rule->name, "sv_maxspeed") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_SV_MAXSPEED) == 0;
+	} if (strcmp(rule->name, "sv_friction") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_SV_FRICTION) == 0;
+	}
+	if (strcmp(rule->name, "sv_gravity") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_SV_GRAVITY) == 0;
+	}
+	if (strcmp(rule->name, "noexit") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_NOEXIT) == 0;
+	}
+	if (strcmp(rule->name, "teamplay") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_TEAMPLAY) == 0;
+	}
+	if (strcmp(rule->name, "timelimit") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_TIMELIMIT) == 0;
+	}
+	if (strcmp(rule->name, "fraglimit") == 0)
+	{
+		return strcmp(rule->value, Q_DEFAULT_FRAGLIMIT) == 0;
+	}
+	return 0;
+}
+
+int html_entity(const char c, char *dest)
+{
+	if (html_mode)
+	{
+		switch (c)
+		{
+			case '<':
+				strcpy(dest, "&lt;");
+				return 4;
+			case '>':
+				strcpy(dest, "&gt;");
+				return 4;
+			case '&':
+				strcpy(dest, "&amp;");
+				return 5;
+			default:
+				break;
 		}
 	}
 
 	return 0;
 }
 
-char *
-strherror( int h_err)
+char *strherror(int h_err)
+{
+	static char msg[100];
+	switch (h_err)
+	{
+		case HOST_NOT_FOUND:
+			return "host not found";
+		case TRY_AGAIN:
+			return "try again";
+		case NO_RECOVERY:
+			return "no recovery";
+		case NO_ADDRESS:
+			return "no address";
+		default:
+			sprintf(msg, "%d", h_err);
+			return msg;
+	}
+}
+
+int time_delta(struct timeval *later, struct timeval *past)
+{
+	if (later->tv_usec < past->tv_usec)
+	{
+		later->tv_sec--;
+		later->tv_usec += 1000000;
+	}
+	return (later->tv_sec - past->tv_sec) *1000+(later->tv_usec - past->tv_usec) / 1000;
+}
+
+int connection_inprogress()
+{
+#ifdef _WIN32
+	return WSAGetLastError() == WSAEWOULDBLOCK;
+#else
+	return errno == EINPROGRESS;
+#endif
+}
+
+int connection_refused()
+{
+#ifdef _WIN32
+	return WSAGetLastError() == WSAECONNABORTED;
+#else
+	return errno == ECONNREFUSED;
+#endif
+}
+
+int connection_would_block()
 {
-    static char msg[100];
-    switch (h_err)  {
-    case HOST_NOT_FOUND:	return "host not found";
-    case TRY_AGAIN:		return "try again";
-    case NO_RECOVERY:		return "no recovery";
-    case NO_ADDRESS:		return "no address";
-    default:	sprintf( msg, "%d", h_err); return msg;
-    }
-}
-
-int
-time_delta( struct timeval *later, struct timeval *past)
-{
-    if ( later->tv_usec < past->tv_usec)  {
-	later->tv_sec--;
-	later->tv_usec+= 1000000;
-    }
-    return (later->tv_sec - past->tv_sec) * 1000 +
-	(later->tv_usec - past->tv_usec) / 1000;
+#ifdef _WIN32
+	return WSAGetLastError() == WSAEWOULDBLOCK;
+#else
+	return errno == EAGAIN;
+#endif
 }
 
-int
-connection_refused()
+int connection_reset()
 {
 #ifdef _WIN32
-    return WSAGetLastError() == WSAECONNABORTED;
+	return WSAGetLastError() == WSAECONNRESET;
 #else
-    return errno == ECONNREFUSED;
+	return errno == ECONNRESET;
 #endif
 }
 
-void
-set_non_blocking( int fd)
+void set_non_blocking(int fd)
 {
 #ifdef _WIN32
-    int one= 1;
-    ioctlsocket( fd, FIONBIO, (unsigned long*)&one);
+	int one = 1;
+	ioctlsocket(fd, FIONBIO, (unsigned long*) &one);
 #else
 #ifdef O_NONBLOCK
-    fcntl( fd, F_SETFL, O_NONBLOCK);
+	fcntl(fd, F_SETFL, O_NONBLOCK);
 #else
-    fcntl( fd, F_SETFL, O_NDELAY);
+	fcntl(fd, F_SETFL, O_NDELAY);
 #endif // O_NONBLOCK
 #endif // _WIN32
 }
 
-char *
-quake_color( int color)
+char *quake_color(int color)
 {
-    static char *colors[] = {
-	"White",	/* 0 */
-	"Brown",	/* 1 */
-	"Lavender",	/* 2 */
-	"Khaki",	/* 3 */
-	"Red",		/* 4 */
-	"Lt Brown",	/* 5 */
-	"Peach",	/* 6 */
-	"Lt Peach",	/* 7 */
-	"Purple",	/* 8 */
-	"Dk Purple",	/* 9 */
-	"Tan",		/* 10 */
-	"Green",	/* 11 */
-	"Yellow",	/* 12 */
-	"Blue",		/* 13 */
-	"Blue",		/* 14 */
-	"Blue"		/* 15 */
-    };
+	static char *colors[] =
+	{
+		"White",	/* 0 */
+		"Brown",	/* 1 */
+		"Lavender",	/* 2 */
+		"Khaki",	/* 3 */
+		"Red",		/* 4 */
+		"Lt Brown",	/* 5 */
+		"Peach",	/* 6 */
+		"Lt Peach",	/* 7 */
+		"Purple",	/* 8 */
+		"Dk Purple",/* 9 */
+		"Tan",		/* 10 */
+		"Green",	/* 11 */
+		"Yellow",	/* 12 */
+		"Blue",		/* 13 */
+		"Blue",		/* 14 */
+		"Blue"		/* 15 */
+	};
 
-    static char *rgb_colors[] = {
-	"#ffffff",	/* 0 */
-	"#8b4513",	/* 1 */
-	"#e6e6fa",	/* 2 */
-	"#f0e68c",	/* 3 */
-	"#ff0000",	/* 4 */
-	"#deb887",	/* 5 */
-	"#eecbad",	/* 6 */
-	"#ffdab9",	/* 7 */
-	"#9370db",	/* 8 */
-	"#5d478b",	/* 9 */
-	"#d2b48c",	/* 10 */
-	"#00ff00",	/* 11 */
-	"#ffff00",	/* 12 */
-	"#0000ff",	/* 13 */
-	"#0000ff",	/* 14 */
-	"#0000ff"	/* 15 */
-    };
+	static char *rgb_colors[] =
+	{
+		"#ffffff",  /* 0 */
+		"#8b4513",  /* 1 */
+		"#e6e6fa",  /* 2 */
+		"#f0e68c",  /* 3 */
+		"#ff0000",  /* 4 */
+		"#deb887",  /* 5 */
+		"#eecbad",  /* 6 */
+		"#ffdab9",  /* 7 */
+		"#9370db",  /* 8 */
+		"#5d478b",  /* 9 */
+		"#d2b48c",  /* 10 */
+		"#00ff00",  /* 11 */
+		"#ffff00",  /* 12 */
+		"#0000ff",  /* 13 */
+		"#0000ff",  /* 14 */
+		"#0000ff"   /* 15 */
+	};
 
-    static char *color_nr[] = {
-	"0",
-	"1",
-	"2",
-	"3",
-	"4",
-	"5",
-	"6",
-	"7",
-	"8",
-	"9",
-	"10",
-	"11",
-	"12",
-	"13",
-	"14",
-	"15"
-    };
+	static char *color_nr[] =
+	{
+		"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"
+	};
 
-	if ( color_names )
+	if (color_names)
 	{
-		if ( color_names == 1)
+		if (color_names == 1)
 		{
-			return colors[color&0xf];
+			return colors[color &0xf];
 		}
 		else
 		{
-			return rgb_colors[color&0xf];
+			return rgb_colors[color &0xf];
 		}
 	}
 	else
 	{
-		return color_nr[color&0xf];
+		return color_nr[color &0xf];
 	}
 }
 
 
-const char *
-unreal_color( int color )
+const char *unreal_color(int color)
 {
-	if ( color_names )
+	if (color_names)
 	{
-		if ( color_names == 1)
+		if (color_names == 1)
 		{
-			return unreal_colors[color&0xf];
+			return unreal_colors[color &0xf];
 		}
 		else
 		{
-			return unreal_rgb_colors[color&0xf];
+			return unreal_rgb_colors[color &0xf];
 		}
 	}
 
@@ -11260,296 +12602,368 @@
 #define FMT_SECOND_1	"%2ds"
 #define FMT_SECOND_2	"%ds"
 
-char *
-play_time( int seconds, int show_seconds)
+char *play_time(int seconds, int show_seconds)
 {
-    static char time_string[24];
-    if ( time_format == CLOCK_TIME)  {
-	char *fmt_hour= show_seconds==2 ? FMT_HOUR_2 : FMT_HOUR_1;
-	char *fmt_minute= show_seconds==2 ? FMT_MINUTE_2 : FMT_MINUTE_1;
-	char *fmt_second= show_seconds==2 ? FMT_SECOND_2 : FMT_SECOND_1;
-	time_string[0]= '\0';
-	if ( seconds/3600)
-	    sprintf( time_string, fmt_hour, seconds/3600);
-	else if ( show_seconds < 2)
-	    strcat( time_string, "   ");
-	if ( (seconds%3600)/60 || seconds/3600)
-	    sprintf( time_string+strlen(time_string), fmt_minute,
-		(seconds%3600)/60);
-	else if ( ! show_seconds)
-	    sprintf( time_string+strlen(time_string), " 0m");
-	else if ( show_seconds < 2)
-	    strcat( time_string, "   ");
-	if ( show_seconds)
-	    sprintf( time_string+strlen(time_string), fmt_second, seconds%60);
-    }
-    else if ( time_format == STOPWATCH_TIME)  {
-	if ( show_seconds)
-	    sprintf( time_string, "%02d:%02d:%02d", seconds/3600,
-		(seconds%3600)/60, seconds % 60);
-	else
-	    sprintf( time_string, "%02d:%02d", seconds/3600,
-		(seconds%3600)/60);
-    }
-    else
-	sprintf( time_string, "%d", seconds);
-
-    return time_string;
-}
-
-char *
-ping_time( int ms)
-{
-    static char time_string[24];
-    if ( ms < 1000)
-	sprintf( time_string, "%dms", ms);
-    else if ( ms < 1000000)
-	sprintf( time_string, "%ds", ms/1000);
-    else
-	sprintf( time_string, "%dm", ms/1000/60);
-    return time_string;
-}
-
-int
-count_bits( int n)
-{
-    int b= 0;
-    for ( ; n; n>>=1)
-	if ( n&1)
-	    b++;
-    return b;
+	static char time_string[24];
+	if (time_format == CLOCK_TIME)
+	{
+		char *fmt_hour = show_seconds == 2 ? FMT_HOUR_2 : FMT_HOUR_1;
+		char *fmt_minute = show_seconds == 2 ? FMT_MINUTE_2 : FMT_MINUTE_1;
+		char *fmt_second = show_seconds == 2 ? FMT_SECOND_2 : FMT_SECOND_1;
+		time_string[0] = '\0';
+		if (seconds / 3600)
+		{
+			sprintf(time_string, fmt_hour, seconds / 3600);
+		}
+		else if (show_seconds < 2)
+		{
+			strcat(time_string, "   ");
+		}
+		if ((seconds % 3600) / 60 || seconds / 3600)
+		{
+			sprintf(time_string + strlen(time_string), fmt_minute, (seconds % 3600) / 60);
+		}
+		else if (!show_seconds)
+		{
+			sprintf(time_string + strlen(time_string), " 0m");
+		}
+		else if (show_seconds < 2)
+		{
+			strcat(time_string, "   ");
+		}
+		if (show_seconds)
+		{
+			sprintf(time_string + strlen(time_string), fmt_second, seconds % 60);
+		}
+	}
+	else if (time_format == STOPWATCH_TIME)
+	{
+		if (show_seconds)
+		{
+			sprintf(time_string, "%02d:%02d:%02d", seconds / 3600, (seconds % 3600) / 60, seconds % 60);
+		}
+		else
+		{
+			sprintf(time_string, "%02d:%02d", seconds / 3600, (seconds % 3600) / 60);
+		}
+	}
+	else
+	{
+		sprintf(time_string, "%d", seconds);
+	}
+
+	return time_string;
 }
 
-int
-strcmp_withnull( char *one, char *two)
+char *ping_time(int ms)
 {
-    if ( one == NULL && two == NULL)
-	return 0;
-    if ( one != NULL && two == NULL)
-	return -1;
-    if ( one == NULL)
-	return 1;
-    return strcasecmp( one, two);
+	static char time_string[24];
+	if (ms < 1000)
+	{
+		sprintf(time_string, "%dms", ms);
+	}
+	else if (ms < 1000000)
+	{
+		sprintf(time_string, "%ds", ms / 1000);
+	}
+	else
+	{
+		sprintf(time_string, "%dm", ms / 1000 / 60);
+	}
+	return time_string;
+}
+
+int count_bits(int n)
+{
+	int b = 0;
+	for (; n; n >>= 1)
+	if (n &1)
+	{
+		b++;
+	}
+	return b;
+}
+
+int strcmp_withnull(char *one, char *two)
+{
+	if (one == NULL && two == NULL)
+	{
+		return 0;
+	}
+	if (one != NULL && two == NULL)
+	{
+		return -1;
+	}
+	if (one == NULL)
+	{
+		return 1;
+	}
+	return strcasecmp(one, two);
 }
 
 /*
  * Sorting functions
  */
 
-void
-sort_servers( struct qserver **array, int size)
+void sort_servers(struct qserver **array, int size)
 {
-    quicksort( (void**)array, 0, size-1, (int (*)(void*,void*)) server_compare);
+	quicksort((void **)array, 0, size - 1, (int(*)(void *, void*))server_compare);
 }
 
-void
-sort_players( struct qserver *server)
+void sort_players(struct qserver *server)
 {
-    struct player **array, *player, *last_team= NULL, **next;
-    int np, i;
-
-    if ( server->num_players == 0 || server->players == NULL)
-	return;
-
-    player= server->players;
-    for ( ; player != NULL && player->number == TRIBES_TEAM; )  {
-	last_team= player;
-	player= player->next;
-    }
-    if ( player == NULL)
-	return;
-
-    array= (struct player **) malloc( sizeof(struct player *) *
-		server->num_players);
-    for ( np= 0; player != NULL && np < server->num_players; np++)  {
-	array[np]= player;
-	player= player->next;
-    }
-    quicksort( (void**)array, 0, np-1, (int (*)(void*,void*)) player_compare);
-
-    if ( last_team)
-	next= &last_team->next;
-    else
-	next= &server->players;
-
-    for ( i= 0; i < np; i++)  {
-	*next= array[i];
-	array[i]->next= NULL;
-	next= &array[i]->next;
-    }
-
-    free( array);
-}
-
-int
-server_compare( struct qserver *one, struct qserver *two)
-{
-    int rc;
-
-    char *key= sort_keys;
-
-    for ( ; *key; key++)  {
-	switch( *key)  {
-	case 'g':
-	    rc= strcmp_withnull( one->game, two->game);
-	    if ( rc)
-		return rc;
-	    break;
-	case 'p':
-	    if ( one->n_requests == 0)
-		return two->n_requests;
-	    else if ( two->n_requests == 0)
-		return -1;
-	    rc= one->ping_total/one->n_requests -
-			two->ping_total/two->n_requests;
-	    if ( rc)
-		return rc;
-	    break;
-	case 'i':
-	    if ( one->ipaddr > two->ipaddr)
-		return 1;
-	    else if ( one->ipaddr < two->ipaddr)
-		return -1;
-	    else if ( one->port > two->port)
-		return 1;
-	    else if ( one->port < two->port)
-		return -1;
-	    break;
-	case 'h':
-	    rc= strcmp_withnull( one->host_name, two->host_name);
-	    if ( rc)
-		return rc;
-	    break;
-	case 'n':
-	    rc= two->num_players - one->num_players;
-	    if ( rc)
-		return rc;
-	    break;
-	}
-    }
-
-    return 0;
-}
-
-int
-type_option_compare( server_type *one, server_type *two )
-{
-    return strcmp_withnull( one->type_option, two->type_option );
-}
-
-int
-type_string_compare( server_type *one, server_type *two )
-{
-    return strcmp_withnull( one->type_string, two->type_string );
-}
-
-int
-player_compare( struct player *one, struct player *two)
-{
-    int rc;
-
-    char *key= sort_keys;
-
-    for ( ; *key; key++)  {
-	switch( *key)  {
-	case 'P':
-	    rc= one->ping - two->ping;
-	    if ( rc)
-		return rc;
-	    break;
-	case 'F':
-	    rc= two->frags - one->frags;
-	    if ( rc)
-		return rc;
-	    break;
-	case 'S':
-	    rc= two->score - one->score;
-	    if ( rc)
-		return rc;
-	    break;
-	case 'T':
-	    rc= one->team - two->team;
-	    if ( rc)
-		return rc;
-		rc = strcmp_withnull( one->team_name, two->team_name );
-	    if ( rc )
-		return rc;
-	    break;
-	case 'N':
-		rc= strcmp_withnull( one->name, two->name );
-		if ( rc )
-		return rc;
-		return one->number - two->number;
-		break;
+	struct player **array, *player, *last_team = NULL, **next;
+	int np, i;
+
+	if (server->num_players == 0 || server->players == NULL)
+	{
+		return ;
+	}
+
+	player = server->players;
+	for (; player != NULL && player->number == TRIBES_TEAM;)
+	{
+		last_team = player;
+		player = player->next;
+	}
+
+	if (player == NULL)
+	{
+		return ;
+	}
+
+	array = (struct player **)malloc(sizeof(struct player*)*(server->num_players + server->num_spectators));
+	for (np = 0; player != NULL && np < server->num_players + server->num_spectators; np++)
+	{
+		array[np] = player;
+		player = player->next;
+	} quicksort((void **)array, 0, np - 1, (int(*)(void *, void*))player_compare);
+
+	if (last_team)
+	{
+		next = &last_team->next;
+	}
+	else
+	{
+		next = &server->players;
+	}
+
+	for (i = 0; i < np; i++)
+	{
+		*next = array[i];
+		array[i]->next = NULL;
+		next = &array[i]->next;
+	}
+
+	free(array);
+}
+
+int server_compare(struct qserver *one, struct qserver *two)
+{
+	int rc;
+
+	char *key = sort_keys;
+
+	for (; *key; key++)
+	{
+		switch (*key)
+		{
+			case 'g':
+				rc = strcmp_withnull(one->game, two->game);
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'p':
+				if (one->n_requests == 0)
+				{
+					return two->n_requests;
+				}
+				else if (two->n_requests == 0)
+				{
+					return -1;
+				}
+				rc = one->ping_total / one->n_requests - two->ping_total / two->n_requests;
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'i':
+				if (one->ipaddr > two->ipaddr)
+				{
+					return 1;
+				}
+				else if (one->ipaddr < two->ipaddr)
+				{
+					return -1;
+				}
+				else if (one->port > two->port)
+				{
+					return 1;
+				}
+				else if (one->port < two->port)
+				{
+					return -1;
+				}
+				break;
+			case 'h':
+				rc = strcmp_withnull(one->host_name, two->host_name);
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'n':
+				rc = two->num_players - one->num_players;
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+		}
+	}
+
+	return 0;
+}
+
+int type_option_compare(server_type *one, server_type *two)
+{
+	return strcmp_withnull(one->type_option, two->type_option);
+}
+
+int type_string_compare(server_type *one, server_type *two)
+{
+	return strcmp_withnull(one->type_string, two->type_string);
+}
+
+int player_compare(struct player *one, struct player *two)
+{
+	int rc;
+
+	char *key = sort_keys;
+
+	for (; *key; key++)
+	{
+		switch (*key)
+		{
+			case 'P':
+				rc = one->ping - two->ping;
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'F':
+				rc = two->frags - one->frags;
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'S':
+				rc = two->score - one->score;
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'T':
+				rc = one->team - two->team;
+				if (rc)
+				{
+					return rc;
+				}
+				rc = strcmp_withnull(one->team_name, two->team_name);
+				if (rc)
+				{
+					return rc;
+				}
+				break;
+			case 'N':
+				rc = strcmp_withnull(one->name, two->name);
+				if (rc)
+				{
+					return rc;
+				}
+				return one->number - two->number;
+				break;
+		}
 	}
-    }
-    return 0;
+	return 0;
 }
 
-void
-quicksort( void **array, int i, int j, int (*compare)(void*,void*))
+void quicksort(void **array, int i, int j, int(*compare)(void *, void*))
 {
-    int q= 0;
+	int q = 0;
 
-    if ( i < j) {
-	q = qpartition(array,i,j, compare);
-	quicksort(array,i,q, compare);
-	quicksort(array,q+1,j, compare);
-    }
+	if (i < j)
+	{
+		q = qpartition(array, i, j, compare);
+		quicksort(array, i, q, compare);
+		quicksort(array, q + 1, j, compare);
+	}
 }
 
-int
-qpartition( void **array, int a, int b, int (*compare)(void*,void*))
+int qpartition(void **array, int a, int b, int(*compare)(void *, void*))
 {
-    /* this is our comparison point. when we are done
-       splitting this array into 2 parts, we want all the
-       elements on the left side to be less then or equal
-       to this, all the elements on the right side need to
-       be greater then or equal to this
-    */
-    void *z;
+	/* this is our comparison point. when we are done
+	splitting this array into 2 parts, we want all the
+	elements on the left side to be less then or equal
+	to this, all the elements on the right side need to
+	be greater then or equal to this
+	 */
+	void *z;
 
-    /* indicies into the array to sort. Used to calculate a partition
-       point
-    */
-    int i = a-1;
-    int j = b+1;
+	/* indicies into the array to sort. Used to calculate a partition
+	point
+	 */
+	int i = a - 1;
+	int j = b + 1;
 
-    /* temp pointer used to swap two array elements */
-    void * tmp = NULL;
+	/* temp pointer used to swap two array elements */
+	void *tmp = NULL;
 
-    z = array[a];
+	z = array[a];
 
-    while (1) {
+	while (1)
+	{
 
-        /* move the right indice over until the value of that array
-           elem is less than or equal to z. Stop if we hit the left
-           side of the array (ie, j == a);
-        */
-	do {
-	    j--;
-	} while( j > a && compare(array[j],z) > 0);
+		/* move the right indice over until the value of that array
+		elem is less than or equal to z. Stop if we hit the left
+		side of the array (ie, j == a);
+		 */
+		do
+		{
+			j--;
+		}
+		while (j > a && compare(array[j], z) > 0);
 
-        /* move the left indice over until the value of that
-           array elem is greater than or equal to z, or until
-           we hit the right side of the array (ie i == j)
-        */
-	do {
-	    i++;
-	} while( i <= j && compare(array[i],z) < 0);
+		/* move the left indice over until the value of that
+		array elem is greater than or equal to z, or until
+		we hit the right side of the array (ie i == j)
+		 */
+		do
+		{
+			i++;
+		}
+		while (i <= j && compare(array[i], z) < 0);
 
-        /* if i is less then j, we need to switch those two array
-           elements, if not then we are done partitioning this array
-           section
-        */
-	if(i < j) {
-	    tmp = array[i];
-	    array[i] = array[j];
-	    array[j] = tmp;
+		/* if i is less then j, we need to switch those two array
+		elements, if not then we are done partitioning this array
+		section
+		 */
+		if (i < j)
+		{
+			tmp = array[i];
+			array[i] = array[j];
+			array[j] = tmp;
+		}
+		else
+		{
+			return j;
+		}
 	}
-	else
-	    return j;
-    }
 }
 
-// vim: sw=8 ts=8 noet
diff -urP qstat-2.11/qstat.cfg qstat-2.11-20080912svn311/qstat.cfg
--- qstat-2.11/qstat.cfg	2006-09-14 16:51:01.000000000 -0400
+++ qstat-2.11-20080912svn311/qstat.cfg	2008-09-12 14:52:23.000000000 -0400
@@ -90,6 +90,7 @@
    status2 packet = \377\377\377\377\002getstatus xxx
 end
 
+# Config for Call of Duty
 gametype CODS new extend Q3S
     name = Call of Duty
     default port = 28960
@@ -106,6 +107,40 @@
     master query = full empty
 end
 
+# Config for Call of Duty 2
+gametype COD2S new extend Q3S
+    name = Call of Duty 2
+    default port = 28960
+    template var = CALLOFDUTY2
+    game rule = gamename
+end
+
+gametype COD2M new extend Q3M
+    name = Call of Duty 2 Master
+    default port = 20710
+    template var = COD2MASTER
+    master protocol = 118
+    master for gametype = COD2S
+    master query = full empty
+end
+
+# Config for Call of Duty 4
+gametype COD4S new extend Q3S
+    name = Call of Duty 4
+    default port = 28960
+    template var = CALLOFDUTY4
+    game rule = gamename
+end
+
+gametype COD4M new extend Q3M
+    name = Call of Duty 4 Master
+    default port = 20810
+    template var = COD4MASTER
+    master protocol = 5
+    master for gametype = COD4S
+    master query = full empty
+end
+
 # enemy territory
 gametype WOETS new extend Q3S
     name = Enemy Territory
@@ -215,3 +250,9 @@
     master for gametype = PREYS
 end
 
+gametype UT3S new extend GS4
+    name = UT3
+    default port = 6500
+    template var = UT3
+end
+
diff -urP qstat-2.11/qstatdoc.html qstat-2.11-20080912svn311/qstatdoc.html
--- qstat-2.11/qstatdoc.html	2005-11-17 00:06:04.000000000 -0500
+++ qstat-2.11-20080912svn311/qstatdoc.html	2008-09-12 14:52:23.000000000 -0400
@@ -120,6 +120,7 @@
 <tr><td>-tbs<td>tbs<td>28001<td>Starsiege: Tribes
 <tr><td>-t2s<td>t2s<td>28000<td>Tribes 2
 <tr><td>-qwm<td>qwm<td>27000<td>QuakeWorld master
+<tr><td>-hwm<td>hwm<td>26900<td>HexenWorld master
 <tr><td>-q2m<td>q2m<td>27900<td>Quake II master
 <tr><td>-hlm<td>hlm<td>27010<td>Half-Life master
 <tr><td>-stm<td>stm<td>27010<td>Half-Life master (Steam)
@@ -147,6 +148,7 @@
 <tr><td>-efs<td>efs<td>29070<td>Jedi Knight: Jedi Academy
 <tr><td>-efm<td>efm<td>29060<td>Jedi Knight: Jedi Academy master
 <tr><td>-grs<td>grs<td>2346<td>Ghost Recon
+<tr><td>-etqws<td>etqws<td>27733<td>QuakeWars server
 </table>
 <p>
 The command-line options can be specified multiple times, one for
diff -urP qstat-2.11/qstat.h qstat-2.11-20080912svn311/qstat.h
--- qstat-2.11/qstat.h	2006-08-04 16:42:09.000000000 -0400
+++ qstat-2.11-20080912svn311/qstat.h	2008-09-12 14:52:23.000000000 -0400
@@ -68,11 +68,15 @@
 #include "ut2004.h"
 #include "doom3.h"
 #include "a2s.h"
+#include "fl.h"
 #include "gps.h"
 #include "gs2.h"
 #include "gs3.h"
+#include "haze.h"
 #include "ts2.h"
 #include "tm.h"
+#include "wic.h"
+#include "ottd.h"
 
 /*
  * Various magic numbers.
@@ -87,6 +91,7 @@
 #define QW_DEFAULT_PORT			27500
 #define QW_MASTER_DEFAULT_PORT		27000
 #define HW_DEFAULT_PORT			26950
+#define HW_MASTER_DEFAULT_PORT		26900
 #define UNREAL_DEFAULT_PORT		7777
 #define UNREAL_MASTER_DEFAULT_PORT	28900
 #define HALFLIFE_DEFAULT_PORT		27015
@@ -120,6 +125,8 @@
 #define HL2_MASTER_DEFAULT_PORT	27011
 #define TS2_DEFAULT_PORT 51234
 #define TM_DEFAULT_PORT 5000
+#define WIC_DEFAULT_PORT 5000 // Default is actually disabled
+#define FL_DEFAULT_PORT 5478
 
 
 #define Q_UNKNOWN_TYPE 0
@@ -183,8 +190,15 @@
 #define GAMESPY4_PROTOCOL_SERVER 55
 #define PREY_SERVER 56
 #define TM_PROTOCOL_SERVER 57
+#define ETQW_SERVER 58
+#define HAZE_SERVER 59
+#define HW_MASTER (60 | MASTER_SERVER)
+#define WIC_PROTOCOL_SERVER 61
+#define OTTD_SERVER 62
+#define OTTD_MASTER (63 | MASTER_SERVER)
+#define FL_SERVER	64
 
-#define LAST_BUILTIN_SERVER  57
+#define LAST_BUILTIN_SERVER  64
 
 #define TF_SINGLE_QUERY		(1<<1)
 #define TF_OUTFILE		(1<<2)
@@ -218,8 +232,8 @@
 struct q_packet;
 
 typedef void (*DisplayFunc)( struct qserver *);
-typedef void (*QueryFunc)( struct qserver *);
-typedef void (*PacketFunc)( struct qserver *, char *rawpkt, int pktlen);
+typedef int (*QueryFunc)( struct qserver *);
+typedef int (*PacketFunc)( struct qserver *, char *rawpkt, int pktlen);
 
 /*
  * Output and formatting functions
@@ -250,6 +264,9 @@
 void display_hl2_player_info( struct qserver *server);
 void display_ts2_player_info( struct qserver *server);
 void display_tm_player_info( struct qserver *server);
+void display_haze_player_info( struct qserver *server);
+void display_wic_player_info( struct qserver *server);
+void display_fl_player_info( struct qserver *server);
 
 void raw_display_server( struct qserver *server);
 void raw_display_server_rules( struct qserver *server);
@@ -274,6 +291,9 @@
 void raw_display_hl2_player_info( struct qserver *server);
 void raw_display_ts2_player_info( struct qserver *server);
 void raw_display_tm_player_info( struct qserver *server);
+void raw_display_haze_player_info( struct qserver *server);
+void raw_display_wic_player_info( struct qserver *server);
+void raw_display_fl_player_info( struct qserver *server);
 
 void xml_display_server( struct qserver *server);
 void xml_header();
@@ -300,59 +320,63 @@
 void xml_display_hl2_player_info( struct qserver *server);
 void xml_display_ts2_player_info( struct qserver *server);
 void xml_display_tm_player_info( struct qserver *server);
+void xml_display_haze_player_info( struct qserver *server);
+void xml_display_wic_player_info( struct qserver *server);
+void xml_display_fl_player_info( struct qserver *server);
 char *xml_escape( char*);
 char *str_replace( char *, char *, char *);
 
-void send_server_request_packet( struct qserver *server);
-void send_qserver_request_packet( struct qserver *server);
-void send_qwserver_request_packet( struct qserver *server);
-void send_ut2003_request_packet( struct qserver *server);
-void send_tribes_request_packet( struct qserver *server);
-void send_qwmaster_request_packet( struct qserver *server);
-void send_bfris_request_packet( struct qserver *server);
-void send_player_request_packet( struct qserver *server);
-void send_rule_request_packet( struct qserver *server);
-void send_ravenshield_request_packet( struct qserver *server);
-void send_savage_request_packet( struct qserver *server);
-void send_farcry_request_packet( struct qserver *server);
-void send_gamespy_master_request( struct qserver *server);
-void send_tribes2_request_packet( struct qserver *server);
-void send_tribes2master_request_packet( struct qserver *server);
-void send_ghostrecon_request_packet( struct qserver *server);
-void send_eye_request_packet( struct qserver *server);
-void send_gs2_request_packet( struct qserver *server);
-void send_doom3_request_packet( struct qserver *server);
-void send_hl2_request_packet( struct qserver *server);
-void send_ts2_request_packet( struct qserver *server);
-void send_tm_request_packet( struct qserver *server);
-
-void deal_with_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_q_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_qw_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_q1qw_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_q2_packet( struct qserver *server, char *pkt, int pktlen,
-	int check_duplicate_rules);
-void deal_with_doom3master_packet( struct qserver *server, char *rawpkt, int pktlen);
-void deal_with_qwmaster_packet( struct qserver *server, char *pkt, int pktlen);
+int send_server_request_packet( struct qserver *server);
+int send_qserver_request_packet( struct qserver *server);
+int send_qwserver_request_packet( struct qserver *server);
+int send_ut2003_request_packet( struct qserver *server);
+int send_tribes_request_packet( struct qserver *server);
+int send_qwmaster_request_packet( struct qserver *server);
+int send_bfris_request_packet( struct qserver *server);
+int send_player_request_packet( struct qserver *server);
+int send_rule_request_packet( struct qserver *server);
+int send_ravenshield_request_packet( struct qserver *server);
+int send_savage_request_packet( struct qserver *server);
+int send_farcry_request_packet( struct qserver *server);
+int send_gamespy_master_request( struct qserver *server);
+int send_tribes2_request_packet( struct qserver *server);
+int send_tribes2master_request_packet( struct qserver *server);
+int send_ghostrecon_request_packet( struct qserver *server);
+int send_eye_request_packet( struct qserver *server);
+int send_gs2_request_packet( struct qserver *server);
+int send_doom3_request_packet( struct qserver *server);
+int send_hl2_request_packet( struct qserver *server);
+int send_ts2_request_packet( struct qserver *server);
+int send_tm_request_packet( struct qserver *server);
+int send_wic_request_packet( struct qserver *server);
+
+int deal_with_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_q_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_qw_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_q1qw_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_q2_packet( struct qserver *server, char *pkt, int pktlen );
+int deal_with_doom3master_packet( struct qserver *server, char *rawpkt, int pktlen);
+int deal_with_qwmaster_packet( struct qserver *server, char *pkt, int pktlen);
 int deal_with_halflife_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_ut2003_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_tribes_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_tribesmaster_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_bfris_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_gamespy_master_response( struct qserver *server, char *pkt, int pktlen);
-void deal_with_ravenshield_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_savage_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_farcry_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_tribes2_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_tribes2master_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_descent3_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_descent3master_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_ghostrecon_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_eye_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_doom3_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_hl2_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_ts2_packet( struct qserver *server, char *pkt, int pktlen);
-void deal_with_tm_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_ut2003_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_tribes_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_tribesmaster_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_bfris_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_gamespy_master_response( struct qserver *server, char *pkt, int pktlen);
+int deal_with_ravenshield_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_savage_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_farcry_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_tribes2_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_tribes2master_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_descent3_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_descent3master_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_ghostrecon_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_eye_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_doom3_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_hl2_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_ts2_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_tm_packet( struct qserver *server, char *pkt, int pktlen);
+int deal_with_wic_packet( struct qserver *server, char *pkt, int pktlen);
 
 struct _server_type  {
     int id;
@@ -436,9 +460,9 @@
 /* QUAKE WORLD */
 struct {
     char prefix[4];
-    char command[7];
+    char command[10];
 } qw_serverstatus =
-{ { '\377', '\377', '\377', '\377' }, { 's', 't', 'a', 't', 'u', 's', '\n' } };
+{ { '\377', '\377', '\377', '\377' }, { 's', 't', 'a', 't', 'u', 's', ' ', '2', '3', '\n' } };
 
 /* QUAKE3 */
 struct {
@@ -512,6 +536,10 @@
 #define QW_GET_SERVERS    'c'
 char qw_masterquery[] = { QW_GET_SERVERS, '\n', '\0' };
 
+/* HEXENWORLD MASTER */
+#define HW_GET_SERVERS    'c'
+char hw_masterquery[] = { '\377', HW_GET_SERVERS, '\0' };
+
 /* QUAKE 2 MASTER */
 char q2_masterquery[] = { 'q', 'u', 'e', 'r', 'y', '\n', '\0' };
 
@@ -656,7 +684,9 @@
 // 10: Team information (00 to disable)
 // 11: Request new format
 unsigned char gs3_player_query[] = {
-	0xfe,0xfd,0x00,0x10,0x20,0x30,0x40,0xff,0xff,0xff,0x01
+	0xfe,0xfd,0x00,
+	0x10,0x20,0x30,0x40,
+	0xff,0xff,0xff,0x01
 };
 
 // Format:
@@ -687,7 +717,40 @@
 // 1 - 3: query head
 // 4 - 7: queryid
 unsigned char gs3_challenge[] = {
-	0xfe,0xfd,0x09,0x10,0x20,0x30,0x40
+	0xfe,0xfd,0x09,
+	0x10,0x20,0x30,0x40
+};
+
+// Format:
+// 1 - 8: Query Request
+// 9 - 12: Query Header
+// 13: Query ID
+
+// Query ID is made up of the following
+// 0x01: Basic Info
+// 0x02: Game Rules
+// 0x03: Player Information
+// 0x04: Team Information
+unsigned char haze_status_query[] = {
+	'f', 'r', 'd', 'q', 'u', 'e', 'r', 'y',
+	0x10,0x20,0x30,0x40,
+	0x0A
+};
+
+// Format:
+// 1 - 8: Query Request
+// 9 - 12: Query Header
+// 13: Query ID
+
+// Query ID is made up of the following
+// 0x01: Basic Info
+// 0x02: Game Rules
+// 0x03: Player Information
+// 0x04: Team Information
+unsigned char haze_player_query[] = {
+	'f', 'r', 'd', 'q', 'u', 'e', 'r', 'y',
+	0x10,0x20,0x30,0x40,
+	0x03
 };
 
 
@@ -748,6 +811,22 @@
 
 unsigned char ts2_status_query[] = "si";
 
+char ottd_master_query[] = {
+	0x04, 0x00,	// packet length
+	0x06,		// packet type
+	0x01		// packet version
+};
+
+char ottd_serverinfo[] = {
+	0x03, 0x00,	// packet length
+	0x00,		// packet type
+};
+
+char ottd_serverdetails[] = {
+	0x03, 0x00,	// packet length
+	0x02,		// packet type
+};
+
 server_type builtin_types[] = {
 {
     /* QUAKE */
@@ -1223,7 +1302,6 @@
     send_qwserver_request_packet,/* status_query_func */
     NULL,			/* rule_query_func */
     NULL,			/* player_query_func */
-    (void (*)( struct qserver *, char *, int))
     deal_with_halflife_packet,	/* packet_func */
 },
 {
@@ -1910,6 +1988,40 @@
     deal_with_qwmaster_packet,	/* packet_func */
 },
 {
+    /* HEXEN2WORLD MASTER */
+    HW_MASTER,			/* id */
+    "HWM",			/* type_prefix */
+    "hwm",			/* type_string */
+    "-hwm",			/* type_option */ /* ## also "-qw" */
+    "HexenWorld Master",	/* game_name */
+    HW_SERVER,			/* master */
+    HW_MASTER_DEFAULT_PORT,	/* default_port */
+    0,				/* port_offset */
+    TF_SINGLE_QUERY|TF_OUTFILE,	/* flags */
+    "",				/* game_rule */
+    "HWMASTER",			/* template_var */
+    NULL,			/* status_packet */
+    0,				/* status_len */
+    NULL,			/* player_packet */
+    0,				/* player_len */
+    NULL,			/* rule_packet */
+    0,				/* rule_len */
+    (char*) &hw_masterquery,	/* master_packet */
+    sizeof( hw_masterquery),	/* master_len */
+    NULL,			/* master_protocol */
+    NULL,			/* master_query */
+    display_qwmaster,		/* display_player_func */
+    NULL,	/* display_rule_func */
+    NULL,	/* display_raw_player_func */
+    NULL,	/* display_raw_rule_func */
+    NULL,	/* display_xml_player_func */
+    NULL,	/* display_xml_rule_func */
+    send_qwmaster_request_packet,/* status_query_func */
+    NULL,			/* rule_query_func */
+    NULL,			/* player_query_func */
+    deal_with_qwmaster_packet,	/* packet_func */
+},
+{
     /* QUAKE 2 MASTER */
     Q2_MASTER,			/* id */
     "Q2M",			/* type_prefix */
@@ -2493,10 +2605,10 @@
     QUAKE4_SERVER,					/* id */
     "Q4S",							/* type_prefix */
     "q4s",							/* type_string */
-    "-q4s",						/* type_option */
+    "-q4s",							/* type_option */
     "Quake 4",						/* game_name */
     0,								/* master */
-    QUAKE4_DEFAULT_PORT,				/* default_port */
+    QUAKE4_DEFAULT_PORT,			/* default_port */
     0,								/* port_offset */
     TF_QUAKE3_NAMES,				/* flags */
     "fs_game",						/* game_rule */
@@ -2520,7 +2632,7 @@
     send_qwserver_request_packet,	/* status_query_func */
     NULL,							/* rule_query_func */
     NULL,							/* player_query_func */
-    deal_with_quake4_packet,			/* packet_func */
+    deal_with_quake4_packet,		/* packet_func */
 },
 {
     /* QUAKE 4 MASTER */
@@ -2659,6 +2771,210 @@
     deal_with_tm_packet,			/* packet_func */
 },
 {
+    /* Enemy Territory : QuakeWars */
+    ETQW_SERVER,					/* id */
+    "ETQWS",						/* type_prefix */
+    "etqws",						/* type_string */
+    "-etqws",						/* type_option */
+    "QuakeWars",					/* game_name */
+    0,								/* master */
+    ETQW_DEFAULT_PORT,				/* default_port */
+    0,								/* port_offset */
+    TF_QUAKE3_NAMES,				/* flags */
+    "fs_game",						/* game_rule */
+    "QUAKE4",						/* template_var */
+    (char*) &doom3_serverinfo,		/* status_packet */
+    sizeof( doom3_serverinfo),		/* status_len */
+    NULL,							/* player_packet */
+    0,								/* player_len */
+    NULL,							/* rule_packet */
+    0,								/* rule_len */
+    NULL,							/* master_packet */
+    0,								/* master_len */
+    NULL,							/* master_protocol */
+    NULL,							/* master_query */
+    display_doom3_player_info,		/* display_player_func */
+    display_server_rules,			/* display_rule_func */
+    raw_display_doom3_player_info,	/* display_raw_player_func */
+    raw_display_server_rules,		/* display_raw_rule_func */
+    xml_display_doom3_player_info,	/* display_xml_player_func */
+    xml_display_server_rules,		/* display_xml_rule_func */
+    send_qwserver_request_packet,	/* status_query_func */
+    NULL,							/* rule_query_func */
+    NULL,							/* player_query_func */
+    deal_with_etqw_packet,			/* packet_func */
+},
+{
+    /* HAZE PROTOCOL */
+    HAZE_SERVER,	/* id */
+    "HAZES",			/* type_prefix */
+    "hazes",			/* type_string */
+    "-hazes",			/* type_option */
+    "Haze Protocol",	/* game_name */
+    0,				/* master */
+    0,				/* default_port */
+    0,				/* port_offset */
+    TF_SINGLE_QUERY,		/* flags */
+    "gametype",			/* game_rule */
+    "HAZE",		/* template_var */
+    (char*) &haze_status_query,	/* status_packet */
+    sizeof( haze_status_query),	/* status_len */
+    (char*) &haze_player_query,	/* player_packet */
+    sizeof( haze_player_query),	/* player_len */
+    NULL,			/* rule_packet */
+    0,				/* rule_len */
+    NULL,			/* master_packet */
+    0,				/* master_len */
+    NULL,			/* master_protocol */
+    NULL,			/* master_query */
+    display_haze_player_info,	/* display_player_func */
+    display_server_rules,	/* display_rule_func */
+    raw_display_haze_player_info,	/* display_raw_player_func */
+    raw_display_server_rules,	/* display_raw_rule_func */
+    xml_display_haze_player_info,	/* display_xml_player_func */
+    xml_display_server_rules,	/* display_xml_rule_func */
+    send_haze_request_packet,	/* status_query_func */
+    NULL,			/* rule_query_func */
+    NULL,			/* player_query_func */
+    deal_with_haze_packet,	/* packet_func */
+},
+{
+    /* World in Confict PROTOCOL */
+    WIC_PROTOCOL_SERVER,			/* id */
+    "WICS",							/* type_prefix */
+    "wics",							/* type_string */
+    "-wics",						/* type_option */
+    "World in Conflict",			/* game_name */
+    0,								/* master */
+    0,								/* default_port */
+    0,								/* port_offset */
+    TF_TCP_CONNECT|TF_QUERY_ARG_REQUIRED|TF_QUERY_ARG,	/* flags */
+    "N/A",							/* game_rule */
+    "WICPROTOCOL",					/* template_var */
+    NULL,							/* status_packet */
+    0,								/* status_len */
+    NULL,							/* player_packet */
+    0,								/* player_len */
+    NULL,							/* rule_packet */
+    0,								/* rule_len */
+    NULL,							/* master_packet */
+    0,								/* master_len */
+    NULL,							/* master_protocol */
+    NULL,							/* master_query */
+    display_wic_player_info,		/* display_player_func */
+    display_server_rules,			/* display_rule_func */
+    raw_display_wic_player_info,	/* display_raw_player_func */
+    raw_display_server_rules,		/* display_raw_rule_func */
+    xml_display_wic_player_info,	/* display_xml_player_func */
+    xml_display_server_rules,		/* display_xml_rule_func */
+    send_wic_request_packet,		/* status_query_func */
+    NULL,							/* rule_query_func */
+    NULL,							/* player_query_func */
+    deal_with_wic_packet,			/* packet_func */
+},
+{
+    /* openTTD */
+    OTTD_SERVER,			/* id */
+    "OTTDS",			/* type_prefix */
+    "ottds",			/* type_string */
+    "-ottds",			/* type_option */
+    "OpenTTD",			/* game_name */
+    0,				/* master */
+    3979,			/* default_port */
+    0,				/* port_offset */
+    0,				/* flags */
+    "",				/* game_rule */
+    "OPENTTD",			/* template_var */
+    (char*) &ottd_serverinfo,	/* status_packet */
+    sizeof( ottd_serverinfo),	/* status_len */
+    NULL,			/* player_packet */
+    0,				/* player_len */
+    (char*) &ottd_serverdetails,/* rule_packet */
+    sizeof( ottd_serverdetails),   /* rule_len */
+    NULL,			/* master_packet */
+    0,				/* master_len */
+    NULL,			/* master_protocol */
+    NULL,			/* master_query */
+    display_q2_player_info,	/* display_player_func */
+    display_server_rules,	/* display_rule_func */
+    raw_display_q2_player_info,	/* display_raw_player_func */
+    raw_display_server_rules,	/* display_raw_rule_func */
+    xml_display_gs2_player_info,/* display_xml_player_func */
+    xml_display_server_rules,	/* display_xml_rule_func */
+    send_ottd_request_packet,	/* status_query_func */
+    NULL,			/* rule_query_func */
+    NULL,			/* player_query_func */
+    deal_with_ottd_packet,	/* packet_func */
+},
+{
+    /* openTTD Master */
+    OTTD_MASTER,		/* id */
+    "OTTDM",			/* type_prefix */
+    "ottdm",			/* type_string */
+    "-ottdm",			/* type_option */
+    "openTTD Master",		/* game_name */
+    OTTD_SERVER,		/* master */
+    3978,			/* default_port */
+    0,				/* port_offset */
+    TF_OUTFILE | TF_QUERY_ARG,	/* flags */
+    "",				/* game_rule */
+    "OTTDMASTER",		/* template_var */
+    NULL,			/* status_packet */
+    0,				/* status_len */
+    NULL,			/* player_packet */
+    0,				/* player_len */
+    NULL,			/* rule_packet */
+    0,				/* rule_len */
+    ottd_master_query,	/* master_packet */
+    sizeof(ottd_master_query),/* master_len */
+    NULL,	/* master_protocol */
+    NULL,	/* master_query */
+    display_qwmaster,		/* display_player_func */
+    NULL,	/* display_rule_func */
+    NULL,	/* display_raw_player_func */
+    NULL,	/* display_raw_rule_func */
+    NULL,	/* display_xml_player_func */
+    NULL,	/* display_xml_rule_func */
+    send_ottdmaster_request_packet,/* status_query_func */
+    NULL,			/* rule_query_func */
+    NULL,			/* player_query_func */
+    deal_with_ottdmaster_packet,	/* packet_func */
+},
+{
+    /* Frontlines-Fuel of War */
+    FL_SERVER,						/* id */
+    "FLS",							/* type_prefix */
+    "fls",							/* type_string */
+    "-fls",							/* type_option */
+    "Frontlines-Fuel of War",		/* game_name */
+    0,								/* master */
+    FL_DEFAULT_PORT,				/* default_port */
+    0,								/* port_offset */
+    TF_QUAKE3_NAMES,				/* flags */
+    "gamedir",						/* game_rule */
+    "FLS",							/* template_var */
+    NULL,							/* status_packet */
+    0,								/* status_len */
+    NULL,							/* player_packet */
+    0,								/* player_len */
+    NULL,							/* rule_packet */
+    0,								/* rule_len */
+    NULL,							/* master_packet */
+    0,								/* master_len */
+    NULL,							/* master_protocol */
+    NULL,							/* master_query */
+    display_fl_player_info,		/* display_player_func */
+    display_server_rules,			/* display_rule_func */
+    raw_display_fl_player_info,	/* display_raw_player_func */
+    raw_display_server_rules,		/* display_raw_rule_func */
+    xml_display_fl_player_info,	/* display_xml_player_func */
+    xml_display_server_rules,		/* display_xml_rule_func */
+    send_fl_request_packet,			/* status_query_func */
+    send_fl_rule_request_packet,	/* rule_query_func */
+	NULL,							/* player_query_func */
+    deal_with_fl_packet,			/* packet_func */
+},
+{
     Q_UNKNOWN_TYPE,		/* id */
     "",				/* type_prefix */
     "",				/* type_string */
@@ -2873,6 +3189,8 @@
 int time_delta( struct timeval *later, struct timeval *past);
 char * strherror( int h_err);
 int connection_refused();
+int connection_would_block();
+int connection_reset();
 
 void add_file( char *filename);
 int add_qserver( char *arg, server_type* type, char *outfilename, char *query_arg);
@@ -2889,6 +3207,7 @@
 #define CHECK_DUPLICATE_RULES 2
 #define NO_KEY_COPY 4
 #define COMBINE_VALUES 8
+#define OVERWITE_DUPLICATES 16
 
 struct player* get_player_by_number( struct qserver *server, int player_number );
 struct rule* add_rule( struct qserver *server, char *key, char *value,	int flags) ;
@@ -2949,4 +3268,14 @@
 #define NO_PLAYER_INFO 0xffff
 #define NO_SERVER_RULES NULL
 
+#define FORCE 1
+#define NO_FORCE 0
+
+#define INPROGRESS 0
+#define DONE_AUTO 1
+#define DONE_FORCE 2
+#define MEM_ERROR -2
+#define PKT_ERROR -3
+#define ORD_ERROR -4
+
 #endif
diff -urP qstat-2.11/template/.cvsignore qstat-2.11-20080912svn311/template/.cvsignore
--- qstat-2.11/template/.cvsignore	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/template/.cvsignore	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff -urP qstat-2.11/template/ghostrecon.lst qstat-2.11-20080912svn311/template/ghostrecon.lst
--- qstat-2.11/template/ghostrecon.lst	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/template/ghostrecon.lst	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,2 @@
+grs 208.144.248.104
+grs,ignoreserverplayer=yes 208.144.248.105
diff -urP qstat-2.11/template/Makefile.in qstat-2.11-20080912svn311/template/Makefile.in
--- qstat-2.11/template/Makefile.in	2006-11-04 07:59:01.000000000 -0500
+++ qstat-2.11-20080912svn311/template/Makefile.in	2008-09-12 15:00:26.000000000 -0400
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,6 +13,7 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
+
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -20,6 +21,7 @@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = ..
+
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -33,20 +35,7 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-build_triplet = @build@
 host_triplet = @host@
-subdir = template
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/gnuconfig.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -68,6 +57,7 @@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+GREP = @GREP@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -90,14 +80,11 @@
 STRIP = @STRIP@
 VERSION = @VERSION@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_STRIP = @ac_ct_STRIP@
 am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
 am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -105,60 +92,49 @@
 build_os = @build_os@
 build_vendor = @build_vendor@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 EXTRA_DIST = $(wildcard *.html *.txt)
+subdir = template
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/gnuconfig.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
 all: all-am
 
 .SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  template/Makefile'; \
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 	cd $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign  template/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 uninstall-info-am:
 tags: TAGS
 TAGS:
@@ -166,6 +142,10 @@
 ctags: CTAGS
 CTAGS:
 
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@@ -179,7 +159,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -197,6 +177,7 @@
 check-am: all-am
 check: check-am
 all-am: Makefile
+
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -217,7 +198,7 @@
 clean-generic:
 
 distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -234,8 +215,6 @@
 
 dvi-am:
 
-html: html-am
-
 info: info-am
 
 info-am:
@@ -269,8 +248,8 @@
 uninstall-am: uninstall-info-am
 
 .PHONY: all all-am check check-am clean clean-generic distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-exec \
+	distclean-generic distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
 	install-exec-am install-info install-info-am install-man \
 	install-strip installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
Binary files qstat-2.11/tests/etqw_1.4_test1 and qstat-2.11-20080912svn311/tests/etqw_1.4_test1 differ
Binary files qstat-2.11/tests/etqw_1.4_test2 and qstat-2.11-20080912svn311/tests/etqw_1.4_test2 differ
diff -urP qstat-2.11/tests/etqws.pl qstat-2.11-20080912svn311/tests/etqws.pl
--- qstat-2.11/tests/etqws.pl	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/tests/etqws.pl	2008-09-12 14:52:21.000000000 -0400
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -w
+# simple responder for doom3/quake4/etqw queries
+
+use strict;
+use IO::Socket::INET;
+use IO::File;
+
+my $sock = IO::Socket::INET->new(
+	LocalAddr => '0.0.0.0',
+	LocalPort => 27733,
+	Proto     => 'udp');
+
+my $rin = '';
+vec($rin, $sock->fileno, 1) = 1;
+
+my @files = @ARGV;
+die "USAGE: $0 <file>" unless @files;
+
+sub readfile($)
+{
+	my $fn = shift;
+	print "reading $fn\n";
+	my $f = IO::File->new($fn, "r");
+	my $buf;
+	$f->read($buf, 0xffff); # XXX use stat
+	$f->close;
+	return $buf;
+}
+
+while (select(my $rout = $rin, undef, undef, undef)) {
+	my $data = '';
+	my $hispaddr;
+	$hispaddr = $sock->recv($data, 0xffff, 0) || die "recv: $!";
+	my ($port, $hisiaddr) = sockaddr_in($hispaddr);
+	printf '%d bytes from %s:%d'."\n", length($data), inet_ntoa($hisiaddr), $port;
+
+	if($data !~ /^\xff\xffgetInfo/) {
+		printf 'invalid packet from %s:%d'."\n", inet_ntoa($hisiaddr), $port;
+		next;
+	}
+
+	my $buf = readfile($files[0]);
+
+	$sock->send($buf, 0, $hispaddr);
+}
diff -urP qstat-2.11/tests/xml.pl qstat-2.11-20080912svn311/tests/xml.pl
--- qstat-2.11/tests/xml.pl	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/tests/xml.pl	2008-09-12 14:52:21.000000000 -0400
@@ -0,0 +1,65 @@
+#!/usr/bin/perl -w
+# simple qstat xml output parser, prints values specified as command
+# line arguments
+#
+# Author: Ludwig Nussel
+#
+# Usage Examples:
+#
+# Print server name:
+#   "qstat/server/name"
+#
+# Print second server rule (numbered from zero):
+#   "qstat/server/rules/rule/1"
+#
+# Print the rule with name "gamename":
+#   "qstat/server/rules/rule/[name=gamename]"
+#
+# Print name of sixth player:
+#   "qstat/server/players/player/5/name"
+#
+# Print clan of player with name "suCk3r":
+#   "qstat/server/players/player/[name=suCk3r]/clan"
+
+use strict;
+use XML::Bare;
+use Data::Dumper;
+
+sub getvalue {
+	my $x = shift;
+	my @a = split(/\//, shift);
+	for my $n (@a) {
+		if ($n =~ /^[[:digit:]]+$/) {
+			return undef unless exists $x->[$n];
+			$x = $x->[$n];
+		} elsif ($n =~ /\[(.*)=(.*)\]/) {
+			my ($k, $v) = ($1, $2);
+			my $r;
+			for my $i (@$x) {
+				next unless exists $i->{$k};
+				if($i->{$k}->{value} eq $v) {
+					$r = $i;
+					last;
+				}
+			}
+			return undef unless $r;
+			$x = $r;
+		} else {
+			return undef unless exists $x->{$n};
+			$x = $x->{$n};
+		}
+	}
+	return $x->{value};
+}
+
+sub printvalue {
+	my $val = getvalue(@_);
+	$val = "(undefined)" unless defined $val;
+	print $val, "\n"
+}
+
+my $xml = XML::Bare->new(text => join('', <STDIN>))->parse();
+
+for (@ARGV) {
+	printvalue($xml, $_);
+}
diff -urP qstat-2.11/tm.c qstat-2.11-20080912svn311/tm.c
--- qstat-2.11/tm.c	2006-08-14 05:51:21.000000000 -0400
+++ qstat-2.11-20080912svn311/tm.c	2008-09-12 14:52:23.000000000 -0400
@@ -22,35 +22,48 @@
 #include "qstat.h"
 #include "packet_manip.h"
 
+#define TM_XML_PREFIX "<?xml version=\"1.0\"?>\n<methodCall>\n<methodName>system.multicall</methodName>\n<params><param><value><array><data>\n"
+#define TM_XML_SUFFIX "</data></array></value></param></params>\n</methodCall>"
+#define TM_SERVERINFO "<value><struct><member><name>methodName</name><value>GetServerOptions</value></member><member><name>params</name><value><array><data></data></array></value></member></struct></value>\n<value><struct><member><name>methodName</name><value>GetCurrentChallengeInfo</value></member><member><name>params</name><value><array><data></data></array></value></member></struct></value>\n"
+#define TM_PLAYERLIST "<value><struct><member><name>methodName</name><value>GetPlayerList</value></member><member><name>params</name><value><array><data><value><i4>100</i4></value><value><i4>0</i4></value></data></array></value></member></struct></value>\n"
+#define TM_AUTH_TEMPLATE "<value><struct>\n<member><name>methodName</name><value><string>Authenticate</string></value></member>\n<member><name>params</name><value><array><data>\n<value><string>%s</string></value>\n<value><string>%s</string></value></data></array></value></member></struct></value>\n"
 
-void send_tm_request_packet( struct qserver *server )
+int send_tm_request_packet( struct qserver *server )
 {
 	char buf[2048];
 	char *xmlp = buf + 8;
 	unsigned int len;
+	char *user = get_param_value( server, "user", NULL );
+	char *password = get_param_value( server, "password", NULL );
 
 	if ( ! server->protocol_version )
 	{
 		// No seen the version yet wait
 		// register_send here to ensure that timeouts function correctly
-		register_send( server );
-		return;
+		return register_send( server );
 	}
 
-	if ( get_player_info )
+	// build the query xml
+	len = sprintf( xmlp, TM_XML_PREFIX );
+
+	if ( user != NULL && password != NULL )
 	{
-		server->flags |= TF_PLAYER_QUERY|TF_RULES_QUERY;
-		// TODO: add more calls to get full player info?
-		strcpy( xmlp, "<?xml version=\"1.0\"?>\n<methodCall>\n<methodName>system.multicall</methodName>\n<params><param><value><array><data>\n<value><struct><member><name>methodName</name><value>GetServerOptions</value></member><member><name>params</name><value><array><data></data></array></value></member></struct></value>\n<value><struct><member><name>methodName</name><value>GetCurrentChallengeInfo</value></member><member><name>params</name><value><array><data></data></array></value></member></struct></value>\n<value><struct><member><name>methodName</name><value>GetPlayerList</value></member><member><name>params</name><value><array><data><value><i4>100</i4></value><value><i4>0</i4></value></data></array></value></member></struct></value>\n</data></array></value></param></params>\n</methodCall>" );
+		len += sprintf( xmlp + len, TM_AUTH_TEMPLATE, user, password );
 	}
 	else
 	{
-		server->flags |= TF_STATUS_QUERY;
-		strcpy( xmlp, "<?xml version=\"1.0\"?>\n<methodCall>\n<methodName>system.multicall</methodName>\n<params><param><value><array><data>\n<value><struct><member><name>methodName</name><value>GetServerOptions</value></member><member><name>params</name><value><array><data></data></array></value></member></struct></value>\n<value><struct><member><name>methodName</name><value>GetCurrentChallengeInfo</value></member><member><name>params</name><value><array><data></data></array></value></member></struct></value>\n<value><struct><member><name>methodName</name><value>GetPlayerList</value></member><member><name>params</name><value><array><data><value><i4>100</i4></value><value><i4>0</i4></value></data></array></value></member></struct></value>\n</data></array></value></param></params>\n</methodCall>" );
+		// Default to User / User
+		len += sprintf( xmlp + len, TM_AUTH_TEMPLATE, "User", "User" );
 	}
 
+	// Always get Player info otherwise player count is invalid
+	// TODO: add more calls to get full player info?
+	server->flags |= TF_PLAYER_QUERY|TF_RULES_QUERY;
+	len += sprintf( xmlp + len, TM_SERVERINFO );
+	len += sprintf( xmlp + len, TM_PLAYERLIST );
+	len += sprintf( xmlp + len, TM_XML_SUFFIX );
+
 	// First 4 bytes is the length of the request
-	len = strlen( xmlp );
 	memcpy( buf, &len, 4 );
 	// Second 4 bytes is the handle identifier ( id )
 	memcpy( buf+4, &server->challenge, 4 );
@@ -59,13 +72,14 @@
 	// we expect at least 1 packet response
 	server->saved_data.pkt_max = 1;
 
-	send_packet( server, buf, len + 8 );
+	return send_packet( server, buf, len + 8 );
 }
 
 
-void deal_with_tm_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_tm_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
-	char *s, *end;
+	char *s;
+	char *pkt = rawpkt;
 	char *key = NULL, *value = NULL, *tmpp = NULL;
 	char fullname[256];
 	struct player *player = NULL;
@@ -75,20 +89,30 @@
 	debug( 2, "processing..." );
 
 	s = rawpkt;
-	if ( 4 == pktlen && 0 == memcmp( rawpkt, "\x0b\x00\x00\x00", 4 ) )
+
+	// We may get the setup handle and the protocol version in one packet we may not
+	// So we continue to parse if we see the handle
+	if ( 4 <= pktlen && 0 == memcmp( pkt, "\x0b\x00\x00\x00", 4 ) )
 	{
 		// setup handle identifier
 		// greater 2^31 = XML-RPC, less = callback
 		server->challenge = 0x80000001;
-		return;
+		if ( 4 == pktlen )
+		{
+			return 0;
+		}
+		pktlen -= 4;
+		pkt += 4;
 	}
-	else if ( 10 < pktlen && 1 == sscanf( rawpkt, "GBXRemote %d", &server->protocol_version ) )
+
+	if ( 11 <= pktlen && 1 == sscanf( pkt, "GBXRemote %d", &server->protocol_version ) )
 	{
 		// Got protocol version send request
 		send_tm_request_packet( server );
-		return;	
+		return 0;
 	}
-	else if ( 8 <= pktlen && 0 == memcmp( rawpkt+4, &server->challenge, 4 ) )
+
+	if ( 8 <= pktlen && 0 == memcmp( pkt+4, &server->challenge, 4 ) )
 	{
 		// first 4 bytes = the length
 		// Note: We use pkt_id to store the length of the expected packet
@@ -104,9 +128,9 @@
 			if ( ! add_packet( server, len, 0, 2, pktlen, rawpkt, 1 ) )
 			{
 				// fatal error e.g. out of memory
-				return;
+				return -1;
 			}
-			return;
+			return 0;
 		}
 		else
 		{
@@ -117,7 +141,8 @@
 	}
 
 	total_len = combined_length( server, server->saved_data.pkt_id );
-	expected_len = server->saved_data.pkt_id; 
+	expected_len = server->saved_data.pkt_id;
+	debug( 2, "total: %d, expected: %d\n", total_len, expected_len );
 	if ( total_len < expected_len + 8 )
 	{
 		// we dont have a complete response add the packet
@@ -136,15 +161,15 @@
 		if ( ! add_packet( server, server->saved_data.pkt_id, pkt_max - 1, new_max, pktlen, rawpkt, 1 ) )
 		{
 			// fatal error e.g. out of memory
-			return;
+			return -1;
 		}
 
 		if ( last )
 		{
 			// we are the last packet run combine to call us back
-			combine_packets( server );
+			return combine_packets( server );
 		}
-		return;
+		return 0;
 	}
 
 	server->n_servers++;
@@ -157,11 +182,18 @@
 		gettimeofday( &server->packet_time1, NULL);
 	}
 
-	rawpkt[pktlen]= '\0';
-	end = &rawpkt[pktlen];
+	// Terminate the packet data
+	pkt = (char*)malloc( pktlen + 1 );
+	if ( NULL == pkt )
+	{
+		debug( 0, "Failed to malloc memory for packet terminator\n" );
+		return MEM_ERROR;
+	}
+	memcpy( pkt, rawpkt, pktlen );
+	pkt[pktlen] = '\0';
 
 //fprintf( stderr, "S=%s\n", s );
-	s = strtok( s, "\015\012" );
+	s = strtok( pkt + 8, "\015\012" );
 	while ( NULL != s )
 	{
 //fprintf( stderr, "S=%s\n", s );
@@ -177,7 +209,7 @@
 			value = NULL;
 			continue;
 		}
-		else if ( 0 == strncmp( s, "<value>", 7 ) )
+		else if ( NULL != key && 0 == strncmp( s, "<value>", 7 ) )
 		{
 			// value
 			s += 7;
@@ -223,7 +255,7 @@
 			method_response++;
 		}
 
-		if ( NULL != value )
+		if ( NULL != value && NULL != key )
 		{
 			switch( method_response )
 			{
@@ -297,9 +329,13 @@
 		s = strtok( NULL, "\015\012" );
 	}
 
+	free( pkt );
+
 	if ( 0 == strncmp( rawpkt + pktlen - 19, "</methodResponse>", 17 ) )
 	{
 		// last packet seen
-		cleanup_qserver( server, 1 );
+		return DONE_FORCE;
 	}
+
+	return INPROGRESS;
 }
diff -urP qstat-2.11/tm.h qstat-2.11-20080912svn311/tm.h
--- qstat-2.11/tm.h	2006-08-04 16:42:09.000000000 -0400
+++ qstat-2.11-20080912svn311/tm.h	2008-09-12 14:52:23.000000000 -0400
@@ -13,8 +13,8 @@
 #include "qserver.h"
 
 // Packet processing methods
-void deal_with_tm_packet( struct qserver *server, char *pkt, int pktlen );
-void send_tm_request_packet( struct qserver *server );
+int deal_with_tm_packet( struct qserver *server, char *pkt, int pktlen );
+int send_tm_request_packet( struct qserver *server );
 
 #endif
 
diff -urP qstat-2.11/ts2.c qstat-2.11-20080912svn311/ts2.c
--- qstat-2.11/ts2.c	2006-05-24 10:26:00.000000000 -0400
+++ qstat-2.11-20080912svn311/ts2.c	2008-09-12 14:52:23.000000000 -0400
@@ -2,7 +2,7 @@
  * qstat 2.8
  * by Steve Jankowski
  *
- * Gamespy query protocol
+ * Teamspeak 2 query protocol
  * Copyright 2005 Steven Hartland
  *
  * Licensed under the Artistic License, see LICENSE.txt for license terms
@@ -22,7 +22,7 @@
 #include "packet_manip.h"
 
 
-void send_ts2_request_packet( struct qserver *server )
+int send_ts2_request_packet( struct qserver *server )
 {
 	char buf[256];
 
@@ -42,14 +42,14 @@
 		server->saved_data.pkt_index = 1;
 	}
 
-	send_packet( server, buf, strlen( buf ) );
+	return send_packet( server, buf, strlen( buf ) );
 }
 
 
-void deal_with_ts2_packet( struct qserver *server, char *rawpkt, int pktlen )
+int deal_with_ts2_packet( struct qserver *server, char *rawpkt, int pktlen )
 {
 	char *s, *end;
-	int ping, connect_time;
+	int ping, connect_time, mode = 0;
 	char name[256];
 	debug( 2, "processing..." );
 
@@ -71,67 +71,94 @@
 
 	while ( NULL != s )
 	{
-		char *key = s;
-		char *value = strchr( key, '=' );
-		if ( NULL != value )
+		if ( 0 == mode )
 		{
-			// Server Rule
-			*value = '\0';
-			value++;
-			if ( 0 == strcmp( "server_name", key ) )
-			{
-				server->server_name = strdup( value );
-			}
-			else if ( 0 == strcmp( "server_udpport", key ) )
-			{
-				change_server_port( server, atoi( value ), 0 );
-				add_rule( server, key, value, NO_FLAGS );
+			// Rules
+			char *key = s;
+			char *value = strchr( key, '=' );
+			if ( NULL != value )
+			{
+				// Server Rule
+				*value = '\0';
+				value++;
+				if ( 0 == strcmp( "server_name", key ) )
+				{
+					server->server_name = strdup( value );
+				}
+				else if ( 0 == strcmp( "server_udpport", key ) )
+				{
+					change_server_port( server, atoi( value ), 0 );
+					add_rule( server, key, value, NO_FLAGS );
+				}
+				else if ( 0 == strcmp( "server_maxusers", key ) )
+				{
+					server->max_players = atoi( value );
+				}
+				else if ( 0 == strcmp( "server_currentusers", key ) )
+				{
+					server->num_players = atoi( value);
+				}
+				else
+				{
+					add_rule( server, key, value, NO_FLAGS);
+				}
+			}
+			else if ( 0 == strcmp( "OK", s ) )
+			{
+				// end of rules request
+				server->saved_data.pkt_index--;
+				mode++;
+			}
+			else if ( 0 == strcmp( "[TS]", s ) )
+			{
+				// nothing to do
+			}
+			else if ( 0 == strcmp( "ERROR, invalid id", s ) )
+			{
+				// bad server
+				server->server_name = DOWN;
+				server->saved_data.pkt_index = 0;
 			}
-			else if ( 0 == strcmp( "server_maxusers", key ) )
+		}
+		else if ( 1 == mode )
+		{
+			// Player info
+			if ( 3 == sscanf( s, "%*d %*d %*d %*d %*d %*d %*d %d %d %*d %*d %*d %*d \"0.0.0.0\" \"%255[^\"]", &ping, &connect_time, name ) )
 			{
-				server->max_players = atoi( value );
+				// Player info
+				struct player *player = add_player( server, server->n_player_info );
+				if ( NULL != player )
+				{
+					player->name = strdup( name );
+					player->ping = ping;
+					player->connect_time = connect_time;
+				}
 			}
-			else if ( 0 == strcmp( "server_currentusers", key ) )
+			else if ( 0 == strcmp( "OK", s ) )
 			{
-				server->num_players = atoi( value);
+				// end of rules request
+				server->saved_data.pkt_index--;
+				mode++;
 			}
-			else
+			else if ( 0 == strcmp( "[TS]", s ) )
 			{
-				add_rule( server, key, value, NO_FLAGS);
+				// nothing to do
 			}
-		}
-		else if ( 3 == sscanf( s, "%*d %*d %*d %*d %*d %*d %*d %d %d %*d %*d %*d %*d \"0.0.0.0\" \"%255[^\"]", &ping, &connect_time, name ) )
-		{
-			// Player info
-			struct player *player = add_player( server, server->n_player_info );
-			if ( NULL != player )
+			else if ( 0 == strcmp( "ERROR, invalid id", s ) )
 			{
-				player->name = strdup( name );
-				player->ping = ping;
-				player->connect_time = connect_time;
+				// bad server
+				server->server_name = DOWN;
+				server->saved_data.pkt_index = 0;
 			}
 		}
-		else if ( 0 == strcmp( "OK", s ) )
-		{
-			// end of request result
-			server->saved_data.pkt_index--;
-		}
-		else if ( 0 == strcmp( "[TS]", s ) )
-		{
-			// nothing to do
-		}
-		else if ( 0 == strcmp( "ERROR, invalid id", s ) )
-		{
-			// bad server
-			server->server_name = DOWN;
-			server->saved_data.pkt_index = 0;
-		}
 		s = strtok( NULL, "\015\012" );
 	}
 
 	if ( 0 == server->saved_data.pkt_index )
 	{
 		server->map_name = strdup( "N/A" );
-		cleanup_qserver( server, 1 );
+		return DONE_FORCE;
 	}
+
+	return INPROGRESS;
 }
diff -urP qstat-2.11/ts2.h qstat-2.11-20080912svn311/ts2.h
--- qstat-2.11/ts2.h	2005-09-21 10:46:11.000000000 -0400
+++ qstat-2.11-20080912svn311/ts2.h	2008-09-12 14:52:23.000000000 -0400
@@ -13,8 +13,8 @@
 #include "qserver.h"
 
 // Packet processing methods
-void deal_with_ts2_packet( struct qserver *server, char *pkt, int pktlen );
-void send_ts2_request_packet( struct qserver *server );
+int deal_with_ts2_packet( struct qserver *server, char *pkt, int pktlen );
+int send_ts2_request_packet( struct qserver *server );
 
 #endif
 
diff -urP qstat-2.11/ut2004.c qstat-2.11-20080912svn311/ut2004.c
--- qstat-2.11/ut2004.c	2006-05-28 07:48:38.000000000 -0400
+++ qstat-2.11-20080912svn311/ut2004.c	2008-09-12 14:52:23.000000000 -0400
@@ -30,216 +30,220 @@
  */
 static void bin2hex(const char* in, size_t len, char* out);
 
-#define CD_KEY_LENGTH     23
+#define CD_KEY_LENGTH	 23
 
 // arbitrary
 #define MAX_LISTING_RECORD_LEN 0x04FF
 
-#define RESPONSE_OFFSET_CDKEY     5
+#define RESPONSE_OFFSET_CDKEY	 5
 #define RESPONSE_OFFSET_CHALLENGE 39
 
 static const char challenge_response[] = {
-    0x68, 0x00, 0x00, 0x00,  '!', 0xCD, 0xCD, 0xCD, 
-    /* length             |   !   MD5SUM, CD is placeholder */
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0x00,
-                                         '!', 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
-    0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0x00, 
-
-    0x0c,  'U',  'T',  '2',  'K',  '4',  'C',  'L',
-    /*^^ 12 byte string  */
-     'I',  'E',  'N',  'T', 0x00, 0xfb, 0x0c, 0x00, 
-    /*                          | unknown        */
-    0x00, 0x06, 0x04,  'i',  'n',  't', 0x00, 0x00, 
-    /*        |   ^^ 4 byte string          | ?  */    
-    0x00, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x11, 
-    /* unknown                                   */
-    0x00, 0x00, 0x00, 0x01 };
+	0x68, 0x00, 0x00, 0x00,  '!', 0xCD, 0xCD, 0xCD,
+	/* length			 |   !   MD5SUM, CD is placeholder */
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0x00,
+										 '!', 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+	0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0x00,
+
+	0x0c,  'U',  'T',  '2',  'K',  '4',  'C',  'L',
+	/*^^ 12 byte string  */
+	 'I',  'E',  'N',  'T', 0x00, 0xfb, 0x0c, 0x00,
+	/*						  | unknown		*/
+	0x00, 0x06, 0x04,  'i',  'n',  't', 0x00, 0x00,
+	/*		|   ^^ 4 byte string		  | ?  */
+	0x00, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x11,
+	/* unknown								   */
+	0x00, 0x00, 0x00, 0x01 };
 
 static const char approved[] = {
-    0x0e, 0x00, 0x00, 0x00, 0x09,  'A',  'P',  'P',
-     'R',  'O',  'V',  'E',  'D', 0x00, 0x03, 0x00, 
-    0x00, 0x00 };
+	0x0e, 0x00, 0x00, 0x00, 0x09,  'A',  'P',  'P',
+	 'R',  'O',  'V',  'E',  'D', 0x00, 0x03, 0x00,
+	0x00, 0x00 };
 
 static const char approved_response[] = {
-    0x22, 0x00, 0x00, 0x00,  '!',  '0',  '0',  '0', 
-     '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0', 
-     '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0', 
-     '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0', 
-     '0',  '0',  '0',  '0',  '0', 0x00 };
+	0x22, 0x00, 0x00, 0x00,  '!',  '0',  '0',  '0',
+	 '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',
+	 '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',
+	 '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',
+	 '0',  '0',  '0',  '0',  '0', 0x00 };
 
 static const char verified[] = {
-    0x0a, 0x00, 0x00, 0x00, 0x09,  'V',  'E',  'R',
-     'I',  'F',  'I',  'E',  'D', 0x00 };
+	0x0a, 0x00, 0x00, 0x00, 0x09,  'V',  'E',  'R',
+	 'I',  'F',  'I',  'E',  'D', 0x00 };
 
 #if 0
 struct server_listing_record_head {
-    unsigned len;
-    unsigned ip;
-    short port;
-    short queryport;
-    char name[];
-    // char map[]
+	unsigned len;
+	unsigned ip;
+	short port;
+	short queryport;
+	char name[];
+	// char map[]
 };
 
 struct server_listing_record_foot {
-    unsigned char marker1[3];
-    unsigned char unknown1;
-    unsigned char maxplayers;
-    unsigned char unknown2[4];
-    unsigned char marker2[3];
+	unsigned char marker1[3];
+	unsigned char unknown1;
+	unsigned char maxplayers;
+	unsigned char unknown2[4];
+	unsigned char marker2[3];
 };
 #endif
 
 static char cdkey[CD_KEY_LENGTH+1] = "";
 
 enum ut2004_state {
-    STATE_CHALLENGE = 0x00,
-    STATE_APPROVED  = 0x01,
-    STATE_VERIFIED  = 0x02,
-    STATE_LISTING   = 0x03,
+	STATE_CHALLENGE = 0x00,
+	STATE_APPROVED  = 0x01,
+	STATE_VERIFIED  = 0x02,
+	STATE_LISTING   = 0x03,
 };
 
-void send_ut2004master_request_packet(struct qserver *server)
+int send_ut2004master_request_packet(struct qserver *server)
 {
-    if(server->n_packets)
-    {
-	cleanup_qserver(server, 1);
-	return;
-    }
-
-    if(!*cdkey)
-    {
-	char* param = get_param_value( server, "cdkey", NULL);
-	if(!param)
-	{
-	    debug(0, "Error: missing cdkey parameter");
-	    server->server_name = SYSERROR;
-	    cleanup_qserver(server, 1);
-	    return;
-	}
-
-	if(*param == '/')
-	{
-	    FILE* fp = fopen(param, "r");
-	    if(!fp || fread(cdkey, 1, CD_KEY_LENGTH, fp) != CD_KEY_LENGTH)
-	    {
-		debug(0, "Error: can't key from %s", param);
-		server->server_name = SYSERROR;
-		cleanup_qserver(server, 1);
-		if(fp) fclose(fp);
-		return;
-	    }
-	    fclose(fp);
-	}
-	else if(strchr(param, '-') && strlen(param) == CD_KEY_LENGTH)
+	int ret;
+	if(server->n_packets)
 	{
-	    memcpy(cdkey, param, CD_KEY_LENGTH);
+		return DONE_FORCE;
 	}
-	else if(   *param == '$'
-		&& (param = getenv(param+1)) // replaces param!
-		&& strlen(param) == CD_KEY_LENGTH)
-	{
-	    memcpy(cdkey, param, CD_KEY_LENGTH);
-	}
-	else
+
+	if(!*cdkey)
 	{
-	    debug(0, "Error: invalid cdkey parameter");
-	    server->server_name = SYSERROR;
-	    cleanup_qserver(server, 1);
-	    return;
+		char* param = get_param_value( server, "cdkey", NULL);
+		if(!param)
+		{
+			debug(0, "Error: missing cdkey parameter");
+			server->server_name = SYSERROR;
+			return PKT_ERROR;
+		}
+
+		if(*param == '/')
+		{
+			FILE* fp = fopen(param, "r");
+			if(!fp || fread(cdkey, 1, CD_KEY_LENGTH, fp) != CD_KEY_LENGTH)
+			{
+				debug(0, "Error: can't key from %s", param);
+				server->server_name = SYSERROR;
+				if(fp)
+				{
+					fclose(fp);
+				}
+				return PKT_ERROR;
+			}
+			fclose(fp);
+		}
+		else if(strchr(param, '-') && strlen(param) == CD_KEY_LENGTH)
+		{
+			memcpy(cdkey, param, CD_KEY_LENGTH);
+		}
+		else if(   *param == '$'
+			&& (param = getenv(param+1)) // replaces param!
+			&& strlen(param) == CD_KEY_LENGTH)
+		{
+			memcpy(cdkey, param, CD_KEY_LENGTH);
+		}
+		else
+		{
+			debug(0, "Error: invalid cdkey parameter");
+			server->server_name = SYSERROR;
+			return PKT_ERROR;
+		}
 	}
-    }
 
-    qserver_send(server, NULL, 0);
+	ret = qserver_send(server, NULL, 0);
 
 #if 0
-    // XXX since we do not send but rather expect a reply directly after
-    // connect it's pointless to retry doing nothing
-    debug(0, "retry1: %d", server->retry1);
-    server->retry1 = 0;
+	// XXX since we do not send but rather expect a reply directly after
+	// connect it's pointless to retry doing nothing
+	debug(0, "retry1: %d", server->retry1);
+	server->retry1 = 0;
 #endif
 
-    server->master_query_tag[0] = STATE_CHALLENGE;
+	server->master_query_tag[0] = STATE_CHALLENGE;
+	return ret;
 }
 
 static void ut2004_server_done(struct qserver* server)
 {
-    if(server->saved_data.next)
-    {
-	debug(0, "%d bytes of unprocessed data left. Premature EOF!?",
-		server->saved_data.next->datalen);
-	free(server->saved_data.next->data);
-	free(server->saved_data.next);
-	server->saved_data.next = NULL;
-    }
+	if(server->saved_data.next)
+	{
+		debug(0, "%d bytes of unprocessed data left. Premature EOF!?", server->saved_data.next->datalen);
+		free(server->saved_data.next->data);
+		free(server->saved_data.next);
+		server->saved_data.next = NULL;
+	}
 }
 
 // we use n_servers to store number of used bytes in master_pkt so
 // it needs to be divided by 6 when finished
 static void ut2004_parse_record(struct qserver* server, char* pkt)
 {
-    char* dest;
+	char* dest;
 
 #if 0
-    unsigned ip;
-    unsigned short port;
+	unsigned ip;
+	unsigned short port;
 
-    memcpy(&ip, pkt+4, 4);
-    port = swap_short_from_little(pkt+4+4);
+	memcpy(&ip, pkt+4, 4);
+	port = swap_short_from_little(pkt+4+4);
 
-    debug(2, "got %d.%d.%d.%d:%hu", ip&0xff, (ip>>8)&0xff, (ip>>16)&0xff, (ip>>24)&0xff, port);
+	debug(2, "got %d.%d.%d.%d:%hu", ip&0xff, (ip>>8)&0xff, (ip>>16)&0xff, (ip>>24)&0xff, port);
 #endif
 
-    if(server->n_servers+6 > server->master_pkt_len)
-    {
-	if(!server->master_pkt_len)
-	    server->master_pkt_len = 180;
-	else
-	    server->master_pkt_len *= 2;
-	server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len);
-    }
-
-    dest = server->master_pkt + server->n_servers;
-
-    memcpy(dest, pkt+4, 4 );
-    dest[4] = pkt[9];
-    dest[5] = pkt[8];
-    server->n_servers += 6;
+	if(server->n_servers+6 > server->master_pkt_len)
+	{
+		if(!server->master_pkt_len)
+		{
+			server->master_pkt_len = 180;
+		}
+		else
+		{
+			server->master_pkt_len *= 2;
+		}
+		server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len);
+	}
+
+	dest = server->master_pkt + server->n_servers;
+
+	memcpy(dest, pkt+4, 4 );
+	dest[4] = pkt[9];
+	dest[5] = pkt[8];
+	server->n_servers += 6;
 }
 
 static char* put_bytes(char* buf, const char* bytes, size_t len, size_t* left)
 {
-    if(!buf || len > *left)
+	if(!buf || len > *left)
 	return NULL;
 
-    memcpy(buf, bytes, len);
-    *left -= len;
+	memcpy(buf, bytes, len);
+	*left -= len;
 
-    return buf+len;
+	return buf+len;
 }
 
 static char* put_string(char* buf, const char* string, size_t* left)
 {
-    size_t len = strlen(string)+1;
-    char l;
+	size_t len = strlen(string)+1;
+	char l;
 
-    if(!buf || len > 0xFF || *left < len+1)
-	return NULL;
+	if(!buf || len > 0xFF || *left < len+1)
+		return NULL;
 
-    l = len;
+	l = len;
 
-    buf = put_bytes(buf, &l, 1, left);
-    return put_bytes(buf, string, len, left);
+	buf = put_bytes(buf, &l, 1, left);
+	return put_bytes(buf, string, len, left);
 }
 
 /** \brief assemble the server filter and send the master query
-  
+
   the query consists of four bytes length (excluding the four length bytes), a
   null byte and then the number of item pairs that follow.
 
@@ -249,416 +253,404 @@
  */
 static int ut2004_send_query(struct qserver* server)
 {
-    char buf[4096] = {0};
-    size_t left = sizeof(buf);
-    char *b = buf;
-    char *param, *r, *sep= "";
-    unsigned flen = 0;
-    unsigned char items = 0;
-
-    // header is done later
-    b += 6;
-    left -= 6;
-
-    param = get_param_value( server, "gametype", NULL);
-    if(param)
-    {
-	++items;
-	b = put_string(b, "gametype", &left);
-	b = put_string(b, param, &left);
-	b = put_bytes(b, "", 1, &left);
-    }
-
-    param = get_param_value( server, "status", NULL);
-    r = param;
-    while ( param && sep )
-    {
-	sep= strchr( r, ':');
-	if ( sep )
-	    flen= sep-r;
-	else
-	    flen= strlen(r);
-
-	if (   strncmp( r, "standard", flen) == 0
-	    || strncmp( r, "nostandard", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "standard", &left);
-	    if(*r == 'n')
-		b = put_string(b, "false", &left);
-	    else
-		b = put_string(b, "true", &left);
-	    b = put_bytes(b, "", 1, &left);
-	}
-	else if (  strncmp( r, "password", flen) == 0
-		|| strncmp( r, "nopassword", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "password", &left);
-	    if(*r == 'n')
-		b = put_string(b, "false", &left);
-	    else
-		b = put_string(b, "true", &left);
-	    b = put_bytes(b, "", 1, &left);
-	}
-	else if ( strncmp( r, "notempty", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "currentplayers", &left);
-	    b = put_string(b, "0", &left);
-	    b = put_bytes(b, "\x04", 1, &left);
-	}
-	else if ( strncmp( r, "notfull", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "freespace", &left);
-	    b = put_string(b, "0", &left);
-	    b = put_bytes(b, "\x04", 1, &left);
-	}
-	else if ( strncmp( r, "nobots", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "nobots", &left);
-	    b = put_string(b, "true", &left);
-	    b = put_bytes(b, "", 1, &left);
-	}
-	else if (  strncmp( r, "stats", flen) == 0
-		|| strncmp( r, "nostats", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "stats", &left);
-	    if(*r == 'n')
-		b = put_string(b, "false", &left);
-	    else
-		b = put_string(b, "true", &left);
-	    b = put_bytes(b, "", 1, &left);
-	}
-	else if (  strncmp( r, "weaponstay", flen) == 0
-		|| strncmp( r, "noweaponstay", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "weaponstay", &left);
-	    if(*r == 'n')
-		b = put_string(b, "false", &left);
-	    else
-		b = put_string(b, "true", &left);
-	    b = put_bytes(b, "", 1, &left);
-	}
-	else if (  strncmp( r, "transloc", flen) == 0
-		|| strncmp( r, "notransloc", flen) == 0)
-	{
-	    ++items;
-	    b = put_string(b, "transloc", &left);
-	    if(*r == 'n')
-		b = put_string(b, "false", &left);
-	    else
-		b = put_string(b, "true", &left);
-	    b = put_bytes(b, "", 1, &left);
-	}
-	r= sep+1;
-    }
+	char buf[4096] = {0};
+	size_t left = sizeof(buf);
+	char *b = buf;
+	char *param, *r, *sep= "";
+	unsigned flen = 0;
+	unsigned char items = 0;
+
+	// header is done later
+	b += 6;
+	left -= 6;
+
+	param = get_param_value( server, "gametype", NULL);
+	if(param)
+	{
+		++items;
+		b = put_string(b, "gametype", &left);
+		b = put_string(b, param, &left);
+		b = put_bytes(b, "", 1, &left);
+	}
+
+	param = get_param_value( server, "status", NULL);
+	r = param;
+	while ( param && sep )
+	{
+		sep= strchr( r, ':');
+		if ( sep )
+			flen= sep-r;
+		else
+			flen= strlen(r);
 
-    param = get_param_value( server, "mutator", NULL);
-    r = param;
-    sep = "";
-    while ( param && sep )
-    {
-	char neg = '\0';
-	unsigned char l;
-	sep= strchr( r, ':');
-	if ( sep )
-	    flen= sep-r;
-	else
-	    flen= strlen(r);
-	
-	if(*r == '-')
-	{
-	    neg = '\x04';
-	    ++r;
-	    --flen;
+		if (   strncmp( r, "standard", flen) == 0
+			|| strncmp( r, "nostandard", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "standard", &left);
+			if(*r == 'n')
+			b = put_string(b, "false", &left);
+			else
+			b = put_string(b, "true", &left);
+			b = put_bytes(b, "", 1, &left);
+		}
+		else if (  strncmp( r, "password", flen) == 0
+			|| strncmp( r, "nopassword", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "password", &left);
+			if(*r == 'n')
+			b = put_string(b, "false", &left);
+			else
+			b = put_string(b, "true", &left);
+			b = put_bytes(b, "", 1, &left);
+		}
+		else if ( strncmp( r, "notempty", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "currentplayers", &left);
+			b = put_string(b, "0", &left);
+			b = put_bytes(b, "\x04", 1, &left);
+		}
+		else if ( strncmp( r, "notfull", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "freespace", &left);
+			b = put_string(b, "0", &left);
+			b = put_bytes(b, "\x04", 1, &left);
+		}
+		else if ( strncmp( r, "nobots", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "nobots", &left);
+			b = put_string(b, "true", &left);
+			b = put_bytes(b, "", 1, &left);
+		}
+		else if (  strncmp( r, "stats", flen) == 0
+			|| strncmp( r, "nostats", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "stats", &left);
+			if(*r == 'n')
+			b = put_string(b, "false", &left);
+			else
+			b = put_string(b, "true", &left);
+			b = put_bytes(b, "", 1, &left);
+		}
+		else if (  strncmp( r, "weaponstay", flen) == 0
+			|| strncmp( r, "noweaponstay", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "weaponstay", &left);
+			if(*r == 'n')
+			b = put_string(b, "false", &left);
+			else
+			b = put_string(b, "true", &left);
+			b = put_bytes(b, "", 1, &left);
+		}
+		else if (  strncmp( r, "transloc", flen) == 0
+			|| strncmp( r, "notransloc", flen) == 0)
+		{
+			++items;
+			b = put_string(b, "transloc", &left);
+			if(*r == 'n')
+			b = put_string(b, "false", &left);
+			else
+			b = put_string(b, "true", &left);
+			b = put_bytes(b, "", 1, &left);
+		}
+		r= sep+1;
 	}
 
-	if(!flen)
-	    continue;
+	param = get_param_value( server, "mutator", NULL);
+	r = param;
+	sep = "";
+	while ( param && sep )
+	{
+		char neg = '\0';
+		unsigned char l;
+		sep= strchr( r, ':');
+		if ( sep )
+			flen= sep-r;
+		else
+			flen= strlen(r);
 
-	b = put_string(b, "mutator", &left);
-	l = flen+1;
-	b = put_bytes(b, (char*)&l, 1, &left);
-	b = put_bytes(b, r, flen, &left);
-	b = put_bytes(b, "", 1, &left);
-	b = put_bytes(b, &neg, 1, &left);
-	++items;
-
-	r= sep+1;
-    }
-
-    if(!b)
-    {
-	debug(0, "Error: query buffer too small. Please file a bug report!");
-	return 0;
-    }
+		if(*r == '-')
+		{
+			neg = '\x04';
+			++r;
+			--flen;
+		}
+
+		if(!flen)
+			continue;
+
+		b = put_string(b, "mutator", &left);
+		l = flen+1;
+		b = put_bytes(b, (char*)&l, 1, &left);
+		b = put_bytes(b, r, flen, &left);
+		b = put_bytes(b, "", 1, &left);
+		b = put_bytes(b, &neg, 1, &left);
+		++items;
+
+		r= sep+1;
+	}
+
+	if(!b)
+	{
+		debug(0, "Error: query buffer too small. Please file a bug report!");
+		return 0;
+	}
 
-    put_long_little(b-buf-4, buf);
-    buf[5] = items;
+	put_long_little(b-buf-4, buf);
+	buf[5] = items;
 
-    return (qserver_send(server, buf, sizeof(buf)-left) > 0);
+	return (qserver_send(server, buf, sizeof(buf)-left) > 0);
 }
 
-void deal_with_ut2004master_packet(struct qserver *server, char *rawpkt, int pktlen)
+int deal_with_ut2004master_packet(struct qserver *server, char *rawpkt, int pktlen)
 {
-    unsigned char* state = (unsigned char*)&server->master_query_tag[0];
+	unsigned char* state = (unsigned char*)&server->master_query_tag[0];
 
-    md5_state_t md5;
+	md5_state_t md5;
 
-    if(!pktlen)
-    {
-	ut2004_server_done(server);
-	goto cleanup_out;
-    }
+	if(!pktlen)
+	{
+		ut2004_server_done(server);
+		goto cleanup_out;
+	}
 
-    server->ping_total+= time_delta( &packet_recv_time, &server->packet_time1);
+	server->ping_total+= time_delta( &packet_recv_time, &server->packet_time1);
 
-    switch(*state)
-    {
+	switch(*state)
+	{
 	case STATE_CHALLENGE:
-	    // ensure at least one byte challenge, fit into buffer,
-	    // match challenge, null terminated
-	    if(    pktlen < 4 +1 +1 +1
+		// ensure at least one byte challenge, fit into buffer,
+		// match challenge, null terminated
+		if(	pktlen < 4 +1 +1 +1
 		|| pktlen > 4 +1 +8 +1
 		|| rawpkt[pktlen-1] != '\0')
-	    {
-		malformed_packet(server, "invalid challenge" );
-		goto cleanup_out;
-	    }
-	    else
-	    {
-		char response[sizeof(challenge_response)];
-		char* challenge = rawpkt+5;
-		char sum[16];
-
-		memcpy(response, challenge_response, sizeof(challenge_response));
-
-		debug(2, "challenge: %s", challenge);
-
-		md5_init(&md5);
-		md5_append(&md5, (unsigned char*)cdkey, CD_KEY_LENGTH);
-		md5_finish(&md5, (unsigned char*)sum);
-		bin2hex(sum, 16, response+RESPONSE_OFFSET_CDKEY);
-
-		md5_init(&md5);
-		md5_append(&md5, (unsigned char*)cdkey, CD_KEY_LENGTH);
-		md5_append(&md5, (unsigned char*)challenge, strlen(challenge));
-		md5_finish(&md5, (unsigned char*)sum);
-		bin2hex(sum, 16, response+RESPONSE_OFFSET_CHALLENGE);
-
-		qserver_send(server, response, sizeof(response));
-
-		server->server_name = MASTER;
-
-		*state = STATE_APPROVED;
-	    }
-	    break;
+		{
+			malformed_packet(server, "invalid challenge" );
+			goto cleanup_out;
+		}
+		else
+		{
+			char response[sizeof(challenge_response)];
+			char* challenge = rawpkt+5;
+			char sum[16];
+
+			memcpy(response, challenge_response, sizeof(challenge_response));
+
+			debug(2, "challenge: %s", challenge);
+
+			md5_init(&md5);
+			md5_append(&md5, (unsigned char*)cdkey, CD_KEY_LENGTH);
+			md5_finish(&md5, (unsigned char*)sum);
+			bin2hex(sum, 16, response+RESPONSE_OFFSET_CDKEY);
+
+			md5_init(&md5);
+			md5_append(&md5, (unsigned char*)cdkey, CD_KEY_LENGTH);
+			md5_append(&md5, (unsigned char*)challenge, strlen(challenge));
+			md5_finish(&md5, (unsigned char*)sum);
+			bin2hex(sum, 16, response+RESPONSE_OFFSET_CHALLENGE);
+
+			qserver_send(server, response, sizeof(response));
+
+			server->server_name = MASTER;
+
+			*state = STATE_APPROVED;
+		}
+		break;
 
 	case STATE_APPROVED:
 
-	    if(pktlen != sizeof(approved)
+		if(pktlen != sizeof(approved)
 		|| 0 != memcmp(rawpkt, approved, pktlen))
-	    {
-		malformed_packet(server, "CD key not approved" );
-		goto cleanup_out;
-	    }
+		{
+			malformed_packet(server, "CD key not approved" );
+			goto cleanup_out;
+		}
 
-	    debug(2, "got approval, sending verify");
+		debug(2, "got approval, sending verify");
 
-	    qserver_send(server, approved_response, sizeof(approved_response));
-	    *state = STATE_VERIFIED;
+		qserver_send(server, approved_response, sizeof(approved_response));
+		*state = STATE_VERIFIED;
 
-	    break;
+		break;
 
 	case STATE_VERIFIED:
 
-	    if(pktlen != sizeof(verified)
+		if(pktlen != sizeof(verified)
 		|| 0 != memcmp(rawpkt, verified, pktlen))
-	    {
-		malformed_packet(server, "CD key not verified" );
-		goto cleanup_out;
-	    }
+		{
+			malformed_packet(server, "CD key not verified" );
+			goto cleanup_out;
+		}
 
-	    if(!ut2004_send_query(server))
-		goto cleanup_out;
+		if(!ut2004_send_query(server))
+			goto cleanup_out;
 
-	    *state = STATE_LISTING;
+		*state = STATE_LISTING;
 
-	    break;
+		break;
 	case STATE_LISTING:
-	    // first packet. contains number of servers to expect
-	    if(!server->saved_data.pkt_id)
-	    {
+		// first packet. contains number of servers to expect
+		if(!server->saved_data.pkt_id)
+		{
 		/*
-		server->saved_data.data = malloc(pktlen);
-		memcpy(server->saved_data.data, rawpkt, pktlen);
-		server->saved_data.datalen = pktlen;
-		*/
-		server->saved_data.pkt_id = 1;
+			server->saved_data.data = malloc(pktlen);
+			memcpy(server->saved_data.data, rawpkt, pktlen);
+			server->saved_data.datalen = pktlen;
+			*/
+			server->saved_data.pkt_id = 1;
 
-		if(pktlen == 9)
-		{
-		    unsigned num = swap_long_from_little(rawpkt+4);
-		    debug(2, "expect %u servers", num);
+			if(pktlen == 9)
+			{
+				unsigned num = swap_long_from_little(rawpkt+4);
+				debug(2, "expect %u servers", num);
 #if 1
-		    if(num < 10000)
-		    {
-			server->master_pkt_len = num*6;
-			server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len);
-		    }
+				if(num < 10000)
+				{
+					server->master_pkt_len = num*6;
+					server->master_pkt = (char*)realloc(server->master_pkt, server->master_pkt_len);
+				}
 #endif
-		}
-	    }
-	    else if(pktlen < 4)
-	    {
-		malformed_packet(server, "packet too short");
-		goto cleanup_out;
-	    }
-	    else
-	    {
-		char* p = rawpkt;
-		unsigned recordlen = 0;
-
-		if(server->saved_data.next)
-		{
-		    unsigned need = 0;
-		    SavedData* data = server->saved_data.next;
-		    // nasty, four bytes of record length are split up. since
-		    // we alloc'ed at least four bytes we just copy the 4-x
-		    // bytes to data->data
-		    if(data->datalen < 4)
-		    {
-			need = 4 - data->datalen;
-			debug(2, "need %d bytes more for recordlen", need);
-			if( need > pktlen)
-			{
-			    // XXX ok, im lazy now. Stupid server can't even
-			    // send four bytes in a row
-			    malformed_packet(server, "chunk too small");
-			    goto cleanup_out;
 			}
-			memcpy(data->data+data->datalen, p, need);
-			p += need;
-			data->datalen = 4;
-		    }
-
-		    recordlen = swap_long_from_little(data->data);
-
-		    if(!recordlen || recordlen > MAX_LISTING_RECORD_LEN)
-		    {
-			malformed_packet(server,
-				"record lengthx %x out of range, position %d", recordlen, (int)(p-rawpkt));
+		}
+		else if(pktlen < 4)
+		{
+			malformed_packet(server, "packet too short");
 			goto cleanup_out;
-		    }
-
-		    need = 4+recordlen - data->datalen;
-
-		    debug(2, "recordlen: %d, saved: %d, pkglen: %d, needed: %d", recordlen, data->datalen, pktlen, need);
-
-		    if( need <= pktlen)
-		    {
-			data->data = realloc(data->data, 4+recordlen);
-			memcpy(data->data + data->datalen, p, need);
-			ut2004_parse_record(server, data->data);
-			p += need;
-
-			free(data->data);
-			free(data);
-			server->saved_data.next = NULL;
-		    }
 		}
-
-		while(!server->saved_data.next && p-rawpkt+4 < pktlen)
+		else
 		{
-		    recordlen = swap_long_from_little(p);
+			char* p = rawpkt;
+			unsigned recordlen = 0;
 
-		    // record too large
-		    if(!recordlen || recordlen > MAX_LISTING_RECORD_LEN)
-		    {
-			malformed_packet(server,
-				"record length %x out of range, position %d", recordlen, (int)(p-rawpkt));
-			goto cleanup_out;
-		    }
-		    // recordlen itself is four bytes
-		    recordlen += 4;
-
-		    // record fully inside packet
-		    if(p-rawpkt+recordlen <= pktlen)
-		    {
-			ut2004_parse_record(server, p);
-			p += recordlen;
-		    }
-		    else
-			break;
-		}
-
-		// record continues in next packet. save it.
-		if(p-rawpkt < pktlen)
-		{
-		    SavedData* data = server->saved_data.next;
-		    unsigned tosave = pktlen - (p-rawpkt);
-		    if(!data)
-		    {
-			data = malloc(sizeof(SavedData));
-			data->data = malloc(tosave<4?4:tosave); // alloc at least four bytes
-			data->datalen = tosave;
-			memcpy(data->data, p, data->datalen);
-			data->next = NULL;
-			server->saved_data.next = data;
-			
-			debug(1, "saved %d bytes", data->datalen );
-		    }
-		    else
-		    {
-			data->data = realloc(data->data, data->datalen + tosave );
-			memcpy(data->data+data->datalen, p, tosave);
-			data->datalen += tosave;
-			
-			debug(1, "saved %d bytes (+)", data->datalen );
-		    }
-		}
-	    }
-	    break;
-    }
+			if(server->saved_data.next)
+			{
+				unsigned need = 0;
+				SavedData* data = server->saved_data.next;
+				// nasty, four bytes of record length are split up. since
+				// we alloc'ed at least four bytes we just copy the 4-x
+				// bytes to data->data
+				if(data->datalen < 4)
+				{
+					need = 4 - data->datalen;
+					debug(2, "need %d bytes more for recordlen", need);
+					if( need > pktlen)
+					{
+						// XXX ok, im lazy now. Stupid server can't even
+						// send four bytes in a row
+						malformed_packet(server, "chunk too small");
+						goto cleanup_out;
+					}
+					memcpy(data->data+data->datalen, p, need);
+					p += need;
+					data->datalen = 4;
+				}
+
+				recordlen = swap_long_from_little(data->data);
+
+				if(!recordlen || recordlen > MAX_LISTING_RECORD_LEN)
+				{
+					malformed_packet(server,
+						"record lengthx %x out of range, position %d", recordlen, (int)(p-rawpkt));
+					goto cleanup_out;
+				}
+
+				need = 4+recordlen - data->datalen;
+
+				debug(2, "recordlen: %d, saved: %d, pkglen: %d, needed: %d", recordlen, data->datalen, pktlen, need);
+
+				if( need <= pktlen)
+				{
+					data->data = realloc(data->data, 4+recordlen);
+					memcpy(data->data + data->datalen, p, need);
+					ut2004_parse_record(server, data->data);
+					p += need;
+
+					free(data->data);
+					free(data);
+					server->saved_data.next = NULL;
+				}
+			}
 
-#if 0 // would cause extremely short timeout
-    server->next_player_info= -1; // would clean up otherwise <- not true?
-#endif
+			while(!server->saved_data.next && p-rawpkt+4 < pktlen)
+			{
+				recordlen = swap_long_from_little(p);
 
+				// record too large
+				if(!recordlen || recordlen > MAX_LISTING_RECORD_LEN)
+				{
+					malformed_packet(server,
+						"record length %x out of range, position %d", recordlen, (int)(p-rawpkt));
+					goto cleanup_out;
+				}
+				// recordlen itself is four bytes
+				recordlen += 4;
+
+				// record fully inside packet
+				if(p-rawpkt+recordlen <= pktlen)
+				{
+					ut2004_parse_record(server, p);
+					p += recordlen;
+				}
+				else
+					break;
+			}
 
-    debug(2, "%d servers total", server->n_servers/6);
+			// record continues in next packet. save it.
+			if(p-rawpkt < pktlen)
+			{
+				SavedData* data = server->saved_data.next;
+				unsigned tosave = pktlen - (p-rawpkt);
+				if(!data)
+				{
+					data = malloc(sizeof(SavedData));
+					data->data = malloc(tosave<4?4:tosave); // alloc at least four bytes
+					data->datalen = tosave;
+					memcpy(data->data, p, data->datalen);
+					data->next = NULL;
+					server->saved_data.next = data;
+
+					debug(1, "saved %d bytes", data->datalen );
+				}
+				else
+				{
+					data->data = realloc(data->data, data->datalen + tosave );
+					memcpy(data->data+data->datalen, p, tosave);
+					data->datalen += tosave;
 
-#if 0 // harms now with new ping scheduling
-    server->retry1= 0;
-    cleanup_qserver( server, 0);
-    bind_sockets();
-#endif
+					debug(1, "saved %d bytes (+)", data->datalen );
+				}
+			}
+		}
+		break;
+	}
+
+	debug(2, "%d servers total", server->n_servers/6);
 
-    return;
+	return 0;
 
 cleanup_out:
-    server->master_pkt_len = server->n_servers;
-    server->n_servers /= 6;
-    cleanup_qserver(server, 1);
-    return;
+	server->master_pkt_len = server->n_servers;
+	server->n_servers /= 6;
+	return DONE_FORCE;
 }
 
 static const char hexchar[] = "0123456789abcdef";
 
 static void bin2hex(const char* in, size_t len, char* out)
 {
-    char* o = out+len*2;
-    in += len;
-    do
-    {
-	*--o = hexchar[*--in&0x0F];
-	*--o = hexchar[(*in>>4)&0x0F];
-    } while(o != out);
+	char* o = out+len*2;
+	in += len;
+	do
+	{
+		*--o = hexchar[*--in&0x0F];
+		*--o = hexchar[(*in>>4)&0x0F];
+	} while(o != out);
 }
 
-// vim: sw=4 ts=8 noet
+// vim: sw=4 ts=4 noet
diff -urP qstat-2.11/ut2004.h qstat-2.11-20080912svn311/ut2004.h
--- qstat-2.11/ut2004.h	2004-10-17 16:41:53.000000000 -0400
+++ qstat-2.11-20080912svn311/ut2004.h	2008-09-12 14:52:23.000000000 -0400
@@ -12,7 +12,7 @@
 
 #include "qstat.h"
 
-void send_ut2004master_request_packet(struct qserver *server);
-void deal_with_ut2004master_packet(struct qserver *server, char *rawpkt, int pktlen);
+int send_ut2004master_request_packet(struct qserver *server);
+int deal_with_ut2004master_packet(struct qserver *server, char *rawpkt, int pktlen);
 
 #endif
diff -urP qstat-2.11/wic.c qstat-2.11-20080912svn311/wic.c
--- qstat-2.11/wic.c	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/wic.c	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,184 @@
+/*
+ * qstat 2.8
+ * by Steve Jankowski
+ *
+ * World in Conflict Protocol
+ * Copyright 2007 Steven Hartland
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ *
+ */
+
+#include <sys/types.h>
+#ifndef _WIN32
+#include <sys/socket.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include "debug.h"
+#include "qstat.h"
+#include "packet_manip.h"
+
+
+int send_wic_request_packet( struct qserver *server )
+{
+	char buf[256];
+
+	int serverport = get_param_i_value( server, "port", 0 );
+	char *password = get_param_value( server, "password", "N/A" );
+	change_server_port( server, serverport, 1 );
+
+	if ( get_player_info )
+	{
+		server->flags |= TF_PLAYER_QUERY|TF_RULES_QUERY;
+		sprintf( buf, "%s\x0d\x0a/listsettings\x0d\x0a/listplayers\x0d\x0a/exit\x0d\x0a", password );
+		server->saved_data.pkt_index = 2;
+	}
+	else
+	{
+		server->flags |= TF_STATUS_QUERY;
+		sprintf( buf, "%s\x0d\x0a/listsettings\x0d\x0a/exit\x0d\x0a", password );
+		server->saved_data.pkt_index = 1;
+	}
+
+	return send_packet( server, buf, strlen( buf ) );
+}
+
+
+int deal_with_wic_packet( struct qserver *server, char *rawpkt, int pktlen )
+{
+	char *s, *end, *team = NULL;
+	int mode = server->n_servers, slot, score;
+	char name[256], role[256];
+
+	debug( 2, "processing n_requests %d, retry1 %d, n_retries %d, delta %d", server->n_requests, server->retry1, n_retries, time_delta( &packet_recv_time, &server->packet_time1 ) );
+
+	server->ping_total += time_delta( &packet_recv_time, &server->packet_time1 );
+	server->n_requests++;
+	gettimeofday( &server->packet_time1, NULL);
+
+	rawpkt[pktlen]= '\0';
+	end = &rawpkt[pktlen];
+
+	s = rawpkt;
+
+	while ( NULL != s )
+	{
+		int len = strlen( s );
+		*(s + len - 2) = '\0'; // strip off \x0D\x0A
+		debug( 2, "Line[%d]: %s", mode, s );
+
+		if ( 0 == mode )
+		{
+			// Settings
+			// TODO: make parse safe
+			if ( 0 == strncmp( s, "Settings: ", 9 ) )
+			{
+				// Server Rule
+				char *key = s + 10;
+				char *value = strchr( key, ' ' );
+				*value = '\0';
+				value++;
+				debug( 2, "key: '%s' = '%s'", key, value );
+				if ( 0 == strcmp( "myGameName", key ) )
+				{
+					server->server_name = strdup( value );
+				}
+				else if ( 0 == strcmp( "myMapFilename", key ) )
+				{
+					server->map_name = strdup( value );
+				}
+				else if ( 0 == strcmp( "myMaxPlayers", key ) )
+				{
+					server->max_players = atoi( value );
+				}
+				else if ( 0 == strcmp( "myCurrentNumberOfPlayers", key ) )
+				{
+					server->num_players = atoi( value);
+				}
+				else
+				{
+					add_rule( server, key, value, NO_FLAGS );
+				}
+			}
+			else if ( 0 == strcmp( "Listing players", s ) )
+			{
+				// end of rules request
+				server->saved_data.pkt_index--;
+				mode++;
+			}
+			else if ( 0 == strcmp( "Exit confirmed.", s ) )
+			{
+				server->n_servers = mode;
+				return DONE_FORCE;
+			}
+		}
+		else if ( 1 == mode )
+		{
+			// Player info
+			if ( 0 == strncmp( s, "Team: ", 6 ) )
+			{
+				team = s + 6;
+				debug( 2, "Team: %s", team );
+			}
+			else if ( 4 == sscanf( s, "Slot: %d Role: %s Score: %d Name: %255[^\x0d\x0a]", &slot, role, &score, name ) )
+			{
+				// Player info
+				struct player *player = add_player( server, server->n_player_info );
+				if ( NULL != player )
+				{
+					player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
+					player->name = strdup( name );
+					player->score = score;
+					player->team_name = team;
+					player->tribe_tag = strdup( role );
+					// Indicate if its a bot
+					player->type_flag = ( 0 == strcmp( name, "Computer: Balanced" ) ) ? 1 : 0;
+				}
+				debug( 2, "player %d, role %s, score %d, name %s", slot, role, score, name );
+			}
+			else if ( 3 == sscanf( s, "Slot: %d Role:  Score: %d Name: %255[^\x0d\x0a]", &slot, &score, name ) )
+			{
+				// Player info
+				struct player *player = add_player( server, server->n_player_info );
+				if ( NULL != player )
+				{
+					player->flags |= PLAYER_FLAG_DO_NOT_FREE_TEAM;
+					player->name = strdup( name );
+					player->score = score;
+					player->team_name = team;
+					// Indicate if its a bot
+					player->type_flag = ( 0 == strcmp( name, "Computer: Balanced" ) ) ? 1 : 0;
+				}
+				debug( 2, "player %d, score %d, name %s", slot, score, name );
+			}
+			else if ( 0 == strcmp( "Exit confirmed.", s ) )
+			{
+				server->n_servers = mode;
+				return DONE_FORCE;
+			}
+		}
+
+		s += len;
+		if ( s + 1 < end )
+		{
+			s++; // next line
+		}
+		else
+		{
+			s = NULL;
+		}
+	}
+
+	server->n_servers = mode;
+
+	if ( 0 == server->saved_data.pkt_index )
+	{
+		server->map_name = strdup( "N/A" );
+		return DONE_FORCE;
+	}
+
+	return INPROGRESS;
+}
diff -urP qstat-2.11/wic.h qstat-2.11-20080912svn311/wic.h
--- qstat-2.11/wic.h	1969-12-31 19:00:00.000000000 -0500
+++ qstat-2.11-20080912svn311/wic.h	2008-09-12 14:52:23.000000000 -0400
@@ -0,0 +1,20 @@
+/*
+ * qstat 2.8
+ * by Steve Jankowski
+ *
+ * World in Conflict Protocol
+ * Copyright 2007 Steven Hartland
+ *
+ * Licensed under the Artistic License, see LICENSE.txt for license terms
+ */
+#ifndef QSTAT_GPS_H
+#define QSTAT_GPS_H
+
+#include "qserver.h"
+
+// Packet processing methods
+int deal_with_wic_packet( struct qserver *server, char *pkt, int pktlen );
+int send_wic_request_packet( struct qserver *server );
+
+#endif
+