2006-03-15 13:08:08  Rev 7929   josef

	* Makefile.am:
	  - HACKING was no more


2006-03-14 13:53:58  Rev 7911   josef

	* autogen.sh:
	  - more synchronisation of common files (must be a boring day...)


2006-03-14 13:50:41  Rev 7910   josef

	* ggzdmod/ggzdmod.h:
	  - library interface version bump


2006-03-14 13:47:11  Rev 7905   josef

	* NEWS README.GGZ AUTHORS:
	  - sync all common files from libggz (README.GGZ, AUTHORS)
	  - updated NEWS file for the upcoming 0.0.13 release


2006-03-14 13:45:48  Rev 7903   josef

	* configure.ac:
	  - bump all package numbers to 0.0.13 already


2006-03-13 12:35:44  Rev 7901   josef

	* ggzd/net.c:
	  - xml-escape all outgoing strings which could be under user control


2006-03-13 12:34:50  Rev 7900   josef

	* ggzd/database/ggzdb_pgsql.c:
	  - quote all SQL statements properly
	  I was told that there is a dedicated function to do this but even 
	  this one
	  had some issues with some encodings. Therefore, right now our 
	  implementation
	  is UTF-8 safe (and ASCII-safe), and assumes all input to be in 
	  this format.


2006-03-07 09:56:51  Rev 7887   josef

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h ggzdmod/mod.h ggzdmod/ggzdmod-ggz.h:
	  - licence texts in sources clarified to be LGPL


2006-02-27 12:16:44  Rev 7879   josef

	* ggzd/players.c:
	  - adapt to new ggz_getpeername() API


2006-02-27 12:16:13  Rev 7878   josef

	* ggzd/client.c:
	  - remove all resolving code as libggz has it now


2006-02-13 07:05:51  Rev 7865   josef

	* doc TODO README:
	  - finally, purge old documentation directory
	  - overhauled README and TODO files


2006-02-13 07:04:51  Rev 7864   josef

	* ggzd/login.c:
	  - the long-awaited changes to handle login errors less ambiguous


2006-02-13 07:03:55  Rev 7863   josef

	* ggzd/ggzd.conf.in:
	  - improved documentation of the master config file


2006-02-13 07:03:28  Rev 7862   josef

	* ggzd/net.c:
	  - less redundant white-space please!


2006-02-13 07:02:50  Rev 7861   josef

	* ggzd/parse_opt.c ggzd/datatypes.h:
	  - in compile-time specs output, give some configuration info too
	  - read metaserver announcement settings from the master config file
	  - augment configuration structure with attribute to determine its 
	  validity


2006-02-13 07:01:08  Rev 7860   josef

	* ggzd/control.c:
	  - prepare for metaserver publishing support


2006-02-13 07:00:44  Rev 7859   josef

	* ggzd/client.c:
	  - clean up the recently introduces debug mess for ggz_getpeername()
	    [FIXME: but it still doesn't work as expected for IPv6!]
	  - always disconnect client after client thread ends its loop


2006-02-10 16:02:16  Rev 7856   josef

	* m4/database.m4:
	  - boilerplate support for libdb4.4 (not much has changed since 4.3 
	  it seems)


2006-02-08 17:29:43  Rev 7844   josef

	* HACKING TODO:
	  - remove old hacking file (as like in ggz-client-libs)
	  - overhaul the long-term TODO tasks


2006-01-23 10:37:14  Rev 7802   josef

	* ggzd/parse_opt.c ggzd/client.c ggzd/players.c ggzd/ggzd.conf.in:
	  - replacement of host-related functions with libggz functions
	  - removal of IP ban functionality
	    * never worked for IPv6
	    * is better handled in external tools, firewalls, forwarders etc.
	  There are still issues with it, but it's half-way through a code 
	  cleanup for
	  the relevant parts.


2006-01-14 05:29:03  Rev 7782   jdorje

	* m4/ggz.m4:
	  Fix AM_CONDITIONAL problem.


2006-01-11 07:00:16  Rev 7762   jdorje

	* m4/ggz.m4:
	  ggz-gtk support in ggz.m4.


2006-01-07 22:18:43  Rev 7749   jdorje

	* m4/c99.m4:
	  Updated c99 file.


2006-01-07 22:02:13  Rev 7748   jdorje

	* game_servers/dots/game.c game_servers/tictactoe/game.c 
	  game_servers/chess/game.c:
	  Compile fixes.


2006-01-07 21:46:54  Rev 7747   jdorje

	* configure.ac:
	  Bump version to 0.0.13pre.


2006-01-07 21:46:21  Rev 7746   jdorje

	* m4/database.m4:
	  Detect libdb3.3.


2006-01-02 16:53:31  Rev 7714   josef

	* ggzd/ggzduedit.c m4/database.m4 ggzd/err_func.h ggzd/perms.h 
	  ggzd/parse_opt.c man/ggzd.6 ggzd/control.c ggzd/err_func.c 
	  ggzd/ggzd.conf.in:
	  - always define the database type as string (e.g. "mysql") in 
	  configure script
	  - additional log types for the console (ggzd -F mode), for use 
	  with --log
	    (did the previous behaviour make any sense? IMO not)
	  - these log types are now read in as strings, like in ggzd.conf (i.
	  e. all,xml,tables)
	  - streamlining special filename usage: stdout and stderr are now 
	  possible for log/debug
	  - new command line option --specs to dump compile-time 
	  specifications
	  - ggzduedit: helpful display of perms bitmask meaning
	  - ggzduedit: display of aggregated roles, if applicable, e.g. 
	  [guest], [admin]
	  - ggzduedit: automatic usage of ggzd.conf database configuration
	    -> should now work out of the box!
	  - updated manpage and other small cosmetic fixes


2005-12-29 12:10:36  Rev 7708   josef

	* ggzd/ggzd.h:
	  - w0000t! I did indeed hit the limit of 35 game types...


2005-12-29 11:53:14  Rev 7705   josef

	* game_servers/connectx/game.h game_servers/tictactoe/main.c 
	  game_servers/tictactoe/net.c game_servers/tictactoe/tictactoe.dsc 
	  game_servers/tictactoe/game.c game_servers/connectx/game.c:
	  - some cosmetic fixes to TTT and ConnectX servers


2005-12-29 11:31:27  Rev 7690   josef

	* m4/ggz.m4 autogen.sh README.GGZ:
	  - synchronisation of all globally used files
	  - in the future, README.GGZ should be even more generic!


2005-12-13 00:35:51  Rev 7665   jdorje

	* ggzd/util.c:
	  Move make_path and mkdirectory into libggz, and rename as 
	  ggz_make_path.


2005-12-12 23:41:08  Rev 7663   jdorje

	* ggzd/players.c:
	  Fix compile warning.


2005-12-12 23:21:44  Rev 7661   jdorje

	* game_servers/chess/game.c:
	  Remove unnecessary cast.


2005-12-12 11:54:49  Rev 7660   josef

	* game_servers/krosswater/.cvsignore ggzd/.cvsignore 
	  game_servers/widelands/.cvsignore game_servers/tuxman/.cvsignore 
	  game_servers/hastings/.cvsignore game_servers/keepalive/ggzsh/.
	  cvsignore game_servers/.cvsignore game_servers/chinese-checkers/.
	  cvsignore game_servers/ggzcards/config/.cvsignore 
	  game_servers/geekgame/.cvsignore game_servers/ggzcards/common 
	  game_servers/ggzcards/common/.cvsignore game_servers/spades/.
	  cvsignore game_servers/hastings/maps/.cvsignore 
	  game_servers/muehle/qtserv/.cvsignore game_servers/ggzcards/.
	  cvsignore ggzd/database/.cvsignore game_servers/muehle/.cvsignore 
	  game_servers/chess/.cvsignore game_servers/connectx/.cvsignore 
	  game_servers/keepalive/.cvsignore game_servers/lapocha/.cvsignore 
	  game_servers/chess/libcgc doc/.cvsignore 
	  game_servers/krosswater/zoneserver/.cvsignore 
	  game_servers/keepalive/src/.cvsignore .cvsignore 
	  game_servers/ggzcards/client tests/.cvsignore 
	  game_servers/ggzcards/ai/.cvsignore game_servers/reversi/.
	  cvsignore game_servers/chess/libcgc/.cvsignore 
	  game_servers/ggzcards/games/.cvsignore 
	  game_servers/ggzcards/client/.cvsignore game_servers/dots/.
	  cvsignore man/.cvsignore game_servers/combat/.cvsignore ggzdmod/.
	  cvsignore ggzdmod++ game_servers/muehle/variants/.cvsignore 
	  game_servers/ggzcards/ai game_servers/ggzcards/games 
	  game_servers/krosswater/stackpath/.cvsignore game_servers/escape/.
	  cvsignore:
	  This week's XXL commit!
	  - removal of all .cvsignore files
	  - addition of *.a, *.os, ... to svn:ignore


2005-12-12 11:47:24  Rev 7658   josef

	* game_servers/tictactoe/ttt-ai.c game_servers/tictactoe/ttt-ai.h 
	  game_servers/tictactoe/Makefile.am game_servers/tictactoe/game.c 
	  game_servers/tictactoe/.cvsignore:
	  - include ttt-ai module so the source code gets even more modular


2005-11-07 10:39:49  Rev 7612   josef

	* ggzd/table.c ggzd/players.c:
	  3 bugfixes for ggzd:
	  - do not send pings if ping frequency is set to 0 (it did a ping 
	  flood before!)
	  - on table launch error, only send one failure event
	  - after table launch error, do not send table status/delete events,
	  otherwise
	    ggzcore complains about the "invalid table" and throws a 
	  protocol error


2005-09-27 23:37:04  Rev 7601   josef

	* configure.ac m4/ggz.m4:
	  - move prefix sanitiser into AC_GGZ_INIT
	  - remove all assumptions over prefix being NONE


2005-09-25 18:25:14  Rev 7593   josef

	* ChangeLog:
	  - big changelog update (2.3 MB... due to new formatting)


2005-09-25 13:20:08  Rev 7564   josef

	* ggzdmod/Doxyfile:
	  - doxygen version bump


2005-09-25 12:41:12  Rev 7561   josef

	* game_servers/tictactoe/tictactoe.dsc game_servers/dots/dots.dsc 
	  game_servers/widelands/widelands.dsc:
	  - version number bumps due to new features or significant changes


2005-09-25 11:27:46  Rev 7557   josef

	* ggzdmod/Makefile.am ggzdmod/ggzdmod.h:
	  - library version bump: one function added, otherwise binary 
	  compatible


2005-09-25 10:11:25  Rev 7551   josef

	* configure.ac:
	  - more version string changes in the build system


2005-09-25 09:54:30  Rev 7550   josef

	* NEWS README.GGZ README:
	  - version updates in common files
	  - news and release-specific changes


2005-09-23 21:54:25  Rev 7547   josef

	* COPYING:
	  - add copyright files for gnome-client and sdl-games to SVN
	  - update all copyright files with current version, including the 
	  new FSF address in Boston


2005-09-18 11:27:24  Rev 7535   josef

	* game_servers/hastings/game.c:
	  - the graphics field for each level must be copied too
	  I wonder how this worked before? The issue is that it generated a
	  ggz_write_string(NULL). Not sure what libggz should do in that case.


2005-09-15 18:00:53  Rev 7516   josef

	* configure.ac autogen.sh:
	  - synchronisation of all autogen.sh files
	  - quick fixes in configure.ac's (but they really need a cleanup 
	  also)


2005-08-27 08:45:46  Rev 7498   josef

	* ggzd/database/ggzdb.h ggzd/players.c:
	  - use larger buffer for photo
	  - actually fill in the player handle in order to look up the 
	  extended info
	  Not sure how this worked before... :)


2005-08-22 07:11:25  Rev 7496   josef

	* ggzdmod/Makefile.am:
	  - do not install ggzdmod-ggz.h anymore
	  - clean up the makefile from old libtool-related problems


2005-08-22 06:58:11  Rev 7494   josef

	* ggzdmod++/Makefile.am:
	  - version info is 0:0:0 as it's the first publicly installed version


2005-08-20 21:41:45  Rev 7464   josef

	* configure.ac:
	  - bump version to 0.0.12pre to not create *-0.0.11.tar.gz files
	  - remove the gtk-games override stuff


2005-08-20 13:09:29  Rev 7454   josef

	* ggzd/database/Makefile.am:
	  - uh - do not install the static db wrapper library of course
	  We might certainly switch to a plugin based system one day though.


2005-08-20 12:55:32  Rev 7453   josef

	* configure.ac:
	  - use /var/lib/ggzd for the db instead of /var/ggzd by default


2005-08-15 09:55:03  Rev 7433   josef

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/keepalive/keepalive.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/muehle/muehle.dsc game_servers/reversi/reversi.dsc 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/hastings/hastings.dsc game_servers/dots/dots.dsc:
	  - mass homepage update for all game servers


2005-08-15 09:49:23  Rev 7430   josef

	* ggzd/net.c:
	  - transmit peers_allowed status


2005-08-15 09:00:27  Rev 7424   josef

	* ggzd/database/ggzdb.h ggzd/database/ggzdb_mysql.c ggzd/net.c 
	  ggzd/database/ggzdb_pgsql.c ggzd/database/ggzdb_db2.c 
	  ggzd/database/ggzdb_db3.c ggzd/database/ggzdb_proto.h 
	  ggzd/database/ggzdb_db4.c ggzd/net.h ggzd/parse_opt.c ggzd/players.
	  c ggzd/database/ggzdb.c ggzd/database/ggzdb_sqlite.c 
	  ggzd/datatypes.h ggzd/players.h:
	  - ggzd side of playerinfo patch
	  - new database methods to get extended player info (only pgsql for 
	  now)
	  - new config file option AllowPeers to allow ggzd to reveal client 
	  IP address
	  - new protocol elements <INFO> and <PLAYERINFO>, which is a child 
	  of <INFO>


2005-08-14 11:59:36  Rev 7411   josef

	* game_servers/tictactoe/game.c:
	  - use bot classes: Alfred plays TTT without knowing about 'Holy 
	  Cow', whereas Tarantula
	  deals with this situation


2005-08-14 11:56:29  Rev 7410   josef

	* ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  - protocol change: read/write bot names
	  - API change: function to get bot class (hardcoded for TTT - how 
	  do we know the game name?)


2005-08-14 11:55:16  Rev 7409   josef

	* ggzd/table.c:
	  - ggzdmod protocol change: transmit names for bots too


2005-08-14 10:20:27  Rev 7408   josef

	* ggzd/net.c:
	  - another sucker which assumed that bots have no name


2005-08-14 10:16:49  Rev 7407   josef

	* ggzd/net.c ggzdmod/ggzdmod.c ggzd/stats.c:
	  - enable named bots (untested, as I don't have a stats db here)


2005-08-14 07:43:34  Rev 7404   josef

	* ggzd/parse_opt.c:
	  - register named bots on startup (disregarding their class because 
	  somehow I forgot about a
	  concept on how to store it... maybe the database could be extended,
	  or ggzdmod would read
	  out the .dsc files again, which would be bad)


2005-08-13 22:24:02  Rev 7402   josef

	* ggzd/net.c game_servers/tictactoe/tictactoe.dsc ggzd/parse_opt.c 
	  ggzd/datatypes.h:
	  - cross-module change: named bots (server->client part)
	  - implemented parsing [NamedBots] sections from game .dsc file
	  - those values are transmitted to the client
	  - ggzcore parses it and puts it into its gametype info
	  - ggzcore++ has accessors to them
	  - kggz can read the entries and display them in the launch dialog


2005-08-13 17:39:23  Rev 7386   josef

	* game_servers/dots/game.c:
	  - recognise tie games (instead of honouring player 3!)
	  - log the direction of the move also, to make them unambiguous
	  - when a game is over, log no more
	  The last item is fishy. Dots actually executes the moves in the 
	  reverse
	  order of their logical order, so that a game replay will look like 
	  the
	  AI cheated. For now, we can work around this issue.


2005-08-13 16:07:12  Rev 7385   josef

	* ggzdmod++/Makefile.am ggzdmod++/ggzgameserver.cpp ggzdmod++/mnet.h 
	  ggzdmod++/net.h ggzdmod++/ggzgameserver.h:
	  - lots of documentation for all public and protected methods
	    (however most of the advanced ggzdmod functions are not yet 
	  wrapped)
	  - throw out conditional spectator support, it's 2005 after all...
	  - link against libggz as per policy (it gets used directly in this 
	  library)


2005-08-13 14:53:26  Rev 7384   josef

	* game_servers/geekgame/main.cpp:
	  - geekgame doesn't need async support (only realtime games like 
	  widelands do)


2005-08-13 14:49:44  Rev 7383   josef

	* game_servers/widelands/lib game_servers/tuxman/lib 
	  game_servers/muehle/ggz:
	  - now, remove those old c++ libraries completely


2005-08-13 14:48:54  Rev 7382   josef

	* configure.ac game_servers/widelands/Makefile.am 
	  game_servers/muehle/main.cpp game_servers/tuxman/Makefile.am 
	  game_servers/muehle/Makefile.am ggzdmod++/Makefile.am 
	  game_servers/geekgame/Makefile.am:
	  - now, deprecate the old spread c++ libraries, and link against 
	  ggzdmod++


2005-08-13 14:23:32  Rev 7381   josef

	* configure.ac ggzdmod++/mnet.cpp m4/ggz.m4 ggzdmod++/net.cpp 
	  Makefile.am ggzdmod++/Makefile.am ggzdmod++/ggzgameserver.cpp 
	  ggzdmod++/mnet.h ggzdmod++/net.h ggzdmod++/README.ggzdmod++ 
	  ggzdmod++/ggzgameserver.h ggzdmod++:
	  - new library: ggzdmod++ (not yet versioned or commented)
	    -> includes Net/MNet classes from kamikaze
	    -> includes GGZGameServer class from widelands/muehle/tuxman 
	  servers
	  - synchronise common m4 file


2005-08-06 08:32:26  Rev 7367   josef

	* m4/ggz.m4:
	  - global m4 file synchronisation (now that is fun with subversion)
	  - also a test for the changed commit script which crops at 20 kB 
	  diff size


2005-07-18 08:27:31  Rev 7326   josef

	* game_servers/widelands/widelands_server.cpp:
	  - untested support for IPv4 based on address family obtained by 
	  getbeername()
	  - this should really become char* ggz_peername(int s)


2005-07-18 08:18:45  Rev 7325   josef

	* game_servers/widelands/widelands_server.cpp:
	  - enable peer address lookup in IPv6 notation
	  - this might break IPv4 (why oh why isn't there a single interface)


2005-06-18 13:42:21  Rev 7289   josef

	* ggzd/database/ggzdb_mysql.c configure.ac m4/database.m4 
	  ggzd/database/Makefile.am ggzd/database/ggzdb_sqlite.c:
	  - support for SQLite databases


2005-06-18 07:18:33  Rev 7283   josef

	* ggzdmod/ggzdmod.c:
	  - use GGZSOCKET and GGZMODE also (but note: the fd is still always 
	  3)


2005-06-10 15:20:37  Rev 7276   josef

	* ggzd/control.c:
	  - when started in foreground, output a dull start message


2005-06-10 12:28:19  Rev 7268   josef

	* ggzdmod/io.c game_servers/dots/game.c ggzd/client.c 
	  game_servers/hastings/game.c game_servers/combat/combat.c 
	  ggzd/database/ggzdb.c game_servers/chinese-checkers/game.c 
	  game_servers/ggzcards/ai/spades.c game_servers/combat/game.c:
	  - GCC4 fixes
	  In hastings I actually discovered a bug due to gcc4's strict 
	  checking of
	  probably uninitialised variables. In the other cases, a bug may 
	  now be
	  hidden.


2005-05-29 17:35:15  Rev 7263   josef

	* game_servers/dots/game.c:
	  - basic savegame support for the connects the dots game
	  The missing parts are:
	  * when playing another game, no new join messages are sent
	  * somehow even after winning a game, there are moves registered
	  * maybe the savegame should hint at which fields are owned so the 
	  savegame reading application doesn't have to do this


2005-05-21 11:48:51  Rev 7227   josef

	* game_servers/chess/chess.dsc game_servers/tictactoe/tictactoe.dsc:
	  - version bump (savegame support)


2005-05-21 11:25:14  Rev 7220   josef

	* man/ggzduedit.6 man/ggzd.6 man/ggzdmod.h.3:
	  - manpage updates for the GGZ server


2005-05-21 11:16:53  Rev 7217   josef

	* ggzdmod/Doxyfile:
	  - doxygen file update


2005-05-21 11:13:11  Rev 7216   josef

	* NEWS README.GGZ AUTHORS README:
	  - common files synchronisation and README update for 0.0.11


2005-05-21 10:46:02  Rev 7214   josef

	* configure.ac:
	  - LET version = 0.0.11


2005-05-21 10:24:40  Rev 7208   josef

	* ggzdmod/Makefile.am ggzdmod/ggzdmod.h:
	  - bump interface version to 4:0:0 (new savegame function etc.)


2005-05-16 21:44:24  Rev 7198   josef

	* game_servers/tictactoe/game.c:
	  - return 0 (it's not checked anyway)


2005-05-16 21:11:37  Rev 7191   josef

	* configure.ac ggzd/err_func.h ggzd/parse_opt.c ggzd/control.c 
	  ggzd/parse_opt.h ggzd/err_func.c:
	  - replace popt with getopt for the command line option parsing


2005-05-16 21:10:29  Rev 7190   josef

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - fix homepages to point to current location


2005-05-06 21:19:56  Rev 7182   josef

	* m4/ggz.m4:
	  - synchronization of ggz.m4 files
	  - fixes typo: use ggzdconfdir instead of ggzconfdir
	  - fixes compiler problems: use -isystem X instead of -isystemX
	  - fixes ggzcore linkage force in ggzmod problem


2005-04-24 06:38:07  Rev 7148   josef

	* game_servers/tictactoe/net.c game_servers/tictactoe/net.h:
	  - add missing autogenerated network files


2005-04-23 11:31:46  Rev 7123   josef

	* ggzd/net.c ggzd/login.c ggzd/login.h:
	  - protocol enhancement:
	   * allow users to give initial password when registering
	   * allow users to give email address


2005-04-21 18:00:51  Rev 7119   josef

	* game_servers/tictactoe/main.c game_servers/tictactoe/Makefile.am 
	  game_servers/tictactoe/game.c:
	  - first try with auto-generated network code (from the XML spec 
	  with ggzcomm)
	  - includes some manual modifications which must yet be included 
	  into ggzcomm


2005-04-21 17:18:08  Rev 7117   josef

	* ggzd/table.c:
	  - log game messages as GGZ_DBG_GAME_MSG


2005-04-15 18:31:59  Rev 7108   jdorje

	* game_servers/ggzcards/common.c:
	  Trivial style cleanup.


2005-04-15 17:54:31  Rev 7107   jdorje

	* game_servers/spades/engine_func.c ggzd/net.c ggzd/table.c 
	  tests/logmod.c tests/basic.c ggzdmod/ggzdmod.c ggzd/stats.c 
	  game_servers/escape/game.c game_servers/chinese-checkers/game.c 
	  game_servers/chess/game.c game_servers/combat/game.c ggzdmod/io.c 
	  game_servers/dots/game.c game_servers/tictactoe/game.c 
	  game_servers/reversi/game.c game_servers/hastings/game.c 
	  game_servers/connectx/game.c game_servers/ggzcards/common.c 
	  ggzd/transit.c:
	  Preliminary abandoned-seats patch.
	  In principle when a player leaves a running game, his seat becomes
	  abandoned.  He may later rejoin and reclaim his seat, or after a 
	  while
	  he may be given a forfeit.  For the most part this should be 
	  controlled
	  by the game or by ggzd according to the game's options.
	  This patch introduces the preliminary changes for this.  A new 
	  seat type
	  GGZ_SEAT_ABANDONED is added, and basic changes are made to support 
	  it.
	  What is missing is ggzd and ggzdmod support for toggling between 
	  player,
	  abandoned, and open seats.  There's also no forfeit mechanism yet 
	  (although
	  the game may do this by hand if desired).
	  This patch came from the playground; see patches/abandoned.diff 
	  for its
	  history.


2005-04-08 14:10:51  Rev 7091   josef

	* ggzd/database/ggzdb_pgsql.c:
	  - automatic reconnection to database if SQL server has been 
	  restarted
	  - convert err_sys() to err_msg() since none of the error messages 
	  concern errno


2005-04-08 12:51:50  Rev 7085   josef

	* ggzd/net.c ggzd/parse_opt.c ggzd/datatypes.h ggzd/ggzd.conf.in:
	  - Support for additional web MOTD


2005-04-03 15:11:41  Rev 7077   josef

	* game_servers/chess/game.c:
	  - write out simple PGN savegames
	  Technically, this is still incorrect as libcgc doesn't keep track 
	  of the
	  piece type in its move list.


2005-04-02 19:12:30  Rev 7075   josef

	* ggzd/database/ggzdb_pgsql.c:
	  - commit old and forgotten lowercase playername fixes


2005-04-02 11:54:40  Rev 7072   josef

	* ggzd/database/ggzdb_pgsql.c m4/database.m4:
	  - on systems where the pgsql headers are in /usr/include/pgsql, 
	  find it there


2005-03-28 22:12:58  Rev 7069   josef

	* ggzd/database/ggzdb_db4.c:
	  - drop DB4_IN_DIR for db_create() since the code was already 
	  identical anyway


2005-03-28 22:06:40  Rev 7068   josef

	* m4/database.m4:
	  - check db.h first and dbX/db.h second (seems to solve gentoo 
	  problem)


2005-03-28 19:30:35  Rev 7067   josef

	* ggzd/database/ggzdb_mysql.c ggzd/table.c ggzd/database/ggzdb_db2.c 
	  ggzd/database/ggzdb_db3.c ggzd/database/ggzdb_proto.h 
	  ggzd/database/ggzdb_db4.c ggzdmod/ggzdmod.c ggzd/table.h 
	  ggzd/stats.c ggzdmod/ggzdmod.h ggzd/database/ggzdb.c ggzd/stats.h 
	  ggzdmod/protocol.h ggzd/database/ggzdb.h ggzd/database/ggzdb_pgsql.
	  c ggzdmod/io.c ggzdmod/io.h game_servers/tictactoe/game.c 
	  ggzdmod/mod.h:
	  - first implementation of ggzdmod-supported savegames


2005-03-19 13:25:19  Rev 7024   josef

	* game_servers/chess/game.c:
	  - started support for PGN savegames
	  This cannot be tested yet because chess doesn't want to start :(


2005-03-18 15:34:52  Rev 7016   josef

	* game_servers/tictactoe/game.c:
	  - new feature: keep savegame in game server's directory


2005-03-18 10:18:45  Rev 7009   josef

	* ggzd/ggzd.motd:
	  - slight layout change in default MOTD


2005-03-04 01:13:04  Rev 6960   josef

	* configure.ac m4/database.m4 ggzdmod/Makefile.am 
	  ggzd/database/Makefile.am Makefile.am 
	  game_servers/krosswater/zoneserver/Makefile.am:
	  - replace all autoconf substitutions with automake variables
	  This has 2 effects:
	  - when using conditionals, AM_CONDITIONAL should be used
	  - otherwise, it's more or less the same
	  - in the case of SUBDIRS, we keep it at $(COMPILE_SUBDIRS) for
	  now but it could be done using AM_CONDITIONAL as well because
	  this automatically creates a DIST_* target


2005-03-04 00:18:42  Rev 6959   josef

	* game_servers/dots/Makefile.am 
	  game_servers/ggzcards/config/Makefile.am 
	  game_servers/widelands/Makefile.am game_servers/tuxman/Makefile.am 
	  game_servers/tictactoe/Makefile.am game_servers/reversi/Makefile.
	  am game_servers/muehle/Makefile.am game_servers/hastings/Makefile.
	  am tests/Makefile.am game_servers/ggzcards/client/Makefile.am 
	  man/Makefile.am game_servers/keepalive/src/Makefile.am 
	  game_servers/Makefile.am game_servers/ggzcards/Makefile.am 
	  game_servers/chess/Makefile.am game_servers/combat/Makefile.am 
	  game_servers/muehle/variants/Makefile.am ggzd/Makefile.am 
	  ggzdmod/Makefile.am m4/test.mk Makefile.am 
	  game_servers/spades/Makefile.am 
	  game_servers/widelands/lib/Makefile.am 
	  game_servers/connectx/Makefile.am game_servers/tuxman/lib/Makefile.
	  am game_servers/ggzcards/common/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/escape/Makefile.am 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/muehle/qtserv/Makefile.am 
	  game_servers/krosswater/Makefile.am 
	  game_servers/keepalive/Makefile.am game_servers/geekgame/Makefile.
	  am game_servers/muehle/ggz/Makefile.am:
	  - move 'make test' target into a separate test.mk file
	  - this cleans up all makefile.am's
	  Actions like 'make test' or 'make messages', which require
	  more complex operations, should probably always go to *.mk
	  files which are simply included.
	  In the case of 'make test', this even works for srcdir !=
	  destdir now.


2005-02-04 15:59:43  Rev 6918   josef

	* m4/ggz.m4:
	  - synchronize


2005-01-30 08:48:10  Rev 6910   jdorje

	* configure.ac m4/c99.m4 Makefile.am:
	  Check for c99 initializers.


2005-01-26 03:24:27  Rev 6906   jdorje

	* ggzd/table.c ggzd/motd.c:
	  Change to C99 initializers.


2005-01-26 03:00:49  Rev 6905   jdorje

	* ggzd/net.c ggzd/table.c:
	  Switch to C99 initializers.


2005-01-25 09:04:11  Rev 6900   jdorje

	* game_servers/combat/combat.c game_servers/combat/game.c:
	  Avoid memory leaks.


2005-01-25 08:59:25  Rev 6899   jdorje

	* game_servers/combat/combat.h game_servers/combat/game.h 
	  game_servers/combat/main.c game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  Run indent (previous formatting was just too inconsistent to be 
	  usable).


2005-01-25 08:56:44  Rev 6898   jdorje

	* game_servers/chess/game.c:
	  Avoid memory leak.


2005-01-25 08:47:18  Rev 6897   jdorje

	* game_servers/reversi/game.c:
	  Don't log move until after we read it.


2005-01-25 08:34:57  Rev 6896   jdorje

	* ggzdmod/io.c:
	  Fix garbage pointer bug.


2005-01-25 08:32:11  Rev 6895   jdorje

	* ggzdmod/ggzdmod.c:
	  Add FIXME comment.


2005-01-25 04:31:44  Rev 6893   jdorje

	* ggzdmod/io.c game_servers/keepalive/src/keepalive.cpp tests/basic.
	  c ggzdmod/ggzdmod.c ggzdmod/io.h ggzdmod/ggzdmod.h:
	  Make some ggzmod values const.


2005-01-25 04:09:21  Rev 6892   jdorje

	* game_servers/ggzcards/common.h 
	  game_servers/keepalive/src/keepalive.h game_servers/escape/game.c 
	  game_servers/muehle/ggz/ggzgameserver.cpp game_servers/chess/game.
	  c game_servers/combat/game.c game_servers/escape/game.h 
	  game_servers/chess/game.h game_servers/combat/game.h 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.h 
	  game_servers/hastings/game.c game_servers/connectx/game.c 
	  game_servers/widelands/lib/ggzgameserver.h 
	  game_servers/hastings/game.h game_servers/tuxman/lib/ggzgameserver.
	  h game_servers/connectx/game.h ggzd/table.c tests/basic.c 
	  game_servers/keepalive/src/keepalive.cpp ggzd/stats.c 
	  ggzdmod/ggzdmod.h tests/ggzdtest.c 
	  game_servers/chinese-checkers/game.c ggzd/stats.h 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/chinese-checkers/game.h game_servers/dots/game.c 
	  game_servers/muehle/ggz/ggzgameserver.h game_servers/dots/game.h 
	  game_servers/reversi/game.c game_servers/tictactoe/game.c 
	  game_servers/widelands/lib/ggzgameserver.cpp 
	  game_servers/tuxman/lib/ggzgameserver.cpp 
	  game_servers/ggzcards/common.c game_servers/reversi/game.h:
	  Change ggzdmod event handler functions to take a const data 
	  parameter.


2005-01-25 01:29:38  Rev 6890   jdorje

	* ggzdmod/ggzdmod.c:
	  Use C99 initializers, not gcc initializers.


2005-01-25 01:24:10  Rev 6889   jdorje

	* ggzdmod/ggzdmod.c:
	  Improvements to ggzdmod_report_game.


2005-01-24 20:15:57  Rev 6885   jdorje

	* ggzdmod/ggzdmod.c:
	  Remove default clauses of switch statements.


2005-01-24 01:39:48  Rev 6866   jdorje

	* m4/ggz.m4:
	  Change the way channels are created at the client side.  The GGZ 
	  client
	  does not create the channel.  Instead the channel connection data 
	  is sent
	  to the game which makes the connection itself.  This means ggzmod 
	  needs
	  to call the channel-creation function from within ggzcore, adding 
	  a new
	  library dependency.  This is solved by linking ggzcore in along with
	  ggzmod inside AC_GGZ_GGZMOD.


2005-01-23 23:28:03  Rev 6865   jdorje

	* ggzd/net.c:
	  Add an XML header.


2005-01-23 22:13:03  Rev 6859   jdorje

	* ggzd/login.c:
	  Set is_room_update_needed and initialize next_room_update_time 
	  when the
	  player logs in.


2005-01-23 21:43:37  Rev 6857   jdorje

	* ggzd/parse_opt.c ggzd/ggzd.conf.in:
	  - Add a dummy RoomUpdateFrequency entry into the conf file.
	  - Rename LagFrequency in the code as PingFrequency (to match the 
	  dummy
	    entry in the conf file).


2005-01-23 21:23:07  Rev 6856   josef

	* AUTHORS ChangeLog:
	  - authors and changelog


2005-01-23 13:20:29  Rev 6844   josef

	* NEWS:
	  - news update


2005-01-23 13:12:48  Rev 6843   josef

	* README.GGZ:
	  - updated common files


2005-01-23 12:00:38  Rev 6839   josef

	* game_servers/widelands/Makefile.am:
	  - include protocol.h into header list
	  This is was funny bug hunt: during make distcheck, the header file 
	  from
	  ggzmod was included, so it didn't really complain...


2005-01-23 10:46:57  Rev 6833   jdorje

	* man/ggzdmod.h.3:
	  Rerun doxygen.


2005-01-23 10:39:33  Rev 6832   jdorje

	* ggzdmod/ggzdmod.h:
	  Improve documentation for join/leave/seat events.  Label join and 
	  leave
	  events as deprecated.


2005-01-22 19:22:53  Rev 6824   jdorje

	* m4/ggz.m4:
	  Search for .la files instead of .so.


2005-01-22 16:29:11  Rev 6822   josef

	* man/ggzdmod.h.3:
	  - updated doxygen-generated manpage


2005-01-22 16:27:20  Rev 6821   josef

	* ggzdmod/ggzdmod.h:
	  - version update (but nothing else changed)


2005-01-22 16:26:35  Rev 6820   josef

	* ggzdmod/Doxyfile:
	  - doxy updates


2005-01-22 15:38:16  Rev 6813   josef

	* man/ggzduedit.6 man/ggzd.6:
	  - updated version numbers


2005-01-22 15:28:57  Rev 6812   josef

	* configure.ac:
	  - version number bump


2005-01-22 10:56:00  Rev 6802   josef

	* game_servers/widelands/widelands_server.cpp 
	  game_servers/widelands/widelands.dsc:
	  - allow up to 8 players


2005-01-21 21:47:32  Rev 6792   jdorje

	* game_servers/chess/ai.c:
	  Fix a compiler warning.


2005-01-20 23:44:14  Rev 6776   josef

	* game_servers/chess/ai.c:
	  - disable rule exception: force pawns to capture if possible


2005-01-20 23:06:34  Rev 6775   josef

	* game_servers/chess/game.c:
	  - support for AI player in seat 0 (= white) (= starting player)


2005-01-20 19:09:45  Rev 6773   josef

	* game_servers/krosswater/krosswater.dsc 
	  game_servers/krosswater/krosswater_server.cpp:
	  - support win-loss statistics


2005-01-20 02:09:09  Rev 6754   jdorje

	* game_servers/tictactoe/tictactoe.room:
	  Correctly rename TicTacToe as Tic-Tac-Toe.


2005-01-20 02:05:29  Rev 6753   jdorje

	* game_servers/ggzcards/config/ggzcards-bridge.room 
	  game_servers/ggzcards/config/ggzcards-fortytwo.room 
	  game_servers/ggzcards/config/ggzcards-whist.room 
	  game_servers/ggzcards/config/ggzcards-spades.room 
	  game_servers/ggzcards/config/ggzcards-sueca.room 
	  game_servers/ggzcards/config/ggzcards-hearts.room 
	  game_servers/ggzcards/config/ggzcards-lapocha.room 
	  game_servers/ggzcards/config/ggzcards-suaro.room:
	  Rename the rooms to match the game, not the implementation.  See 
	  bug #26.


2005-01-20 00:29:18  Rev 6749   jdorje

	* game_servers/chess/game.h game_servers/chess/ai.c 
	  game_servers/chess/game.c:
	  Replace printf with ggz_debug.


2005-01-20 00:23:37  Rev 6748   jdorje

	* game_servers/chess/chess.h game_servers/chess/main.c 
	  game_servers/chess/game.c:
	  Fix another type-conversion bug with the clock_type enumeration.


2005-01-19 23:53:16  Rev 6747   jdorje

	* game_servers/chess/game.c:
	  Fix a type-conversion bug with the clock_type enumeration.


2005-01-19 23:15:12  Rev 6746   jdorje

	* game_servers/chess/game.c:
	  Rename game_stop_chronometer as game_restart_chronometer.  Add a new
	  function game_read_chronometer.


2005-01-19 23:14:33  Rev 6745   jdorje

	* game_servers/chess/chess.h:
	  Change the clock type to an enumeration.


2005-01-19 22:07:16  Rev 6743   jdorje

	* game_servers/chess/game.c:
	  Rename cronometer as chronometer.


2005-01-19 22:02:44  Rev 6742   jdorje

	* game_servers/chess/game.h game_servers/chess/game.c:
	  Make some functions static.


2005-01-18 18:23:46  Rev 6729   jdorje

	* ggzd/net.c ggzd/table.c ggzd/net.h ggzd/room.c ggzd/players.c:
	  Add room_id parameters to some net functions.


2005-01-16 19:08:23  Rev 6714   josef

	* doc/C:
	  - remove those two suckers as well


2005-01-16 19:07:21  Rev 6713   josef

	* doc/C/design/client-server.sgml doc/C/design/requirements.sgml 
	  doc/C/design/overview.sgml doc/C/design/ggz.dsl 
	  doc/C/design/Makefile.am doc/C/design/appendix.sgml 
	  doc/C/design/design.sgml doc/C/design/images/server_arch.fig 
	  doc/C/design/.cvsignore doc/C/Makefile.am:
	  - remove design specification from ggzd because it has long moved 
	  to docs
	    (and I thought it wasn't here anymore)


2005-01-16 07:20:57  Rev 6697   jdorje

	* configure.ac ggzd/Makefile.am ggzd/strsep.c:
	  strsep portability fixes.


2005-01-15 18:19:49  Rev 6685   josef

	* m4/database.m4:
	  - always prepend -L/usr/lib/mysql when using MySQL, because fedora 
	  needs it


2005-01-14 21:48:31  Rev 6677   josef

	* ggzd/database/ggzdb_mysql.c:
	  - dummy implementation of stats functions
	    (stats not yet implemented for MySQL backend)


2005-01-14 07:01:43  Rev 6675   jdorje

	* m4/iconv.m4 m4/ggz.m4 Makefile.am:
	  Add support for libintl and libiconv to AC_GGZ_INTL.  This is 
	  needed to
	  compile at all on non-glibc systems.


2005-01-14 03:21:09  Rev 6665   jdorje

	* game_servers/ggzcards/client/client.c:
	  Update client.c from gtk-games code.


2005-01-14 02:42:11  Rev 6658   jdorje

	* configure.ac game_servers/chess/libcgc/board.h:
	  Portability fixes for chess.


2005-01-13 02:23:59  Rev 6643   jdorje

	* m4/ggz.m4:
	  Fix a typo in checking for libintl.h and locale.h.


2005-01-13 01:45:15  Rev 6641   jdorje

	* m4/ggz.m4:
	  Define ENABLE_NLS if NLS is present.  This is standard, even 
	  though it's
	  not helpful for most packages since NLS is manditory.


2005-01-11 17:36:35  Rev 6638   jdorje

	* m4/ggz.m4:
	  Make AC_GGZ_INTL fail if the gettext functions are not available.  
	  It also
	  checks for the header files but doesn't fail if they're not present.


2005-01-05 21:40:31  Rev 6591   josef

	* game_servers/widelands/widelands_server.cpp:
	  - broadcast peer address instead of the one supplied by the game 
	  host
	    (we don't trust noone)


2005-01-05 18:00:09  Rev 6588   josef

	* configure.ac game_servers/Makefile.am:
	  - addition of widelands server


2005-01-05 17:59:16  Rev 6587   josef

	* game_servers/widelands/lib game_servers/widelands/Makefile.am 
	  game_servers/widelands/.cvsignore game_servers/widelands/lib/net.
	  cpp game_servers/widelands/lib/Makefile.am 
	  game_servers/widelands/widelands_server.cpp 
	  game_servers/widelands/lib/net.h game_servers/widelands/widelands.
	  dsc game_servers/widelands/lib/.cvsignore 
	  game_servers/widelands/widelands.room 
	  game_servers/widelands/widelands_server.h 
	  game_servers/widelands/protocol.h 
	  game_servers/widelands/lib/ggzgameserver.cpp 
	  game_servers/widelands game_servers/widelands/lib/ggzgameserver.h 
	  game_servers/widelands/main.cpp:
	  - move widelands server to GGZ CVS
	  - use copy of GGZGameServer class (we need to create a 'lib' 
	  directory)


2005-01-02 13:25:20  Rev 6584   josef

	* configure.ac m4/database.m4 ggzd/Makefile.am:
	  - move database M4 macros into own file
	  - support for DB 4.3
	  - introduce $(LIB_DATABASE) in order to deprecate ggzd_LIBS


2005-01-02 11:29:36  Rev 6581   josef

	* ggzd/database/ggzdb_pgsql.c:
	  - remove all entries from statistics db upon player registration
	  Ideally a player_remove() function would exist but then there 
	  isn't really
	  a concept for player removal (registered or otherwise).


2005-01-02 11:26:32  Rev 6580   josef

	* ggzd/stats.c:
	  - improved implementation of statistics policies
	  - the values for bot_stats and guest_stats are hardcoded but might 
	  be
	    read from .dsc/.room files later on


2004-12-22 09:31:41  Rev 6553   josef

	* game_servers/chess/ai.c:
	  - synchronization of pawn fix


2004-12-17 17:06:35  Rev 6511   josef

	* ggzd/stats.c:
	  - set initial ranking to zero


2004-12-11 21:14:29  Rev 6448   jdorje

	* ggzd/room.c:
	  Remove the server message telling the number of players on the 
	  server.
	  Clients should use the ggzcore interface to find this information 
	  now.


2004-11-17 22:02:24  Rev 6416   jdorje

	* ggzd/login.c ggzd/parse_opt.c ggzd/room.c ggzd/util.c ggzd/client.
	  c ggzd/players.c ggzd/util.h ggzd/datatypes.h ggzd/players.h:
	  - Store all time values as ggztime_t (double) values.
	  - When callling select(), if a ping is in progress check how long we
	    have to wait before bumping the lag class.


2004-11-17 20:56:57  Rev 6412   jdorje

	* ggzd/client.c ggzd/util.h:
	  Fix a bug where MAX was used instead of MIN to find the amount of 
	  time
	  to wait in the select loop.


2004-11-17 14:22:41  Rev 6407   josef

	* ggzd/client.c:
	  - do not select() for a negative number of seconds
	  This is related to the laptop sleep problem.
	  Maybe it should be fixed elsewhere but it works here too.
	  After setting the value (which is negative) to zero, all following
	  operations work again, so it recalibrates itself.


2004-11-17 12:48:05  Rev 6405   josef

	* ggzd/database/ggzdb.h ggzd/database/ggzdb_pgsql.c ggzd/stats.c:
	  - track all games
	  - append player type to 'matchplayers' table


2004-11-09 14:18:56  Rev 6312   josef

	* game_servers/chess/ai.h game_servers/chess/ai.c 
	  game_servers/chess/game.c:
	  - synchronize chess AI with grubby


2004-11-04 23:23:22  Rev 6259   josef

	* configure.ac ggzd/Makefile.am ggzd/database/ggzdb_db4.c 
	  ggzd/parse_opt.c ggzd/control.c ggzd/datatypes.h ggzd/ggzd.conf.in:
	  - zeroconf implementation for the server side (publishing a _ggz.
	  _tcp entry)


2004-11-04 23:00:59  Rev 6258   jdorje

	* game_servers/dots/Makefile.am game_servers/tuxman/Makefile.am 
	  ggzd/database/Makefile.am game_servers/tictactoe/Makefile.am 
	  game_servers/reversi/Makefile.am game_servers/muehle/Makefile.am 
	  tests/Makefile.am game_servers/hastings/Makefile.am 
	  game_servers/ggzcards/client/Makefile.am 
	  game_servers/keepalive/src/Makefile.am 
	  game_servers/ggzcards/Makefile.am game_servers/chess/Makefile.am 
	  game_servers/combat/Makefile.am ggzd/Makefile.am ggzdmod/Makefile.
	  am game_servers/spades/Makefile.am game_servers/connectx/Makefile.
	  am game_servers/tuxman/lib/Makefile.am 
	  game_servers/keepalive/ggzsh/Makefile.am 
	  game_servers/ggzcards/common/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/escape/Makefile.am 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/krosswater/Makefile.am game_servers/geekgame/Makefile.
	  am game_servers/krosswater/zoneserver/Makefile.am 
	  game_servers/muehle/ggz/Makefile.am:
	  Change INCLUDES to AM_CPPFLAGS.


2004-10-29 04:06:39  Rev 6232   jdorje

	* game_servers/lapocha/Makefile.am configure.ac 
	  game_servers/lapocha/game.c game_servers/lapocha/cards.c 
	  game_servers/lapocha/game.h game_servers/lapocha/lapocha.dsc 
	  game_servers/Makefile.am game_servers/lapocha/cards.h 
	  game_servers/lapocha/lapocha.room game_servers/lapocha/main.c:
	  Remove the La Pocha server.  It is obsoleted by GGZCards-LaPocha.


2004-10-16 15:59:57  Rev 6193   josef

	* game_servers/hastings/game.c game_servers/hastings/game.h:
	  - support map format 0.0.9


2004-10-16 15:52:22  Rev 6192   josef

	* game_servers/hastings/maps/Makefile.am 
	  game_servers/hastings/maps/coast 
	  game_servers/hastings/maps/battle_of_hastings 
	  game_servers/hastings/maps/yorkshire:
	  - update maps to format 0.0.9
	  - add new map: Harold's return


2004-08-23 19:49:58  Rev 6168   jdorje

	* ggzd/err_func.c:
	  Remove the locking in log_update_set_interval.
	  Bug reported by Michael Rohrer <mrohrer@gbronline.com>.


2004-07-18 00:37:08  Rev 6153   josef

	* ChangeLog:
	  - changelog update


2004-07-17 16:20:35  Rev 6145   josef

	* ggzd/protocols.h:
	  - bump ggz protocol number


2004-07-17 04:02:41  Rev 6136   josef

	* ggzd/err_func.c:
	  - compile fix for recent interface changes


2004-07-17 03:59:30  Rev 6135   josef

	* Makefile.am:
	  - fix libtool.m4 inclusion


2004-07-17 02:30:40  Rev 6133   josef

	* game_servers/tictactoe/tictactoe.dsc:
	  - TTT protocol version bump
	  - chess version update


2004-07-17 01:53:27  Rev 6127   josef

	* man/ggzduedit.6 man/ggzd.6 man/ggzdmod.h.3 ggzdmod/Doxyfile:
	  - manpage updates


2004-07-17 00:44:02  Rev 6124   josef

	* ggzdmod/Makefile.am ggzdmod/ggzdmod.h:
	  - new library interface version


2004-07-16 19:08:39  Rev 6117   josef

	* AUTHORS configure.ac NEWS README.GGZ:
	  - 0.0.9 updates propagation


2004-07-16 19:06:49  Rev 6115   jdorje

	* ggzd/net.c ggzd/parse_opt.c ggzd/room.c ggzd/stats.c ggzd/players.
	  c ggzd/datatypes.h ggzd/players.h:
	  Add ggzd support for high scores.


2004-07-16 17:44:10  Rev 6113   jdorje

	* ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h ggzdmod/mod.h 
	  ggzdmod/ggzdmod-ggz.h:
	  Add ggzdmod support for highscores.  The scores are sent from game 
	  server
	  to ggz server and reported to ggzd in the game report event.


2004-07-16 15:22:29  Rev 6109   josef

	* game_servers/tictactoe/game.c game_servers/tictactoe/game.h:
	  - explicitely explain that this game is intended to be studied by 
	  beginners
	  - now there are 4 (permanent) #defines for features:
	    * statistics
	    * ai players
	    * leave/rejoin
	    * spectators
	  Unfortunately, the 'do you want to play another game' handling is 
	  still...
	  not what it could be.


2004-07-15 18:58:18  Rev 6107   jdorje

	* game_servers/dots/game.c ggzdmod/ggzdmod.c 
	  game_servers/reversi/game.c game_servers/tictactoe/game.c 
	  game_servers/escape/game.c ggzdmod/ggzdmod.h 
	  game_servers/connectx/game.c game_servers/chinese-checkers/game.c 
	  game_servers/ggzcards/common.c game_servers/chess/game.c:
	  Add the API interface to support highscores in game stats.


2004-07-13 14:56:49  Rev 6098   josef

	* m4/libtool.m4:
	  - remove libtool macros


2004-07-11 04:44:01  Rev 6081   jdorje

	* ggzdmod/Makefile.am ggzdmod/ggz_stats.h ggzdmod/elo.c ggzdmod/elo.
	  h ggzdmod/ggz_stats.c:
	  Remove the old-style ggz_stats means of tracking stats.  The 
	  identical
	  behavior is now available more easily directly via 
	  ggzdmod_report_game().


2004-07-11 04:43:02  Rev 6080   jdorje

	* game_servers/connectx/game.c:
	  Remove old ggz_stats code from connectx, and add new-style GGZ 
	  game result
	  reporting.  Stats should now be visible in GGZ but not within the 
	  game
	  client.


2004-07-11 04:40:07  Rev 6079   jdorje

	* game_servers/escape/game.c:
	  Remove ggz_stats code from escape, and add GGZ score reporting to 
	  the
	  endgame.  Results are now reported to GGZ but can't be displayed 
	  by the
	  client.


2004-07-11 04:30:42  Rev 6078   jdorje

	* game_servers/tictactoe/game.c:
	  Remove the use of ggz_stats in TTT.  This means the player stats are
	  no longer shown in the client.


2004-07-11 04:28:48  Rev 6077   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/common.c:
	  Remove the use of ggz_stats in ggzcards.  This means the player 
	  stats are
	  no longer shown in the client.


2004-07-10 17:45:53  Rev 6074   jdorje

	* m4/libtool.m4:
	  Update libtool.m4.


2004-07-09 13:14:36  Rev 6069   josef

	* ggzd/database/ggzdb_mysql.c ggzd/database/ggzdb_db2.c 
	  ggzd/database/ggzdb_db3.c ggzd/database/ggzdb_db4.c:
	  - fix parse error (odd semicolon)


2004-07-09 13:14:00  Rev 6068   josef

	* ggzdmod/Makefile.am:
	  - install ggz_stats.h


2004-07-09 11:19:06  Rev 6065   josef

	* game_servers/chess/ai.h game_servers/chess/ai.c 
	  game_servers/chess/game.c:
	  - synchronize chess AI
	  Note that some rules are not implemented yet. Those fall into 2 
	  categories:
	  - moves which are legal but not exploited yet
	    They are silently accepted even if the internal verifyer says 
	  they're
	    illegal, because they're libcgc-checked already
	  - illegal moves which are not known to be illegal
	    They must be fixed soon, as e.g. the AI will move a king next to 
	  the
	    other one, yielding a libcgc-error and thus fubaring any game


2004-06-27 19:34:15  Rev 6061   josef

	* game_servers/chess/chess.dsc game_servers/chess/ai.h 
	  game_servers/chess/Makefile.am game_servers/chess/ai.c 
	  game_servers/chess/game.c:
	  - basic AI support for the chess game server
	  This is very rough, it has not been tested with AI being the host
	  (would that work?) or clock options vs. long-thinking AI.
	  Also, the AI itself is still buggy, because the algorithm is still 
	  the same,
	  because I don't know if Bryan works on it :)


2004-05-27 02:08:56  Rev 6008   josef

	* ggzd/datatypes.h:
	  - do not use bool for 'foreground' option, use int instead
	  This is because libpopt requires all variables for options which 
	  don't take
	  arguments to be of type integer.


2004-05-17 14:16:42  Rev 5996   josef

	* ggzd/database/ggzdb.h ggzd/database/ggzdb_mysql.c 
	  ggzd/database/ggzdb_pgsql.c ggzd/database/ggzdb_db2.c 
	  ggzd/database/ggzdb_db3.c ggzd/database/ggzdb_proto.h 
	  ggzd/database/ggzdb_db4.c ggzdmod/ggz_stats.h ggzd/stats.c 
	  ggzd/database/ggzdb.c:
	  - fix pgsql database initialization code
	  - fix generic initialization code: don't try to access files if a 
	  SQL db is used
	  - add match statistics support to the interface and implement it 
	  for pgsql,
	    the other databases just do nothing atm
	  - bump db version to 0.6, requiring an upgrade!
	  Update scripts should be provided externally to keep the source 
	  clean.


2004-02-28 03:57:40  Rev 5962   jdorje

	* ggzd/database/ggzdb_pgsql.c:
	  Mark some strings as const.


2004-02-28 01:58:10  Rev 5961   jdorje

	* m4/libtool.m4 Makefile.am:
	  Add libtool.m4 to CVS.


2004-02-21 08:51:32  Rev 5956   jdorje

	* m4/ggz.m4:
	  - Copy ggz.m4 into libggz.
	  - Declare the libggz copy to be the master copy.
	  - Use AC_HELP_STRING inside AC_ARG_WITH.
	  - Replace the history section (which was getting really big) with a
	    reference to CVS.
	  - Propogate the changes back into all modules.


2004-02-16 06:32:13  Rev 5938   jdorje

	* ggzd/net.c:
	  More int=>bool conversions.


2004-02-16 05:40:36  Rev 5936   jdorje

	* ggzd/login.c:
	  If a player tries to use a too-long username, give them an 
	  E_TOO_LONG
	  login error (previously the username was just truncated).


2004-02-16 00:21:35  Rev 5934   jdorje

	* ggzdmod/ggzdmod.c ggzd/transit.c:
	  Close a game channel on the ggz side immediately after we send it to
	  the game server.  Don't try to close it again later.


2004-02-15 02:43:16  Rev 5928   jdorje

	* ggzd/net.c ggzd/database/ggzdb_mysql.c ggzd/event.h ggzd/table.c 
	  ggzd/database/ggzdb_db2.c ggzd/hash.h ggzd/transit.h 
	  ggzd/database/ggzdb_db3.c ggzd/database/ggzdb_proto.h 
	  ggzd/database/ggzdb_db4.c ggzd/net.h ggzd/table.h ggzd/motd.c 
	  ggzd/daemon.c ggzd/datatypes.h ggzd/database/ggzdb.h 
	  ggzd/database/ggzdb_pgsql.c ggzd/login.c ggzd/login.h ggzd/chat.c 
	  ggzd/players.c ggzd/event.c ggzd/hash.c ggzd/chat.h ggzd/players.h 
	  ggzd/transit.c:
	  A number of minor cleanups, possibly including a bugfix or two.


2004-02-15 02:29:47  Rev 5927   jdorje

	* ggzd/players.c:
	  Fix typo: 0 is false, not true.


2004-02-14 22:14:26  Rev 5924   jdorje

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/players.c ggzd/seats.c 
	  ggzd/ggzd.h ggzd/transit.c:
	  Remove UNLIMITED_SPECTATORS and UNLIMITED_SEATS defines.  Now 
	  there is no
	  hard-coded limit on the number of seats or spectators at a table.


2004-02-14 21:12:29  Rev 5923   jdorje

	* ggzd/net.c ggzd/perms.c ggzd/table.c ggzd/login.c ggzd/motd.h 
	  ggzd/net.h ggzd/perms.h ggzd/players.c ggzd/ggzd.h ggzd/datatypes.
	  h ggzd/motd.c ggzd/players.h ggzd/transit.c:
	  Use 'bool' as a type, along with 'true' and 'false'.  This cleans 
	  up the
	  logic in a few pieces of code.


2004-02-14 19:32:53  Rev 5922   jdorje

	* ggzd/database/ggzdb.h ggzd/perms.h ggzd/room.c ggzd/players.c:
	  - Add a new admin permission PERMS_EDIT_TABLES.
	  - Rename PERMS_HAVE_STATS to PERMS_NO_STATS (thus it defaults to 0).
	  - Change the database version to 0.5.
	  This makes the database format compatible with ggzd 0.0.8.  It is 
	  easy to
	  change the fields in the future; it just requires upping the 
	  version.


2004-02-14 18:38:55  Rev 5921   jdorje

	* ggzd/database/ggzdb.h:
	  Make sure the ggzdb version string is fewer than 7 characters.  
	  Comment
	  this limitation (though it should really be fixed).


2004-02-13 17:21:57  Rev 5920   jdorje

	* ggzd/database/ggzdb.h ggzd/perms.h ggzd/room.c ggzd/database/ggzdb.
	  c:
	  - Add a new permission PERMS_HAVE_STATS.
	  - Bump the DB version to make compatability safe.
	  - Change the error when the DB version doesn't match.


2004-02-13 16:54:27  Rev 5919   jdorje

	* ggzd/control.c ggzd/datatypes.h:
	  Don't initialize the game info lock for all games.  It's already 
	  done
	  for each game when it's loaded.


2004-02-13 07:31:26  Rev 5918   jdorje

	* ggzd/net.c ggzd/ggzd.h:
	  Move GGZPlayerType into ggz_common.[ch] in libggz.


2004-02-11 15:54:18  Rev 5912   jdorje

	* ggzd/client.c:
	  Break immediately when a client's session is over.


2004-02-11 13:16:25  Rev 5906   josef

	* ggzd/net.c ggzd/perms.c ggzd/perms.h ggzd/players.c ggzd/ggzd.h:
	  - new player permission GGZ_CHAT_BOT (bitmask 0x20)
	  This should be used for grubby, and for other potential trusted 
	  bots.
	  It helps people distinguishing them from real players.
	  While grubby fits perfectly into the lounge, it might make sense 
	  to have
	  game-related bots in some rooms. For instance, a keepalive 
	  progress reporter.
	  Just an example.


2004-02-11 03:27:12  Rev 5903   jdorje

	* ggzd/err_func.h ggzd/hash.h ggzd/perms.h ggzd/room.h:
	  Remove "extern" from function declarations in .h files.


2004-02-11 03:22:56  Rev 5902   jdorje

	* ggzd/stats.c:
	  Remove one more extern declaration.


2004-02-11 03:19:44  Rev 5901   jdorje

	* ggzd/table.c ggzd/login.c ggzd/parse_opt.c ggzd/room.c ggzd/client.
	  c ggzd/chat.c ggzd/players.c ggzd/seats.c ggzd/event.c ggzd/daemon.
	  c ggzd/datatypes.h ggzd/motd.c ggzd/transit.c:
	  Remove extern declarations from .c files.  Put global veriable 
	  declarations
	  into datatypes.h.


2004-02-11 01:25:52  Rev 5897   jdorje

	* ggzd/net.c ggzd/login.c ggzd/protocols.h ggzd/net.h ggzd/parse_opt.
	  c ggzd/room.c ggzd/client.c ggzd/players.c ggzd/room.h ggzd/util.h 
	  ggzd/datatypes.h ggzd/players.h:
	  - In the room list, send the number of players in each room.
	  - Send room updates at intervals.  The only update needed updates 
	  the
	    number of players in the room.
	  - Add a new option RoomUpdateFrequency controlling the interval of 
	  room
	    updating.
	  - Fix the client select loop so it waits the correct amount of 
	  time inside
	    the select call, to within 1 second.  The previous method was only
	    accurate to opt.ping_freq seconds.


2004-02-10 07:51:52  Rev 5879   josef

	* debian ggz_server.spec:
	  - first round of removals of distribution files


2004-02-09 21:34:39  Rev 5870   jdorje

	* ggzd/net.c ggzd/net.h ggzd/room.c ggzd/stats.c ggzd/players.c 
	  ggzd/room.h:
	  When a player joins or leaves a room, send the information on which
	  room the came from/are going to in the <UPDATE> tag.
	  E.g.,
	    <UPDATE TYPE='player' ACTION='add' ROOM='1' FROMROOM='0'>
	    <UPDATE TYPE='player' ACTION='delete' ROOM='0' TOROOM='1'>


2004-02-08 21:45:29  Rev 5851   jdorje

	* ggzd/err_func.c:
	  Don't let ggzd compile if libggz doesn't have syslog support.


2004-02-07 13:37:56  Rev 5824   josef

	* man/ggzdmod.h.3:
	  - doxygen'd manpage update


2004-02-07 10:02:11  Rev 5822   josef

	* ggzdmod/Makefile.am:
	  - sync with header definition of library interface version


2004-02-07 09:57:55  Rev 5820   josef

	* ggzdmod/ggzdmod.h:
	  - version goes up to 0.0.8
	  - implementation part of interface version goes up to 1
	  This is not strictly necessary, but since the email address output 
	  in the error
	  function changed, this indicates that 2:1:0 is preferred over 2:0:0


2004-02-06 17:37:51  Rev 5809   jdorje

	* ggzd/client.c:
	  Add a nice FIXME comment explaining the problem with using one 
	  select
	  call for each player.


2004-02-06 11:20:07  Rev 5807   josef

	* game_servers/tuxman/tuxmanserv.cpp game_servers/tuxman/map.cpp:
	  - include <unistd.h> for close()
	  - don't include C++ <ios> as it's relatively new


2004-02-06 10:52:08  Rev 5806   josef

	* game_servers/tuxman/Makefile.am:
	  - include proto.h to fix make distcheck


2004-02-05 12:11:59  Rev 5802   josef

	* HACKING INSTALL doc/admin-guide.txt ggzdmod/ggzdmod.c:
	  - more mailing list updates


2004-02-05 11:58:23  Rev 5800   josef

	* man/ggzduedit.6 man/ggzd.6:
	  - version and dev list updates


2004-02-05 11:38:16  Rev 5792   josef

	* ggzdmod/Doxyfile:
	  - doxy version bump


2004-02-05 10:46:53  Rev 5790   josef

	* ChangeLog configure.ac NEWS README.GGZ README:
	  - synchronized NEWS, README.GGZ and QuickStart.GGZ from docs
	  - updated README
	    * new URLs for developers, bugs, website
	    * no more per-package maintainer mention (it was never valid 
	  anyway)
	  - updated configure.ac to indicate final version 0.0.8
	  - ChangeLog updates


2004-02-01 14:53:22  Rev 5779   josef

	* game_servers/krosswater/krosswater.dsc 
	  game_servers/krosswater/krosswater_server.cpp:
	  - bumping version number, keeping same protocol number


2004-02-01 14:23:35  Rev 5778   josef

	* game_servers/geekgame/geekgame.dsc game_servers/geekgame/main.cpp:
	  - bump geekgame server version numbers


2004-01-31 10:54:44  Rev 5770   josef

	* autogen.sh:
	  - sync common files


2004-01-31 10:33:01  Rev 5769   josef

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.h 
	  game_servers/krosswater/krosswater_server.cpp:
	  - make rejoin work
	  - mostly drop m_numplayers in favor of m_maxplayers
	  This was historic garbage from the ggzdmod conversion


2004-01-30 22:10:13  Rev 5767   josef

	* game_servers/geekgame/main.cpp game_servers/geekgame/geekgame.cpp:
	  - fix array subscript (switch x/y)


2004-01-30 10:03:03  Rev 5763   josef

	* configure.ac m4/ggz.m4 m4/ggz-debug.m4:
	  - autodetect libdb4.2 correctly


2004-01-30 09:53:28  Rev 5762   josef

	* ggzd/database/ggzdb_db4.c:
	  - change minor version check from == 1 to >= 1
	  This makes it work with all of libdb 4.0, 4.1 and 4.2 now.


2004-01-27 13:27:43  Rev 5751   josef

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp:
	  - allow for players < 4


2004-01-27 13:11:28  Rev 5750   josef

	* ggzd/database/ggzdb_db3.c ggzd/database/ggzdb_db4.c:
	  - skip the &nxtuid& entry in DB4 in player_get_first()
	  This would otherwise return nonsense in ggzduedit.


2004-01-24 22:18:01  Rev 5747   josef

	* ggzd/parse_opt.c ggzd/control.c ggzd/datatypes.h ggzd/ggzd.conf.in:
	  [cvs test stage]
	  - new configuration option Interface to restrict listening to one 
	  interface
	    (like 127.0.0.1 for localhost:5688)


2004-01-17 18:57:43  Rev 5742   dr_maux

	* game_servers/tuxman/tuxman.dsc game_servers/tuxman/tuxman.room:
	  - forgot .room and .dsc files


2004-01-17 18:57:02  Rev 5741   dr_maux

	* game_servers/tuxman/lib/ggzgameserver.h configure.ac 
	  game_servers/tuxman/main.cpp game_servers/tuxman/lib 
	  game_servers/tuxman/Makefile.am game_servers/tuxman/.cvsignore 
	  game_servers/tuxman/lib/net.cpp game_servers/tuxman/lib/Makefile.
	  am game_servers/tuxman/pacman.cpp game_servers/tuxman/lib/net.h 
	  game_servers/tuxman/lib/.cvsignore game_servers/tuxman/pacman.h 
	  game_servers/tuxman/proto.h game_servers/tuxman/tuxmanserv.cpp 
	  game_servers/Makefile.am game_servers/tuxman/map.cpp 
	  game_servers/tuxman/lib/ggzgameserver.cpp game_servers/tuxman 
	  game_servers/tuxman/level9.pac game_servers/tuxman/tuxmanserv.h 
	  game_servers/tuxman/map.h:
	  - game server for the game Tuxman


2004-01-17 18:46:28  Rev 5740   dr_maux

	* autogen.sh:
	  - sync


2003-12-31 17:02:57  Rev 5727   dr_maux

	* configure.ac:
	  - use new-style AC_INIT


2003-12-19 17:24:38  Rev 5720   dr_maux

	* ggzd/table.c:
	  - log table joins and leaves as log events, not debug events
	  First step towards external tracking of currently running games.
	  This doesn't have to be something sophisticated for the beginning, 
	  thus log
	  entries are good enough.


2003-12-18 11:17:10  Rev 5719   dr_maux

	* configure.ac:
	  - remove unneeded comma


2003-12-18 11:16:43  Rev 5718   dr_maux

	* game_servers/keepalive/src/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am game_servers/escape/Makefile.
	  am tests/Makefile.am game_servers/connectx/Makefile.am:
	  Allow --prefix to be different from --with-libggz-dir.
	  This is very convenient for testing new ggzds. It should in theory 
	  work with
	  each of our modules.
	  Note that AC_HEADER_STDBOOL and AC_FUNC_REALLOC are not available 
	  on older
	  (woody) systems.


2003-12-06 10:01:55  Rev 5711   dr_maux

	* game_servers/geekgame/geekgame.dsc game_servers/geekgame/main.cpp 
	  game_servers/geekgame/geekgame.cpp game_servers/geekgame/protocol.h:
	  - improved multiplayer code
	  - preparations for bots support


2003-12-05 00:57:56  Rev 5703   jdorje

	* configure.ac:
	  Rewrite large parts of the autoconf file to satisfy autoscan and 
	  make it
	  prettier.


2003-12-04 23:59:31  Rev 5702   jdorje

	* configure.ac m4/ggz-debug.m4:
	  Move the -Wall test into the AC_GGZ_DEBUG macro.


2003-12-04 07:15:41  Rev 5693   jdorje

	* configure.ac:
	  Use AM_CONFIG_HEADER instead of AC_CONFIG_HEADER.  This is 
	  required by
	  automake.


2003-10-25 12:09:43  Rev 5665   dr_maux

	* ggzd/database/ggzdb_db4.c:
	  - the _4000 and _4001 suffixes seem to be deprecated


2003-10-25 12:04:33  Rev 5664   dr_maux

	* ggzd/database/ggzdb_db4.c:
	  - don't use autocommit flag


2003-07-29 16:58:07  Rev 5633   dr_maux

	* game_servers/keepalive/ggzsh/ggzsh.cpp:
	  - fix stupid bug (reverse logic) which led to a crash


2003-07-16 17:28:18  Rev 5622   jdorje

	* game_servers/ggzcards/client/client.c:
	  Port changes to server.


2003-06-07 05:29:36  Rev 5610   dr_maux

	* configure.ac ggzd/database/ggzdb_db4.c:
	  - first try on db4.1 compatibility


2003-05-17 08:14:47  Rev 5590   dr_maux

	* ggzd/protocols.h:
	  - bump GGZ protocol version


2003-05-17 08:10:42  Rev 5588   dr_maux

	* ChangeLog:
	  - update changelog


2003-05-16 18:34:45  Rev 5583   dr_maux

	* autogen.sh:
	  - apply autogen.sh changes from libggz


2003-05-11 11:31:02  Rev 5574   dr_maux

	* game_servers/geekgame/protocol.h:
	  - use smaller protocol numbers
	  Doh! Actually a good thing detected by gcc 2.96, which gcc 3.x 
	  doesn't find.


2003-05-11 11:24:59  Rev 5572   dr_maux

	* game_servers/ggzcards/ai/Makefile.am:
	  - add -DAI_CLIENT to avoid making it a GUI client
	  Otherwise, it would depend on ggzmod (huh?)


2003-05-11 09:11:27  Rev 5566   dr_maux

	* ggzdmod/Makefile.am ggzdmod/ggzdmod.h man/ggzdmod.h.3 
	  ggzdmod/Doxyfile game_servers/krosswater/zoneserver/Makefile.am:
	  - man page updated from header file with doxygen
	  - don't install libzoneserver anymore
	  - update library interface version


2003-05-10 23:54:28  Rev 5563   dr_maux

	* configure.ac:
	  - set the package version number (via configure.ac) to 0.0.7


2003-05-10 23:47:48  Rev 5562   dr_maux

	* man/ggzduedit.6 man/ggzd.6:
	  - man page version updates


2003-05-10 23:15:02  Rev 5544   dr_maux

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/chess/chess.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc autogen.sh NEWS 
	  game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc README.GGZ 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/spades/spades.
	  dsc game_servers/reversi/reversi.dsc game_servers/muehle/muehle.
	  dsc game_servers/escape/escape.dsc game_servers/hastings/hastings.
	  dsc game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/connectx/connectx.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - update common files for 0.0.7 in ggzd
	  - bump engine and/or game server versions where it's necessary


2003-05-10 14:38:57  Rev 5539   dr_maux

	* autogen.sh:
	  - sync autogen.sh


2003-05-10 10:08:47  Rev 5529   dr_maux

	* game_servers/hastings/maps/Makefile.am:
	  - prefix data with dist_


2003-05-09 23:01:52  Rev 5513   dr_maux

	* game_servers/spades/engine_func.c:
	  - rename log to logflag, since there's an ambiguity to the 
	  logarithm: log()


2003-05-09 22:57:43  Rev 5512   dr_maux

	* game_servers/hastings/game.c:
	  - signedness comparison fixes


2003-05-05 13:01:25  Rev 5499   dr_maux

	* m4/ggz.m4:
	  - add -fsigned-char to C(XX)FLAGS by default where it's due


2003-03-29 10:40:34  Rev 5480   dr_maux

	* game_servers/hastings/game.c:
	  - use ERR_ENEMY constant instead of hardcoded -8


2003-03-29 10:33:32  Rev 5476   dr_maux

	* autogen.sh:
	  - apply improverished autogen globally


2003-03-29 10:27:44  Rev 5475   dr_maux

	* m4/ggz.m4:
	  - update GGZ macro file


2003-02-28 02:13:56  Rev 5462   dr_maux

	* ggzd/datatypes.h:
	  - libpopt expects int arguments for POPT_ARG_NONE, not char
	  Before, calling ggzd with -F on ppc/sparc/... didn't prevent ggzd 
	  from forking.
	  Other variables might be affected, and other GGZ apps using popt 
	  as well,
	  so we might want to do an audit...


2003-02-26 13:56:40  Rev 5461   dr_maux

	* ggzd/err_func.c:
	  - add %Y to timestamp log so we can see the year


2003-02-26 13:17:22  Rev 5458   dr_maux

	* game_servers/chinese-checkers/Makefile.am:
	  - blindly add -lm to libraries being linked in, because some 
	  weirdos decided to
	    exclude that from the libc-supplied functions on several 
	  architectures somehow


2003-02-26 13:14:51  Rev 5457   dr_maux

	* game_servers/ggzcards/main.c:
	  - rename fd_set variable to fdset because fd_set is already the 
	  type name, and
	    some macro voodoo magic would let this result in a failure for 
	  some libc's


2003-02-19 19:19:06  Rev 5430   dr_maux

	* game_servers/geekgame/geekgame.h game_servers/geekgame/geekgame.
	  dsc game_servers/geekgame/main.cpp game_servers/geekgame/geekgame.
	  cpp game_servers/geekgame/protocol.h:
	  - add some more checks and opcodes, mostly to comply with client
	  - add copyright to files, using nifty new ggzgamingzone.org mail 
	  address


2003-02-19 18:30:24  Rev 5429   dr_maux

	* game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - add method open() which returns the number of open seats


2003-02-16 16:16:58  Rev 5422   dr_maux

	* ggzd/database/ggzdb_pgsql.c:
	  - update pgsql backend: consider inserting statistics values if 
	  update doesn't
	    hit any tuple
	  Performance-wise, this should be the optimum. The other 
	  possibilities being:
	   * delete tuple blindly and insert again (bad performance)
	   * select first, and decide whether to insert or update (not much 
	  better)


2003-02-16 14:36:44  Rev 5416   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.h:
	  - shut up compiler warnings:
	   * make destructor virtual
	   * handle (but discard) unsupported ggzdmod events


2003-02-16 14:30:54  Rev 5415   dr_maux

	* game_servers/muehle/qtserv/qlist.h:
	  - shut up compiler warnings


2003-02-16 14:29:28  Rev 5414   dr_maux

	* game_servers/keepalive/src/world.cpp:
	  - shut up compiler warning


2003-02-16 13:02:09  Rev 5413   dr_maux

	* autogen.sh:
	  - new autogen.sh


2003-02-15 03:45:28  Rev 5410   jdorje

	* game_servers/dots/game.c game_servers/dots/dots.dsc:
	  Stats support for dots (untested).


2003-02-15 03:39:34  Rev 5409   jdorje

	* game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/chinese-checkers/game.c:
	  Stats support for chinese-checkers (untested).


2003-02-15 03:34:42  Rev 5408   jdorje

	* game_servers/chess/chess.dsc game_servers/chess/game.c:
	  Stats support for chess.


2003-02-15 03:25:39  Rev 5407   jdorje

	* game_servers/reversi/reversi.dsc game_servers/reversi/game.c:
	  Stats support for reversi.


2003-02-15 01:41:20  Rev 5406   jdorje

	* ggzd/table.c:
	  Preliminary ggzd support for resizing tables.  Without ggzcore 
	  support,
	  this is still useless.


2003-02-15 01:35:23  Rev 5405   jdorje

	* ggzd/table.c:
	  Remove two unused event data packaging structures.


2003-02-12 04:37:56  Rev 5400   jdorje

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  Preliminary ggzdmod support for changing the number of seats at a 
	  table.
	  Without ggzd support, this is currently useless.


2003-02-09 23:44:10  Rev 5399   jdorje

	* configure.ac:
	  General cleanups to configure.ac: use AC_HELP_STRING, add quotes for
	  arguments, remove unnecessary exit calls.


2003-02-09 22:57:46  Rev 5398   jdorje

	* configure.ac Makefile.am m4/ggz-debug.m4:
	  Use the ggz-debug macro file in ggzd.


2003-02-09 22:50:10  Rev 5397   jdorje

	* configure.ac:
	  Add strsep support (prototype) back into config.h.  Note this only 
	  works
	  for ggzd; any of the game modules who try to use this function 
	  will see
	  the prototype but won't be able to link against the function.


2003-02-04 17:55:14  Rev 5388   jdorje

	* configure.ac acconfig.h:
	  Various updates for autoconf2.5x usage.  Also fix a typo bug where
	  DB4_IN_DIR was defined instead of DB3_IN_DIR.


2003-02-04 17:09:50  Rev 5383   jdorje

	* ggzd/ggzduedit.c:
	  Mark a local function as static.


2003-02-04 16:23:51  Rev 5381   dr_maux

	* game_servers/geekgame/geekgame.h game_servers/geekgame/geekgame.
	  cpp game_servers/geekgame/protocol.h:
	  - server-side check for game mode conditions
	  - new opcodes, but they're not used yet


2003-02-04 01:55:26  Rev 5358   jdorje

	* configure.ac configure.in autogen.sh:
	  Step 1 of autoconf2.5x-only support: rename configure.in as 
	  configure.ac.


2003-02-03 03:17:40  Rev 5354   jdorje

	* autogen.sh:
	  Copy ggzd's autogen.sh from libggz's.  Among other things this 
	  means it
	  is compatible with autoheader2.5x instead of autoheader2.13.
	  In general, we should keep these autogen.sh's identical.


2003-01-23 17:10:10  Rev 5346   dr_maux

	* ggzdmod/ggzdmod.h:
	  - add versioning information for ggzdmod


2003-01-22 13:50:38  Rev 5340   dr_maux

	* ggzd/net.c ggzd/net.h ggzd/parse_opt.c ggzd/datatypes.h ggzd/ggzd.
	  conf.in ggzd/client.c ggzd/control.c:
	  - Add Transport Layer Security support


2003-01-16 22:15:22  Rev 5335   dr_maux

	* ggzd/ggzduedit.c ggzd/login.c ggzd/parse_opt.c ggzd/control.c 
	  ggzd/datatypes.h ggzd/ggzd.conf.in:
	  - new option for ggzd: DatabaseHashing = plain | md5
	  - ggzduedit updates:
	     * getopt interface
	     * ability to use SQL databases (command line options similar to 
	  MySQL and
	       PostgreSQL clients)
	     * when asking for a password, don't echo the input
	  Hashing is not yet implemented in ggzduedit (changing passwords 
	  will create
	  chaos), but some larger rewrite would be in order for this.
	  Currently, low-level db functions are used, which don't know 
	  anything about
	  hashing.


2003-01-16 22:11:58  Rev 5334   dr_maux

	* ggzd/database/ggzdb.h ggzd/database/ggzdb_pgsql.c 
	  ggzd/database/ggzdb.c:
	  - new database version:
	     * can store hashed passwords
	     * password size enlarged to 32, while 16 is still the effective 
	  limit
	  - do database version check in pgsql backend too


2003-01-12 14:44:15  Rev 5327   dr_maux

	* ggzd/database/ggzdb.h ggzd/database/ggzdb_pgsql.c 
	  ggzd/database/ggzdb_db2.c ggzd/database/ggzdb_db3.c 
	  ggzd/database/ggzdb_proto.h ggzd/database/ggzdb_db4.c 
	  ggzd/database/ggzdb.c:
	  - add ability to handle statistics database to pgsql backend
	  - change interface to use ggzdbConnection instead of char* in 
	  ggzdb_init_stats
	    (even though no backend needs this, all assume that ggzdb_init 
	  has previously
	    been called)


2003-01-12 12:09:45  Rev 5323   dr_maux

	* ggzd/database/ggzdb_pgsql.c:
	  [powerpc]
	  - add dummy functions for stats for pgsql backend
	  To write the functions, another interface change is needed, which 
	  will be done
	  later on.


2003-01-12 12:04:39  Rev 5322   dr_maux

	* game_servers/keepalive/src/keepalive.cpp:
	  [powerpc]
	  - fix ggzdmod include directive


2003-01-12 11:31:55  Rev 5314   dr_maux

	* game_servers/keepalive/src/main.cpp game_servers/muehle/main.cpp:
	  [powerpc]
	  - getopt returns int, not char


2003-01-12 11:29:12  Rev 5313   dr_maux

	* configure.in:
	  [powerpc]
	  - enable -Wall not only for C servers but also for C++ ones


2003-01-12 11:25:47  Rev 5312   dr_maux

	* game_servers/geekgame/main.cpp:
	  [powerpc]
	  - getopt returns int, not char


2003-01-06 20:30:52  Rev 5311   dr_maux

	* configure.in:
	  - fix typo: s/Pqconnectdb/PQconnectdb/


2003-01-03 09:37:41  Rev 5307   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Fix a bug in ggzdmod_dispatch causing it to return an error if there
	  is nothing to dispatch.


2002-12-20 10:10:29  Rev 5306   oojah

	* game_servers/connectx/game.h game_servers/connectx/main.c 
	  game_servers/connectx/connectx.dsc game_servers/connectx/game.c:
	  Added game over checking.
	  This means that the game server is largely complete other than 
	  with regards to AI.


2002-12-19 14:28:55  Rev 5303   oojah

	* game_servers/Makefile.am:
	  Added connectx to subdirs


2002-12-18 17:42:11  Rev 5302   dr_maux

	* configure.in:
	  - build makefile for ConnectX
	  (even though it's not in SUBDIRS yet)


2002-12-18 17:41:35  Rev 5301   dr_maux

	* game_servers/connectx game_servers/connectx/.cvsignore:
	  - add cvsignore file


2002-12-18 17:40:43  Rev 5300   dr_maux

	* game_servers/connectx/Makefile.am:
	  - fix ConnectX makefile


2002-12-18 11:49:40  Rev 5299   oojah

	* game_servers/connectx/game.h game_servers/connectx 
	  game_servers/connectx/main.c game_servers/connectx/Makefile.am 
	  game_servers/connectx/connectx.dsc game_servers/connectx/game.c 
	  game_servers/connectx/connectx.room:
	  Initial commit of ConnectX game server.
	  Still to be done:
	  - Synchronisation support
	  - Non-random AI
	  - Game over detection


2002-12-18 11:46:17  Rev 5298   oojah

	* game_servers/escape/main.c game_servers/escape/escape.dsc 
	  game_servers/escape/game.c game_servers/escape/game.h:
	  Now initialises random seed on starting a game....


2002-12-16 10:38:53  Rev 5292   oojah

	* game_servers/escape/main.c game_servers/escape/escape.dsc 
	  game_servers/escape/game.c game_servers/escape/game.h:
	  Complete rewrite of the game server using the TTT server as a 
	  reference.
	  Hence supports as much of spectators and stats as TTT does, 
	  although the client has support for neither.
	  Synchronising hasn't been tested.
	  A rudimentry AI has been implemented. It either moves in the 
	  direction in which it should be escaping or else takes a random 
	  move.
	  It is very easy to beat :)


2002-12-16 04:29:07  Rev 5291   jdorje

	* autogen.sh:
	  Revert autogen to use -l option instead of -I for autoheader and 
	  autoconf.
	  -I is only supported for 2.5x versions.


2002-12-16 04:22:29  Rev 5290   jdorje

	* m4/ggz.m4 Makefile.am autogen.sh acinclude.ggz m4:
	  Move acinclude.ggz to m4/ggz.m4.


2002-12-15 12:05:14  Rev 5289   jdorje

	* ggzd/database/Makefile.am:
	  Don't link the db library to any libraries.  This is technically 
	  wrong (?),
	  but this doesn't matter since it gets linked later in compilation.


2002-12-15 11:34:18  Rev 5287   jdorje

	* configure.in:
	  Auto-detect a supported database.  Current order for checking: db3,
	  db4,
	  db2, pgsql, mysql.


2002-12-09 13:25:29  Rev 5281   dr_maux

	* ggzd/database/ggzdb_db2.c:
	  - copy ggzd_stats functions to the db2 interface
	  - compatibility: only accept the 4th parameter to cursor() if we 
	  are >= db
	    2.6.4 (according to the sleepycat docs)


2002-12-07 06:33:03  Rev 5276   jdorje

	* ggzd/Makefile.am:
	  Remove $(DBSOURCES) from ggzduedit_SOURCES; this is now handled by 
	  the
	  build in the database/ directory.


2002-12-07 06:13:17  Rev 5275   jdorje

	* ggzd/players.c:
	  Send an E_NO_CHANNEL error if a player tries to <LAUNCH> or <JOIN> 
	  a table
	  without having already established a channel (direct connection).


2002-11-25 19:16:38  Rev 5267   dr_maux

	* ggzd/database/ggzdb_mysql.c ggzd/table.c ggzd/Makefile.am 
	  ggzd/database/ggzdb_db2.c ggzd/database/ggzdb_db3.c 
	  ggzd/database/ggzdb_proto.h ggzd/protocols.h 
	  ggzd/database/ggzdb_db4.c ggzd/database/Makefile.am ggzd/ggzdb.c 
	  autogen.sh ggzd/database/.cvsignore ggzd/database/ggzdb.c 
	  ggzd/ggzdb.h ggzd/ggzdb_pgsql.c ggzd/database/ggzdb.h 
	  ggzd/database/ggzdb_pgsql.c configure.in ggzd/ggzdb_mysql.c 
	  ggzd/database acconfig.h ggzd/ggzdb_db2.c ggzd/ggzdb_db3.c 
	  ggzd/ggzdb_proto.h:
	  - move database files into subdirectory 'database'
	  - enable db4, and create dummy db4 support based on db3
	  - add enumeration value for GGZ_UPDATE_TABLE_RESIZE (huh?)
	  I'm not a libdb expert, so this should be checked, but it works 
	  for me.
	  If the API is rather stable, using ggzdb_db3.c and selectively 
	  #defining some
	  parts of the source might be more efficient.


2002-11-24 04:37:55  Rev 5261   jdorje

	* ggzd/control.c:
	  Add #ifdef DEBUG...#endif around DEBUG-only code.


2002-11-16 22:16:00  Rev 5247   dr_maux

	* game_servers/hastings/game.c:
	  - another bugfix: s/y/mapy/ for the map itself


2002-11-16 21:08:44  Rev 5246   dr_maux

	* game_servers/hastings/game.c:
	  - small bugfix: pre-initialize number of players to zero
	   (otherwise we end up having some millions of them...)


2002-11-07 06:23:39  Rev 5236   jdorje

	* game_servers/hastings/game.c:
	  Label some local functions as static.


2002-11-06 22:12:47  Rev 5235   dr_maux

	* game_servers/hastings/game.c game_servers/hastings/game.h:
	  - new state for map selection


2002-11-06 22:12:25  Rev 5234   dr_maux

	* game_servers/hastings/maps/Makefile.am 
	  game_servers/hastings/maps/yorkshire:
	  - new game state for map selection
	  - add map for battle of Yorkshire


2002-11-06 09:07:54  Rev 5232   dr_maux

	* configure.in:
	  - generate makefile for Hastings' map dir


2002-11-06 09:07:32  Rev 5231   dr_maux

	* game_servers/hastings/Makefile.am game_servers/hastings/game.c 
	  game_servers/hastings/game.h:
	  - load list of maps upon startup


2002-11-06 09:07:14  Rev 5230   dr_maux

	* game_servers/hastings/maps game_servers/hastings/maps/Makefile.am 
	  game_servers/hastings/maps/.cvsignore 
	  game_servers/hastings/maps/battle_of_hastings:
	  - add first external map to Hastings
	  - load list of maps upon startup


2002-11-06 07:06:39  Rev 5226   jdorje

	* ggzd/net.c:
	  - If we receive a <PING> tag, respond immediately with a <PONG>.
	  - If the <PING> has an ID attribute, use the same attribute in the 
	  <PONG>.


2002-11-04 15:25:52  Rev 5217   dr_maux

	* game_servers/ggzcards/client/Makefile.am:
	  - use AM_CFLAGS, not CFLAGS


2002-11-02 13:55:24  Rev 5148   dr_maux

	* game_servers/geekgame/protocol.h:
	  - enumerate protocol opcodes


2002-11-02 06:41:35  Rev 5140   jdorje

	* ggzd/table.c:
	  Handle the BOOT, BOT, and OPEN events when requested by the client.


2002-11-02 06:40:33  Rev 5139   jdorje

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  Provide three new functions to the game server: 
	  ggzdmod_request_boot,
	  ggzdmod_request_bot, and ggzdmod_request_open.  These allow the game
	  server to have all the control that the table owner is (currently)
	  granted.


2002-11-01 21:30:17  Rev 5136   jdorje

	* ggzd/net.c:
	  Avoid malformed XML when sending a new login status/password.
	  Bugs like this are annoying - a single extra character breaks 
	  everything.
	  But at least with an XML connection, the error is easily spotted by
	  scanning the text that was sent.


2002-10-29 11:32:21  Rev 5106   jdorje

	* ggzd/net.c:
	  Send out error codes in the RESULT tag in text form, not numerical.
	  Note that this will significantly break backwards-compatibility.


2002-10-29 09:41:07  Rev 5101   jdorje

	* ggzd/net.c:
	  Remove the 'joinspectator' and 'leavespectator' ACTIONs of the 
	  <UPDATE>
	  tag.
	  GGZCore from the last several weeks should be compatible with this.
	  Earlier versions will probably do very bizarre things (although they
	  probably would anyway...).


2002-10-28 07:29:41  Rev 5086   jdorje

	* ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h ggzdmod/mod.h 
	  ggzdmod/ggzdmod-ggz.h:
	  - When reporting a game, pass the seat type of the players along 
	  as well.
	  - For AI players, just pass their name - and let GGZ take care of
	    differentiating them from humans.


2002-10-28 07:27:15  Rev 5085   jdorje

	* ggzd/room.c ggzd/stats.c:
	  - Don't track stats on games with guest players at them.  This 
	  needs to
	    be the default behavior, although some games may eventually want 
	  to
	    allow it.
	  - Don't send out stats for guest players at all.  Again, some 
	  games may
	    want to allow guests to have (temporary) stats.
	  - Track the stats for AI players on a per-seat basis, and make 
	  sure to
	    differentiate them from human players.


2002-10-28 04:58:39  Rev 5081   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Track ratings for all GGZCards games.


2002-10-28 04:56:55  Rev 5080   jdorje

	* ggzd/Makefile.am ggzd/err_func.h ggzd/parse_opt.c ggzd/room.c 
	  ggzd/stats.c ggzd/elo.c ggzd/elo.h:
	  Add ELO rating support to ggzd.


2002-10-28 04:55:27  Rev 5079   jdorje

	* ggzd/ggzd.test.in:
	  Enable all debugging types in the "make test" build/run.


2002-10-28 04:10:34  Rev 5078   jdorje

	* ggzdmod/ggzdmod.h:
	  Added two new game result types: FORFEIT and NONE, along with 
	  documentation
	  on how these might be useful.


2002-10-28 02:58:08  Rev 5076   jdorje

	* ggzd/players.c ggzd/players.h:
	  Fix a severe bug.
	  Until yesterday, when sending a <PLAYER> over the network 
	  (generally to
	  a different player), the player structure was not locked correctly.
	  There
	  is a hash_player_lookup in net.c, but then the lock is released 
	  before the
	  data is sent.  However player_get_type re-locked the structure 
	  before
	  determining the player type.
	  This sounds, good, but it is dangerous: once the lock is released, 
	  the
	  player could even log out and the player structure could be 
	  destroyed.  So
	  we could end up deadlocking or segfaulting when we try to access the
	  data later.
	  Yesterday, I changed this code so it makes a copy of the player 
	  structure
	  while it still has the lock.  This is the correct way to do things,
	  AFAICT
	  (some FIXME comments in the code suggest it was the original 
	  intention,
	  and just wasn't completed).  But this lead to a deadlock when
	  get_player_type tried to access an invalid (copied) lock.
	  So the correct fix now is just to have get_player_type *not* 
	  acquire a
	  lock, and document this in the function's prototype.  Nobody else 
	  calls it,
	  so this won't break anything else.


2002-10-28 02:02:59  Rev 5075   jdorje

	* ggzd/net.c ggzd/players.c:
	  - Acquire a read lock on the player stats when assembling a <LIST> 
	  of
	    players to send out.
	  - Don't hold on to a readlock on the player/player stats over the 
	  course
	    of a write().  Just copy the player, drop the lock, and use the 
	  copy.


2002-10-28 01:50:20  Rev 5074   jdorje

	* tests/basic.c tests/ggzdtest.c:
	  #include "ggzdmod-ggz.h".


2002-10-28 00:09:53  Rev 5073   jdorje

	* ggzd/net.c ggzd/parse_opt.c ggzd/room.c ggzd/ggzdb.c ggzd/stats.c 
	  ggzd/ggzdb.h ggzd/datatypes.h ggzd/stats.h ggzd/players.h:
	  - Fixed a potential segfault from accessing an out-of-bounds game 
	  type.
	  - Preliminary support for player ratings.
	  - New function stats_lookup() to move stats-specific code out of the
	    database code.
	  - Add forfeits to the stats database; rating becomes a 
	  floating-point
	    value; high scores becomes a long.  Hopefully this can be a final
	    form for the database.  This makes it incompatible with the 
	  previous
	    version, but bumping up the DB version number is _not_ the 
	  answer - that
	    will invalidate the player database as well!


2002-10-27 23:16:47  Rev 5072   jdorje

	* ggzd/stats.c:
	  Restructure stats code to break off the individual stats 
	  calculations.


2002-10-27 23:04:44  Rev 5071   jdorje

	* ggzd/table.c ggzd/Makefile.am ggzd/stats.c ggzd/stats.h:
	  Moved statistics calculating code into stats.[ch].


2002-10-27 21:25:57  Rev 5068   jdorje

	* game_servers/tictactoe/tictactoe.dsc game_servers/tictactoe/game.c:
	  Support player records for TTT.


2002-10-27 13:06:54  Rev 5067   jdorje

	* ggzdmod/ggzdmod-ggz.h:
	  Doh!  That's quite a long time to have forgotten to add this file to
	  the repository...


2002-10-27 12:53:20  Rev 5066   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Enable records in all GGZCards rooms.


2002-10-27 12:49:52  Rev 5065   jdorje

	* game_servers/ggzcards/common.c:
	  Report game results to GGZ.


2002-10-27 12:48:02  Rev 5064   jdorje

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/parse_opt.c 
	  ggzd/ggzdb.c ggzd/ggzd.h ggzd/ggzdb.h ggzd/datatypes.h ggzd/room.c 
	  ggzd/players.c ggzd/control.c ggzd/room.h ggzd/players.h 
	  ggzd/transit.c ggzd/ggzdb_db3.c ggzd/ggzdb_proto.h:
	  GGZd support for player win-loss records, and some preliminary 
	  code for
	  other types of stats.


2002-10-27 12:44:22  Rev 5061   jdorje

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  GGZdMod support for reporting game results to GGZ.


2002-10-27 06:26:31  Rev 5060   jdorje

	* ggzdmod/Makefile.am ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Created new file ggzdmod-ggz.h, and moved GGZ-specific parts of the
	  GGZ API into it.
	  In time, this file will hold quite a bit more.


2002-10-27 05:15:00  Rev 5059   jdorje

	* ggzd/ggzdb.c ggzd/control.c ggzd/ggzdb.h ggzd/ggzdb_mysql.c 
	  ggzd/ggzdb_pgsql.c ggzd/ggzdb_db2.c ggzd/ggzdb_db3.c 
	  ggzd/ggzdb_proto.h:
	  A moderate cleanup to the *interface* to the database code.  From 
	  this a
	  rather full-fledged cleanup fell out:
	  - The return value of most DB functions was "int".  This was not
	    particularly descriptive.  I changed it to GGZDBResult for most
	    functions.
	  - Most backend database functions, when given a DB error (which 
	  shouldn't
	    happen, normally) would just return the value the DB function 
	  gave them.
	    This is less than good, since it could be interpreted 
	  arbitrarily by
	    the calling code.  Therefore I added a new GGZDBResult 
	  enumerated value,
	    GGZDB_DB_ERR.  This is returned by functions when database access
	    fails.  It has limited handling by the callers (but, at least it 
	  won't
	    be interpreted as some other error - and really, what possible 
	  handling
	    is there?).
	  - I added some documentation to the backend DB functions (in
	    ggzdb_proto.h), as best I understand them.  I suspect that pgsql 
	  and
	    mysql will not behave correctly in some situations; I've added 
	  some
	    comments there but not much else.


2002-10-27 01:30:52  Rev 5058   jdorje

	* ggzd/table.c ggzd/transit.h ggzd/players.c ggzd/transit.c:
	  In a player transit, pass the caller through as well - since this 
	  may
	  not be the same as the player involved in the transit.
	  Thus players who are booted will know who booted them.


2002-10-27 01:04:35  Rev 5057   jdorje

	* ggzd/table.c ggzd/table.h ggzd/transit.c:
	  - In a transit player event, make sure we pass on the reason (for 
	  the
	    leave).  Otherwise it just stays at 0...
	  - If the table is shut down because of an error, track that and 
	  alert the
	    players leaving accordingly.


2002-10-26 22:48:07  Rev 5055   jdorje

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/transit.h ggzd/net.h 
	  ggzd/table.h ggzd/players.c ggzd/transit.c:
	  When a player joins/leaves a table, send a <JOIN>/<LEAVE> tag 
	  instead of
	  or in addition to the associated <RESULT> tag.
	  The desired functional behavior is:
	    - Join:
	      * When a player is automatically joined after a launch, we 
	  should send
	        <JOIN TABLE='x'/>
	      * When a player sends us a join that succeeds, we should send
	        <RESULT ACTION='JOIN' CODE='0'/> <JOIN TABLE='x'/>
	      * When a player sends us a join that fails, we should send
	        <RESULT ACTION='JOIN' CODE='x'/>
	    - Leave:
	      * When a game server crashes or is killed, we should send
	        <LEAVE REASON='gameerror'/>
	      * When a game server exits normal (GGZDMOD_STATE_DONE), we 
	  should send
	        <LEAVE REASON='gameover'/>
	      * When a player is booted from a table, we should send
	        <LEAVE REASON='boot' PLAYER='xxxxx'/>
	      * When a player sends a leave that succeeds, we should send
	        <RESULT ACTION='leave' CODE='0'/> <LEAVE REASON='normal'/>
	      * When a player sends a leave that fails, we should send
	        <RESULT ACTION='leave' CODE='x'/>
	  Unfortunately, this behavior has not *quite* been reached.  But it 
	  is
	  close.  Another problem with the current implementation is that it 
	  is
	  quite ugly - the transit code is being overloaded to send 
	  transit-specific
	  data, something that it was not originally intended to do.  In 
	  time this
	  will have to be cleaned up one way or another...


2002-10-26 07:43:26  Rev 5051   jdorje

	* ggzd/net.c ggzd/table.c ggzd/client.c:
	  Removed some 'default' cases so it's easier to make sure the list is
	  full.


2002-10-26 05:46:25  Rev 5050   jdorje

	* ggzd/net.c:
	  If no TYPE is specified for a <LOGIN>, assume a 'guest' login.


2002-10-26 05:26:53  Rev 5048   jdorje

	* ggzd/net.c:
	  If no TYPE is specified for a <CHAT>, assume 'normal'.


2002-10-25 23:56:41  Rev 5034   jdorje

	* game_servers/chinese-checkers/game.h 
	  game_servers/chinese-checkers/main.c 
	  game_servers/chinese-checkers/game.c:
	  Update chinese-checkers so it supports GGZDMOD_SEAT_EVENT.


2002-10-25 22:13:36  Rev 5033   jdorje

	* game_servers/reversi/main.c game_servers/reversi/game.c 
	  game_servers/reversi/game.h:
	  Update reversi so it supports GGZDMOD_EVENT_SEAT.


2002-10-25 20:37:55  Rev 5031   jdorje

	* ggzdmod/ggzdmod.c:
	  When we're launching the game, we fork() and then exec().  After 
	  the fork,
	  if there are any errors we should *not* call ggz_debug or any of its
	  friends (including ggz_error_sys_exit()).  These may pass on their 
	  output
	  to a handler function, which may not work properly since we've 
	  forked() off
	  of the main program.
	  Instead, when this happens we send a ggzdmod log message.  This 
	  cannot be
	  done (easily) with ggzdmod_log, since the ggzdmod object we have 
	  is a
	  GGZ-side one and we're now on the game side.  Instead we access 
	  the IO
	  functions directly to send first a log message and then to change 
	  the
	  state to DONE.
	  This could end up being a useful debugging tool at some point, 
	  since if
	  the exec fails (for instance, because the command was not set 
	  correctly)
	  we will not get a useful ggzd.debug line about it.  But it would 
	  be more
	  useful if the game could send *error* messages to ggzd, 
	  independently of
	  the "debug" messages it currently sends.


2002-10-25 17:33:21  Rev 5030   jdorje

	* ggzdmod/ggzdmod.h:
	  Add a note to the documentation on ggzdmod_connect.


2002-10-25 17:13:56  Rev 5029   jdorje

	* tests/ggzdtest.c:
	  We can't just exec "logmod", we need the full path of the game 
	  module
	  executable.  Use getenv("PWD") to obtain this (may not work on all
	  systems?).  See the @note under ggzdmod_set_module().


2002-10-25 17:12:38  Rev 5028   jdorje

	* tests/basic.c:
	  An invalid ggzdmod object may return either 0 or -1 seats.


2002-10-25 17:10:56  Rev 5027   jdorje

	* ggzdmod/ggzdmod.h:
	  Added a @note on ggzdmod_set_module().


2002-10-25 16:53:20  Rev 5026   jdorje

	* ggzdmod/ggzdmod.c:
	  ggzdmod_get_num_seats() shouldn't return -1 just because there's no
	  connection.  It _espectially_ shouldn't do this on the GGZ side.


2002-10-25 08:31:11  Rev 5025   jdorje

	* game_servers/tictactoe/game.c:
	  Since the table is no longer killed when there are still 
	  spectators at it,
	  we have to make sure we check to see if it's empty when a spectator
	  leaves.


2002-10-24 05:48:52  Rev 5021   jdorje

	* ggzdmod/ggzdmod.c:
	  - Fixed two typos where old_seat was being looked at instead of 
	  new_seat.
	  - Changed error return values so each different error gets a 
	  different
	    value.  This is marginally helpful in debugging.


2002-10-24 05:30:26  Rev 5020   jdorje

	* ggzd/event.c:
	  Removed spurious debug output.


2002-10-24 00:56:26  Rev 5019   jdorje

	* game_servers/ggzcards/ai/game.c:
	  If there are no human players at the table, then sleep() for two 
	  seconds
	  in between each trick.  This will prevent a runaway AI table from
	  hogging resources, leaving any spectators behind, and becoming
	  unresponsive.
	  It is done at the *client* end so that the server can remain 
	  responsive
	  (for instance, to players joining or leaving).


2002-10-23 22:19:46  Rev 5017   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Make it an option to hide hands from spectators (disabled by 
	  default).
	  This option has huge cheating ramifications, but for now it should 
	  be fine
	  as it is...


2002-10-23 22:02:37  Rev 5016   jdorje

	* game_servers/tictactoe/game.c:
	  Use a more elegant form of seats_full() and seats_empty().
	  Also the table will no longer terminate if there are still 
	  spectators.


2002-10-23 22:01:40  Rev 5015   jdorje

	* game_servers/ggzcards/common.c:
	  Use a more elegant form of seats_full() and seats_empty().


2002-10-23 21:06:41  Rev 5012   jdorje

	* ggzdmod/ggzdmod.c:
	  Remove obsolete functions seat_find_player() and 
	  spectator_find_player().


2002-10-23 20:26:32  Rev 5011   jdorje

	* ggzdmod/ggzdmod.c:
	  Avoid declaring a variable in the middle of a block.  gcc3.2 lets 
	  me do
	  this for some reason...


2002-10-23 18:41:30  Rev 5010   jdorje

	* game_servers/ggzcards/common.c:
	  Avoid having an assertion fail when we 'sit' at a table.


2002-10-23 18:10:38  Rev 5009   jdorje

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/transit.h ggzd/net.h 
	  ggzd/table.h ggzd/players.c ggzd/players.h ggzd/transit.c:
	  Added handling for the RESEAT tag.
	  Doing this right entailed significant changes to the transit code,
	  including the unification of SPECTATOR and SEAT change transit 
	  events.
	  However this is offset by the lack of elegence of the new code 
	  (which may
	  be improved over time).
	  There is currently no 'reseat' UPDATE.  When a reseat happens, the 
	  update
	  sent consists of a 'leave' followed by a 'join'.  This will 
	  inevitably
	  cause problems for some clients.


2002-10-23 17:50:56  Rev 5007   jdorje

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  Added function ggzdmod_reseat() so that ggzd can tell the game 
	  servers
	  when a player reseats themselves.


2002-10-22 23:58:53  Rev 5003   jdorje

	* ggzd/net.c:
	  Thorough cleanup to ggzd net code - many unlikely bugs fixed.


2002-10-22 20:23:12  Rev 5001   jdorje

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/players.c ggzd/players.h:
	  Add support for table booting, and improve the code for desc and 
	  seat
	  updates.
	  This code is currently very dangerous.  Locking is not done 
	  properly, so
	  if the table in question goes away while we're working on it we 
	  could
	  get some really nasty results.  There is a similar problem when 
	  dealing
	  with the player we're booting.  Fixing this will take some 
	  significant
	  code (or structural changes).
	  Booting a player is currently done just by starting them on a
	  GGZ_TRANSIT_LEAVE.  Unfortunately, the code doesn't know the 
	  difference
	  between a boot and a player <LEAVE>, and will send the player a 
	  <RESULT>
	  tag when the leave completes.  This is probably harmless for now.


2002-10-22 17:46:24  Rev 4999   dr_maux

	* game_servers/geekgame/geekgame.h game_servers/geekgame/geekgame.
	  cpp game_servers/geekgame/protocol.h:
	  - first basic code:
	   * let all players join, try to get their names and player pics
	   * when enough have joined, announce game start
	   * whenever one leaves, the game is interrupted
	   * prepare game_end()


2002-10-22 17:40:09  Rev 4998   dr_maux

	* game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - players() as a wrapper for ggzdmod_get_num_seats()


2002-10-22 17:29:18  Rev 4997   dr_maux

	* configure.in:
	  - create geekgame makefile


2002-10-22 17:29:01  Rev 4996   dr_maux

	* game_servers/Makefile.am:
	  - add geekgame to subdirs


2002-10-22 17:28:46  Rev 4995   dr_maux

	* game_servers/geekgame/geekgame.h game_servers/geekgame/.cvsignore 
	  game_servers/geekgame/geekgame.dsc game_servers/geekgame 
	  game_servers/geekgame/geekgame.room game_servers/geekgame/main.cpp 
	  game_servers/geekgame/geekgame.cpp game_servers/geekgame/protocol.
	  h game_servers/geekgame/Makefile.am:
	  - add some more or less empty source files which will eventually 
	  turn into the
	    geekgame server


2002-10-22 09:23:14  Rev 4991   jdorje

	* game_servers/ggzcards/common.c:
	  - If a BOT leaves a seat, do most of the same 'leave' updates as 
	  when a
	    player leaves.
	  - Start and stop the AI process when a bot joins and leaves the 
	  table.
	    Note that introducing a bot mid-hand will probably not lead to 
	  very
	    effective play.


2002-10-22 08:32:21  Rev 4990   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h:
	  Resync client library between server and client.


2002-10-22 08:23:04  Rev 4988   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/net.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - Tell the client the GGZ seat number of each player (or -1 if 
	  they have
	    none).
	  - The (AI) client must read this information, of course.
	  - The protocol becomes incompatible.


2002-10-22 05:33:55  Rev 4987   jdorje

	* game_servers/tictactoe/game.c:
	  Unify the JOIN, LEAVE, and SEAT handler functions.


2002-10-22 05:14:25  Rev 4986   jdorje

	* game_servers/tictactoe/game.c:
	  Add a handler for the ggzdmod SEAT event, so that switching 
	  between bots
	  and open seats will work smoothly.


2002-10-22 05:13:37  Rev 4985   jdorje

	* ggzdmod/ggzdmod.c:
	  - When a seat change turns a seat into a bot, name it "AI" just 
	  like when
	    we're given a bot on launch.
	  - Remove a spurious strdup.


2002-10-22 04:34:51  Rev 4984   jdorje

	* ggzd/table.c ggzd/table.h ggzd/players.c ggzd/seats.c ggzd/transit.
	  c:
	  Fix things so that table seat updates sent from the client will be
	  handled.  Note that right now anyone can make such an update - the 
	  correct
	  authorization policy is a little complicated (we shouldn't just 
	  allow the
	  table owner to make updates).


2002-10-22 04:27:46  Rev 4983   jdorje

	* ggzdmod/ggzdmod.c:
	  Enable the SEAT and SPECTATOR_SEAT ggzdmod events.


2002-10-22 02:16:46  Rev 4979   jdorje

	* ggzd/net.c:
	  When sending error results for the <UPDATE> tag, the action type is
	  'update', not 'protocol'.  The error is not fatal.


2002-10-22 02:11:32  Rev 4978   jdorje

	* ggzd/net.c:
	  Avoid a segfault if an invalid UPDATE tag is sent.


2002-10-22 00:11:03  Rev 4972   jdorje

	* ggzd/table.c ggzd/table.h ggzd/client.c ggzd/players.c 
	  ggzd/control.c ggzd/ggzd.h ggzd/event.c ggzd/players.h:
	  Use pthread_kill() and signals to alert a player/table thread when 
	  an
	  event is pending waiting to be handled.  This drastically reduces 
	  the
	  internal latency when handling events (compared to polling every
	  half-second for them, which was the old system).


2002-10-21 21:27:03  Rev 4971   jdorje

	* ggzd/table.c ggzd/client.c ggzd/players.c ggzd/ggzd.h:
	  #define GGZ_RESYNC_SEC and GGZ_RESYNC_USEC in only one place: ggzd.
	  h.
	  This means players and tables must now have the same sync time - 
	  this is
	  probably a good thing anyway.


2002-10-20 09:05:32  Rev 4965   jdorje

	* ggzd/hash.h ggzd/protocols.h ggzd/datatypes.h ggzd/ggzdb_pgsql.c 
	  ggzd/login.c ggzd/room.c ggzd/login.h ggzd/players.c ggzd/chat.c 
	  ggzd/room.h ggzd/event.c ggzd/ggzdb_mysql.c ggzd/players.h 
	  ggzd/ggzdb_db2.c ggzd/transit.c ggzd/ggzdb_db3.c ggzd/event.h 
	  ggzd/ggzduedit.c ggzd/net.c ggzd/perms.c ggzd/table.c ggzd/net.h 
	  ggzd/table.h ggzd/parse_opt.c ggzd/ggzdb.c ggzd/ggzdb.h 
	  ggzd/err_func.c ggzd/daemon.c ggzd/err_func.h ggzd/client.c 
	  ggzd/seats.c ggzd/control.c ggzd/hash.c ggzd/client.h ggzd/seats.h:
	  Reformat the #includes for all of ggzd:
	    - Make sure #include <config.h> is at the top of every .c file; 
	  for
	      consistency remove it from all .h files.
	    - Change <...> to "..." for locally included files - hopefully 
	  this will
	      make Josef happy; there were enough inconsistencies it was 
	  time to
	      fix them all.
	    - Reorder #includes: first standard system-wide includes, then 
	  library
	      includes (mysql, expat, libggz), then local includes.


2002-10-20 08:24:21  Rev 4964   jdorje

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/net.h ggzd/room.c:
	  - Split GGZUpdateOpcode into GGZPlayerUpdateType and 
	  GGZTableUpdateType.
	  - Lots of renaming and a few cleanups follow this.
	  - Things should be much clearer now.


2002-10-20 08:07:35  Rev 4963   jdorje

	* ggzd/net.c ggzd/hash.h ggzd/net.h ggzd/hash.c:
	  - Change the prototype of net_send_player_update: "unsigned char" 
	  becomes
	    "GGZUpdateOpcode" and "char *" becomes "const char *".
	  - Make minimal changes elsewhere to avoid getting warnings with 
	  this:
	    * Some parameters for hash functions become const char *.
	    * Some extra cases within net_send_player_update.


2002-10-20 07:50:34  Rev 4962   jdorje

	* ggzd/table.c ggzd/protocols.h:
	  Cleanups to the table update system.
	    - table_spectator_event and table_seat_event go away; they weren't
	      used anyway.
	    - The GGZ_UPDATE_SEAT update is handled by 
	  table_update_event_enqueue.
	    - The GGZ_UPDATE_SPECTATOR update goes away - the only types of
	      spectator updates are GGZ_UPDATE_SPECTATOR_JOIN and
	      GGZ_UPDATE_SPECTATOR_LEAVE.
	    - To test this out, code is added to remove duplicate seat 
	  reservations
	      when a player joins a table.  This code is currently disabled.
	    - The GGZ_UPDATE_*** enumeration values are reordered, their 
	  explicit
	      values are removed, and they're commented.
	    - GGZTableEventData::opcode is a GGZUpdateOpcode.
	    - The switch in table_event_callback is missing the 
	  GGZ_UPDATE_LAG case.


2002-10-19 22:36:07  Rev 4957   jdorje

	* ggzd/players.c:
	  Adjust for the GGZ_CHAT_NONE -> GGZ_CHAT_UNKNOWN change.


2002-10-19 19:03:33  Rev 4952   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  ggzdmod_set_num_seats returns an int value to alert of the error 
	  status.


2002-10-19 06:34:38  Rev 4951   jdorje

	* ggzdmod/ggzdmod.c:
	  In _ggzdmod_set_num_seats, if the number of seats has been reduced 
	  delete
	  the extra entries.


2002-10-19 00:42:22  Rev 4950   jdorje

	* ggzd/table.c:
	  #if 0...#endif around unused code.


2002-10-19 00:34:05  Rev 4949   jdorje

	* game_servers/spades/engine_func.c ggzdmod/protocol.h ggzdmod/io.c 
	  ggzdmod/ggzdmod.c ggzdmod/io.h ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  Significant simplifications to ggzdmod internals: now all seat and
	  spectator seat changes are sent in the same way, with a 
	  MSG_GAME_SEAT or
	  MSG_GAME_SPECTATOR_SEAT packet.  It is up to the game server to 
	  determine
	  which event (JOIN, LEAVE, SEAT, SPECTATOR_JOIN, SPECTATOR_LEAVE,
	  SPECTATOR_SEAT) to invoke when it happens.


2002-10-19 00:04:36  Rev 4948   jdorje

	* game_servers/tictactoe/game.c:
	  In a GGZDMOD_EVENT_SPECTATOR_JOIN, the event data is a pointer to 
	  the
	  old spectator seat, not a pointer to the spectator seat number 
	  (although
	  the two are compatible).


2002-10-18 22:46:42  Rev 4947   jdorje

	* game_servers/spades/engine_func.c ggzdmod/protocol.h ggzdmod/io.c 
	  ggzdmod/ggzdmod.c ggzdmod/io.h ggzdmod/mod.h:
	  When GGZ informes the game server of a seat join/leave/change or a
	  spectator join/leave, a response is no longer needed.


2002-10-18 20:49:12  Rev 4946   jdorje

	* ggzd/table.c ggzd/table.h ggzd/transit.c:
	  Change GGZd so it no longer uses the "transit" waiting period when 
	  making
	  a seat change at a table.  Now all seat changes are made directly 
	  by GGZd's
	  table thread, who informs (rather than asks) the game server about 
	  it.
	  Since a single process is now in charge of authorizing and making 
	  changes,
	  it becomes possible for more complex transactions to be done without
	  changing the entire infrastructure.  See the ggz-dev posts on
	  "ggzd <-> ggzdmod <-> game server question".
	  Note that ggzdmod is left unchanged right now, although in the 
	  long run
	  this change will allow it to be substantially simplified.


2002-10-18 02:23:56  Rev 4943   jdorje

	* ggzd/net.c:
	  Enable ggzd sending the list of spectators at a table out to the 
	  clients
	  of the players in the room.


2002-10-17 01:05:42  Rev 4935   jdorje

	* game_servers/spades/engine_func.c:
	  Get spades to work with reserved seats.  Also have it do stricter 
	  error
	  checking on the values GGZd sends it.  If there are mistakes, the 
	  game
	  server should exit rather than lock up.


2002-10-16 00:07:30  Rev 4929   jdorje

	* acinclude.ggz:
	  Improvement (hopefully :-) to acinclude.ggz.  Now each GGZ check 
	  takes
	  two optional parameters.  For instance:
	    AC_GGZ_LIBGGZ(action-if-found, action-if-not-found)
	  'action-if-found' will be evaluated if the specified module was 
	  found.
	  'action-if-not-found' will be evaluated if the module is not found.
	  This
	  is consistent with other autoconf macros.  If 
	  'action-is-not-found' is
	  empty, then an error will be emitted if the module isn't found.  If
	  'action-if-not-found' is "ignore", then the module will simply be 
	  ignored
	  if it's not found.
	  This is not entirely backwards-compatible, since "ignore" used to be
	  the first parameter to the macro.  But this way is more consistent,
	  in
	  my opinion.


2002-10-15 02:23:36  Rev 4928   jdorje

	* ggzdmod/ggzdmod.c:
	  Replace strings_differ() with ggz_strcmp().


2002-10-10 21:04:56  Rev 4858   jdorje

	* ggzd/net.c ggzd/chat.c ggzd/players.c ggzd/chat.h:
	  Add handling for a table chat (GGZ_CHAT_TABLE) at the server end.
	  Because of the shortcomings of the event system, this is not quite 
	  as
	  trivial as it might otherwise be.  We must first enqueue a table 
	  event,
	  then in the callback function for that event loop over all players 
	  and
	  spectators at the table and enqueue a player event to send them 
	  the chat.
	  This is commented on in the code (along with a possiblity for a 
	  better
	  way).


2002-10-10 17:24:51  Rev 4847   jdorje

	* configure.in:
	  Bump ggzd version to 0.0.7pre.


2002-10-10 17:18:44  Rev 4846   jdorje

	* ggzd/motd.c:
	  Grow the MOTD buffer geometrically instead of arithmetically 
	  (linearly).
	  This makes the ammortized cost of growth O(1).


2002-10-09 06:19:45  Rev 4823   jdorje

	* ggzd/net.c ggzd/net.h ggzd/chat.c:
	  Make the GGZChatEventData fields into const char * instead of char 
	  *.


2002-10-09 06:17:54  Rev 4822   jdorje

	* ggzd/net.c ggzd/chat.c ggzd/players.c ggzd/chat.h ggzd/players.h:
	  s/unsigned char/GGZChatType/ in many places.


2002-10-08 23:32:22  Rev 4819   jdorje

	* ggzd/net.c ggzd/protocols.h ggzd/net.h ggzdmod/ggzdmod.c:
	  - Move GGZChatType enum into ggz_common.
	  - Add ggz_chattype_to_string() and ggz_string_to_chattype 
	  functions to
	    ggz_common.
	  - Change existing code to use the above two instead of their own 
	  custom
	    code.
	  - Don't accept invalid and dangerous chat messages (sent across the
	    network).  But do accept invalid and non-dangerous chat messages:
	  to
	    improve backward-compatability if new chat types are added.


2002-10-08 00:24:34  Rev 4809   jdorje

	* ggz_server.spec:
	  Update .spec file for libggz.
	  This is hard to test, since nobody uses an RPM-based distro...


2002-10-07 22:59:41  Rev 4800   jdorje

	* ggzd/client.c:
	  Disable the ggzd.protocol net XML dump file by default.


2002-10-07 21:29:28  Rev 4796   jdorje

	* ggzd/control.c:
	  Don't receive a HUP more than once.


2002-10-07 21:28:18  Rev 4795   jdorje

	* NEWS:
	  Rewrote NEWS for 0.0.6, and propogated it to all modules.


2002-10-07 21:16:10  Rev 4794   dr_maux

	* ChangeLog:
	  - update changelog for 0.0.6


2002-10-01 18:49:32  Rev 4782   dr_maux

	* configure.in Makefile.am:
	  - use configure.in for AC_INIT, not acinclude.ggz
	  - don't include obsolete doc directory into distribution - leave 
	  it in CVS
	    though as it might still be needed
	    (For the future, some up-to-date mini docs would be cool though.)


2002-10-01 15:43:24  Rev 4778   jdorje

	* man/ggzdmod.h.3:
	  Update man page for ggzdmod.


2002-10-01 15:42:37  Rev 4777   jdorje

	* ggzdmod/Doxyfile:
	  Bump ggzdmod version number to 0.0.6.


2002-09-29 13:10:57  Rev 4768   dr_maux

	* ggzd/Makefile.am configure.in:
	  - avoid messing with LIBOBJ


2002-09-29 12:38:44  Rev 4763   dr_maux

	* man/ggzduedit.6 configure.in man/ggzd.6:
	  - ggzd version number bumping


2002-09-29 11:53:43  Rev 4757   dr_maux

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/krosswater/krosswater.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/chess/chess.dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/lapocha/lapocha.dsc game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/spades/spades.
	  dsc game_servers/reversi/reversi.dsc game_servers/muehle/muehle.
	  dsc game_servers/hastings/hastings.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - game server number bumping


2002-09-27 15:30:30  Rev 4748   dr_maux

	* ggzdmod/Makefile.am:
	  - ggzdmod gets a higher interface number too
	  For example, the old API of ggzdmod_set_module is not available 
	  any more.
	  Chances are high that the current API is relatively stable.
	  However, if we ever decide to keep an interface number, we must 
	  double-check
	  using 'nm' to see if non-static functions or variables have 
	  changed or not.


2002-09-27 08:58:31  Rev 4746   dr_maux

	* autogen.sh:
	  - new autogen


2002-09-26 21:52:23  Rev 4744   jdorje

	* ggzdmod/Makefile.am:
	  Fixes to the build system:
	    - Added $(LIB_GGZ) to libggzdmod_la_LIBADD.  This allows game 
	  servers
	      to compile (which is a good thing...).
	    - Removed (commented out) the compilation of libggzdmod.a.
	    - Removed the .NOTPARALLEL target, which is only necessary because
	      the .a and .la compilations conflicted with each other.


2002-09-26 21:11:22  Rev 4743   jdorje

	* ggzd/parse_opt.c ggzd/control.c ggzd/datatypes.h:
	  Only read the MOTD after all configuration has been read.  That 
	  way we
	  don't run into problems like opt.conf_dir being NULL.


2002-09-26 21:04:07  Rev 4742   jdorje

	* ggzd/motd.c:
	  Some more cleanups to the MOTD code:
	    - If opt.conf_dir is undefined AND the motd uses a relative path,
	  log
	      an error and return.  Note that the MOTD will already have 
	  been erased
	      (if this is a re-load).
	    - Only determine the startup time once, the first time motd_read 
	  is
	      called, and regardless of whether the MOTD is actually being 
	  used at
	      the time.  That way if re-reading the MOTD later won't break 
	  this.


2002-09-26 20:56:08  Rev 4741   dr_maux

	* game_servers/lapocha/Makefile.am game_servers/dots/Makefile.am 
	  game_servers/keepalive/src/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am game_servers/muehle/Makefile.
	  am game_servers/reversi/Makefile.am game_servers/spades/Makefile.
	  am game_servers/tictactoe/Makefile.am game_servers/escape/Makefile.
	  am game_servers/hastings/Makefile.am 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/ggzcards/Makefile.am game_servers/krosswater/Makefile.
	  am game_servers/chess/Makefile.am game_servers/combat/Makefile.am:
	  - use shared library libggzdmod.la
	  - the 'make test' directive will maybe have to be altered for this
	  - game servers don't need to link libggz because libggzdmod refers 
	  to it
	    automatically


2002-09-26 12:58:04  Rev 4732   dr_maux

	* ggzd/control.c:
	  - replace ggz_make_socket_or_die with more user-friendly 
	  ggz_make_socket, which
	    writes out an error to stdout in every case


2002-09-26 12:42:45  Rev 4731   dr_maux

	* ggzd/motd.c:
	  - fix segfault in ggzd:
	  Don't read MOTD if configuration file is missing.


2002-09-26 10:42:10  Rev 4719   dr_maux

	* configure.in acinclude.ggz:
	  - deploy new acinclude.ggz


2002-09-26 10:37:38  Rev 4718   dr_maux

	* ggzd/Makefile.am:
	  - use libggz values explicitly


2002-09-25 21:46:41  Rev 4705   jdorje

	* ggzd/table.c:
	  The first genuine memory leak fix.  The question, in table_free: 
	  "do we
	  need to free transit too?"  The answer: yes.
	  It appears when the last player leaves a table that transit_name 
	  is never
	  free'd.  This is probably an error, but I don't know enough about 
	  it to
	  fix it.  So in table_free, just free transit_name and log an error 
	  message.


2002-09-25 21:28:07  Rev 4704   jdorje

	* ggzd/client.c:
	  Hey look!  CHANNEL clients have data too.


2002-09-25 21:09:40  Rev 4703   jdorje

	* ggzd/client.c:
	  Doh!  client->data is already free'd in client_free().  So instead 
	  of
	  calling player_free() earlier, call it in client_free() if the type
	  of client is GGZ_CLIENT_PLAYER.


2002-09-25 19:38:01  Rev 4702   jdorje

	* ggzd/parse_opt.c ggzd/control.c ggzd/room.h ggzd/datatypes.h:
	  Do a full cleanup when we quite ggzd via a HUP.  Also fixed a 
	  couple of
	  trivial memory leaks and added cleanup() comments on extra data 
	  fields
	  that need to be freed.
	  This leaves no memory leaks in the simplest case (when the server
	  immediately terminates).  For the rest, only time will tell.


2002-09-25 09:29:10  Rev 4691   dr_maux

	* configure.in:
	  - nice idea, bad result: commenting out the makefile creation for 
	  ggzsh breaks
	    old autoheaders (autoconf -l .)
	  - I removed that line entirely for now


2002-09-25 08:53:21  Rev 4690   dr_maux

	* README.GGZ:
	  - forgot updating readme.ggz for ggzd


2002-09-25 05:04:53  Rev 4689   jdorje

	* ggzd/motd.h ggzd/parse_opt.c ggzd/control.c ggzd/motd.c:
	  Rework some of the MOTD code:
	    - The motd struct is moved into motd.c.
	    - motd_read_file() is passed in the name of the file to read.  
	  This
	      name can be NULL, in which case the MOTD is enabled.
	    - It is OK to call motd_read_file to re-read the file.  Note 
	  that this
	      is not currently safe because the MOTD struct has no locking.
	    - Added a function cleanup_data() in control.c, which cleans up 
	  the
	      MOTD data (only if we got a HUP - otherwise there are probably 
	  still
	      running threads).


2002-09-24 21:41:16  Rev 4688   jdorje

	* ggzd/chat.c ggzd/control.c:
	  Several clever new features for ggzd:
	    - chat_server_2_player() can be called with a NULL player name to
	      get a server-wide, server-generated announcement.  As the 
	  function
	      says, "this could be a usefule function for other uses".
	    - SIGTERM and SIGINT handlers are enabled even when we're not in
	      daemon mode.  Why exit abnormally when we can easily handle 
	  them?
	    - A SIGHUP handler has been added.  When a HUP is received, we 
	  enter
	      "hangup" mode.  This means closing the main socket (so we no 
	  longer
	      accept new connections), so that the main loop just sleeps.  
	  When
	      all players have left, the server will exit.
	    - Call ggz_memory_check before exiting.


2002-09-24 19:01:54  Rev 4687   jdorje

	* ggzd/client.c ggzd/players.c ggzd/players.h:
	  - When a player logs out, remove them from their table (if they are
	    at one).
	  - Add function player_free to free a player structure.  Call this 
	  when
	    a player logs out.  (Note: a more rigorous way of testing for 
	  memory
	    leaks is needed.  ggzd should be able to exit itself, and do a mem
	    cleanup at the end.  All in good time...)


2002-09-23 22:45:37  Rev 4674   jdorje

	* acinclude.ggz:
	  Update acinclude.ggz in the txt-client, and label acinclude.ggz as 
	  being
	  included in txt-client.


2002-09-23 16:45:01  Rev 4671   jdorje

	* game_servers/chess/libcgc/Makefile.am 
	  game_servers/chess/libcgc/cgc.h game_servers/chess/libcgc/games.h:
	  Updated libcgc to make it identical between ggzd, gtk-games, and
	  kde-games.


2002-09-23 09:44:15  Rev 4664   dr_maux

	* game_servers/spades/engine_func.c:
	  - read number of spectators upon game launch.
	  This number is ignored, as well as the number of seats, which are 
	  assumed to be
	  always 4.


2002-09-23 02:36:37  Rev 4658   jdorje

	* game_servers/ggzcards/client/Makefile.am:
	  Manipulate CFLAGS directly to add the -DAI_CLIENT flag - using
	  libclient_a_CFLAGS doesn't seem to work for automake<1.5.


2002-09-23 00:05:12  Rev 4655   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h:
	  Changed "core" (the ggz_debug debugging type) to DBG_CLIENT.


2002-09-22 17:20:00  Rev 4653   dr_maux

	* game_servers/dots/game.c game_servers/dots/ai.h 
	  game_servers/dots/game.h game_servers/dots/dots.dsc 
	  game_servers/dots/main.c:
	  - add preliminary spectator support to Dots
	  - but don't enable it yet: it works with KDots but needs some 
	  rethought of the
	    protocol, and severe changes in the Gtk+ client
	  - so, it will probably be delayed until after the release


2002-09-21 20:11:01  Rev 4649   jdorje

	* game_servers/ggzcards/client/Makefile.am:
	  Set CFLAGS "properly" (so as not to overwrite existing flags).


2002-09-21 16:46:58  Rev 4647   dr_maux

	* game_servers/hastings/main.c game_servers/hastings/hastings.dsc 
	  game_servers/hastings/game.c game_servers/hastings/game.h:
	  - spectator support for Hastings
	  - be clever: call ggzdmod_dispatch within bots moves, because this 
	  is
	   a) not dangerous (bots don't go away)
	   b) good for joining spectators because they get their sync faster


2002-09-20 16:22:20  Rev 4642   dr_maux

	* game_servers/keepalive/src/world.cpp:
	  - restrict chat message length to be KEEPALIVE_CHAT_LENGTH chars


2002-09-20 08:01:58  Rev 4639   dr_maux

	* game_servers/keepalive/src/world.cpp:
	  - protocol change: don't send data to player unless he logs in
	    (this is different from spectators now)
	  - since the player is then included in the player count, send 
	  player count - 1
	    in an op_player event


2002-09-19 21:14:40  Rev 4637   dr_maux

	* game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/keepalive.h:
	  - build up world only when ggzdmod could be initialized successfully
	  There's currently something odd: Keepalive does have an own error 
	  handler, yet
	  the ggzdmod one is called after its own. This shouldn't happen, in 
	  case a game
	  wants to "keep alive" (haha, pun) after such a failure.


2002-09-19 16:18:33  Rev 4631   jdorje

	* acinclude.ggz:
	  Include gnome-client on the list of modules that use acinclude.ggz.


2002-09-18 22:14:57  Rev 4627   jdorje

	* game_servers/ggzcards/play.c:
	  hand_has_valid_card() should be defined and called only when 
	  NDEBUG is
	  not defined.


2002-09-18 19:16:08  Rev 4626   jdorje

	* ggzd/motd.c:
	  s/int/size_t/ in several places.


2002-09-18 19:11:26  Rev 4625   jdorje

	* ggzd/parse_opt.c:
	  s/int/unsigned int/


2002-09-18 15:28:32  Rev 4620   jdorje

	* game_servers/keepalive/src/player.cpp:
	  Add #include <errno.h>.


2002-09-18 06:19:28  Rev 4616   dr_maux

	* game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/player.cpp:
	  - minor cleanups


2002-09-18 06:14:43  Rev 4615   dr_maux

	* game_servers/keepalive/ggzsh/keepalive_test.rb:
	  - add sample script for ruby


2002-09-18 06:13:41  Rev 4614   dr_maux

	* game_servers/keepalive/ggzsh/Makefile.am 
	  game_servers/keepalive/ggzsh/ggzsh.cpp 
	  game_servers/keepalive/ggzsh/main.cpp 
	  game_servers/keepalive/ggzsh/ggzsh.h:
	  - prepare inclusion of other backend languages
	  - method to display configuration information
	  - recommend Ruby 1.7 and Python 2.2


2002-09-17 15:24:42  Rev 4606   jdorje

	* ggzd/net.c:
	  Have more net functions return an actual error status, not just 
	  blindly
	  return OK whether or not there was a network error.


2002-09-17 15:06:22  Rev 4605   jdorje

	* ggzd/net.c:
	  In net_set_dump_file, if NULL is given close and reset any 
	  existing dump
	  file.


2002-09-17 15:01:54  Rev 4604   jdorje

	* ggzd/net.c ggzd/net.h:
	  Net functions return a GGZReturn, not a nameless integer.


2002-09-17 14:42:16  Rev 4603   jdorje

	* ggzd/net.c ggzd/protocols.h:
	  Changed the GGZ_CHAT_*** flags to an enumeration.  Removed the one 
	  use of
	  them as a flag value.


2002-09-17 05:54:09  Rev 4602   jdorje

	* configure.in:
	  Don't output game_servers/keepalive/ggzsh/Makefile, since nothing 
	  in this
	  directory is built currently.


2002-09-17 03:28:57  Rev 4600   jdorje

	* Makefile.am:
	  Added tests to DIST_SUBDIRS.


2002-09-17 03:28:35  Rev 4599   jdorje

	* game_servers/keepalive/Makefile.am:
	  Added .dsc and .room files to EXTRA_DIST.


2002-09-16 22:46:10  Rev 4590   jdorje

	* ggzd/event.h ggzd/table.h ggzd/ggzd.h ggzd/players.h:
	  - Moved "typedef struct GGZEvent GGZEvent;" into ggzd.h.
	  - s/void*/GGZEvent*/ in the table and player structs.


2002-09-16 22:33:35  Rev 4589   jdorje

	* ggzd/event.h ggzd/event.c:
	  Declare struct GGZEvent only within event.c, not globally within 
	  event.h.


2002-09-16 06:53:40  Rev 4585   jdorje

	* ggzd/net.c ggzd/transit.h ggzd/net.h ggzd/table.h ggzd/players.c 
	  ggzd/transit.c:
	  s/char/GGZClientReqError/ or s/int/GGZClientReqError/ in many 
	  places.


2002-09-16 06:51:32  Rev 4584   jdorje

	* ggzd/table.c:
	  - s/char/GGZClientReqError in several places.
	  - Don't accept the status value passed with GGZDMOD_EVENT_LEAVE
	    and GGZDMOD_EVENT_SPECTATOR_LEAVE as a GGZClientReqError error.
	    Instead translate an error (-1) code as E_SEAT_ASSIGN_FAIL.
	  - Note that GGZDMOD_EVENT_JOIN and GGZDMOD_EVENT_PLAYER_JOIN do not
	    handle the error case at all.


2002-09-16 06:08:32  Rev 4583   jdorje

	* ggzd/ggzd.h:
	  Doh!  Reverted unintentional commit.


2002-09-16 06:07:30  Rev 4582   jdorje

	* ggzd/table.c ggzd/client.c ggzd/players.c ggzd/ggzd.h:
	  s/int/GGZReturn/ in several places.


2002-09-16 05:56:37  Rev 4581   jdorje

	* ggzd/chat.c ggzd/chat.h:
	  chat_room_enqueue must return a GGZClientReqError (my mistake).


2002-09-16 05:55:58  Rev 4580   jdorje

	* ggzd/room.h:
	  The prototype for room_join must match the function itself (my 
	  mistake).


2002-09-16 05:33:48  Rev 4579   jdorje

	* ggzd/event.c:
	  s/int/GGZEventFuncReturn/ in several places.


2002-09-16 05:27:04  Rev 4578   jdorje

	* ggzd/room.c:
	  Give a consistent return value to room functions:
	    - room_join returns a GGZClientReqError.
	    - show_server_info return a GGZReturn.


2002-09-16 05:13:00  Rev 4577   jdorje

	* ggzd/client.c ggzd/players.c:
	  Fixed some handling of GGZPlayerHandlerStatus values.


2002-09-16 04:57:02  Rev 4576   jdorje

	* ggzd/players.c:
	  s/int/GGZPlayerType/ in one place.


2002-09-16 04:36:11  Rev 4575   jdorje

	* ggzd/client.c:
	  Give client functions a consistent return type: 
	  client_check_ip_ban_list
	  returns a GGZReturn.


2002-09-16 04:33:49  Rev 4574   jdorje

	* ggzd/daemon.c:
	  Give daemon functions a consistent return type: lock_fd returns a
	  GGZReturn.


2002-09-16 04:28:11  Rev 4573   jdorje

	* ggzd/util.c:
	  Give util functions a consistent return type:
	    - make_path returns a GGZReturn.


2002-09-16 04:26:07  Rev 4572   jdorje

	* ggzd/table.c ggzd/table.h:
	  Give consistent return types to table functions:
	    - table_launch and table_kill return a GGZClientReqError.
	    - table_check, table_handler_launch, table_start_game,
	      table_event_enqueue, table_update_event_enqueue,
	      table_seat_event_enqueue, and table_spectator_event_enqueue 
	  return a
	      GGZReturn.


2002-09-16 04:09:39  Rev 4571   jdorje

	* ggzd/players.c ggzd/players.h:
	  Give consistent return values to the player functions:
	    - player_updates returns a GGZReturn.
	    - player_chat returns a GGZPlayerHandlerStatus.
	    - player_transit returns a GGZClientReqError.


2002-09-14 08:04:33  Rev 4563   dr_maux

	* man/ggzduedit.6:
	  - update ggzduedit man page as well


2002-09-14 08:00:27  Rev 4562   dr_maux

	* man/ggzd.6:
	  - add command line options to ggzd's man page


2002-09-13 18:26:37  Rev 4559   jdorje

	* ggzd/table.c ggzd/transit.h ggzd/players.c ggzd/transit.c:
	  Gave consistent return types to the transit functions.
	    - transit_seat_event, transit_spectator_event, and 
	  transit_player_event
	      all return a GGZReturn.  One of the callers needs to translate 
	  the
	      return value of transit_seat_event.  For consistency, the 
	  callers
	      of transit_player_event were updated to explicitly use 
	  GGZReturn.
	    - transit_table_event returns a GGZReturn, but has not yet been
	      implemented.
	    - transit_send_seat_to_game and transit_send_spectator_to_game 
	  also
	      return a GGZResult.  The callers were updated to make this 
	  explicit.


2002-09-13 18:15:12  Rev 4557   dr_maux

	* game_servers/keepalive/keepalive.dsc:
	  - allow 100 players for Keepalive
	  This isn't very useful right now, but allows us to fix the core 
	  clients to
	  handle such numbers.
	  (Maybe with a scroll widget or something)


2002-09-13 18:01:57  Rev 4556   jdorje

	* ggzd/login.c ggzd/login.h:
	  Clean up the return types of login functions:
	    - login_add_user returns a GGZReturn.
	    - validate_username is renamed to is_valid_username; it returns a
	      boolean integer.
	    - login_player_anon, login_player_new, and login_player_normal 
	  don't
	      exist (!).


2002-09-13 17:55:07  Rev 4555   jdorje

	* ggzd/chat.c ggzd/chat.h:
	  Gave the chat functions consistent return types.
	  Here I found the first genuine buglet: the return value of
	  event_player_enqueue (a GGZReturn, i.e. 0 or -1) was being treated 
	  as a
	  GGZClientReqError (i.e. an E_*** value).  To fix this, if
	  event_player_enqueue returns GGZ_ERROR chat_player_enqueue will 
	  return
	  E_USR_LOOKUP (is this the proper value?).


2002-09-13 17:50:28  Rev 4554   jdorje

	* ggzd/table.c ggzd/transit.c:
	  Doh.  Took care of the other two callers of event_table_enqueue.


2002-09-13 17:39:35  Rev 4553   jdorje

	* ggzd/event.h ggzd/table.c ggzd/event.c:
	  All event functions now return a GGZReturn.  This makes this part 
	  of the
	  code much more legible.
	  Only for one function did the return value change: 
	  event_table_enqueue
	  returned a GGZClientReqError.  For consistency, I had this return a
	  GGZReturn (0 or -1) and have the caller translate this value.


2002-09-13 17:25:48  Rev 4551   jdorje

	* ggzd/ggzd.h:
	  Functions everywhere return an int - the actual return types may 
	  differ.
	  To help clean things up, I've defined a GGZReturn enumeration - 
	  either 0
	  (GGZ_OK) or -1 (GGZ_ERROR).


2002-09-13 16:19:50  Rev 4548   jdorje

	* game_servers/chess/chess.dsc game_servers/combat/combat.dsc 
	  game_servers/keepalive/keepalive.dsc game_servers/lapocha/lapocha.
	  dsc game_servers/muehle/muehle.dsc game_servers/reversi/reversi.
	  dsc game_servers/tictactoe/tictactoe.dsc 
	  game_servers/escape/escape.dsc game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc:
	  Don't list 0 bots under BotsAllowed for any games.
	  There is a slight complication here: ggz_conf doesn't seem to 
	  allow empty
	  strings (it treats them as null and gives an error).  So rather than
	  leave an empty string for games that don't allow bots I've 
	  commented the
	  line out (which causes ggz_conf to not find it, and ggzd will use 
	  its
	  default value of "").


2002-09-13 15:48:13  Rev 4546   jdorje

	* ggzd/parse_opt.c:
	  Don't allocate space for 0 tables in a room.  This avoids ggz_malloc
	  giving an error message for a 0-byte allocation.


2002-09-13 14:36:44  Rev 4544   jdorje

	* ggzd/parse_opt.c:
	  The declaration of new_exec should come at the top of the block in 
	  which
	  it is located.


2002-09-13 06:49:00  Rev 4543   jdorje

	* ggzd/table.c ggzd/table.h ggzd/players.c:
	  Implement a table_copy() function to make a copy of a table.  This 
	  copy
	  can then be used as a snapshot without having to worry about 
	  locking.
	  Before this change, a snapshot was made just by saying *new_table =
	  *old_table (as opposed to new_table = table_copy(old_table)).  The
	  problem with this was that the seat and spectator data, which is 
	  stored
	  in dynamically allocated arrays, is not copied.  Therefore we can
	  (although I found this very hard to reproduce) end up accessing 
	  stale or
	  invalid data when we try to look at the "snapshot" later.
	  The only down side of this change is that making a snapshot is a bit
	  trickier - we have to make sure to call table_free on the snapshot 
	  when
	  we're done with it.


2002-09-13 06:40:51  Rev 4542   jdorje

	* ggzd/ggzd.h:
	  Enable unlimited seats and spectators for GGZD.


2002-09-13 05:49:33  Rev 4541   jdorje

	* ggzd/table.c ggzd/table.h ggzd/players.c:
	  The launch event gets its own event data.


2002-09-13 05:40:05  Rev 4540   jdorje

	* ggzd/table.c:
	  The table event gets its own event data structure.


2002-09-13 05:14:21  Rev 4539   jdorje

	* ggzd/net.c:
	  Add disabled code so that net_send_table will send the spectator 
	  list as
	  well.  This code should probably be enabled, but I'm deferring the
	  decision for now.


2002-09-13 05:11:04  Rev 4538   jdorje

	* ggzd/room.c:
	  Give the data for a room event its very own data type.


2002-09-13 04:34:38  Rev 4537   jdorje

	* ggzd/transit.c:
	  Made a data structure for the passed-through data for the
	  transit player event.


2002-09-13 02:36:52  Rev 4536   jdorje

	* ggzd/transit.c:
	  Fix a buglet in two cases: the wrong event data size was being 
	  passed to
	  event_table_enqueue for both a spectator and seat events.


2002-09-13 02:34:30  Rev 4535   jdorje

	* ggzd/chat.c:
	  Convert the chat event (chat_event_callback()) to use a special 
	  event
	  data form, and pass a function to free that data.


2002-09-13 02:20:58  Rev 4534   jdorje

	* ggzd/event.h ggzd/table.c ggzd/room.c ggzd/chat.c ggzd/event.c 
	  ggzd/transit.c:
	  Added another parameter to the event_***_enqueue() functions: a data
	  free function.  If non-NULL, this function will be used in place of
	  ggz_free to delete the event data after the event has been handled.
	  Currently all callers pass in NULL.  However, this should change 
	  shortly,
	  as use of this feature can make things a lot simpler at the 
	  calling end.


2002-09-13 01:40:27  Rev 4533   jdorje

	* ggzd/event.c:
	  Added a function event_free to free an event and its data.


2002-09-13 01:35:13  Rev 4532   jdorje

	* ggzd/event.h ggzd/table.c ggzd/room.c ggzd/chat.c ggzd/players.c 
	  ggzd/event.c ggzd/players.h ggzd/transit.c:
	  Changed the type of the "size" parameter for the event functions 
	  (which
	  describes the size of the event data) from (unsigned) int to size_t.


2002-09-12 21:59:31  Rev 4531   jdorje

	* ggzd/transit.c:
	  Made the logic clearer in some GGZEventFunc functions: don't confuse
	  the status values from other functions with our GGZEventFuncReturn 
	  return
	  values.


2002-09-12 21:55:33  Rev 4530   jdorje

	* ggzd/room.c:
	  Make room_event_callback conform exactly to GGZEventFunc.


2002-09-12 21:44:40  Rev 4529   jdorje

	* ggzd/table.c:
	  Fixed buglet: in table_seat_event_enqueue, the wrong data size was 
	  passed
	  in to event_room_enqueue.


2002-09-12 19:34:02  Rev 4528   jdorje

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/players.c ggzd/seats.c 
	  ggzd/ggzd.h:
	  Added a compile-time option UNLIMITED_SEATS.  If defined (off by
	  default), the restriction on the number of seats will be dropped.
	  This option isn't stable yet, for several reasons:
	    - The client GUI can't handle a lot of seats (at least GTK).
	    - There are locking problems, especially when a table ends.
	  However, it should be good for testing - both of the server and 
	  clients.
	  I also fixed a couple minor bugs.


2002-09-12 18:24:27  Rev 4527   jdorje

	* ggzd/players.c:
	  In player_transit(), for the LEAVE and LEAVE_SPECTATOR transit 
	  operations
	  if the person cannot be found at the table, try the other
	  operation.  This is necessary to avoid a stupid/malicious client 
	  from
	  sending an incorrect SPECTATOR tag in the <LEAVE> element.
	  I also check for an error condition: when the player is listed as 
	  being
	  at the table but cannot be found anywhere.  This would be a bug in 
	  ggzd -
	  an error is logged and an attempt to correct things is made.


2002-09-12 15:45:27  Rev 4525   jdorje

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/seats.c ggzd/ggzd.h 
	  ggzd/transit.c:
	  - Added in macro UNLIMITED_SPECTATORS.  When left undefined (as 
	  now),
	    spectators will be stored in a fixed array instead of a dynamic 
	  one.
	  - Added macro MAX_TABLE_SPECTATORS (currently 4).  When compiling 
	  without
	    unlimited spectators, this is the size of the spectator array (the
	    maximum number that can be at a table).
	  - Changed the GGZTable struct: max_num_spectators is only needed for
	    unlimited spectators, and the spectator array itself may be either
	    static or dynamic.
	  - Changed many occurrences of table->max_num_spectators to
	    spectator_seats_num().
	  - Fixed a major bug in spectators_count (fortunately this function 
	  isn't
	    used much).
	  - Added special-cases dependent on UNLIMITED_SPECTATORS to
	    spectator_seats_num and transit_find_spectator.


2002-09-12 03:27:25  Rev 4523   jdorje

	* ggzd/transit.h ggzd/players.c ggzd/transit.c:
	  s/char/GGZTransitType/ in several places.


2002-09-12 03:02:55  Rev 4522   jdorje

	* ggzd/net.c ggzd/players.c ggzd/players.h:
	  Reworked player_table_leave() and player_table_leave_spectator():
	    - Merged the two functions.  We had the idea that the logic 
	  should be
	      moved to the client and the LEAVE element should get a 
	  SPECTATOR tag,
	      but the server cannot rely on this - a malicous client could 
	  fubar
	      the table in several ways by faking his spectator status.  
	  Some fix
	      will be necessary, and this is a first step.  (It also cuts 
	  the code
	      almost in half.)
	    - If the player's table can't be found, don't just silently fail.
	      Instead claim success - after all, the player's not at that 
	  table
	      any more, are they?
	    - If we think the player has a table but we can't find it, log 
	  an error
	      message, remove the player from the table, and tell the client 
	  the
	      leave was successful.


2002-09-12 02:50:55  Rev 4521   jdorje

	* ggzd/transit.h:
	  Made the GGZ_TRANSIT_*** values an enumeration (they're never used 
	  as
	  flags!).


2002-09-12 01:26:20  Rev 4520   jdorje

	* ggzd/net.c:
	  Removed safe_strdup, which is now basically equivalent to 
	  ggz_strdup.
	  Replaced it with ggz_strdup.


2002-09-11 23:02:30  Rev 4519   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  - Bump GGZDMOD_NUM_HANDLERS from 9 up to 10, so that 
	  GGZDMOD_EVENT_ERROR
	    doesn't cause a segfault.
	  - Rename GGZDMOD_NUM_HANDLERS to GGZDMOD_NUM_EVENTS.
	  - Put a check in place to avoid segfault if we have an internally
	    generated out-of-range event.
	  - Have ggzdmod_set_handler return a negative value if the calling 
	  program
	    sends an out-of-range event or other invalid parameter.  
	  Previously it
	    just silently failed.
	  - Note that other ggzdmod functions still return void, and may 
	  silently
	    fail.  Also nobody checks the return value of most of these 
	  functions,
	    which makes debugging a problem.


2002-09-11 19:40:32  Rev 4517   jdorje

	* ggzd/net.c ggzd/table.c ggzd/table.h:
	  Fix a few more holes in the network code:
	    - Avoid a sometimes-guaranteed memory leak when reading a table
	      description.
	    - Avoid letting the client write to random memory by giving us 
	  bogus
	      seat numbers.
	    - Avoid a sometimes-guaranteed memory leak when a <TABLE> tag 
	  has bad
	      options.


2002-09-11 17:00:30  Rev 4516   jdorje

	* ggzd/net.c:
	  Doh!  Added missing "!".


2002-09-11 08:31:00  Rev 4515   jdorje

	* ggzd/net.c ggzd/players.c:
	  Check whether the network connection (GGZNetIO) has valid player 
	  data
	  (net->client->data) before doing anything with that data.  This 
	  prevents
	  many possible server segfaults a malicious client could do with 
	  just a
	  few characters.


2002-09-11 07:44:05  Rev 4514   jdorje

	* ggzd/net.c ggzd/room.c:
	  Replaced strcmp() with strcasecmp() in many places:
	    - In parsing XML elements and tags (makes debugging easier).
	    - Once when comparing two player names (could be important).


2002-09-11 04:10:37  Rev 4509   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/krosswater/krosswater.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/spades/spades.dsc game_servers/hastings/hastings.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed some .dsc files to use more compact number lists - mostly 
	  just to
	  show what can be done.


2002-09-11 03:48:41  Rev 4508   jdorje

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/parse_opt.c 
	  ggzd/seats.c ggzd/datatypes.h ggzd/seats.h:
	  Changed the GGZ network protocol so that player and bot allow 
	  lists are
	  transmitted in a more flexible and legible way.  The allow spectator
	  boolean value is transferred as "true"/"false".
	  I also bumped the protocol version up to 8.  This change will break
	  backwards-compatability, but only when players play games.  Is 
	  there a
	  system in place for allowing for backwards-compatability in a case 
	  like
	  this?  There should be (eventually).


2002-09-11 02:22:46  Rev 4504   jdorje

	* tests/basic.c tests/logmod.c tests/ggzdtest.c:
	  Marked some functions as static.


2002-09-10 06:42:12  Rev 4501   jdorje

	* ggzd/net.c ggzd/table.c ggzd/parse_opt.c ggzd/ggzdb.c ggzd/daemon.
	  c ggzd/datatypes.h ggzd/err_func.c ggzd/ggzdb_pgsql.c ggzd/motd.c 
	  ggzd/room.c ggzd/util.c ggzd/client.c ggzd/chat.c ggzd/players.c 
	  ggzd/event.c ggzd/hash.c ggzd/ggzdb_db2.c ggzd/transit.c 
	  ggzd/ggzdb_db3.c:
	  Converted all malloc (and friends) routines to ggz_malloc (and 
	  friends)
	  ones.
	  This is a change I've been thinking about/working on for a while.  
	  In the
	  process, I've fixed several problems and converted several
	  heap-allocation routines to stack-allocation ones.  All in all, it 
	  should
	  be a big step forward.
	  There is one potential problem.  Some malloc routines, if they 
	  were to
	  fail, would be recoverable.  In the current code, they may just 
	  unlock
	  any applicable locks and fail...but eventually they may be able to
	  recover fully.  By comparison, under ggz_malloc and friends there 
	  is no
	  way to avoid exiting after a failed malloc/realloc.
	  The chance of introducing bugs in this change is small but
	  non-negligible.  It will have to be tested closely.


2002-09-10 00:11:01  Rev 4500   jdorje

	* ggzd/table.c:
	  Free the spectator array when the table is freed.


2002-09-09 17:44:45  Rev 4498   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Don't exit the server if there are any spectators still attached 
	  (even if
	  there are no actual players).


2002-09-09 10:28:33  Rev 4497   jdorje

	* ggzd/net.c ggzd/table.c ggzd/net.h ggzd/table.h ggzd/seats.c 
	  ggzd/seats.h ggzd/transit.c:
	  Remove the restriction on the number of spectators at a table.
	  - The table->spectators array is dynamically allocated.  It is grown
	    geometrically to reduce time overhead - space overhead will be
	    lower now since we don't have a manditory 8 spectators per table.
	  - table->max_num_spectators stores the size of the spectator list 
	  for
	    the table; this value is used for iterating over spectator seats.
	  As
	    before, a spectator seat with an empty name is empty.
	  - In table_event_callback, we can no longer easily use the 
	  "temporary"
	    structure to hold the spectator data for passing to
	    net_send_table_update.  Instead, a pointer to a 
	  GGZTableSpectator or
	    GGZTableSeat is passed to net_send_table_update.  This should 
	  end up
	    being more robust, and will allow this code to work with a 
	  dynamically
	    determined number of seats as well.


2002-09-09 04:13:26  Rev 4487   jdorje

	* game_servers/escape/game.c:
	  Made game_send_options_request static.


2002-09-09 04:11:44  Rev 4486   jdorje

	* game_servers/spades/engine_func.c:
	  Made num_comp_play() static, and #if 0'd it out since it's currently
	  unused.


2002-09-09 04:09:53  Rev 4485   jdorje

	* game_servers/hastings/game.c:
	  Made game_bot_set() static.


2002-09-09 04:09:04  Rev 4484   jdorje

	* game_servers/ggzcards/deck.c game_servers/ggzcards/message.h:
	  - Made compare_cards() static.
	  - Added global prototype for broadcast_player_message().


2002-09-09 04:05:28  Rev 4483   jdorje

	* game_servers/dots/ai.c game_servers/dots/game.c:
	  - Made game_send_options_request() static.
	  - Added missing #include "ai.h".


2002-09-09 04:03:31  Rev 4482   jdorje

	* game_servers/chess/game.h game_servers/combat/game.h 
	  game_servers/reversi/game.c game_servers/reversi/game.h 
	  game_servers/chess/game.c game_servers/combat/game.c:
	  Mark function parameter list as "void" to avoid a compiler warning,
	  and
	  enable stricter parameter checking by the compiler.


2002-09-09 04:01:39  Rev 4481   jdorje

	* game_servers/chinese-checkers/ai.c:
	  Add missing #include "ai.h".


2002-09-09 03:24:42  Rev 4480   jdorje

	* ggzd/ggzduedit.c ggzd/Makefile.am ggzd/ggzdb.c ggzd/ggzdb.h 
	  ggzd/ggzdb_mysql.c ggzd/ggzdb_pgsql.c ggzd/ggzdb_db2.c 
	  ggzd/ggzdb_db3.c ggzd/ggzdb_proto.h:
	  - Created the header file ggzdb_proto.h, which includes prototypes 
	  for the
	    ggzdb backend functions.
	  - Included this file from the DB backend source files, and the 
	  frontend
	    files that call the function.  (This allows the compiler to 
	  check that
	    the functions are identical in each case, avoiding some possible 
	  bugs.)
	  - Removed the extern definitions of the variables from ggzdb.c.
	  - Removed the DB_STANDALONE hack.
	  - Marked some functions in ggzduedit.c as static, and prototyed 
	  them.
	  With these changes, ggzd will not compile without any warnings for 
	  me.  It
	  should also make things cleaner and more stable.


2002-09-09 02:50:06  Rev 4479   jdorje

	* ggzd/room.c ggzd/chat.c:
	  Do pointer arithmetic with char* pointers instead of void* ones.  
	  This
	  can avoid some compiler warnings (and with good reason).


2002-09-09 01:44:56  Rev 4477   jdorje

	* ggzdmod/ggzdmod.c:
	  When a spectator leaves, have ggzdmod-game delete the spectator 
	  entry
	  instead of erronously replacing it with an invalidated entry.
	  Also, have ggzdmod-game send proper status responses to 
	  ggzdmod-ggz on
	  player/spectator leaves.  Just like with joins, the mechanism for 
	  this was
	  already in place...but was unused.


2002-09-09 00:55:17  Rev 4476   jdorje

	* ggzd/table.c ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h:
	  Removed the spectator seat limit from GGZdMod.
	  Now the spectator seat list is just allocated dynamically.  Empty
	  spectator seats don't have an entry in the list, so there is a much
	  smaller memory overhead.
	  The function ggzdmod_set_max_num_spectators is no longer needed - 
	  the max
	  number of spectators (i.e. one higher than the highest spectator
	  number) is tracked internally by ggzdmod, and is still available 
	  through
	  ggzdmod_get_max_num_spectators.  This means iterating through 
	  spectators
	  is faster, so there is a smalle overhead there as well.
	  Also, if a spectator or player join fails in ggzdmod at the game 
	  end,
	  instead of failing silently an error code will be sent back to
	  ggzdmod-ggz.  The mechanism for this was already in place, but 
	  before if
	  there was an error ggzdmod-game would just do nothing.
	  This new system should be much more flexible, and should last us 
	  for some
	  time.


2002-09-09 00:51:25  Rev 4475   jdorje

	* ggzd/transit.c:
	  If ggzdmod_set_spectator fails, give the error result in the debug 
	  error
	  message.


2002-09-09 00:49:58  Rev 4474   jdorje

	* game_servers/ggzcards/main.c:
	  Make sure we have all of the right GGZ debugging types (for 
	  ggz_debug).


2002-09-09 00:49:32  Rev 4473   jdorje

	* game_servers/ggzcards/common.c:
	  Clean up handle_ggz_spectator_seat_event, and add some assertions 
	  to help
	  in debugging ggzdmod.


2002-09-08 23:26:11  Rev 4472   jdorje

	* game_servers/tictactoe/tictactoe.dsc:
	  TTT has broken network compatability:
	  1.  The introduction of the stats part of the protocol is not
	      backwards-compatable.
	  2.  With the introduction of spectators, the handling of moves is 
	  done
	      slightly differently.  I'm not quite sure why, but connecting 
	  to an
	      old server breaks things.
	  Because of #1 we'll have to bump the proto # for 0.0.6 anyway, so 
	  I went
	  ahead and bumped it.
	  NOTE: to preserve compatability, the network portions of the 
	  statistics
	  code cannot be dependent on compile-time directives for 0.0.6.


2002-09-08 21:18:54  Rev 4471   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/main.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c:
	  Handle GGZDMOD_EVENT_SPECTATOR_DATA.


2002-09-08 20:38:36  Rev 4470   jdorje

	* game_servers/ggzcards/net.c:
	  Only seats with valid sockets will be broadcast to.


2002-09-08 20:26:23  Rev 4469   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c:
	  Remove the SUPPORT_SPECTATORS preprocessor macro.


2002-09-08 19:50:17  Rev 4468   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Add "AllowSpectators = 1" to GGZCards .dsc game files.


2002-09-08 19:41:59  Rev 4467   jdorje

	* ggzd/table.c:
	  in remove_table(), don't destroy the table data until after we've 
	  removed
	  all of the players and spectators from it.
	  The specific problem we run into if we do it the other way is that 
	  after
	  the gametype is reset, ggzd doesn't know whether spectators are 
	  allowed
	  at the table.  This means, first of all, that 
	  spectator_seats_num() could
	  fail in remove_table if it's called before the gametype is reset 
	  (easy to
	  work around).  But it also means that when we send the <SPECTATOR>
	  updates to the clients, we won't know the number of spectators there
	  either (causing the updates to be interpreted incorrectly at the 
	  client
	  end).


2002-09-08 06:34:27  Rev 4465   jdorje

	* ggzd/net.c ggzd/net.h ggzd/players.c ggzd/transit.c:
	  Removed the 'joinspectator' and 'leavespectator' result tags.  
	  Instead
	  'join' and 'leave' are simply used instead.
	  The handling for these was already identical at the client end.
	  At the server end, this allowed the removal of the functions
	  net_send_table_join_spectator and net_send_table_leave_spectator, 
	  and the
	  merging of some other code that is now identical between 
	  spectators and
	  players.


2002-09-08 01:59:41  Rev 4456   jdorje

	* ggzd/table.c ggzd/seats.c ggzd/transit.c:
	  Further spectator fixes:
	    - The number of spectator seats isn't actually MAX_TABLE_SIZE-1. 
	  It's
	      either 0 or MAX_TABLE_SIZE, depending on whether spectators are
	      allowed.  Checking allow_spectators requires locking, 
	  unfortunately.
	    - This change causes E_TABLE_FULL to be emitted if you try to 
	  watch
	      a table whose game doesn't support spectators.  This is 
	  probably not
	      the correct error, since the problem may be that spectators 
	  aren't
	      supported at all (of course the core clients shouldn't allow 
	  this,
	      but ggz-gtk currently does).  I added a comment.
	    - Because we have to check game_types[table->type].
	  allow_spectators to
	      find the number of spectator seats, we must do this before 
	  destroying
	      the table data.


2002-09-08 01:31:14  Rev 4455   jdorje

	* game_servers/ggzcards/common.h:
	  Re-enable spectator support for GGZCards.


2002-09-08 01:30:17  Rev 4454   jdorje

	* game_servers/ggzcards/net.c:
	  Changed net_broadcast_global_cardlist_message to send the cardlist 
	  to
	  spectators also.


2002-09-08 01:28:15  Rev 4453   jdorje

	* ggzd/table.c ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Renamed ggzdmod_set_num_spectators() as 
	  ggzdmod_set_max_num_spectators,
	  to match the naming for the "get" variant.
	  Also I renamed _ggzdmod_set_num_spectators similarly.


2002-09-08 01:06:03  Rev 4452   jdorje

	* ggzd/net.c ggzd/table.c ggzd/seats.c ggzd/seats.h ggzd/transit.c:
	  Renamed spectators_count() as spectator_seats_num, to correspond 
	  to the
	  related function for seats.  This function returns the total 
	  number of
	  spectator seats, which is the maximum number of spectators possible.
	  The function spectators_count() is not activated (#if 0'd out), 
	  but it
	  returns the number of spectators (i.e. occupied spectator seats) 
	  at the
	  table.  The only use I see for this is in table_check(), so I've 
	  left it
	  out for now.


2002-09-08 00:37:19  Rev 4451   jdorje

	* ggzd/table.c:
	  In table_remove, make sure we remove all the spectators from the 
	  table
	  in addition to all of the regular players.


2002-09-07 22:06:41  Rev 4449   jdorje

	* game_servers/tictactoe/game.c:
	  Doh!  We have to make sure to skip over the empty spectator seats 
	  when
	  iterating over spectators.
	  In game_do_move, there's a potential problem because we return -1 if
	  there's ever a network error.  But at the end of the function is 
	  where the
	  game logic (incrementing the move, etc.) takes place.  So although 
	  this
	  shouldn't be a fatal error (it's just one player gone missing), 
	  the table
	  cannot recover.


2002-09-07 21:58:22  Rev 4448   jdorje

	* ggzdmod/ggzdmod.c:
	  A few cleanups to the GGZdMod spectator code:
	  - More rigorous checking of the parameters given to 
	  ggzdmod_set_spectator.
	    There is no need for games to change any spectator data.
	  - On an IO error in _ggzdmod_set_spectator, return rather than 
	  changing
	    the spectator entry (this should probably be done for 
	  _ggzdmod_set_seat,
	    too, even though it's pretty much a fatal error).


2002-09-07 21:50:49  Rev 4447   jdorje

	* ggzd/table.c ggzd/table.h ggzd/transit.c:
	  Fixed a significant spectator bug, and did a few related cleanups:
	  - When a spectator leaves a spectator seat, reset the name to 
	  empty ("").
	  - Add a comment about this invariant to the table->spectators field.
	  - Avoid a buffer read underflow when a spectator index of -1
	    (GGZ_SEATNUM_ANY) is given to transit_spectator_event_callback.
	  - Add the spectator index to the debug message for each
	    transit_send_spectator_to_game.
	  This fixes many of the spontaneous table deaths that are seen when 
	  using
	  spectators.  However, I think the deaths are actually caused by 
	  another
	  bug, and they just don't happen unless the spectator indices grow. 
	  We
	  shall see.


2002-09-07 20:17:52  Rev 4444   jdorje

	* game_servers/tictactoe/game.c:
	  Use ggzdmod_get_max_num_spectators instead of 
	  ggzdmod_count_spectators to
	  iterate over the existing spectators.


2002-09-07 20:14:31  Rev 4443   jdorje

	* ggzdmod/ggzdmod.h:
	  Added documentation on ggzdmod_count_spectators, explaining why 
	  the typical
	  user probably wants to use ggzdmod_get_max_num_spectators instead.


2002-09-07 19:47:27  Rev 4442   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  - Renamed ggzdmod_get_num_spectators as 
	  ggzdmod_get_max_num_spectators.
	  - Added some more explanation to the documentation on this function.
	  - Renamed ggzdmod->num_spectators as ggzdmod->max_num_spectators.


2002-09-07 17:16:45  Rev 4439   jdorje

	* ggzd/net.c:
	  Instead of <JOINSPECTATOR/> and <LEAVESPECTATOR/>, make the XML 
	  protocol
	  use <JOIN SPECTATOR='true'/> and <LEAVE SPECTATOR='true'/>.
	  This gives sufficient backwards-compatability: now if you try to 
	  "watch" a
	  game on a server that doesn't support spectators, you'll just join 
	  the
	  game as a player.  The other way, if you did this the client would 
	  become
	  fubar.
	  Note that this *does* break compatability with the CVS code of the 
	  past
	  several days.  But this is a small price to pay.


2002-09-07 13:11:21  Rev 4435   dr_maux

	* ggzd/net.h ggzd/transit.c:
	  - forgot to send result for new leave operation to client


2002-09-07 09:52:24  Rev 4434   dr_maux

	* ggzd/table.c:
	  - send proper data to client upon GGZ_UPDATE_SPECTATOR_LEAVE


2002-09-07 09:13:46  Rev 4432   dr_maux

	* ggzd/table.c ggzdmod/ggzdmod.c:
	  - fix semantics for spectator updates: allow NULL name to replace 
	  a valid name,
	    and a valid name to replace a NULL name, but no other combination
	  - don't care about whether a table is going to be empty when 
	  leaving as spectator
	  - fix possible segfault in ggzd-side GGZDMOD_EVENT_LEAVE_SPECTATOR,
	  the same
	    could be done for a normal leave event too, but we let this as is


2002-09-07 07:21:45  Rev 4429   dr_maux

	* ggzd/net.c ggzd/players.c ggzd/players.h ggzd/transit.c:
	  - handle seat leave different from spectator leave


2002-09-07 03:38:43  Rev 4427   jdorje

	* ggzd/players.c:
	  GGZ_TRANSIT_LEAVE_SPECTATOR should use table_find_spectator(), not
	  table_find_player() to determine the spectator seat index number.


2002-09-06 18:33:02  Rev 4417   jdorje

	* game_servers/ggzcards/common.h:
	  Uncomment ALLOW_SPECTATORS from ggzcards, so spectators are not 
	  supported
	  (just yet), and incidentally the code can now compile.
	  The .dsc files will have to be changed to allow spectators, as 
	  well.  This
	  should happen shortly.


2002-09-05 20:16:51  Rev 4413   dr_maux

	* game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/keepalive.h 
	  game_servers/keepalive/src/world.h:
	  - separate spectator data event for keepalive


2002-09-05 20:06:14  Rev 4412   dr_maux

	* game_servers/muehle/muehleserver.cpp 
	  game_servers/muehle/muehleserver.h:
	  - use separate data event for Muehle


2002-09-05 20:05:57  Rev 4411   dr_maux

	* game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - use separate spectator data event for Muehle


2002-09-05 07:27:03  Rev 4409   dr_maux

	* configure.in:
	  - prepare configuration for libdb 4.0
	  - but don't allow this yet, until some libdb guru nods


2002-09-04 19:46:33  Rev 4408   dr_maux

	* game_servers/ggzcards/common.h 
	  game_servers/keepalive/src/keepalive.cpp 
	  game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/keepalive/src/keepalive.h:
	  - enable spectator support by default for all games
	  (there are 4 of them, not 3, wow)


2002-09-04 18:48:34  Rev 4403   dr_maux

	* ggzd/net.c ggzd/table.c game_servers/keepalive/keepalive.dsc 
	  ggzd/protocols.h ggzd/transit.h ggzdmod/ggzdmod.c ggzd/net.h 
	  ggzd/parse_opt.c ggzd/table.h ggzdmod/ggzdmod.h ggzd/datatypes.h 
	  ggzdmod/protocol.h ggzdmod/io.c ggzdmod/io.h 
	  game_servers/muehle/muehle.dsc ggzd/seats.c ggzd/players.c 
	  game_servers/tictactoe/game.c ggzd/transit.c ggzd/seats.h 
	  ggzd/players.h ggzdmod/mod.h:
	  - let's fetz:
	  * spectator support for ggzd
	  * spectator support for ggzdmod
	  * games supporting spectators: TTT, Muehle, Keepalive


2002-09-04 05:38:20  Rev 4402   jdorje

	* game_servers/ggzcards/TODO game_servers/ggzcards/Makefile.am:
	  Added TODO for GGZCards.


2002-09-03 21:19:57  Rev 4401   jdorje

	* game_servers/ggzcards/client/client.c:
	  Remove an assertion in the client to allow more than one person to 
	  "play"
	  (a card from a hand) at the same time.


2002-09-03 17:26:05  Rev 4400   jdorje

	* game_servers/ggzcards/games/hearts.c:
	  Minor cleanups to hearts code.


2002-09-03 17:25:09  Rev 4399   jdorje

	* game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/ai/spades.c:
	  Fix non-matching prototypes for several functions.


2002-09-03 04:55:19  Rev 4398   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/common.
	  h game_servers/ggzcards/ai.h game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/ai/suaro.aispec game_servers/ggzcards/main.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/ai/spades.aispec:
	  Allow AI modules to actually *be* modular.
	  Each AI module has a .aispec file that describes it.  The game 
	  reads all
	  .aispec files in $(GGZDDATADIR)/ggzcards, and chooses one that 
	  will work
	  for the current game.
	  Issues:
	    - If no module provides support for the current game, the 
	  hard-coded
	      Random AI module is used.  This is hard-coded because (1) it 
	  needs to
	      always be present and (2) it will then work under "make test".
	    - If more than one module is present for a game, one of the 
	  modules
	      will be picked arbitrarily.  Eventually the user should get to 
	  pick
	      their AI (sometimes!).
	    - If an AI program crashes, the Random AI will be restarted in its
	      place.  If the random AI program crashes, that would be Bad.
	    - The AI modules will not always work under "make test", since 
	  their
	      location within GGZDDATADIR is hard-coded.  Once you do
	      "make install", then things will work under "make test".
	    - Little error checking is done to make sure the .aispec files are
	      correct.  If one pointed to an invalid executable, for 
	  instance, the
	      table would probably become fubar.


2002-09-02 04:00:54  Rev 4397   jdorje

	* game_servers/ggzcards/games.c:
	  Fixed a major memory bug causing a segfault when the player has to 
	  choose
	  a game.


2002-09-02 02:34:56  Rev 4396   jdorje

	* game_servers/ggzcards/common.h:
	  Fix a bug causing a segfault when a seat's player was -1 (i.e. not a
	  "real" player).
	  There may be problems with this and the spectator code, since 
	  "player -1"
	  is a valid spectator.


2002-09-01 23:23:48  Rev 4395   jdorje

	* game_servers/tictactoe/game.c:
	  Put "#ifdef GGZSPECTATORS" around spectator-specific code.


2002-08-22 07:05:06  Rev 4387   dr_maux

	* game_servers/tictactoe/tictactoe.dsc game_servers/tictactoe/game.c:
	  - use new format for spectators: Similar to AllowLeave, we do now 
	  have an
	    AllowSpectators which can be zero (default) or one.
	  - use separated data event for spectators, who can only 
	  synchronize, not move
	    or query the statistics.
	    Along with this, some functions have been changed to use fd's 
	  instead of
	    seats.


2002-08-20 22:29:58  Rev 4383   jdorje

	* ggzd/net.c:
	  Made some functions static.


2002-08-20 22:22:39  Rev 4382   jdorje

	* ggzdmod/elo.c:
	  Made elo_compute_expectations() static.


2002-08-20 20:49:40  Rev 4376   jdorje

	* configure.in:
	  Changed -I<directory> to -isystem<directory> to avoid warnings in 
	  gcc3.


2002-08-20 20:42:57  Rev 4375   jdorje

	* acinclude.ggz:
	  Doh!  Fix typo in "History".


2002-08-20 20:40:24  Rev 4374   jdorje

	* acinclude.ggz:
	  Changed -I<directory> to -isystem<directory> to avoid warnings in 
	  gcc3.


2002-08-19 21:40:46  Rev 4371   jdorje

	* game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/keepalive.h:
	  #ifdef'd out spectator-specific code, so that keepalive will compile
	  without applying the spectator patch.
	  I used "#define SUPPORT_SPECTATORS", which is what ggzcards uses 
	  as well.
	  Perhaps this should be put into ggzdmod.h, so that all server code 
	  (ggzd
	  and game servers) can enable/disable it easily.


2002-08-19 21:26:17  Rev 4370   jdorje

	* tests/logmod.c:
	  Avoid a (probably harmless) error message from passing a pointer 
	  to an
	  enumerated value instead of a pointer to an integer to 
	  ggz_read_int().


2002-08-12 18:42:20  Rev 4363   dr_maux

	* debian/ggzd.templates debian/ggzd.postinst:
	  - Debconf support for the GGZ server
	  This is how it works:
	  Whenever someone installs ggzd (or reconfigures it via 
	  dpkg-reconfigure ggzd),
	  a dialog box pops up and asks for the user's admin name and email 
	  address
	  (which are then injected into ggzd's config file), and for the 
	  games to be
	  installed.
	  Two notes:
	  - the game menu is vapourware currently, maybe it doesn't even 
	  belong here, but
	    it's a start.
	  - the priority of the questions is 'medium'. Since too many 
	  questions during
	    system installations suck, this could be set to 'low'. But only 
	  if folks
	    complain (after all, there's 'high' and 'critical' at the other 
	  end).
	  Debconf can be fully localized, the template files must then be 
	  called
	  ggzd.templates.$LANG.
	  Note that in the future, a distributor-independent configuration 
	  panel, maybe
	  based on ncurses or something, would be cool.


2002-08-12 18:13:50  Rev 4362   dr_maux

	* debian/ggzd.files debian/ggzd.postrm:
	  - some more merging from files which were lying around:
	   * correctly purge /var/ggzd when removing with --purge
	   * the entry.room file belongs to the server, so it is not too 
	  useless when the
	     game servers are not installed


2002-08-12 17:57:35  Rev 4360   dr_maux

	* game_servers/muehle/muehleserver.cpp 
	  game_servers/muehle/muehleserver.h:
	  - the muehleserver class, which inherits from ggzgameserver, can 
	  now support
	    spectators


2002-08-12 17:56:29  Rev 4359   dr_maux

	* game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - another patch which was not merged in yet: spectator support for 
	  muehle


2002-08-10 19:03:07  Rev 4356   dr_maux

	* game_servers/tictactoe/game.c:
	  - spectator support, currently disabled by default
	  - protocol change for TTT: Always send the player number along 
	  with the move.
	  In cs theory, this is a context sensitive -> context free 
	  transition.


2002-08-07 16:32:01  Rev 4347   jdorje

	* ggzdmod/Doxyfile:
	  Updated Doxyfile:
	    - Name: GGZDMOD -> GGZdMod
	    - Version: 0.0.5pre -> 0.0.6pre
	    - Enable Latex output.


2002-08-07 16:05:19  Rev 4345   jdorje

	* man/ggzdmod.h.3:
	  Updated ggzdmod documentation.


2002-08-07 06:57:57  Rev 4342   jdorje

	* game_servers/ggzcards/common.h:
	  Doh!  Undefine SUPPORT_SPECTATORS.


2002-08-06 01:32:22  Rev 4339   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/common.c:
	  Further cleanups allowing spectators to work more fully.


2002-08-05 16:08:38  Rev 4338   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/common.h 
	  game_servers/ggzcards/main.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/common.c:
	  Add partial support for spectators.


2002-08-05 16:08:14  Rev 4337   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Assert that the bid value is within a valid range.


2002-08-02 04:57:39  Rev 4334   jdorje

	* ggzdmod/ggz_stats.c:
	  Avoid free'ing a NULL object in ggz_stats.


2002-08-02 04:53:24  Rev 4333   jdorje

	* game_servers/tictactoe/game.c:
	  Fix stats handling in tic-tac-toe to correctly handle draws.


2002-08-02 03:35:46  Rev 4332   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/ai/main.c 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/ai/game.c 
	  game_servers/ggzcards/client/Makefile.am 
	  game_servers/ggzcards/ai/game.h:
	  Updated the client to use the new ggzmod.
	  This was a bit of a pain, since the server-side AI runs as a 
	  separate
	  process that uses the same client code, but does not now use ggzmod.
	  This was solved (for now) in a rather inelegant way using 
	  preprocessor
	  #definitions in the client code.


2002-07-29 18:25:15  Rev 4313   dr_maux

	* game_servers/muehle/main.cpp game_servers/muehle/muehleserver.cpp:
	  - forgot to commit those last time. Now my CVS should be clean 
	  again, let's
	    start to hack.


2002-07-20 16:24:54  Rev 4311   jdorje

	* ggzd/parse_opt.c:
	  Avoid a buffer underflow when a file in the games or rooms 
	  directories is
	  too short.


2002-07-15 20:49:15  Rev 4309   dr_maux

	* ggzd/ggzdb_mysql.c:
	  - MySQL should now be thread-safe too.
	  The only problem is that there are differences between 3.x and 4.x,
	  and the
	  documentation, especially concerning the threading code, is poor to
	  non-existing :(


2002-07-13 10:20:00  Rev 4299   dr_maux

	* ggzd/ggzduedit.c ggzd/parse_opt.c ggzd/ggzdb.c ggzd/ggzdb.h 
	  ggzd/ggzdb_mysql.c ggzd/datatypes.h ggzd/ggzdb_pgsql.c 
	  ggzd/ggzdb_db2.c ggzd/ggzdb_db3.c:
	  - Read SQL parameters from ggzd.conf
	  - PostgreSQL support is now completely thread-safe for ggzd (not 
	  yet for
	    ggzduedit but who cares), and uses a connection pool for 
	  efficiency
	  - On the downside, I broke MySQL :-)


2002-06-30 07:57:47  Rev 4284   dr_maux

	* game_servers/tictactoe/game.c:
	  - finally, we get some stats for TTT :)
	  Now the Gtk+ client needs an interface for this (a simple message 
	  box will do)


2002-06-29 15:52:06  Rev 4282   dr_maux

	* game_servers/tictactoe/game.c:
	  - dummy statistics functionality for TTT server.
	  This can be toggled via a #define.
	  It does however not use ggz_stats yet because I can currently not 
	  test any
	  games :(


2002-06-09 18:59:16  Rev 4240   jdorje

	* game_servers/ggzcards/games/hearts.c:
	  In hearts, there can never be a tie.  So if you reach the target 
	  score and
	  there is a tie, you have to play another hand.


2002-06-09 18:58:47  Rev 4239   jdorje

	* game_servers/ggzcards/game.c:
	  Make sure the option text for rated_game is correctly handled.


2002-06-09 06:53:46  Rev 4238   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc:
	  Specify additional options for Spades in the GGZCards-Spades room.
	  Now that player ratings are available in the spades room, it is more
	  important that players play under a fixed set of rules.  Also, the 
	  AI
	  (which also gets a rating) cannot understand many of the options.


2002-06-09 06:20:58  Rev 4237   jdorje

	* ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/elo.c ggzdmod/ggz_stats.c:
	  Cleaned up #includes in ggzdmod.


2002-05-25 21:46:38  Rev 4233   dr_maux

	* configure.in:
	  - revert the -pthread "typo"


2002-05-23 20:28:07  Rev 4230   dr_maux

	* configure.in:
	  - fix typo in ggzd's configure.in: -lpthread instead of -pthread


2002-05-21 19:20:04  Rev 4226   dr_maux

	* ggzd/ggzdb_mysql.c ggzd/ggzdb_pgsql.c:
	  - hum, partly revert some of the changes: handle is key, not 
	  user_id within
	    ggzd
	  - implement auto-counting serial type for pgsql


2002-05-21 07:22:38  Rev 4224   dr_maux

	* ggzd/ggzdb_mysql.c ggzd/ggzdb_pgsql.c:
	  - fix SQL support.
	  MySQL handles user id's automatically, PostgreSQL will do the same,
	  but I'll
	  have to look up again how sequences work (auto_increment is not 
	  supported
	  there)


2002-05-20 20:42:12  Rev 4222   dr_maux

	* game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/world.cpp:
	  - fixes for spectator join/leave events


2002-05-20 19:52:38  Rev 4220   dr_maux

	* game_servers/keepalive/src/spectator.cpp 
	  game_servers/keepalive/src/spectator.h:
	  - small helper classes to store spectator data


2002-05-20 19:52:10  Rev 4219   dr_maux

	* game_servers/keepalive/src/main.cpp 
	  game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/protocol.h 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/Makefile.am 
	  game_servers/keepalive/src/keepalive.h 
	  game_servers/keepalive/src/player.cpp 
	  game_servers/keepalive/src/world.h:
	  - keepalive game server gets spectator support


2002-05-19 11:13:15  Rev 4210   dr_maux

	* game_servers/keepalive/keepalive.dsc:
	  - for now, have fixed values for the maximum number of spectators.
	  Later we can support '*' again.


2002-05-15 21:32:16  Rev 4204   jdorje

	* ggzdmod/elo.h ggzdmod/ggz_stats.c:
	  A few more fixes and cleanups to the ggz_stats and elo code:
	    - Fixed a typo in the ELO documentation.
	    - Separated the locking/unlocking code into functions, 
	  lock_stats()
	      and unlock_stats().
	    - When recalculating ratings, first lock the database, re-read 
	  them,
	      recalculate, write them, then unlock the database.  This 
	  should allow
	      players at more than one table (i.e. bots) to work properly.


2002-05-15 21:12:58  Rev 4203   jdorje

	* game_servers/ggzcards/main.c:
	  Switched two ggzdmod_log calls to ggz_debug ones.  Called 
	  ggz_debug_cleanup
	  at the end, with a memory check involved.  Make sure to send out
	  ggz_debug output to stderr if ggzdmod_log won't take it.


2002-05-15 19:46:16  Rev 4201   dr_maux

	* .cvsignore:
	  - shut up autom4te


2002-05-14 08:34:44  Rev 4199   dr_maux

	* game_servers/keepalive/README.keepalive 
	  game_servers/keepalive/DESIGN:
	  - the design file explains what kind of game this is going to be


2002-05-14 08:34:05  Rev 4198   dr_maux

	* game_servers/keepalive/src/protocol.h 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/player.cpp 
	  game_servers/keepalive/src/world.h 
	  game_servers/keepalive/src/player.h:
	  - protocol update
	  - avatar deaths and player types are now broadcasted too


2002-05-13 19:00:57  Rev 4195   dr_maux

	* configure.in:
	  - All those who still use autoconf < 2.53b are all weenies ;)


2002-05-13 18:46:16  Rev 4194   jdorje

	* ggzdmod/ggzdmod.h:
	  Changed the example code to reflect the change from passing in the 
	  player
	  number (int*) to passing the full seat (GGZSeat*) to the join and 
	  leave
	  events.
	  The SEAT event still is not covered in the sample code; but then, 
	  most of
	  our games don't use it either.


2002-05-13 08:44:01  Rev 4192   dr_maux

	* game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/player.cpp:
	  - handle players graves correctly


2002-05-12 19:48:41  Rev 4190   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c:
	  Removed handle_join_event() and handle_leave_event().  In their 
	  place, I've
	  written a handle_seat_event() function that handles all 
	  seat-change events
	  (EVENT_JOIN, EVENT_LEAVE, and EVENT_SEAT).


2002-05-11 16:08:04  Rev 4189   bmh

	* ggzd/protocols.h:
	  - Put GGZ protocol version back


2002-05-07 16:51:35  Rev 4182   jdorje

	* ggzdmod/elo.c ggzdmod/elo.h ggzdmod/ggz_stats.c:
	  Use float values to track player ratings, to avoid roundoff errors.


2002-05-07 16:50:45  Rev 4181   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/common.
	  h game_servers/ggzcards/games/hearts.c:
	  Added a game option to hearts for the target score.


2002-05-07 08:58:43  Rev 4179   jdorje

	* game_servers/ggzcards/message.c game_servers/ggzcards/common.c:
	  Several fixes for GGZCards use of ggz_stats lib:
	    - Make sure we call ggzstats_new_game before calculating a new 
	  game's
	      stats, so that all data is reset (otherwise the first game 
	  will be
	      calculated fine, but ggz_stats will fail on successive games).
	    - Make sure game.stats is non-NULL before using it.


2002-05-07 08:06:48  Rev 4178   jdorje

	* game_servers/ggzcards/common.h ggzdmod/Makefile.am 
	  ggzdmod/ggz_stats.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c ggzdmod/elo.c 
	  game_servers/ggzcards/common.c ggzdmod/elo.h ggzdmod/ggz_stats.c:
	  Redid much of the ggz_stats system:
	    - Moved the ELO calculation code off into its own file.
	    - Changed the stats interface to be object-oriented, so that it 
	  will
	      work cleanly with ggzdmod.
	    - Added record information (W-L-T) to the stats code & interface.
	    - Cleaned up the interface and code extensively.
	    - Changed GGZCards to match the new interface.


2002-05-07 02:34:50  Rev 4177   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/net.h 
	  game_servers/ggzcards/common.h game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Changed the prototype of net_send_hand and send_hand so that the 
	  "reveal"
	  parameter is split into two boolean parameters: show_fronts and 
	  show_backs.


2002-05-06 05:48:44  Rev 4173   jdorje

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/event.c ggzd/err_func.c:
	  Changed ggzd's *debug* messaging system (but not the logging 
	  system) to
	  use libggz's debugging routines:
	    - Replaced err_doit with a slightly more generic debug-output 
	  pair of
	      functions: send_debug_output does the dirty work, while 
	  debug_handler
	      formats the message.
	    - In logfile_initialize, debug_handler is registered as the 
	  debugging
	      output handler for libggz's debugging routines.  
	  ggz_debug_init is also
	      called, and is given no debugging types of output file.
	    - I've rewritten log_msg so that it can call debug_handler as its
	      backend handler (since debug_handler uses a different, simpler
	      interface than err_doit; most of err_doit's dirty work is now 
	  done
	      by libggz directly).
	    - The GGZ_DBG_XXX macro definitions have been changed from flag 
	  masks to
	      strings (the same strings ggz_debug uses as its debugging 
	  "type").
	      Thus the interface for ggz_debug is the same as dbg_msg was.
	      Unfortunately, since the log messages do *not* work in the 
	  same way,
	      there's now an inelegant disparity between the two.
	    - To keep noise to a minimum, I just added macros re-defining 
	  dbg_msg,
	      err_msg, err_msg_exit, err_sys, and err_sys_exit to their libggz
	      equivalents.  The interfaces are identical.
	    - I removed the err_sock function, which currently is unused and 
	  should
	      be rewritten in any case.
	    - Since it's no longer used, I've removed the dbg_types bitfield 
	  from
	      the LogInfo struct.
	    - Unfortunately, since ggzd itself no longer knows which types of
	      debugging are enabled (only libggz does, and it's not telling),
	  some
	      shortcuts had to be removed.  In event.c, all of the 
	  event_***_spew
	      functions are now called whether or not GGZ_DBG_LISTS 
	  debugging is
	      enabled (although only if DEBUG is defined).  This is an easy
	      trade-off.
	    - The dbg_types array is no longer a LogTypes struct, but rather 
	  a NULL-
	      terminated list of strings (debugging types).  Thus, 
	  parse_dbg_types
	      just compares each debugging type listed in the config file to 
	  the
	      debugging type name.  The "all" case is handled manually.
	    - It is no longer possible to specify the debugging types on the
	      command line with the popt-style argument.  Since the argument 
	  itself
	      was the *entire mask* of debugging types, it probably wasn't 
	  too useful
	      anyway.
	  Using libggz's debugging system has several advantages, small and 
	  large:
	    - Slightly less code in ggzd.
	    - Nifty outputing (listing the type of the message).
	    - Other libggz messages will also be handled.
	  Of course, the third one is the big winner - messages generated 
	  internally
	  by libggz can now show up in the debugging logs.
	  There are some issues with the system:
	    - The disparity between handling of debug and log messages is
	      unfortunate.  Handling log messages in a similar way will be 
	  tricky,
	      since libggz would need a ggz_log function and the current 
	  log_msg
	      uses different priorities at times.
	    - Debugging isn't initialized until the debugging types are 
	  loaded from
	      the config file AND ggz_debug_init is called in 
	  logfile_initialize().
	      This means debugging of any sort isn't really set up until 
	  near the
	      end of the loading process, and many debug messages will be 
	  lost.
	  From the end-user's perspective, there should be only two changes 
	  apparent
	  as a result of this change:
	    - The "Creating a new room" messages will no longer pop up when 
	  you run
	      ggzd on the command line.  This is because debugging isn't 
	  initialized
	      yet (see above).
	    - Each debugging line will have the debugging type included, 
	  near the
	      beginning.


2002-05-06 04:52:27  Rev 4172   jdorje

	* ggzd/hash.c:
	  To determine the average number of hashes per hash list, instead of
	  dividing the total by GGZ_DBG_LISTS it would probably be better to 
	  divide
	  by HASH_NUM_LISTS :-).


2002-05-05 21:51:20  Rev 4170   rgade

	* ggzd/ggzduedit.c ggzd/login.c ggzd/room.c ggzd/ggzdb.c 
	  ggzd/players.c ggzd/ggzd.h ggzd/ggzdb.h ggzd/ggzdb_db2.c 
	  ggzd/players.h ggzd/ggzdb_db3.c:
	  - Converted old UID field to be just a login status indicator
	  - Added user_id to database structure
	  - Added ggzdb_player_next_uid() to retrieve the next UID we should 
	  assign
	    - Calls db specific function _ggzdb_player_next_uid()
	  - Added _ggzdb_player_next_uid() for db2/db3
	    - Uses a reserved player name "&nxtuid&"
	  - New users are assigned a unique user id at first login
	  - ggzduedit altered to display/edit user ids


2002-05-05 21:46:42  Rev 4169   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/ai/game.c game_servers/ggzcards/ai/game.h:
	  Updated client/ files based on changes in the gtk-games module, 
	  and changed
	  the AI code to match the new interface.


2002-05-05 20:26:45  Rev 4163   jdorje

	* game_servers/ggzcards/ai/main.c:
	  If client_initialize() failes (returns -1), just send an error 
	  message and
	  exit the AI client.


2002-05-05 20:16:23  Rev 4162   jdorje

	* game_servers/ggzcards/common/shared.h:
	  Avoid a compiler warning if TRUE/FALSE/MIN/MAX have already bee 
	  defined.


2002-05-05 18:43:52  Rev 4161   bmh

	* ggzd/net.c ggzd/table.c ggzd/transit.h ggzd/net.h ggzd/table.h 
	  ggzd/client.c ggzd/players.c ggzd/players.h ggzd/seats.h 
	  ggzd/transit.c:
	  - Remove old game data machinery:
	    * _net_handle_data(), _net_send_string(), net_send_game_data(),
	    player_msg_to_sized(), player_msg_from_sized()
	    * GGZTable.transit_fd,
	    * fd argument to transit_player_event()
	    * packing of fd into player transit event
	    * creation of socketpair in transit_send_seat_to_game()
	  - New direct game connection mechanism:
	    * New function client_create_channel() to lookup correct player 
	  and
	      assign channel fd to player->game_fd
	    * Call client_create_channel() from client_end_session() if the
	      client is of type GGZ_CLIENT_CHANNEL
	    * Added an fd member to GGZTableSeat
	    * Set seat.fd before calling transit_seat_event()
	    * Set player->game_fd to -1 after calling transit_seat_event() 
	  since
	      the fd has now been passed onto the game module
	  - Merge player_loop() functionality into client_loop()
	  - Removed old player_loop()
	  - Call net_disconnect() explicitly from client_loop(), not from 
	  player_logout()
	  - Do updating of state.players in client_new(), not player_logout()
	  - Have player_logout() close the channel if it's still open
	  - Always call net_send_logout() from _net_handle_session() since we
	    want to send </SESSION> to all client connections, but do it 
	  *after*
	    the call to client_end_session() so that the channel can get 
	  created
	    first if it's a channel client
	  - Tweaked player_updates() to remove uncessary checks
	  - Don't error if we try to leave a table that has already been 
	  removed


2002-05-05 07:04:37  Rev 4159   jdorje

	* ggzdmod/ggz_stats.c:
	  Changed two additional fprintf() calls to ggz_error_sys() ones.


2002-05-05 07:03:31  Rev 4158   jdorje

	* game_servers/ggzcards/main.c game_servers/ggzcards/common.c:
	  - Removed a spurious printf.
	  - Added DBG_GGZSTATS to the list of debug types for ggz_debug.


2002-05-05 06:57:46  Rev 4157   jdorje

	* game_servers/ggzcards/common.c:
	  Init the ggz_stats team listings, so that ratings can be 
	  accurately (well,
	  relatively so) recalculated for team games.


2002-05-05 06:56:47  Rev 4156   jdorje

	* ggzdmod/ggz_stats.h ggzdmod/ggz_stats.c:
	  - Removed unused code for different rating types (which may 
	  eventually be
	    added back in, but in the far future).
	  - Fixed a buglet in counting of team winnings.
	  - Changed a malloc() to ggz_malloc().
	  - Changed all ggzdmod_log() calls to ggz_debug() and friends, using
	    debugging type DBG_GGZSTATS (defined in ggz_stats.h).


2002-05-05 05:39:17  Rev 4155   jdorje

	* game_servers/ggzcards/ai/suaro.c:
	  If we have to pass, don't consider this as the same as if the 
	  minimum bid
	  we can make is 0 - that leads to a segfault.


2002-05-05 01:02:23  Rev 4154   jdorje

	* game_servers/ggzcards/ai/game.c:
	  Added more debugging output.


2002-05-05 00:42:40  Rev 4153   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/common.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/message.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  It is now a game option whether or not to play a "rated" game.  
	  For now,
	  this option is set in the config files: all specific-game games 
	  are always
	  rated (?), while the general-game GGZCards game is unrated (as it 
	  needs to
	  be).


2002-05-05 00:32:02  Rev 4152   jdorje

	* ggzdmod/ggz_stats.h game_servers/ggzcards/common.c 
	  ggzdmod/ggz_stats.c:
	  -Removed the ggzd_set_module function from ggz-stats.
	  - The file names used are now fixed.  This works quite 
	  transparently,
	    since games are provided with their own working directory.
	  - GGZCards doesn't call this function anymore, obviously.


2002-05-05 00:22:08  Rev 4151   jdorje

	* ggzd/table.c tests/basic.c ggzdmod/ggzdmod.c ggzd/parse_opt.c 
	  ggzdmod/ggzdmod.h tests/ggzdtest.c ggzd/datatypes.h ggzdmod/mod.h:
	  Changed ggzd/ggzdmod-ggz to provide games with a reasonable working
	  directory.
	    - ggzdmod_set_module takes a new parameter, pwd, which is the 
	  working
	      directory to provide the game with.  This parameter may be NULL.
	    - When launching a game, after forking ggzdmod will change 
	  directory to
	      the given working direcory (if specified).
	    - Yes, Brent, I remembered to free the pwd on ggzdmod_free().
	    - ggzd creates a working directory for each game as
	      $(opt.data_dir)/gamedata/$(game_info->name).  This string is 
	  generaetd
	      when the game is loaded and stored in the GameInfo's data_dir 
	  field
	      (newly created).  check_path is also called to generate this 
	  directory.
	  The most immediate effect of this change is that the ratings 
	  tracking that
	  GGZCards uses should now work reliably.  In the long term, it should
	  provide a nearly transparent way for games to save and load game 
	  files and
	  meta-data.


2002-05-04 23:46:47  Rev 4150   jdorje

	* ggzd/Makefile.am ggzd/util.c ggzd/control.c ggzd/util.h:
	  Moved check_path() into a new file set, util.[ch].
	  This code needs to be used outside of control.c, and there's no 
	  other good
	  place for it.


2002-05-03 20:41:04  Rev 4149   dr_maux

	* configure.in:
	  - configure with --with-database=mysql or --with-database=pgsql


2002-05-03 20:39:12  Rev 4148   dr_maux

	* ggzd/Makefile.am ggzd/ggzdb_mysql.c ggzd/ggzd.conf.in 
	  ggzd/ggzdb_pgsql.c:
	  - here come the NOT YET THREADSAFE database files for PostgreSQL 
	  and MySQL


2002-05-03 18:49:11  Rev 4147   jdorje

	* ggzdmod/ggz_stats.c:
	  Removed some unused variables.


2002-05-03 08:07:37  Rev 4146   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/deck.c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/net.c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/ai.c:
	  A quick conversion to get the GGZCards server to use ggz_debug and 
	  friends
	  instead of ggzdmod_log.  A debug handler function is registered with
	  libggz, and calls ggzdmod_log to pass the output on to GGZ.
	  This system makes for very convenient logging, but at the front 
	  (easy to
	  code) and the back (easy to read and control).  But it does have a 
	  price:
	  for instance a message logged by the AI goes through (at least) 4 
	  different
	  printf-style formatting runs: 1 when ggz_debug is called in the AI 
	  process,
	  1 when ggzcards reads this from the error socket, 1 when ggzcards 
	  passes it
	  to ggzdmod, and 1 when ggzd puts the final thing together to send 
	  to the
	  debug file.  Ouch!


2002-05-03 05:44:06  Rev 4143   jdorje

	* configure.in game_servers/Makefile.am:
	  Bumped the version number up to 0.0.6pre, and added back in stuff 
	  marked
	  "put back in for 0.0.6" (namely, the tests/, 
	  game_servers/keepalive/, and
	  game_servers/escape/ directories).
	  Some of this stuff may need to be taken back out for 0.0.6 (though 
	  I think
	  tests/ should stay), but at least it will get a chance to be 
	  worked on
	  easily...


2002-05-03 04:07:23  Rev 4142   bmh

	* ggzd/net.c ggzd/login.c ggzd/login.h ggzd/client.c ggzd/players.c 
	  ggzd/players.h:
	  - Cleaned up player/client logout a bit
	  - Remove unnecessary logout_player() function


2002-05-03 03:50:35  Rev 4141   bmh

	* ggzd/net.c:
	  - Remove GGZNetIO.done since it's no longer necessary


2002-05-03 03:49:09  Rev 4140   bmh

	* ggzd/net.c ggzd/client.c ggzd/players.c ggzd/client.h:
	  - New function client_set_type() to set client connection type
	  - Don't use net->done as a signal for ending the session
	  - When handling <SESSION>, don't call logout_player() unless the
	    client type is GGZ_CLIENT_PLAYER
	  - When handling <SESSION>, call client_end_session()
	  - Stub support for <CHANNEL> tag


2002-05-03 03:17:08  Rev 4139   bmh

	* ggzd/net.c ggzd/table.c ggzd/Makefile.am ggzd/net.h ggzd/parse_opt.
	  c ggzd/table.h ggzd/ggzd.h ggzd/login.c ggzd/room.c ggzd/client.c 
	  ggzd/chat.c ggzd/players.c ggzd/control.c ggzd/event.c ggzd/client.
	  h ggzd/players.h ggzd/transit.c:
	  - Split out some of the GGZPlayer functionality into a new GGZClient
	    object (since we'll soon have clients connecting that aren't
	    players)
	  - Use new GGZAuthData structure for storing name/password for 
	  <LOGIN>


2002-05-02 17:32:40  Rev 4138   jdorje

	* game_servers/ggzcards/bid.c:
	  Doh!  A fix to the fix, to prevent overwriting of the game state 
	  when it
	  has been modified by the game's next_bid() function.


2002-05-02 16:52:55  Rev 4136   jdorje

	* game_servers/ggzcards/bid.c:
	  - Reversed a change made earlier to the bidding system that broke 
	  Suaro and
	    Bridge.  I also addeded a comment explaining the breakage.
	  - Increment the bid_count before calling the game's handle_bid 
	  function.


2002-05-02 06:59:16  Rev 4135   jdorje

	* game_servers/ggzcards/client/client.c:
	  Updated client.c from gtk-games module.


2002-05-02 04:30:49  Rev 4132   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c:
	  Changed ggzcards to use ggz_stats for ELO rankings.
	  With all the caveats about the poor implementation of ggz_stats, 
	  and the
	  unfinished API it uses, this is pretty damned cool.


2002-05-02 04:29:21  Rev 4131   jdorje

	* ggzdmod/ggz_stats.h ggzdmod/ggz_stats.c:
	  Fixed ggz_stats so that it actually works.
	  Now _well_, to be sure, but it is a good prototype.  There are, in 
	  fact, a
	  huge number of issues with the stat keeping:
	    - The stats kept are nothing like what is eventually planned.  
	  Currently
	      it is only possible to save/retrieve a player rating, which is 
	  updated
	      using ELO.  I hope to use this code to evolve a more permanent 
	  API
	      that can do all of what we want.  All others should consider 
	  this code
	      very volatile (I can move it out of ggzdmod/, if desired).
	    - The stats are stored in a ggz_conf file.  This is about the 
	  worst,
	      most inefficient form possible.  To be useful on a larger 
	  scale they
	      need to use a real database.  (I did add locking code.)
	    - The ggz config file must be created somewhere.  Where?  Really,
	  there
	      is no way to know, so I just created it in the current working
	      directory.  This should be changed upstream, so that when the 
	  game is
	      launched its working directory is somewhere it can write to 
	  (in /var
	      or wherever).  This will allow other cool things, such as 
	  saved games,
	      etc.


2002-05-02 02:47:59  Rev 4130   jdorje

	* game_servers/ggzcards/main.c:
	  Add the file descriptor to the parameters of the ggz socket error 
	  handler,
	  es_error().  This avoids a compiler warning.  Currently the 
	  parameter
	  remains unused.


2002-05-01 06:08:38  Rev 4127   jdorje

	* ggzd/parse_opt.c:
	  The list returned by ggz_conf_read_list is already NULL-terminated 
	  (it's
	  official now!), so there's no need to realloc the executable 
	  arglist for a
	  table to manually do this.


2002-05-01 03:26:52  Rev 4126   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/play.c 
	  game_servers/ggzcards/game.c:
	  Move the broadcast of a play out of the main play code (in play.c) 
	  and into
	  the game's handle_play function.


2002-05-01 02:33:10  Rev 4125   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  Have bridge_handle_play() call game_handle_play().


2002-04-30 05:24:28  Rev 4123   jdorje

	* game_servers/ggzcards/client/client.c:
	  Updated client files from the gtk-games module.


2002-04-30 05:04:43  Rev 4120   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h:
	  Updated client files from the gtk-games module.


2002-04-30 04:30:28  Rev 4118   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/ai.c 
	  game_servers/ggzcards/games/fortytwo.c game_servers/ggzcards/play.h:
	  Various minor (and not-so-minor) cleanups.  _Very_ various.


2002-04-30 02:08:24  Rev 4117   jdorje

	* ggzd/login.c:
	  Change a few strcpy, and one strncpy call to snprintf.
	  This should fix several problems:
	    - Buffer overflow from too-long password (untested).
	    - Another buffer overflow from too-long name.
	    - Unterminated name (since strncpy does not terminate).
	  The code still needs a good audit (I've basically just replaced the
	  offending function calls with snprintf), but this should fix the 
	  worst
	  cases (and possibly all).


2002-04-29 22:59:04  Rev 4116   jdorje

	* ggzd/login.c ggzd/hash.c:
	  "Fixed" two more instances of strcpy():
	    - I changed a second one in login_player() to use snprintf, just 
	  like
	      the first one (in login_player).
	    - I removed a harmless strcpy in hash_player_add by just using 
	  strdup
	      instead of malloc+strcpy.


2002-04-29 22:47:18  Rev 4115   jdorje

	* ggzd/login.c:
	  Fix a rather hideous buffer overflow/non-termination problem in 
	  ggzd.
	  If a player logs in with a name longer than MAX_USER_NAME_LEN 
	  characters,
	  currently the length is unchecked.  In login_player() the name is 
	  just
	  copied over onto the database record with strcpy, and it's also 
	  passed in
	  to the hash code which does the same.
	  I've partially fixed this.  I fixed the strcpy() call in 
	  login_player() to
	  use snprintf as well.  But I have not fixed any other overflow 
	  problems
	  (there are still a lot of strcpy calls in ggzd, and most of them are
	  probably bad); rather, I just terminated the name manually after
	  MAX_USER_NAME_LEN characters in login_player().


2002-04-29 18:28:35  Rev 4114   jdorje

	* game_servers/ggzcards/games/sueca.c:
	  In Sueca, display the trump prominently.


2002-04-29 18:20:36  Rev 4113   jdorje

	* game_servers/ggzcards/config/ggzcards-fortytwo.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.dsc 
	  game_servers/ggzcards/config/Makefile.am 
	  game_servers/ggzcards/config/ggzcards-fortytwo.room 
	  game_servers/ggzcards/config/ggzcards-sueca.dsc 
	  game_servers/ggzcards/config/ggzcards-whist.room 
	  game_servers/ggzcards/config/ggzcards-sueca.room:
	  Added rooms for Forty-Two, Sueca, and Whist.
	  Things are getting a bit crowded...


2002-04-29 18:19:10  Rev 4112   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/common.c:
	  Some fixes to option handling so that games without options are 
	  playable.
	  This may break games that do more than one round of options 
	  setting -
	  although there are no such games currently.


2002-04-29 06:47:54  Rev 4110   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Add the option for a neverending game in spades.


2002-04-29 05:29:32  Rev 4108   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/ai/game.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/ai/game.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/net.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed the protocol so that a REQ_PLAY also sends a list of valid 
	  plays.
	  This is necessary to get any kind of reasonably efficient behavior 
	  out of
	  most AIs.


2002-04-29 04:03:17  Rev 4107   jdorje

	* game_servers/ggzcards/games/spades.c:
	  In spades, don't show the players' contracts (or other game-related
	  messages) when there is no game being played.


2002-04-29 04:02:27  Rev 4106   jdorje

	* game_servers/ggzcards/common.c:
	  Set the game state to STATE_NOTPLAYING in handle_gameover_event, 
	  rather
	  than in the calling function.


2002-04-29 03:31:43  Rev 4105   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/common.c:
	  - Renamed next_play() as next_move() to avoid confusion with the 
	  game's
	    next_play() function.
	  - Have next_play() check for seats_full() and return silently if 
	  they
	    arenty.  The caller is therefore releived from having to check 
	  this.


2002-04-29 03:21:50  Rev 4104   jdorje

	* game_servers/ggzcards/common.c:
	  A fix to the seat/player naming system: don't have get_player_name 
	  return
	  a NULL name for an open seat.
	  This was already handled correctly for get_seat_name; I rewrote that
	  function to call get_player_name and fixed get_player_name.


2002-04-29 03:11:31  Rev 4103   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Removed the STATE_WAITFORPLAYERS state, along with the game.
	  saved_state
	  field.  Now we just track the state in game.state, and check if 
	  seats_full
	  to see if we're waiting for players.  The new system probably has 
	  a few
	  bugs in it (it hasn't been tested much, and some of the testing has
	  resulted in problems; although upon review it appears the old 
	  system may
	  have had the same problems), but it sufficiently better than the 
	  old one
	  (several gross hacks have been removed) that I'm committing it 
	  directly.


2002-04-29 02:07:35  Rev 4102   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed a minor bug: when we're not playing a game, don't send out 
	  player
	  hands in the sync.


2002-04-29 01:48:31  Rev 4101   jdorje

	* game_servers/ggzcards/common.c:
	  A few cleanups and fixes to the core code:
	    - Reset each player's "ready" status to FALSE when a player 
	  leaves.
	    - Don't accept newgame responses when all seats are not full.
	    - Handle a play event better, including a fix for the 
	  multiple-people-
	      playing case.


2002-04-28 23:00:01  Rev 4100   rgade

	* ggzd/table.c ggzd/players.c:
	  - player_transit() - Avoid messing with the seat if 
	  table_find_player() fails
	  - table_find_player() - Return seat index of -1 if table not found


2002-04-28 00:15:26  Rev 4098   jdorje

	* game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/ai/game.h 
	  game_servers/ggzcards/ai/random.c:
	  Some more very minor cleanups to AI code: renamed some variables, 
	  removed
	  some function prototypes, etc.


2002-04-28 00:14:09  Rev 4097   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h:
	  Some very minor cleanups (renamed variables, added header 
	  metadata) to
	  aicommon files.


2002-04-27 23:02:27  Rev 4096   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Avoid trying to bid less than 0.  This tends to have bad results.


2002-04-27 23:01:47  Rev 4095   jdorje

	* game_servers/ggzcards/ai/game.c:
	  Changed some 0's to FALSEs.


2002-04-27 21:18:12  Rev 4092   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  Removed the explicit bot-naming code.  Now we just take the 
	  default Bot
	  names that ggzdmod provides.


2002-04-27 21:09:21  Rev 4091   jdorje

	* game_servers/ggzcards/common.c:
	  Cleanups to seat naming system.
	  Now, for PLAYER, BOT, and RESERVED seats we allow ggzdmod to 
	  entirely track
	  the player names.
	  For OPEN seats we just name the seat "Empty Seat".
	  Only for NONE seats is the name field of the seats structure used.


2002-04-26 19:38:14  Rev 4087   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/common/cards.h:
	  Updated common and client code from gtk-games module.


2002-04-26 07:26:10  Rev 4085   jdorje

	* game_servers/ggzcards/client/client.c:
	  Avoid matching a played card with an already-played card.


2002-04-26 06:23:13  Rev 4084   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/common/cards.h:
	  Copied over changed code from the gtk-games module.


2002-04-26 04:34:13  Rev 4082   jdorje

	* game_servers/ggzcards/common.c:
	  Don't explicitly request the gametype from the host when necessary 
	  in
	  handle_join_event().  Instead, this is now handled "automatically" 
	  within
	  the sync that is sent to the client.  I added a comment explaining 
	  this.


2002-04-25 21:23:26  Rev 4081   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/options.h 
	  game_servers/ggzcards/common.c:
	  - Rename get_options() as request_client_options().
	  - When sending a sync, resend any pending option requests as well.


2002-04-25 20:04:49  Rev 4078   jdorje

	* game_servers/ggzcards/message.c:
	  Added a missing "return;" in put_global_message().  This prevents 
	  a big
	  memory (and time) leak.


2002-04-25 08:28:32  Rev 4077   jdorje

	* game_servers/ggzcards/common/protocol.h:
	  Updated the comment descriptions of the GGZCards protocol.


2002-04-24 09:53:59  Rev 4074   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/fortytwo.c:
	  Removed some spurious (void) casts to function calls.
	  They served their role, but now they can go away as these 
	  functions all
	  return void anyway (errors are handled internally).  Yay.


2002-04-24 09:49:56  Rev 4073   jdorje

	* game_servers/ggzcards/net.c:
	  For net_broadcast_*** functions, only broadcast to PLAYER and BOT 
	  seats.


2002-04-24 09:21:42  Rev 4072   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/fortytwo.c 
	  game_servers/ggzcards/games/whist.c:
	  Make the rules_url field a mandatory part of the game_data 
	  structure,
	  rather than an option part of the main game structure.
	  Also, I added a rules_url for Whist and forty-two.


2002-04-24 09:05:48  Rev 4071   jdorje

	* game_servers/ggzcards/games/fortytwo.c:
	  Fixed a small typo bug in forty-two.


2002-04-24 08:46:27  Rev 4070   jdorje

	* game_servers/ggzcards/games/fortytwo.c:
	  Change two char values to ints to avoid an overflow for large bids.


2002-04-23 22:43:51  Rev 4069   jdorje

	* game_servers/ggzcards/games/fortytwo.h 
	  game_servers/ggzcards/games/fortytwo.c:
	  Added doubles as trump in forty-two.


2002-04-23 21:46:49  Rev 4068   jdorje

	* game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/ai/spades.c:
	  Call ailib_alert_trick() from alert_trick() in the spades and 
	  suaro AI
	  code.


2002-04-23 21:39:56  Rev 4067   jdorje

	* game_servers/ggzcards/ai/main.c game_servers/ggzcards/ai/aicommon.
	  h game_servers/ggzcards/ai/game.c game_servers/ggzcards/ai/game.h:
	  A slight restructuring of the meta-ai code (that calls the real AI
	  functions).
	  Also, I moved the definitions of the debugging types (DBG_BID, etc.
	  ) from
	  aicommon.h to game.h.


2002-04-23 21:37:53  Rev 4066   jdorje

	* game_servers/ggzcards/ai/suaro.c:
	  Added debugging output for get_play() in the suaro AI.


2002-04-23 21:36:39  Rev 4065   jdorje

	* game_servers/ggzcards/net.c game_servers/ggzcards/ai.c:
	  Better debug handling of the case when a bot dies.


2002-04-23 19:55:51  Rev 4063   jdorje

	* game_servers/ggzcards/ai/game.c game_servers/ggzcards/ai/suaro.c 
	  game_servers/ggzcards/ai/game.h game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/ai/random.c:
	  Slight restructuring of the AI code: AI modules now call 
	  ailib_alert_***
	  themselves.  Also I added a new function, alert_trick.


2002-04-23 17:27:15  Rev 4061   jdorje

	* game_servers/ggzcards/games/fortytwo.h 
	  game_servers/ggzcards/games/fortytwo.c:
	  Further fixes to forty-two.  It should now be reasonably playable.


2002-04-23 07:52:57  Rev 4060   jdorje

	* game_servers/ggzcards/games/fortytwo.c:
	  Fixed "Contract" label on player dialog for forty-two.


2002-04-23 01:24:33  Rev 4056   jdorje

	* game_servers/ggzcards/games.c:
	  Re-ordered the games to be in alphabetical order.  I probably 
	  wouldn't
	  have done this, except that it leaves the default game pretty 
	  reasonable
	  for all numbers of players (four players -> bridge).  Of course, 
	  Bridge
	  hasn't been tested much, but it *should* be the default game :-).


2002-04-23 01:23:25  Rev 4055   jdorje

	* game_servers/ggzcards/config/ggzcards.room:
	  Added forty-two to the list of games in the (generic) "GGZ Cards" 
	  room
	  description.


2002-04-23 00:52:21  Rev 4054   jdorje

	* game_servers/ggzcards/games/fortytwo.h 
	  game_servers/ggzcards/games/fortytwo.c:
	  More improvements to forty-two.


2002-04-22 23:43:27  Rev 4053   jdorje

	* game_servers/ggzcards/game.c:
	  Fixed a bug in card mapping in game_verify_play: we must be sure 
	  to map
	  the lead card in all cases when determining its suit.  Otherwise 
	  it's
	  possible to get two different suits, and we may find that a play is
	  invalid when really it should be valid (this happens sometimes in
	  forty-two).


2002-04-22 23:40:45  Rev 4052   jdorje

	* game_servers/ggzcards/play.c:
	  Add an assertion to check that one card is always playable.  There 
	  is
	  currently a bug that causes this to be not the case in some 
	  weird-suit
	  games (like forty-two).


2002-04-22 19:40:12  Rev 4051   jdorje

	* ggzd/protocols.h:
	  Moved the list of protocol opcodes out of ggzcore and ggzd and into
	  ggz_common.h in libggz.  This may not be their final resting place,
	  but it
	  is at least an improvement over having duplicated code.


2002-04-22 19:02:02  Rev 4050   jdorje

	* ggzdmod/ggzdmod.c:
	  Slight change to internals of ggzdmod_set_seat:
	    - Change the ordering of the if(...) statements when checking 
	  validity
	      of the new seat; this should enhance readibility (at least IMO).
	    - Allow the game server to change the FD for all bot players.  
	  Previously
	      it was allowed to change the FD when the FD was -1.  This is a 
	  bit
	      more well-defined, and potentially more useful for some games.


2002-04-22 17:40:30  Rev 4049   jdorje

	* game_servers/ggzcards/games/fortytwo.c:
	  Fixed player messages for forty-two.


2002-04-22 01:07:22  Rev 4047   jdorje

	* game_servers/ggzcards/common/cards.c:
	  Return the correct name in get_***_name functions, based on the 
	  cardset in
	  use.


2002-04-22 00:04:41  Rev 4046   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/ai/game.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/deck.c game_servers/ggzcards/ai/game.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/common/cards.c 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/common/net_common.c 
	  game_servers/ggzcards/net.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c game_servers/ggzcards/common/cards.
	  h game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  A different approach to using different cardsets: the type of 
	  cardset is
	  no longer stored for each card (using different cardsets together 
	  isn't
	  feasible anyway), but is transferred to the client with the newgame
	  message.


2002-04-21 23:20:16  Rev 4044   jdorje

	* game_servers/ggzcards/games/sueca.c game_servers/ggzcards/ai/suaro.
	  c game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/common/cards.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/common/cards.h 
	  game_servers/ggzcards/games/whist.c:
	  Changed the suit/face name arrays to functions.


2002-04-21 22:58:26  Rev 4043   jdorje

	* game_servers/ggzcards/games/fortytwo.c:
	  Minor improvements to forty-two: the declarer leads first, and 
	  show what
	  suit (number) is trump.


2002-04-21 21:26:36  Rev 4042   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Some of the recent changes have subtly changed the form of the 
	  data the
	  server sends to the client, thus introducing protocol 
	  incompatibilities
	  for some games.  So I've bumped the protocol engine # up (again).


2002-04-21 21:22:18  Rev 4041   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games/fortytwo.
	  h game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/games/fortytwo.c:
	  Preliminary support for Forty-two.


2002-04-21 21:21:07  Rev 4040   jdorje

	* game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/games/bridge.h 
	  game_servers/ggzcards/games/whist.h 
	  game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/games/sueca.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/hearts.h 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/lapocha.h 
	  game_servers/ggzcards/games/suaro.h:
	  Updates to game-specific .h files.
	  These files now contain only data that is also used by the AI.


2002-04-21 08:14:26  Rev 4037   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common/cards.c 
	  game_servers/ggzcards/common/cards.h:
	  Added UNKNOWN_CARDSET to the enumeration of possible card types.  
	  Changed
	  UNKNOWN_CARD to use UNKNOWN_CARDSET for the card type.
	  When the client receives UNKNOWN_CARDSET as the type of card, 
	  don't try
	  to initialize the card drawing code.  Also, don't setup the table 
	  before
	  we have been told the cardset type, and try to setup the table 
	  when we
	  hear the cardset type.


2002-04-21 07:03:47  Rev 4035   jdorje

	* game_servers/ggzcards/deck.h game_servers/ggzcards/deck.c:
	  - Added the deck type GGZ_DECK_DOMINOES.
	  - Made a slight fix to the deck_shuffle algorithm.


2002-04-21 06:15:20  Rev 4033   jdorje

	* game_servers/ggzcards/net.c:
	  When instructed to not reveal a hand we're sending to a client, 
	  just hide
	  the face and suit.  Previously each card was replaced by 
	  UNKNOWN_CARD,
	  which hid the deck # and also forced a particular type of cardset.


2002-04-21 06:13:46  Rev 4032   jdorje

	* game_servers/ggzcards/common/net_common.h 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/common/shared.h 
	  game_servers/ggzcards/common/cards.c 
	  game_servers/ggzcards/common/net_common.c 
	  game_servers/ggzcards/common/cards.h 
	  game_servers/ggzcards/common/protocol.c:
	  Added a new type of card type: CARDSET_DOMINOES.


2002-04-21 02:57:42  Rev 4031   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/ai/game.c game_servers/ggzcards/ai/game.h:
	  Updated client/ code from the gtk-games client: added a new callback
	  function, game_alert_card_type.  Added a stub function to the AI 
	  client to
	  handle this callback.


2002-04-20 21:57:36  Rev 4026   jdorje

	* game_servers/lapocha/game.c game_servers/keepalive/src/keepalive.
	  cpp game_servers/dots/game.c game_servers/reversi/game.c 
	  game_servers/tictactoe/game.c game_servers/escape/game.c 
	  game_servers/hastings/game.c game_servers/chinese-checkers/game.c 
	  game_servers/ggzcards/common.c game_servers/chess/game.c 
	  game_servers/combat/game.c game_servers/muehle/ggz/ggzgameserver.
	  cpp:
	  Changed internal game servers to use the "new" ggzdmod seat event 
	  data
	  parameter.  Mostly this just involves a lot of changes of the form:
	  -   int player = *(int*)data;
	  +   int player = ((GGZSeat*)data)->num;
	  Note that:
	    - The change was mostly backwards-compatible anyway, so this 
	  change
	      shouldn't have any effect under most or all compilers.  But it 
	  does
	      set a necessary precedent.
	    - None of our games currently have a handler for 
	  GGZDMOD_EVENT_SEAT.
	      This would be very bad, except that ggzdmod currently never 
	  generates
	      a GGZDMOD_EVENT_SEAT.


2002-04-20 09:10:07  Rev 4025   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/options.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/types.h game_servers/ggzcards/play.h 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c:
	  Assorted minor code cleanups to ggzcards:
	    - Renamed a few functions for greater global consistency.
	    - Changed some types from int to bool.
	    - Only call try_to_start_game when all options are set.
	    - For some ignored function return values, cast the function to 
	  void.


2002-04-20 08:30:54  Rev 4024   jdorje

	* game_servers/ggzcards/ai.c:
	  Don't bother closing stdin/stdio/stderr for ggzcards bots.  This 
	  is better
	  left up to GGZ to deal with (as it does in daemon mode).


2002-04-20 04:23:11  Rev 4023   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Changed the parameter for the ggzdmod seat events (JOIN, LEAVE, 
	  SEAT) to
	  be a pointer to the entire (old) seat, rather than a pointer to 
	  the seat
	  number.
	  This is mostly backwards-compatible with the old system, although 
	  I will
	  update the internal game servers to use the new system shortly.


2002-04-19 08:13:17  Rev 4022   jdorje

	* ggzdmod/ggzdmod.c:
	  In _ggzdmod_set_seat, don't call ggzdmod_get_seat to retrieve the 
	  seat
	  data until after the change has been checked.  This will not 
	  change the
	  effects of the function, but makes it more encapsulated (and 
	  slightly
	  more efficient).


2002-04-19 07:33:52  Rev 4021   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/ai.c:
	  Fixed three bugs:
	    - When a player leaves before the game has been chosen, the server
	      segfaulted.  This is avoided by checking for such a situation in
	      set_player_name() (this was already being done, but improperly).
	    - When the host leaves before choosing the game, the table would 
	  be
	      stuck since there was now no way to choose.  Instead, the new 
	  host is
	      now asked to choose the game.
	    - When the last player leaves before the game has been chosen, 
	  the AI
	      players were killed even though they hadn't been spawned, 
	  resulting in
	      a failed assertion.  This is corrected by changing the 
	  assertion to
	      a straight conditional to handle the situation.


2002-04-19 07:21:41  Rev 4020   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  A few varied cleanups to ggzcards code.


2002-04-18 18:05:04  Rev 4013   jdorje

	* game_servers/chess/libcgc/movecheck.c:
	  Synced libcgc with the gtk-games client's copy:
	  s/NULL/0/ to avoid a compiler warning from casting NULL to an 
	  integer.


2002-04-17 18:57:24  Rev 4006   dr_maux

	* debian/ggzd.postinst debian/ggzd.prerm:
	  - don't choke on existing /var/ggzd directory
	  - remove obsolete ggz-client-libs stuff (this had nothing to do 
	  here anyway)


2002-04-16 19:45:22  Rev 4003   jdorje

	* game_servers/ggzcards/common.c:
	  Don't try to kill an AI player before the game is initialized, 
	  since they
	  won't have been launched yet.


2002-04-16 19:38:45  Rev 4002   jdorje

	* game_servers/ggzcards/common.c:
	  Doh!  Call get_player_status() on a player #, not get_seat_status().


2002-04-16 19:35:22  Rev 4001   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/ai.h 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  Preliminary code to handle a network error by restarting the AI, if
	  necessary.  This does not appear to work fully yet, as the game 
	  will be
	  put out-of-sync when this happens.


2002-04-16 19:14:01  Rev 4000   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/message.c:
	  Added some missing #includes.


2002-04-16 19:05:35  Rev 3998   jdorje

	* game_servers/ggzcards/common/net_common.h 
	  game_servers/ggzcards/common/net_common.c:
	  Oops!  Forgot to add new files net_common.[ch].


2002-04-16 19:03:58  Rev 3997   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/client/client.
	  c game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/client/Makefile.am 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc 
	  game_servers/ggzcards/net.h game_servers/ggzcards/options.c 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/options.h 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/game.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/common/Makefile.am 
	  game_servers/ggzcards/message.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/common/protocol.c:
	  Overhauled the network code.  It's not basically completely 
	  separate from
	  the rest of the code, in net.c.  To facilitate this, I had to 
	  change the
	  RSP_OPTIONS packet slightly to be self-contained, thus breaking
	  protocol compatibility.
	  I also did a variety of other small cleanups.


2002-04-15 11:17:44  Rev 3996   jdorje

	* game_servers/ggzcards/net.c:
	  Doh.  Fixed typo in last commit.


2002-04-15 11:14:49  Rev 3995   jdorje

	* game_servers/ggzcards/net.c:
	  Don't use ggz_read_string_alloc at the server end to read a user's 
	  LANG
	  string; this is unsafe (even with libggz's maximum allocation 
	  limit).
	  Instead just use a fixed-size buffer.


2002-04-15 09:52:12  Rev 3994   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games.h:
	  Removed unused function games_get_game_id.  This is a continuation 
	  of the
	  game-type overhaul & cleanup.


2002-04-15 09:49:55  Rev 3993   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.
	  c game_servers/ggzcards/games/whist.c:
	  Type cleanup for GGZCards:
	    - Changed some int values to bools.
	    - Changed some 0's to FALSEs.
	    - Changed the return values of some functions to void, when they 
	  only
	      returned 0 anyway.


2002-04-15 09:36:11  Rev 3992   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games/sueca.
	  c game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/common/shared.
	  h game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.
	  c game_servers/ggzcards/deck.c game_servers/ggzcards/games/euchre.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.
	  c game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/whist.c:
	  An overhaul of the game-specific system:
	    - Now almost all game-specific data is stored in the game.data 
	  structure
	      (game_data_t).  The list of games just points to this 
	  game_data_t
	      structure.
	    - Some data is still included in the game structure itself.  
	  This is so
	      sensible defaults can be assigned and many games can just 
	  ignore it.
	    - Rather than track a game name and find the game from it later, 
	  once
	      we're told a game (either from the command-line, by 
	  elimination, or by
	      the game host) we just assign game.data.  All checks are now 
	  done
	      against this.
	  Etc, etc, etc.  The new system has one less level of complexity, 
	  which is
	  a good thing.  However, it does rename game.funcs as game.data 
	  seemingly
	  arbitrarily :-(.


2002-04-15 07:23:26  Rev 3990   jdorje

	* game_servers/tictactoe/main.c game_servers/lapocha/cards.c 
	  game_servers/chess/game.c game_servers/combat/game.c 
	  game_servers/keepalive/src/main.cpp 
	  game_servers/chess/libcgc/games.c game_servers/chess/main.c 
	  game_servers/combat/main.c 
	  game_servers/krosswater/stackpath/cwpathitem.cpp 
	  game_servers/krosswater/stackpath/pathitem.cpp 
	  game_servers/muehle/net.cpp game_servers/chess/libcgc/board.c 
	  game_servers/lapocha/game.c game_servers/keepalive/src/player.cpp 
	  game_servers/reversi/game.c game_servers/spades/engine_main.c 
	  game_servers/lapocha/main.c game_servers/chinese-checkers/ai.c 
	  game_servers/krosswater/krosswater_server.cpp game_servers/dots/ai.
	  c game_servers/reversi/main.c game_servers/escape/game.c 
	  game_servers/keepalive/ggzsh/ggzsh.cpp game_servers/combat/combat.
	  c game_servers/keepalive/ggzsh/main.cpp 
	  game_servers/keepalive/src/world.cpp game_servers/chess/libcgc/cgc.
	  c game_servers/escape/main.c game_servers/muehle/muehleserver.cpp 
	  game_servers/hastings/game.c game_servers/chess/libcgc/movecheck.c 
	  game_servers/keepalive/src/keepalive.cpp game_servers/muehle/main.
	  cpp game_servers/hastings/main.c 
	  game_servers/krosswater/stackpath/main.cpp 
	  game_servers/chinese-checkers/game.c 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/dots/game.c game_servers/muehle/loader.cpp 
	  game_servers/chinese-checkers/main.c game_servers/krosswater/main.
	  cpp game_servers/spades/card.c game_servers/tictactoe/game.c 
	  game_servers/dots/main.c:
	  Added "#include <config.h>" line to lots and lots and lots (and 
	  lots) of
	  files.
	  AFAIK this line should be included at the top of every .c and .cpp 
	  file,
	  before any other #inlcudes (so that it will affect them as well).  
	  It
	  should now be the case that this is true for all files in the ggzd,
	  gtk-games, and gtk-client modules.
	    There is one exception: gtk-games/spades/gtk_menu.c breaks if 
	  config.h
	    is #included, because doing so causes i18n to take effect and 
	  the file
	    is not prepared for this.  A separate fix will be necessary.


2002-04-15 05:29:20  Rev 3989   jdorje

	* game_servers/ggzcards/common/cards.c 
	  game_servers/ggzcards/common/cards.h:
	  Minor cleanups to cards.[ch] interface and code:
	    - Made card name arrays const char *'s instead of char *'s.
	    - Replaced some occurances of -1 with UNKNOWN_*** macros.
	    - Changed UNKNOWN_CARD initializer to use explicit field 
	  initializers.


2002-04-15 05:03:46  Rev 3988   jdorje

	* game_servers/ggzcards/ai/game.c:
	  Added missing "#include <config.h>" line.


2002-04-15 04:58:10  Rev 3987   jdorje

	* game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/common/shared.h:
	  Moved MIN/MAX macros out of aicommon.h into shared.h.


2002-04-14 19:56:00  Rev 3985   jdorje

	* ggzd/net.c:
	  Apply Riq's fix for a potential buffer overflow on the DATA XML 
	  element.
	  From his e-mail:
	    Try typing ']]>' this at the ggzclient chatline, and see what 
	  happens.
	    Going further... the SIZE of DATA is never checked, so a remote 
	  buffer
	    overflow exists, which may be exploitable.
	    Just type this in the chatline of the ggz client:
	    chau]]></CHAT><DATA SIZE='4200'><![CDATA['hola']]></DATA><CHAT 
	  TYPE='normal' FROM='Major69'><![CDATA[
	    Boom! The server crashes.


2002-04-14 08:10:28  Rev 3978   jdorje

	* game_servers/ggzcards/ai.c:
	  Instead of using close(fileno(stdin)) to close stdin/stdout/stderr,
	  just
	  use fclose(stdin).  Also check the return value (although there's 
	  not
	  much to be done with it).


2002-04-13 23:59:43  Rev 3977   jdorje

	* game_servers/ggzcards/ai.c:
	  Use fileno() to recover FD #'s for stdin/stdout/stderr, rather than
	  assuming they are FD's 0, 1, and 2.


2002-04-13 07:12:45  Rev 3969   bmh

	* ChangeLog:
	  - Updated ChangeLog for 0.0.5


2002-04-13 07:11:53  Rev 3968   rgade

	* ggz_server.spec:
	  - Updated RPM Spec for 0.0.5 release


2002-04-13 05:34:06  Rev 3958   dr_maux

	* debian/rules debian/ggzd.postinst debian/ggzd.init.d:
	  - /var is /var and not /usr/var for the Debian packages
	  - don't run as 'root' but rather as 'games'


2002-04-13 04:25:34  Rev 3953   bmh

	* configure.in:
	  - Bumped version to 0.0.5


2002-04-13 04:23:07  Rev 3952   bmh

	* README.GGZ AUTHORS TODO NEWS README:
	  - Updated documentation files


2002-04-13 01:46:10  Rev 3934   jdorje

	* man/ggzdmod.h.3:
	  Updated ggzdmod man page.


2002-04-13 00:45:42  Rev 3929   dr_maux

	* Makefile.am:
	  - remove local make clean rule again


2002-04-12 20:13:40  Rev 3917   dr_maux

	* game_servers/tictactoe/tictactoe.dsc:
	  - upping TTT version


2002-04-12 20:11:20  Rev 3916   dr_maux

	* game_servers/krosswater/krosswater.dsc:
	  - correct Krosswater version


2002-04-12 20:09:08  Rev 3915   dr_maux

	* game_servers/hastings/hastings.dsc:
	  - upping Hastings version number to 0.0.5


2002-04-12 18:35:15  Rev 3912   jdorje

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/lapocha/lapocha.dsc game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/reversi/reversi.dsc game_servers/tictactoe/tictactoe.
	  dsc game_servers/hastings/hastings.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Bumped up game protocol engine version numbers.


2002-04-12 09:17:47  Rev 3910   dr_maux

	* game_servers/tictactoe/game.c:
	  - commit holy cow algorithm


2002-04-12 07:20:52  Rev 3909   jdorje

	* game_servers/ggzcards/games/hearts.c:
	  Fixed typo: s/diamons/diamonds/.


2002-04-12 06:39:42  Rev 3906   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Added GGZCards version number to 0.0.5.


2002-04-12 06:34:56  Rev 3905   jdorje

	* game_servers/ggzcards/config/ggzcards.room:
	  Added a list of available games to the "GGZCards" room description.


2002-04-10 18:58:25  Rev 3885   jdorje

	* ggzdmod/ggzdmod.h:
	  Slight fix to ggzdmod documentation.


2002-04-10 13:53:51  Rev 3880   dr_maux

	* game_servers/lapocha/Makefile.am game_servers/dots/Makefile.am 
	  game_servers/tictactoe/Makefile.am game_servers/spades/Makefile.am 
	  game_servers/muehle/Makefile.am game_servers/reversi/Makefile.am 
	  game_servers/hastings/Makefile.am 
	  game_servers/ggzcards/client/Makefile.am 
	  game_servers/ggzcards/common/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/ggzcards/Makefile.am game_servers/krosswater/Makefile.
	  am game_servers/chess/Makefile.am game_servers/combat/Makefile.am 
	  game_servers/muehle/ggz/Makefile.am 
	  game_servers/krosswater/zoneserver/Makefile.am:
	  - add libggz includes to each and every makefile which needs it


2002-04-10 13:37:12  Rev 3879   dr_maux

	* ggzd/Makefile.am ggzdmod/Makefile.am:
	  - include libggz headers correctly


2002-04-10 10:37:47  Rev 3875   dr_maux

	* game_servers/krosswater/krosswater_server.cpp:
	  - prevent some cheating


2002-04-10 10:15:06  Rev 3874   dr_maux

	* game_servers/krosswater/krosswater_server.h 
	  game_servers/krosswater/krosswater_server.cpp:
	  - server fixes for krosswater


2002-04-09 21:12:20  Rev 3865   dr_maux

	* Makefile.am:
	  - addon


2002-04-09 21:12:09  Rev 3864   dr_maux

	* debian/rules:
	  - finalize ggzd


2002-04-07 22:59:20  Rev 3846   jdorje

	* ggzdmod/Makefile.am:
	  Added Doxyfile to EXTRA_DIST.


2002-04-07 22:41:05  Rev 3845   jdorje

	* ggzdmod/ggzdmod.h:
	  General improvements to ggzdmod documentation.


2002-04-07 22:27:57  Rev 3844   jdorje

	* ggzdmod/ggzdmod.c:
	  Fix the return value of ggzdmod_dispatch: -1 on error, the number of
	  events handled on success.


2002-04-07 22:07:10  Rev 3843   jdorje

	* ggzdmod/ggzdmod.h:
	  Added more documentation on the GGZdMod events.


2002-04-07 16:18:31  Rev 3841   dr_maux

	* debian/control debian/shlibs.local:
	  - fix the shlibs.local problem


2002-04-07 15:40:20  Rev 3840   dr_maux

	* debian/control debian/ggzd.conffiles debian/rules debian/ggzd.files:
	  - fix debs for ggzd even more
	  - only the wrong dependency on ggz-server is now remaining


2002-04-07 08:28:03  Rev 3810   jdorje

	* ggzdmod/ggzdmod.h:
	  Add more documentation on ggzdmod game states.


2002-04-07 08:08:31  Rev 3807   jdorje

	* ggzdmod/ggzdmod.c:
	  Allow the game server to change ggzdmod-game's player FD if it is 
	  -1.
	  Note that for bot players, the FD is always -1.  The data is not
	  propogated back to the server, so changing this at the game end is 
	  safe
	  as far as ggzd is concerned.  ggzdmod will monitor player FD's so 
	  long as
	  they are not -1, so changing a bot FD will cause it to be 
	  monitored and
	  GGZDMOD_EVENT_PLAYER_DATA events will be generated for them.  This 
	  is
	  currently undocumented.
	  Patch by Riq.  I also added some extra comments.


2002-04-07 07:42:20  Rev 3804   dr_maux

	* debian/rules:
	  - shared library rules for the debian package


2002-04-07 07:41:27  Rev 3803   dr_maux

	* game_servers/muehle/Makefile.am game_servers/krosswater/Makefile.am:
	  - hm, this works better


2002-04-07 07:18:01  Rev 3802   dr_maux

	* game_servers/muehle/Makefile.am game_servers/krosswater/Makefile.am:
	  - ugh. dependency adjusting
	  This is a really difficult issue, and for 0.0.6 we need to hire 
	  Redhat's Tom
	  Tromey to do all the autotools work for us...


2002-04-06 22:48:53  Rev 3801   dr_maux

	* man/Makefile.am man/ggzduedit.6:
	  - add alibi man page for ggzduedit


2002-04-06 22:46:18  Rev 3800   dr_maux

	* debian/shlibs.local:
	  - oops, forgot new shlibs.local file


2002-04-06 22:45:50  Rev 3799   dr_maux

	* debian/control debian/ggzd.docs debian/postinst debian/shlibs 
	  debian/postrm debian/prerm debian/libggzdmod-dev.docs 
	  debian/ggz-game-servers.files debian/changelog debian/docs 
	  debian/libggzdmod0.docs debian/rules debian/ggzd.files 
	  debian/libggzdmod-dev.files debian debian/ggzd.conffiles 
	  debian/libggzdmod0.files debian/copyright debian/conffiles 
	  debian/ggz-game-servers.docs debian/ggzd.postinst debian/.
	  cvsignore debian/ggzd.postrm debian/ggzd.prerm:
	  - debianize ggzd
	  Note: This is work in progress, package will be ready tomorrow.


2002-04-06 22:09:16  Rev 3798   dr_maux

	* Makefile.am:
	  - config.status deletion


2002-04-06 15:39:12  Rev 3778   dr_maux

	* acinclude.ggz:
	  - sync acinclude.ggz


2002-04-06 06:00:40  Rev 3762   jdorje

	* ggzd/motd.c:
	  When we look at the return value of uname(), only fail 
	  (err_sys_exit) if it
	  is less than 0, not just if it's != 0.  This should work on some 
	  non-GNU
	  platforms (i.e. solaris).


2002-04-05 22:03:05  Rev 3758   dr_maux

	* README.GGZ:
	  - update installation instructions and overview


2002-04-05 07:51:47  Rev 3750   jdorje

	* game_servers/ggzcards/common.c:
	  Fix typo: make sure err_fd is only used when DEBUG is enabled.


2002-04-05 07:49:23  Rev 3749   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  - Add functions stop_ai and restart_ai.  stop_ai kills & collects 
	  a single
	    AI process.  restart_ai does the same, then restarts a new AI 
	  (type
	    "random" in its place).  The former is intended to be called 
	  when the
	    game server exits, the latter is for when there's a fatal 
	  problem with
	    an AI.
	  - When we change state to done, call stop_ai() for all AI players.


2002-04-05 07:47:36  Rev 3748   jdorje

	* game_servers/ggzcards/types.h:
	  Change the struct game_player_t::pid variable to be type pid_t.


2002-04-05 07:09:05  Rev 3746   jdorje

	* game_servers/ggzcards/common/shared.h game_servers/ggzcards/main.c:
	  Added assertions to detect any future problems in the select loop.


2002-04-05 06:20:48  Rev 3745   jdorje

	* game_servers/ggzcards/main.c game_servers/ggzcards/common.c:
	  Fixed a major bug: initialize the AI's err_fd to -1, and check for 
	  an FD
	  of -1 later when we're calling select() to wait for data on it.
	  This should prevent some Bad, highly unpredictable behavior from 
	  before
	  where the FD was initialized to 0 when the player array was 
	  allocated
	  (which happened during the GGZ launch), but not truly initialized 
	  to the
	  correct value until the AI was spawned (which doesn't happen until 
	  the
	  game is chosen).  This meant we could get some really fucked up
	  behavior when in the generic "GGZCards" room (in the other rooms, 
	  things
	  should work fine since we know the game type from the beginning).  
	  In the
	  case of the kde client, the fact that the initial client packet 
	  from the
	  player (the one that sends the language) goes through must have 
	  made a
	  difference somehow, causing the server to lock up waiting for data 
	  on
	  FD 0.
	  In summary, it is likely that everything will work now, though more
	  stress-testing is needed.


2002-04-05 05:54:12  Rev 3744   jdorje

	* ggzd/login.c:
	  Added debug logging for all login errors.


2002-04-05 05:40:22  Rev 3743   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed debugging output for receiving packets from the client: 
	  removed the
	  player_messages[] string array (which was obsolete) and use
	  get_client_opcode_name() instead.


2002-04-05 05:29:49  Rev 3742   jdorje

	* game_servers/ggzcards/net.c:
	  Added explanatory comment to broadcast_player_list(), after I almost
	  erronously changed it to not send player lists to bots.


2002-04-05 05:09:32  Rev 3741   jdorje

	* ggzd/ggzdb.h:
	  Changed GGZDB_ERR_*** #definitions to an enumeration.


2002-04-05 05:05:53  Rev 3740   jdorje

	* ggzd/login.c:
	  Slightly more debugging information about player login.


2002-04-03 18:01:36  Rev 3724   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  - Have ggzdmod_get_num_seats return -1 if there is no connection 
	  present.
	  - Clarify documentation on ggzdmod_get_num_seats (in ggzdmod.h).


2002-04-03 17:33:29  Rev 3721   dr_maux

	* game_servers/chess/chess.dsc game_servers/combat/combat.dsc 
	  game_servers/keepalive/keepalive.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/lapocha/lapocha.dsc game_servers/reversi/reversi.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/dots/dots.dsc:
	  - update some game server homepage URLs


2002-04-02 19:54:33  Rev 3717   dr_maux

	* game_servers/krosswater/krosswater_server.h 
	  game_servers/krosswater/krosswater_server.cpp:
	  - create map properly


2002-04-01 21:51:03  Rev 3716   dr_maux

	* game_servers/hastings/game.c:
	  - handle leave/rejoin
	  - UI cleanup: only display present knights, mask out all others


2002-03-29 03:40:44  Rev 3715   jdorje

	* game_servers/ggzcards/games.c:
	  Fixed bug in the option description system - there was no 
	  description for
	  the options when we chose a game.


2002-03-28 04:43:05  Rev 3702   jdorje

	* game_servers/ggzcards/net.c:
	  Don't send the full bid texts/descriptions to AI players.  Just 
	  send a
	  dummy string.


2002-03-28 03:22:32  Rev 3701   jdorje

	* game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/client/client.h game_servers/ggzcards/games.
	  h game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/whist.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc 
	  game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/ai/game.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/ai/game.h game_servers/ggzcards/games/euchre.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc:
	  More tooltips madness.  Introduced the concept of a bid description,
	  separate from the simple bid text.  Send the bid descriptions to the
	  client when requesting a bid.  At the client end, show these 
	  descriptions
	  as tooltips if that preference is selected.
	  I added bid descriptions for Suaro and Spades, other games do not 
	  have
	  them yet.


2002-03-28 01:18:27  Rev 3700   jdorje

	* game_servers/ggzcards/options.c 
	  game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/options.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/ai/game.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/ai/game.
	  h game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.
	  c game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Now each option set has a single descriptive text associated with 
	  it.
	  This text is sent to the clients, and is displayed by the gtk 
	  client as
	  a tooltip for all of the relevant option choices.


2002-03-25 20:16:53  Rev 3682   jdorje

	* game_servers/ggzcards/games/Makefile.am:
	  Changed one last $(top_srcdir) to $(top_builddir).


2002-03-25 20:07:15  Rev 3677   jdorje

	* game_servers/muehle/Makefile.am:
	  - Changed some $(top_srcdir) to $(top_builddir).
	  - Added $(top_srcdir) to some INCLUDE entries.
	  - Added $(ggzdgame_DATA) and $(ggzdroom_DATA) to EXTRA_DIST.


2002-03-25 19:27:17  Rev 3673   jdorje

	* game_servers/muehle/variants/Makefile.am:
	  Added $(variants_DATA) to EXTRA_DIST so that these files will get
	  distributed.


2002-03-25 19:18:09  Rev 3672   jdorje

	* game_servers/muehle/qtserv/Makefile.am:
	  Added missing header sources to libqtserv_a_SOURCES.


2002-03-25 19:08:56  Rev 3671   jdorje

	* game_servers/krosswater/Makefile.am:
	  Changed another $(top_srcdir) to $(top_builddir).


2002-03-25 18:59:30  Rev 3670   jdorje

	* game_servers/ggzcards/Makefile.am:
	  Made some more paths absolute (with $(top_srcdir)) to facilitate
	  "make distcheck".


2002-03-25 18:51:08  Rev 3669   jdorje

	* game_servers/ggzcards/ai/Makefile.am:
	  For the libraries, change $(top_srcdir) to $(top_builddir) to 
	  facilitate
	  a make distcheck.


2002-03-25 18:31:06  Rev 3668   jdorje

	* game_servers/ggzcards/ai/Makefile.am:
	  A few more cleanups to the AI build process.


2002-03-25 00:07:42  Rev 3666   dr_maux

	* game_servers/hastings/game.c:
	  - check moves for validity and maliscious clients


2002-03-24 21:55:44  Rev 3665   dr_maux

	* game_servers/hastings/game.c:
	  - doh! another undetected cheating move!
	  Going from x/y to x+1/y-1 for (y % 2) == 1,
	  i.e. 2/5 -> 3/4


2002-03-24 21:13:44  Rev 3664   dr_maux

	* ggzd/Makefile.am:
	  - change DB_SOURCES to DBSOURCES and DB_ALL to DBALL.
	  Otherwise, auto-something would complain.


2002-03-24 21:10:30  Rev 3663   dr_maux

	* game_servers/ggzcards/ai/Makefile.am:
	  - push all common AI sources into a dummy library
	  Jason, please test this. It should be more robust than the other 
	  ways to solve
	  that linker problem.
	  If it doesn't work... well, we'll all be kind of stoned then.


2002-03-24 18:52:17  Rev 3661   dr_maux

	* TODO:
	  - TODO stuff for ggzd 0.0.5 and 0.0.6


2002-03-24 01:02:30  Rev 3641   jdorje

	* configure.in:
	  Remove the 'tests" directory from compilation, too, so that we 
	  won't try
	  to build a directory that has no Makefile (this problem wasn't 
	  immediately
	  obvious, not until I tried a clean build did it turn up).
	  I don't entirely agree that the tests/ directory should be left 
	  out for
	  0.0.5, but whether it is or not it must be changed in both places in
	  configure.in: ad the Makefile to the AC_OUTPUT list and add the 
	  directory
	  itself to SUBDIRS.  Both are currently commented out.


2002-03-23 21:17:47  Rev 3638   jdorje

	* game_servers/hastings/game.c:
	  Fixed most hastings problems.
	  The problem was that the game_send_move() function was supposed to 
	  send
	  the move to everyone, yet it returned if it ever encountered an AI 
	  player
	  or failed to send a move.
	  The fix is easy: just continue sending the move to the other 
	  players in
	  those cases.
	  However, there is still a problem, in that I'm pretty sure 
	  Hastings doesn't
	  check the move that is sent by the client.  This is not a 
	  showstopper,
	  however.


2002-03-23 21:02:57  Rev 3637   dr_maux

	* configure.in:
	  - addon


2002-03-23 21:02:40  Rev 3636   dr_maux

	* game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/client/Makefile.am:
	  - doh! forgot to modify configure.in as well
	  - some fixes to Makefile.am's which used relative paths


2002-03-23 20:29:22  Rev 3634   dr_maux

	* game_servers/Makefile.am:
	  - damn, I had ggzcards taken out locally because I tried to 
	  examine the linkage
	    problem with the static libs.
	    Honi soit qui mal y pense :)


2002-03-23 19:54:26  Rev 3630   dr_maux

	* game_servers/Makefile.am:
	  - Both keepalive and escape are excluded for the 0.0.5 release on 
	  the server
	    side because there is no game client in use for them as of today.
	    They will however be reenabled directly after the release so 
	  they'll show up
	    on the developer servers, and will make it into 0.0.6.


2002-03-22 19:53:27  Rev 3618   dr_maux

	* .cvsignore:
	  - add stamp-h1 here too


2002-03-21 05:53:18  Rev 3607   jdorje

	* ggzd/transit.c:
	  Remove unused variable "allow" from transit_seat_event_callback().


2002-03-21 02:52:30  Rev 3606   bmh

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/players.c ggzd/players.h 
	  ggzd/transit.c:
	  - Move checking for leave allowed into player_table_leave()
	  - New function table_kill() lets players request that tables be 
	  killed
	    (handled by table thread in table_kill_callback() by setting 
	  state to DONE)
	  - Handle leave forcing by killing table if leaves not allowed


2002-03-20 05:24:35  Rev 3604   jdorje

	* ggzd/parse_opt.c ggzd/err_func.c:
	  Added some "#ifdef DEBUG" checks so ggzd compiltes when DEBUG is not
	  defined.


2002-03-20 05:14:13  Rev 3603   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/types.h:
	  Disable AI logging when DEBUG isn't defined.


2002-03-20 05:02:17  Rev 3602   jdorje

	* game_servers/ggzcards/main.c:
	  Removed some unused code, and cleaned up/commented some more.


2002-03-17 06:29:49  Rev 3596   jdorje

	* ggzd/players.c:
	  Update lag during each player update.  This way if a player never 
	  sends
	  a PONG in response to the PING, it won't have the result that 
	  their lag
	  class always remains 1.


2002-03-17 00:14:56  Rev 3595   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common.h 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/common/shared.h 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/common/cards.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c 
	  game_servers/ggzcards/common/protocol.c 
	  game_servers/ggzcards/common/cards.h 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Step 1 of adding i18n support to GGZCards: have the clients send 
	  their
	  language setting to the server.
	  Notes:
	    - This is actually the only step that needs be taken now, since it
	      breaks protocol compatibility.  All other changes need only be 
	  done
	      server-side.
	    - It doesn't technically "work", since the packet sent by the 
	  client
	      is not delivered by GGZ.  This will be an easy way to test any 
	  bug
	      fix for that problem.


2002-03-16 16:27:49  Rev 3579   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c:
	  Update rules_url entries for all games (except sueca and suaro, 
	  which were
	  already set).


2002-03-16 16:22:43  Rev 3578   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Change the "homepage" for ggzcards to
	  	http://ggz.sourceforge.net/games/ggzcards


2002-03-16 16:13:37  Rev 3577   jdorje

	* game_servers/ggzcards/common.c:
	  - Reset the global message to empty at the start of a game.
	  - Call the generic message setup at the start of a game before we 
	  call
	    the game's start_game function.


2002-03-16 16:12:19  Rev 3576   jdorje

	* game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/bridge.c:
	  Removed unnecessary printf-style "%s" when the string is just a 
	  constant.


2002-03-16 16:09:03  Rev 3575   jdorje

	* game_servers/ggzcards/message.c:
	  Updated the "cumulative scores" message to show scores per-team 
	  instead of
	  per-player.


2002-03-16 15:56:43  Rev 3574   jdorje

	* game_servers/ggzcards/team.c:
	  Fixed typo in last commit.


2002-03-16 15:19:46  Rev 3573   jdorje

	* game_servers/ggzcards/team.h game_servers/ggzcards/team.c:
	  Added functions get_team_tricks and get_team_score.


2002-03-16 15:01:44  Rev 3572   jdorje

	* game_servers/ggzcards/message.c:
	  - Don't have a memory leak between games in score tracking.  
	  Instead just
	    re-use the old array.
	  - Increase the scores array geometrically, to decrease the overhead
	    inherent in such dynamic allocation.


2002-03-16 14:52:46  Rev 3571   jdorje

	* game_servers/ggzcards/team.h:
	  Added comments to team interface.


2002-03-16 06:36:32  Rev 3570   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/whist.c:
	  Unify a bunch of code into add_player_tricks_message.


2002-03-16 06:28:38  Rev 3569   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  In bridge, only show the player bids at appropriate times.


2002-03-16 05:56:24  Rev 3568   jdorje

	* game_servers/ggzcards/net.c:
	  ONly send messages to real players, so we don't get the "Bad 
	  easysock
	  operation" warning so often.


2002-03-16 05:48:45  Rev 3567   jdorje

	* game_servers/ggzcards/ai/main.c game_servers/ggzcards/ai/aicommon.
	  h game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/ai/spades.
	  c:
	  Changed ggz_debug calls to be of types DBG_BID, DBG_PLAY, and 
	  DBG_AI.
	  DBG_AI is a fallback; most calls are of the other two types.


2002-03-16 05:23:37  Rev 3566   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/types.h:
	  Add a cool/hackish method for dealing with debugging messages from 
	  AI
	  modules.
	  The interface is quite simple and beautiful.  Of course, the 
	  backend is
	  not :-).


2002-03-15 20:08:55  Rev 3560   dr_maux

	* game_servers/muehle/loader.cpp game_servers/muehle/muehle.dsc 
	  game_servers/muehle/muehleserver.cpp game_servers/muehle/net.cpp 
	  game_servers/muehle/muehleserver.h:
	  - use ggz_write_string rather than write(2) because we use the 
	  --convert option
	    of ggzwrap
	  - don't choke on the input of the second joining player - use 
	  validity mask


2002-03-15 18:30:14  Rev 3557   dr_maux

	* game_servers/muehle/muehleserver.cpp 
	  game_servers/muehle/muehleserver.h:
	  - send 'invalid' message to malicious clients


2002-03-12 10:46:52  Rev 3552   dr_maux

	* game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - strip newlines when reading strings
	  - don't pass a useless char* data pointer to the data event


2002-03-06 17:00:34  Rev 3545   dr_maux

	* game_servers/muehle/muehle.dsc game_servers/muehle/muehleserver.cpp:
	  - add --ggz option to muehle dsc
	  - only bounce data to opponent player if there are two players 
	  connected


2002-03-06 15:53:05  Rev 3543   dr_maux

	* game_servers/krosswater/stackpath/cwpathitem.cpp:
	  - improve initial player positions (not fixed anymore)


2002-03-06 14:16:46  Rev 3541   dr_maux

	* game_servers/krosswater/krosswater_server.h 
	  game_servers/krosswater/krosswater_server.cpp:
	  - now it should be ready for testing :)


2002-03-06 14:16:27  Rev 3540   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZ.h:
	  - handle play again option and don't call AI recursively


2002-03-06 12:47:47  Rev 3535   dr_maux

	* game_servers/krosswater/krosswater_server.cpp:
	  - here we go


2002-03-06 12:47:30  Rev 3534   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZ.h:
	  - first round of krosswater fixes
	  - game is now playable again (except for 'play again' dialog)


2002-03-05 23:35:30  Rev 3532   dr_maux

	* game_servers/muehle/muehleserver.cpp:
	  - treat leaving players as losers, and anounce this to the 
	  remaining player
	  - load 'classic' as the default; variant switching will not be 
	  supported for 0.0.5 because it would require some more thoughts


2002-03-05 22:31:41  Rev 3531   dr_maux

	* game_servers/muehle/main.cpp game_servers/muehle/muehleserver.cpp 
	  game_servers/muehle/net.cpp game_servers/muehle/Makefile.am 
	  game_servers/muehle/muehleserver.h game_servers/muehle/net.h:
	  - and the add-on


2002-03-05 22:31:24  Rev 3530   dr_maux

	* game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - add network classes
	  - output player colors
	  - try to be compatible with prolog/tcl version (a.k.a. GGZ games 
	  which spit
	    out binary data shall all be doomed...)
	  - exit with return code != 0 when --ggz is not given


2002-03-02 18:42:05  Rev 3513   bmh

	* ggzd/players.c ggzd/transit.c:
	  *** empty log message ***


2002-03-02 17:16:48  Rev 3512   bmh

	* ggzd/table.c ggzd/table.h ggzd/players.c ggzd/seats.h ggzd/transit.
	  c:
	  - Begin using seat change mechanism to handle joins/leaves
	  - Removed transit_table_event()
	  - Expanded transit_seat_event_callback() to handle join and leave
	    cases properly
	  - Fixed player_transit() to call transit_seat_event() for join/leave


2002-03-02 17:05:43  Rev 3511   bmh

	* ggzd/table.c:
	  - When doing a table_event, always pack a copy of the table 
	  structure
	    itself so the seat counts get passed correctly
	  - Don't pass the table index anymore since we're passing the whole
	    table


2002-03-02 11:44:20  Rev 3503   dr_maux

	* game_servers/keepalive/src/main.cpp 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/muehle/qtserv/qlist.h game_servers/muehle/loader.cpp 
	  game_servers/keepalive/src/player.cpp 
	  game_servers/keepalive/src/world.h:
	  - merge [tls-branch] changes into HEAD


2002-03-02 01:08:52  Rev 3499   bmh

	* ggzd/table.c ggzd/protocols.h ggzd/transit.h ggzd/players.c 
	  ggzd/seats.h ggzd/transit.c:
	  - When a GGZ_UPDATE_SEAT occurs, use ggzdmod_set_seat() to do the
	    change
	  - Handle the GGZDMOD_EVENT_SEAT event and notify players/rooms 
	  that a
	    table update has occurred


2002-03-02 01:06:32  Rev 3498   bmh

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggzdmod.h ggzdmod/mod.h:
	  - New protocol message [REQ,RSP]_GAME_SEAT indicating that a seat 
	  has
	    changed (open, bot, or reserved)
	  - New event GGZDMOF_EVENT_SEAT triggered when a seat changes


2002-02-27 13:02:23  Rev 3495   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/team.h 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/team.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/Makefile.am game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/types.h game_servers/ggzcards/games/whist.c:
	  - Added the concept of teams.  It's pretty minimal right now; all 
	  we do is
	    track which team each player belongs to.
	  - For all team games, set up the teams in ***_init_game.
	  - In game_end_trick, update the player message for the winning 
	  player and
	    all of their teammates.
	  - Removed ***_end_trick for all the team games.  This function 
	  existed only
	    to update the teammate's player message.  For whist and sueca, 
	  this
	    function didn't exist; so (minor) bugs have been fixed in those
	    games.


2002-02-27 10:21:23  Rev 3494   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  Functions in ai.c no longer access the game variable directly.  
	  Instead
	  they get passed a pointer to a game variable.


2002-02-27 10:17:16  Rev 3493   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Made get_player_name and get_player_status into functions instead of
	  macros.


2002-02-27 10:12:56  Rev 3492   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Changed "struct game_t" to just "game_t".


2002-02-27 09:42:22  Rev 3491   jdorje

	* game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/common/shared.h 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/ai/random.c 
	  game_servers/ggzcards/common/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/ai/suaro.c 
	  game_servers/ggzcards/common/cards.c 
	  game_servers/ggzcards/common/protocol.c 
	  game_servers/ggzcards/common/cards.h:
	  Split up common code into multiple files.


2002-02-27 08:57:33  Rev 3490   jdorje

	* game_servers/ggzcards/deck.h game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/deck.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/Makefile.am game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c game_servers/ggzcards/types.h:
	  Renamed cards.[ch] as deck.[ch].
	  Card functions should generally go into the common code, not 
	  directly into
	  server code...


2002-02-27 08:40:53  Rev 3489   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/client/client.c 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/client/client.
	  h game_servers/ggzcards/ai/game.c game_servers/ggzcards/ai/spades.
	  c game_servers/ggzcards/ai/random.c:
	  Moved "hand" structure into common code (which is still protocol.h,
	  unfortunately).


2002-02-27 08:14:31  Rev 3488   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/common.c game_servers/ggzcards/games/bridge.
	  c game_servers/ggzcards/game.c:
	  Change the ***_handle_play functions to take as parameters the 
	  player who
	  played and the play seat, in addition to the card played.
	  These extra values are currently unused by the existing games, but 
	  are
	  included for completeness.


2002-02-27 07:29:13  Rev 3487   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/game.c:
	  - Changed ***_deal_hand functions to return void (they previously 
	  returned
	    an int, which was always 0 and would give bad results if it was 
	  anything
	    else).
	  - Changed all function elements of game_function_pointers that 
	  took no
	    parameters to have "void" as their parameter.
	  - Consequently, there were several warnings about too many 
	  parameters
	    being given to these functions.  I fixed these.


2002-02-27 07:18:23  Rev 3486   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/game.c:
	  Rewrote most of the game function documentation in game.h.  This 
	  is turning
	  into the documentation on writing new games (as soon as the rest 
	  of the
	  interface is documented...).
	  This resulted in the addition of a lot of TODO's.  I also made a few
	  small cleanups to the code itself in the process.  No doubt more 
	  will
	  follow.


2002-02-27 07:15:45  Rev 3485   jdorje

	* game_servers/ggzcards/cards.h game_servers/ggzcards/common.c:
	  - Changed hand.hand_size and hand.full_hand_size to be integers 
	  instead
	    of chars.  (I'm pretty sure there's no good reason for them to 
	  be chars,
	    and it makes compilers unhappy.)
	  - Fixed a (read-only) off-by-one error when removing a card from a 
	  player's
	    hand.  This is very similar to the big bug the client had (but
	    read-only, fortunately).  Damn.


2002-02-27 05:40:53  Rev 3484   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/game.c:
	  Removed unused game_funcs variable.


2002-02-27 05:00:13  Rev 3483   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ai.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/options.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/main.c game_servers/ggzcards/message.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/games/whist.c:
	  Cleaned up the system of #includes.
	    - Removed a lot of unnecessary #includes from header files.
	    - Put those #includes into source files.
	    - Removed #include <config.h> from most/all header files (it 
	  should be
	      included from every source file).
	    - Etc.


2002-02-27 04:36:02  Rev 3482   jdorje

	* game_servers/ggzcards/play.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/play.h:
	  Pull the play verification code out of net.c and put it into
	  handle_client_play in play.[ch].  handle_client_play is called by
	  rec_play (in net.c).
	  Also, if a client tries to play a card that's not in their hand at 
	  all,
	  we'll send a sync to that player (we assume it's a bug).


2002-02-27 04:15:22  Rev 3481   jdorje

	* configure.in:
	  Made ending configure output prettier/better:
	    - Use && instead of ; in "make test" instructions.
	    - Line up Options output listings.


2002-02-26 02:48:22  Rev 3471   jdorje

	* configure.in acconfig.h:
	  Change autoconf system so that if DEBUG is not defined 
	  (--enable-debug,
	  currently on by default) we'll get NDEBUG defined instead.


2002-02-25 14:42:22  Rev 3469   jdorje

	* game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common/protocol.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Added a new card parameter, "type".
	  This can store the type of the deck.  Currently we only support 
	  standard
	  (French) decks, but in theory any deck type could work.  (I'd like 
	  to
	  prove it by implementing a game using dominoes as the deck, but 
	  it'll take
	  extra work to get the graphics to work.)


2002-02-25 09:16:35  Rev 3464   jdorje

	* configure.in:
	  Added Makefiles for new directories to autoconf process.


2002-02-25 09:15:28  Rev 3462   jdorje

	* game_servers/ggzcards/client/client.c game_servers/ggzcards/client 
	  game_servers/ggzcards/common/protocol.h 
	  game_servers/ggzcards/ai/protocol.h game_servers/ggzcards/protocol.
	  c game_servers/ggzcards/client/client.h 
	  game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/client/Makefile.am 
	  game_servers/ggzcards/ai/client.c game_servers/ggzcards/common 
	  game_servers/ggzcards/client/.cvsignore 
	  game_servers/ggzcards/ai/client.h 
	  game_servers/ggzcards/common/Makefile.am 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/common/.cvsignore 
	  game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/common/protocol.c 
	  game_servers/ggzcards/ai/protocol.c:
	  Added client/ and common/ directories to contain the "common" and 
	  "client
	  common" code.


2002-02-24 20:05:07  Rev 3459   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Removed arbitrary/irrelevant game_type enumeration; games are now
	  referred to by name or an ID into the game_data array.


2002-02-24 19:57:25  Rev 3457   jdorje

	* game_servers/ggzcards/ai/protocol.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/ai/game.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/protocol.h game_servers/ggzcards/ai/client.c 
	  game_servers/ggzcards/ai/game.h game_servers/ggzcards/ai/client.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed the game-specific messages to send the game _name_ instead 
	  of an
	  (arbitrary) game-identifying opcode.


2002-02-23 11:42:56  Rev 3451   dr_maux

	* configure.in:
	  - generate keepalive makefile


2002-02-23 11:33:34  Rev 3450   dr_maux

	* game_servers/keepalive/ggzsh/Makefile.am 
	  game_servers/keepalive/ggzsh/keepalive_general.py 
	  game_servers/keepalive/ggzsh/.cvsignore 
	  game_servers/keepalive/ggzsh/README.ggzsh 
	  game_servers/keepalive/ggzsh game_servers/keepalive/ggzsh/ggzsh.
	  cpp game_servers/keepalive/ggzsh/main.cpp 
	  game_servers/keepalive/ggzsh/ggzsh.h:
	  - add first GGZSH sources


2002-02-23 06:11:46  Rev 3446   bmh

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/net.h ggzd/table.h 
	  ggzd/players.c ggzd/transit.c:
	  - Notify players of table description changes:
	    * new function _net_send_table_desc()
	    * handle GGZ_UPDATE_DESC as table_event
	    * new function table_set_desc() to do dec update and event 
	  enqueuing


2002-02-23 04:59:49  Rev 3445   bmh

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/players.c ggzd/ggzd.h:
	  - Revert earlier change to table->desc: change it back to any 
	  array so
	    that we can do a shallow copy of the table


2002-02-23 00:32:27  Rev 3440   dr_maux

	* game_servers/chess/Makefile.am:
	  - merge two include statements into one
	  - hey, the new automake isn't _that_ bad :)


2002-02-22 23:33:47  Rev 3439   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games/whist.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/games/Makefile.
	  am game_servers/ggzcards/games/whist.c:
	  Added Whist support to GGZCards.
	  (I was looking for a game to implement that could test out the
	  "multiple playing" feature recently added.  I didn't find one, but
	  stumbled back across Whist and it looked _so_ easy I had to do it..
	  .)


2002-02-21 10:11:28  Rev 3438   jdorje

	* game_servers/ggzcards/play.c game_servers/ggzcards/play.h:
	  Added sanity checking for play requests - especially when multiple 
	  people
	  are playing at once.


2002-02-21 10:05:18  Rev 3437   jdorje

	* game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/play.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/game.c game_servers/ggzcards/play.h 
	  game_servers/ggzcards/games/spades.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/net.c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/Makefile.am:
	  I finally did it: allowing more than one player to play (a card 
	  from a
	  hand) at once.
	  Of course, it hasn't actually been tested since no games currently 
	  use
	  this functionality (hearts needs it, but it needs other stuff too).
	  TODO: sanity checking; for instance, it would be bad for more than 
	  one
	  play to play at the same time _from the same hand_.


2002-02-21 08:41:19  Rev 3436   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Fixed minor bug in determining if a player's tricks count or not.
	  Also I cleaned up a comment and a for loop.


2002-02-21 08:39:57  Rev 3435   jdorje

	* game_servers/ggzcards/ai/aicommon.c:
	  Fixed significant bug in the determining of the player's suit map: 
	  we
	  associated a played card with the suit led rather than the suit it
	  belonged to.


2002-02-21 07:42:14  Rev 3434   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/ai/protocol.h 
	  game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  Mild cleanups to lots of code.
	    - Substituted hard-coded player values for complicated 
	  expressions in
	      the AI code.
	    - Introduces TRUE and FALSE and bool type (hey, why not).
	    - Removed unintentional printf statements.
	    - Renamed a few AI variables and restructured some tidbits of 
	  code.


2002-02-21 04:01:18  Rev 3433   bmh

	* ggzd/net.c ggzd/protocols.h ggzd/transit.h ggzd/net.h ggzd/players.
	  c ggzd/players.h ggzd/seats.h ggzd/transit.c:
	  - Functions to handle player intiated table updates:
	    * _net_handle_update() to parse request
	    * player_table_update() check permission and starts update steps
	    * transit_seat_event() to queue up seat change event for table 
	  thread
	    * transit_seat_event_callback() to handle seat change event in 
	  table
	      thread: **currently just stub**
	    * net_send_update_result() to send result back to client
	  - Added in new update types GGZ_UPDATE_SEAT and GGZ_UPDATE_DESC (not
	    yet used)
	  - Extended GGZSeat type for use by seat transit event


2002-02-21 02:55:26  Rev 3432   jdorje

	* game_servers/ggzcards/ai/client.h game_servers/ggzcards/ai/client.c:
	  Updated client-common files from the client.


2002-02-21 02:09:24  Rev 3429   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/client.c game_servers/ggzcards/ai/spades.c:
	  Improvements to the spades AI.
	    - Fixed a couple of nasty bugs in the ai-common code.
	    - Improved the AI to better determine when to lead spades.  
	  We'll prefer
	      to lead them the more we have, and if our partner leads spades 
	  we'll
	      respond if possible.


2002-02-20 04:18:05  Rev 3428   jdorje

	* game_servers/ggzcards/Makefile.am:
	  Removed outdated references to libai.a.


2002-02-20 03:52:26  Rev 3427   jdorje

	* game_servers/ggzcards/ai/.cvsignore game_servers/ggzcards/ai:
	  Added files to .cvsignore.


2002-02-20 03:51:03  Rev 3426   jdorje

	* game_servers/ggzcards/ai/client.h game_servers/ggzcards/ai/main.c 
	  game_servers/ggzcards/ai/protocol.h game_servers/ggzcards/ai/game.
	  c game_servers/ggzcards/ai/client.c game_servers/ggzcards/ai/game.
	  h game_servers/ggzcards/ai/protocol.c:
	  OK, the first bug: I forgot to add these files.


2002-02-20 03:45:35  Rev 3425   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/ai.h 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/protocol.c game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/protocol.h game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/types.h game_servers/ggzcards/ai/random.c 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/net.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/games/suaro.h:
	  Completely rewrote the AI system so that the AI now runs 
	  client-side.
	  For each AI, the server will fork off an AI process that runs 
	  exactly as
	  a client does.  This has a number of advantages, mostly stemming 
	  from
	  encapsulation of the AI code - it is now completely self-contained;
	  this
	  means its impossible for the AI to cheat even by accident (which I 
	  was a
	  bit worried about before), makes it easy to track separate state 
	  data
	  for each AI, makes it easy to use different AIs at the same time 
	  (not yet
	  supported), and makes it possible to keep the AI code cleaner 
	  overall.
	  There are only a few drawbacks.  The AI is a bit slower (although 
	  this
	  should not be noticable; certainly it'll still be faster than a 
	  human
	  player).  There's a bit more overhead for the server, which could 
	  be a
	  problem on a heavily loaded server (but again, less overhead than 
	  a human
	  player would case).  There are some extra open sockets, which 
	  could help a
	  heavily loaded server to reach it's _system_ socket limit (blah, 
	  blah,
	  blah).
	  The final (and biggest IMO) drawback is that the AI doesn't know 
	  anything
	  about the game state other than what is sent to the client - which 
	  is very
	  little.  For instance, the Suaro AI has to do some extra work to 
	  figure
	  out who the declarer is and what the contract is - work that is 
	  currently
	  duplicated between the server's game code and the AI code (but it 
	  may not
	  have to be).  More generally, an AI that begins playing in the 
	  middle of
	  a hand or a game (which is not currently possible, but eventually 
	  should
	  be) will not have full information about what has happened up to 
	  this
	  point in the hand.  Of course, this is no more problem than a human
	  would face in the same situation.
	  Finally, there are a number of limitations of the current 
	  implementation:
	    - I've copied over the core client files (common.c/common.h) as
	      client.c and client.h in the AI code.  This means an extra 
	  level of
	      file duplication.
	    - I had to simulate the work of ggzmod by calling 
	  socketpair/fork/exec
	      for each AI process, and changing the core client files to not 
	  use
	      ggzmod at all (that 3 is just hard-coded now).  This just 
	  means some
	      extra work maintaining all of this stuff.  In the future, if 
	  ggzmod is
	      changed to handle both GGZ and game side (just as ggzdmod 
	  does), the
	      code could just use it directly (although this would introduce a
	      dependency to ggz-client-libs).
	    - If an AI process exits abnormally, there is currently no 
	  reasonable
	      error handling.  Instead, the game will generally just hang.  
	  This
	      can be fixed in the future; the most likely handling would be to
	      start a new "random" AI in place of the crashed one, and warn 
	  the
	      players at the table.
	    - We currently don't kill AI processes when the server exits.  
	  But the
	      AI code will exit on its own.  It would be easy enough to kill 
	  the
	      process, but could lead to communication problems (we might 
	  try to
	      send data to it, and end up starting a new AI in the process). 
	  So
	      care will be needed.
	    - I had to rewrite the main loop of the server to call select() 
	  itself
	      instead of using ggzdmod_loop().  This was a bit of a pain; it 
	  could
	      be prevented by allowing ggzdmod to monitor _bot_ socket FD's, 
	  if they
	      are set (and allowing the game to set them, of course).
	    - It is extremely likely that bugs will turn up in this system.  
	  This is
	      a problem given the lack of error handling above.  But, the 
	  changes
	      were so massive I really don't feel like reviewing every line 
	  of code
	      in the patch.  The most likely source for bugs is that the 
	  AI's don't
	      have access to all the information they used to.  I'd rather 
	  commit
	      the changes now, and fix bugs as they come along.
	  Whew.


2002-02-19 14:41:25  Rev 3424   jdorje

	* game_servers/ggzcards/ai/aicommon.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  Moved function cards_equal to are_cards_equal in the "common" code,
	  so
	  it'll be accessible from the client.


2002-02-19 13:06:43  Rev 3423   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/net.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed the REQ_BID bid request packet to include a list of the 
	  actual
	  bids available, in addition to the bid descriptive texts.


2002-02-19 12:04:46  Rev 3422   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/config/ggzcards.
	  dsc game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/net.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Added MSG_NEWHAND new hand message, sent from the server to the 
	  client to
	  inform them of a new bid.
	  This will generally not be used by the GUI, which really doesn't 
	  need to
	  know this information at all.  But it could be used by a 
	  client-side AI.


2002-02-19 10:59:53  Rev 3421   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/games.c 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/protocol.h game_servers/ggzcards/types.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/main.c game_servers/ggzcards/message.c 
	  game_servers/ggzcards/net.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Added MSG_BID bid message, sent from the server to the client to 
	  inform
	  them of a bid.
	  This will generally not be used by the GUI, which (in the most 
	  general
	  case) will rely on the player messages for this information 
	  instead.  But
	  it could be used by a specialized GUI or a client-side AI.


2002-02-19 08:04:27  Rev 3420   jdorje

	* ggzd/net.c ggzd/login.c ggzd/net.h ggzd/room.c ggzd/login.h 
	  ggzd/players.c ggzd/room.h ggzd/players.h:
	  Changed the return type of a number of functions to be
	  GGZPlayerHandlerStatus.
	  There may be more functions that return a value from this enum 
	  that I have
	  missed.
	  Also, there is at least one function (room_join) that may return 
	  either a
	  value from this enumeration _or_ an E_*** error code.  Currently 
	  this
	  works, but it could be dangerous (the sets _do_ overlap) and is 
	  logically
	  a bit confusing (returning GGZ_REQ_DISCONNECT means a disconnect, 
	  but
	  E_*** is the equivalent of GGZ_REQ_FAIL).  It would seem logical to
	  have the error code be sent in another parameter (or to set an 
	  errno-like
	  value), and return GGZ_REQ_FAIL in this case.


2002-02-19 07:18:31  Rev 3419   jdorje

	* ggzd/event.h ggzd/table.c ggzd/chat.c ggzd/players.c ggzd/ggzd.h 
	  ggzd/players.h ggzd/transit.c:
	  Put GGZ_EVENT_ERROR, GGZ_EVENT_OK, GGZ_EVENT_DEFER into their own
	  enumeration, GGZEventFuncReturn.
	    - Changed the return type of GGZEventFunc to be 
	  GGZEventFuncReturn.
	    - Changed the return types of all the GGZ event functions 
	  (callbacks)
	      to be GGZEventFuncReturn.
	    - Moved GGZEventFuncReturn enumeration into ggzd.h.  (This was 
	  necessary
	      for things to compile cleanly without file dependencies 
	  getting in
	      the way.)
	    - Added a couple of comments.


2002-02-19 06:57:46  Rev 3418   jdorje

	* ggzd/transit.c:
	  Removed compiler warning by adding unnecessary case statements to
	  switch.


2002-02-19 06:53:09  Rev 3417   jdorje

	* ggzd/players.h:
	  Fixed typo in last commit.  Oops!


2002-02-19 06:49:34  Rev 3416   jdorje

	* ggzd/login.c ggzd/players.h:
	  Minor cleanups to ggzd's UID system:
	    - Changed GGZ_UID_*** #definitions to an enumeration.
	    - Added GGZ_UID_REGISTERED to the enumeration (value 0), and 
	  replaced
	      it for 0 in the code.
	    - Added a couple comments about registered users getting unique 
	  UID's
	      later.


2002-02-18 15:27:50  Rev 3415   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed typo in last commit.


2002-02-18 09:02:33  Rev 3412   jdorje

	* game_servers/ggzcards/common.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/main.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed ggzcards to (more or less) correctly use GGZdMod's states.


2002-02-18 08:22:39  Rev 3411   jdorje

	* ggzd/transit.c:
	  Remove unused code: an empty if statement (and a long comment).
	  I must have left this code in in a previous change when allowing 
	  reserved
	  seats.  It certainly doesn't need to be there; what it claims to 
	  do is
	  being handled down below.


2002-02-18 07:55:49  Rev 3409   jdorje

	* ggzd/table.c ggzd/parse_opt.c ggzd/ggzd.h:
	  Removed GGZ_ALLOW_*** enumerated values, replacing them with 
	  explicit
	  automated bitfield values.
	  This is the patch send to ggz-dev a week or so ago; it makes 
	  changes like
	  replacing allow_bits[intval] with 1 << (intval - 1).  This is a 
	  (small)
	  step toward relaxing the seat limit, and a cleanup in its own right.


2002-02-17 15:16:03  Rev 3403   jdorje

	* game_servers/ggzcards/common.c:
	  For reserved seats, use the name of the player (who has the 
	  reservation)
	  instead of just "Reserved Seat" as the seat name.


2002-02-17 02:12:15  Rev 3378   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Fix for spades player message: don't show the player's bid once the
	  full contract is shown.


2002-02-17 02:06:55  Rev 3377   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  - Made function get_state_name non-static.  It's not currently used
	    outside of common.c, but it easily could be.
	  - Removed manual sleep() calls at the end of a trick and hand.  
	  These
	    should be (and now are, in the case of the end-of-trick delay) 
	  handled
	    client-side anyway, and with high lags they may not have worked 
	  at all.


2002-02-16 13:20:55  Rev 3375   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  - Increase the rounding additions slightly to make the bids less
	    overconservative.
	  - Adjust the rounding of the 4th bidder to bring the trick total 
	  toward
	    11.


2002-02-16 10:28:52  Rev 3374   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Further improved spades AI:
	    - Better (and _much_ wordier) expert system to deal with non-spade
	      suid bids.
	    - Better system to decide when to lead spades (mostly so that we 
	  don't
	      pull our partner's spades when the opponents are void).
	    - Tweak: lower the "rounding" add-ons, and differentiate them by
	      position.
	    - Tweak: don't count a Q-x of spades as a full trick.
	    - Removed some depricated code.
	    - Added a little bit of debugging output code.
	    - Tweak: count the 4th spade as .75 trick instead of .50.
	    - Changed a few comments.
	  I should probably introduce different difficulty levels soon...


2002-02-16 03:07:03  Rev 3369   bmh

	* ggzdmod/io.c:
	  - Cast seat->type pointer to int* to avoid compiler warning


2002-02-16 03:06:13  Rev 3368   bmh

	* ggzd/table.c ggzd/table.h ggzd/ggzd.h:
	  - Moved GGZTableState to libggz
	  - Use quotes for local includes in table.c
	  - Change table->state to be of type GGZTableState


2002-02-15 07:26:30  Rev 3366   jdorje

	* man/Makefile.am man/ggzdmod.h.3:
	  Added manual for ggzdmod.h.


2002-02-15 07:00:20  Rev 3365   jdorje

	* ggzdmod/ggzdmod.h:
	  A slight cleanup to the ggzdmod documentation.


2002-02-15 03:38:37  Rev 3360   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Bugfix for spades player messages: we don't want contracts to be 
	  shown
	  during the bidding (only bids).


2002-02-15 01:13:20  Rev 3359   jdorje

	* game_servers/ggzcards/common.c:
	  Fix to last commit.


2002-02-15 00:39:12  Rev 3358   jdorje

	* game_servers/ggzcards/common.c:
	  Workaround for a bug in the server: somehow player/ai names can get
	  overwritten, for instance when you played Suaro (in the GGZCards - 
	  Suaro
	  room only (!)) the AI would get the same name as the player.
	  This is probably the symptom of a more serious bug, but for not 
	  I've just
	  done a quick workaround to instead consult ggzdmod directly to 
	  retrieve
	  player and bot names.  Hopefully there won't be any similar 
	  problems with
	  names of other seats.


2002-02-14 09:38:48  Rev 3356   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/net.c 
	  game_servers/ggzcards/common.c:
	  - Split off send_newgame function to only send newgame to one 
	  player.
	  - Created new function send_newgame_all to send a newgame to 
	  everyone.
	  - Changed all previous uses of send_newgame to send_newgame_all.
	  - When a player connects to a game-in-progress, send just them a 
	  newgame
	    with send_newgame.


2002-02-13 04:17:07  Rev 3347   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ai.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games.h game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/net.c game_servers/ggzcards/games/hearts.h 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/suaro.h game_servers/ggzcards/options.
	  c game_servers/ggzcards/net.h game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/cards.c game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/games/bridge.h game_servers/ggzcards/options.
	  h game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/protocol.c game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/games/sueca.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/games/lapocha.h 
	  game_servers/ggzcards/ai/random.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/types.h game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/message.h:
	  Updated copyrights and authors for all files.


2002-02-12 05:47:58  Rev 3340   jdorje

	* game_servers/ggzcards/common.c:
	  Slight fix for assigning a name to a seat.


2002-02-12 05:44:32  Rev 3339   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h game_servers/ggzcards/ai/suaro.
	  c game_servers/ggzcards/ai/spades.c:
	  Miscellaneous cleanups to AI code:
	    - Introduced new function libai_get_highest_card_in_suit.
	    - Changed libai_cards_left_in_suit to libai_cards_played_in_suit.
	  The
	      former assumed that there were 13 cards in each suit, and 
	  without an
	      easy way to fix it it's just easier to reverse the counting (so
	      callers must do the subtraction themselves).
	    - Renameed libai_cards_played_in_suit to 
	  libai_cards_played_in_suit_p.
	      This is just a temporary measure; naming in the AI library is 
	  getting
	      really out of hand; a better solution will have to be found.
	    - Much simplified suaro playing/leading code by removing redundant
	      conditionals.
	    - Simplified suaro playing code by ignoring SUARO.trump and just 
	  looking
	      at game.trump.


2002-02-12 02:19:01  Rev 3338   jdorje

	* game_servers/ggzcards/ai/suaro.c:
	  Added explanation of the AI.
	  Also, I fixed a potential scaling problem in count_suit_strength.


2002-02-12 01:40:29  Rev 3337   jdorje

	* game_servers/ggzcards/ai/suaro.c:
	  Rewrote most of the suaro AI.
	  Now it can play for real.  I certainly wouldn't call it "good", 
	  but it's
	  a lot better than the old "pick-a-card-at-random" AI algorithm.


2002-02-12 01:37:50  Rev 3336   jdorje

	* game_servers/ggzcards/ai/aicommon.h:
	  Added macros for MIN and MAX (surely these must be provided 
	  somewhere?).


2002-02-12 01:36:47  Rev 3335   jdorje

	* game_servers/ggzcards/ai.c:
	  Activate function ai_debug.


2002-02-11 08:53:23  Rev 3324   jdorje

	* game_servers/ggzcards/common.c:
	  Added missing (possibly unimportant) initializations for game.
	  seats[n].


2002-02-11 08:51:14  Rev 3322   jdorje

	* game_servers/ggzcards/protocol.c:
	  Added testing and debugging code to read_card and write_card.


2002-02-11 06:43:07  Rev 3319   jdorje

	* game_servers/ggzcards/protocol.c game_servers/ggzcards/protocol.h:
	  Updated protocol.[ch] files from client.


2002-02-11 04:59:13  Rev 3314   rgade

	* ggzd/parse_opt.c ggzd/players.c ggzd/ggzd.conf.in ggzd/players.h:
	  - Implemented banned IP lists configurable with ggzd.conf


2002-02-10 11:29:38  Rev 3302   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/ai/aicommon.
	  c game_servers/ggzcards/games.c game_servers/ggzcards/games/sueca.
	  c game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.
	  c game_servers/ggzcards/ai/suaro.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/net.c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/ai.c:
	  Added "#include <config.h>" for all files that needed it.


2002-02-10 11:07:20  Rev 3300   jdorje

	* game_servers/ggzcards/protocol.c game_servers/ggzcards/protocol.h:
	  Changed UNKNOWN_CARD from a #definition to a const card_t.


2002-02-10 08:19:46  Rev 3298   rgade

	* ggzd/parse_opt.c ggzd/players.c ggzd/ggzd.conf.in ggzd/players.h:
	  - Hostname lookups now work in a threadsafe manner, default to off


2002-02-10 07:34:26  Rev 3297   rgade

	* ggzd/net.c ggzd/motd.h ggzd/ggzd.h ggzd/motd.c:
	  - Remove 1024 character MOTD line limitation
	  - Remove 80 line limit on MOTD


2002-02-10 06:30:07  Rev 3296   rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/err_func.c ggzd/ggzd.conf.in:
	  - Some updates to the log_update stuff, default to human readable 
	  updates
	  - Can set whether the update is verbose and the update interval in 
	  ggzd.conf


2002-02-10 03:54:38  Rev 3292   jdorje

	* ggzd/table.c:
	  Removed two bad (well, answered) "Why do we do it this way...?" 
	  comments
	  I had previously added.


2002-02-10 03:52:33  Rev 3291   jdorje

	* ggzd/table.c:
	  In table_check(), make sure the number of AI players is less than 
	  the
	  total number of seats.
	  This will prevent players from launching all-AI games, which is a 
	  good
	  thing (at least for the moment).  This was a problem before with 
	  games
	  that would accept a wide variety of player #'s, like Chinese 
	  Checkers and
	  GGZCards.
	  Note, the user may try to launch such a game and will just get a 
	  cryptic
	  "Bad options" (E_BAD_OPTIONS) error from the server.  It may be
	  worthwhile to deal with this by checking the number of AI players
	  client-side before sending it on to the server (for instance 
	  gtk-client
	  could just disable the "AI" option for the first seat; ggzcore could
	  return an error if the client tried to send a bad player 
	  combination).


2002-02-10 03:43:48  Rev 3290   jdorje

	* ggzd/table.c:
	  Fixed potential bad memory access in table_check.  Now, rather than
	  blindly index into the allow_bits[] array, we first check to see 
	  if the
	  number of seats/bots is within the reasonable limits (it must be 
	  >= 0 and
	  <= MAX_TABLE_SIZE).


2002-02-09 23:59:20  Rev 3284   dr_maux

	* game_servers/keepalive/src/protocol.h 
	  game_servers/keepalive/src/world.cpp:
	  - add basic in-game chat support


2002-02-08 21:23:28  Rev 3273   jdorje

	* ggzd/protocols.h:
	  Changed two more groups of #defines into enumerations.
	  The names for these enumerations leave something to be desired.
	  Currently they are called GGZUpdateOpcode (GGZ_UPDATE_*** 
	  enumerations)
	  and GGZClientReqError (E_*** error enumerations).


2002-02-06 20:36:53  Rev 3262   jdorje

	* ggzd/ggzd.h:
	  Converted several groups of #definitions to enumerations.
	  This parallels changes already made elsewhere in GGZ.


2002-02-05 23:53:49  Rev 3261   jdorje

	* ggzd/net.c:
	  Changed -1 to GGZ_TYPE_ALL (which is -1).


2002-02-05 23:45:07  Rev 3260   jdorje

	* ggzd/players.c:
	  Comment out (via #if 0...#endif) the
	  net_set_dump_file(..., "ggzd.protocol") line.
	  I also added a comment explaining it.


2002-02-05 23:41:31  Rev 3259   jdorje

	* ggzd/control.c:
	  Minor cleanup to control.c.  Behavior shouldn't be affected at all.
	    - Declared variables and functions static.
	    - Created new function check_path() to take away duplicated code 
	  in
	      init_dirs().
	    - Added comments for some functions.
	  All changes should be pretty innocuous.


2002-02-05 21:09:08  Rev 3256   jdorje

	* game_servers/chinese-checkers/game.c:
	  Fixed typo bug in last commit.
	  I reviewed and compiled it before committing, but I guess I forgot 
	  to
	  check the result of the compile that last time.
	  Doh.


2002-02-05 21:06:24  Rev 3255   jdorje

	* game_servers/lapocha/game.c game_servers/dots/game.c 
	  game_servers/reversi/game.c game_servers/tictactoe/game.c 
	  game_servers/escape/game.c game_servers/hastings/game.c 
	  game_servers/chinese-checkers/game.c game_servers/chess/game.c 
	  game_servers/combat/game.c:
	  Changed all relevant games to check for open _and_ reserved seats 
	  before
	  believing that all seats are full (and, therefore, that the game 
	  should
	  be started).
	  These games should now all work with seat reservations.


2002-02-05 19:21:35  Rev 3254   bmh

	* ggzd/login.c ggzd/ggzdb.c ggzd/players.c ggzd/hash.c:
	  - Move lower-casing code into ggzdb and hash code.  This should
	    properly implement case-insensitive/case preserving as discussed 
	  on
	    the mailing list


2002-02-05 09:23:35  Rev 3253   jdorje

	* game_servers/ggzcards/common.c:
	  Added more logging when ggzdmod_set_seat refuses to change a 
	  player's name.


2002-02-05 09:09:26  Rev 3252   jdorje

	* game_servers/ggzcards/common.c:
	  Permanently re-enabled ggzdmod_set_seat call; it'll return a 
	  negative
	  value if it fails anyway.


2002-02-05 08:56:52  Rev 3251   jdorje

	* ggzdmod/ggzdmod.c:
	  - Dropped dump_seats() (which was unused anyway) since we now have
	    ggzdmod_check.
	  - Moved seat_print down near to ggzdmod_check.
	  - Made seat_print more succinct by calling ggz_seattype_to_name.  
	  It still
	    duplicates work done in ggzdmod_check, but that's OK.


2002-02-05 03:24:59  Rev 3249   jdorje

	* ggzd/transit.c:
	  Use strcasecmp instead of strcmp to compare player names in several
	  places:
	    - When removing a player (by name) from a seat at a table.
	    - When seeing if a player matches a reservation.
	  The former should not be necessary (both the stored name and the 
	  given
	  name come straight from ggzd, so they should match).
	  The second should fix half of the seat reservation problem.  Now 
	  it should
	  be possible to reserve a seat for "crouton" and have "crouton", 
	  "Crouton",
	  or "CrOuToN" sit at that seat.  But if you try to reserve a seat for
	  "Crouton", the fact that the DB is done all-lowercase will still 
	  be a
	  problem, and the reservation will fail (currently it'll just be 
	  converted
	  to an OPEN seat).
	  Note, strcasecmp may not be available on all platforms, so we may 
	  need to
	  have configure check for it (?).


2002-02-05 02:39:35  Rev 3248   jdorje

	* ggzdmod/ggzdmod.c:
	  Added error handling if _ggzdmod_set_seat fails.
	  Note, this should never actually happen.


2002-02-05 02:33:42  Rev 3247   jdorje

	* ggzd/table.c ggzd/transit.c:
	  Added minimal error handling in case ggzdmod_set_seat returns -1.
	  Note, this should never happen.


2002-02-05 02:25:12  Rev 3246   jdorje

	* game_servers/ggzcards/common.c:
	  Fix seat name problems for when ggzdmod_set_seat can't be used to 
	  set the
	  seat name.


2002-02-05 02:15:13  Rev 3245   bmh

	* ggzd/net.c:
	  - Display requested name when invalid reserved seat is sent


2002-02-04 07:58:51  Rev 3244   jdorje

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/lapocha/lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/reversi/reversi.dsc game_servers/tictactoe/tictactoe.
	  dsc game_servers/escape/escape.dsc game_servers/hastings/hastings.
	  dsc game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Upped the protocol version numbers on all games that use the 
	  GGZSeatType
	  enumeration.
	  AFAICT, this is all games except keepalive, spades, and muehle.
	  I've done limited testing to make sure everything works as planned,
	  but
	  further testing would be good.


2002-02-03 05:16:32  Rev 3221   bmh

	* ggzdmod/ggzdmod.c:
	  - Don't store the player fd on the GGZ side since we don't need it
	    and it gets closed anyway.  Just pass it to the game side and then
	    store -1


2002-02-03 05:05:56  Rev 3220   jdorje

	* ggzdmod/ggzdmod.c:
	  Add a \n on the end of the seat_free error message.


2002-02-03 05:04:54  Rev 3219   jdorje

	* ggzd/table.c:
	  Use ggzdmod_check in table_check.


2002-02-03 04:28:11  Rev 3218   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Added debugging function ggzdmod_check().


2002-02-03 04:11:20  Rev 3217   jdorje

	* ggzdmod/ggzdmod.c:
	  Print an error message (to stderr, unfortunately) if close() fails 
	  in
	  seat_free in ggzdmod.
	  This is the likely cause of the recent "select error" bugs.


2002-02-03 00:57:49  Rev 3215   bmh

	* ggzd/ggzduedit.c:
	  - Rename getline() to getnextline() so we don't collide with GNU
	    extension function getline()


2002-02-03 00:57:09  Rev 3214   bmh

	* configure.in acconfig.h:
	  - Do a few more function checks for non-POSIX stuff.  Eventually 
	  we'll
	    need to handle the cases where they're no found...
	  - Bite the bullet and just define _GNU_SOURCE.  On glibc systems 
	  (most
	    of the ones that use this) it makes life simpler, and on others it
	    really shouldn't hurt anything.


2002-02-03 00:18:34  Rev 3213   bmh

	* configure.in:
	  - Oops.  Revert earlier change that took out _XOPEN_SOURCE define
	    That define is needed to get pthread_rwlock stuff on linux :(
	  - Put tests at end of subdirs list so everything else compiles first


2002-02-02 21:58:11  Rev 3212   bmh

	* acconfig.h:
	  - declare strsep function for systems that don't have it


2002-02-02 21:15:54  Rev 3211   bmh

	* configure.in acconfig.h:
	  - Do test for PF_LOCAL since on some older systems its PF_UNIX 
	  instead


2002-02-02 21:13:24  Rev 3210   bmh

	* acinclude.ggz:
	  - Removed references to easysock, since that lib is gone
	  - When checking for LIBGGZ, also look in the specified prefix dir


2002-02-02 07:42:58  Rev 3208   jdorje

	* ggzd/transit.c:
	  Unify the checking of seat reservations.
	  - All the checks are done in transit_table_event_callback().  A 
	  seat # is
	    determined for the player, too.
	  - The seat # is passed in to transit_send_join_to_game().  This 
	  function
	    doesn't check it at all, but just sends it straight on to the game
	    server.


2002-02-02 07:35:22  Rev 3207   bmh

	* ggzd/Makefile.am configure.in ggzd/strsep.c:
	  - Use LIBOBJS (well, LTLIBOBJS) facility in autoconf/automake to 
	  build
	    strsep function on systems that don't have it


2002-02-02 07:33:45  Rev 3206   bmh

	* ggzdmod/ggzdmod.c:
	  - #include <sys/select.h> to fix compiler warnings on solaris


2002-02-02 00:26:22  Rev 3205   jdorje

	* ggzd/transit.c:
	  When a player joins, we must check to see if a seat (open or 
	  reserved)
	  is avialable for them _before_ doing the TRANSIT_JOIN.
	  This means the work is doubled: when the transit is started, if 
	  there are
	  no open seats we must check each and every seat to see if it is 
	  reserved
	  _for that player_.  Later, when the transit_join is completed we 
	  must
	  first check all seats to see if they are a reserved seat for that 
	  player,
	  and if that fails check all seats to see if they are open (since we
	  always want to put a player in their reserved seat if possible).
	  With this change, reserved seats should pretty much work.  However,
	  there
	  is one other case that has not been considered: if two seats are 
	  reserved
	  at a table for the same player.  ggzd does not check for this when 
	  the
	  table is lauched (to prevent it), and if someone does it, it will 
	  make it
	  very difficult to fill both seats (the player with the reservation 
	  would
	  have to join, leave, and rejoin).


2002-02-02 00:09:35  Rev 3204   jdorje

	* ggzdmod/ggzdmod.c:
	  Fix ggzdmod-ggz to allow for reserved seats.
	  Namely, if a seat is changed from an open/reserved seat into a 
	  player
	  one, we will send a JOIN command to the game server.  We don't do 
	  any
	  checking of the reservation; that is left up to ggzd.


2002-01-30 09:24:30  Rev 3198   jdorje

	* ggzd/table.c ggzd/seats.c ggzd/seats.h ggzd/transit.c:
	  Removed seats_open, seats_bot, seats_reserved, and seats_human.  
	  Replaced
	  with seats_count (which takes the type as well).
	  This is slightly more verbose, but easier to understand (IMO), cuts
	  down on the amount of overall code, and is (slightly) more flexible.


2002-01-30 08:16:01  Rev 3197   jdorje

	* ggzd/transit.c:
	  - Add a debugging message when a player tries to join a full table.
	  This
	    will probably be of use in debugging reserved seats (since it's 
	  not
	    supposed to be able to happen, but inevitably will...).
	  - Added an obvious fix so that a player can join a table with no 
	  "open"
	    seats so long as there is a "reserved" seat available.  I also 
	  added a
	    FIXME comment since this is (probably) the place where we should 
	  check
	    to see if the reservation is valid for that player (instead we 
	  check
	    later, which will result in the above error if the reservation 
	  _isn't_
	    valid).


2002-01-25 00:49:45  Rev 3193   jdorje

	* ggzd/net.c:
	  On table launch, check and verify the names of any reserved players.
	  This fixes a security hole; the old code would overrun buffers or 
	  segfault
	  if given a NULL name.
	  We verify the name by looking it up in the player database.  If it 
	  is not
	  found, we just change the seat to OPEN.  Later this can be 
	  improved (as
	  discussed by Rich).


2002-01-24 23:31:20  Rev 3192   jdorje

	* ggzd/table.c ggzd/players.c ggzd/control.c:
	  Added more logging information for when that pesky select error 
	  happens.
	  I'm pretty positive it happens in table_loop() every time...but 
	  now we'll
	  know.


2002-01-24 12:30:11  Rev 3188   jdorje

	* ggzd/transit.c:
	  Fixed a FIXME so that when a player joins a table, we check for 
	  their
	  reserved seat and give it to them if available.


2002-01-24 12:19:07  Rev 3187   jdorje

	* game_servers/ggzcards/common.c:
	  Added seats_full() function so that we check for reserved seats
	  when looking to see if we're ready to play.
	  Previously, this and (just about) all other games just call
	  ggzdmod_count_seats(ggz, GGZ_SEAT_OPEN) and take that to be the 
	  number of
	  "open" seats.  But reserved seats are "open" too!  Oops!


2002-01-24 11:51:06  Rev 3186   jdorje

	* ggzd/table.h:
	  Removed headers for unused, unimplemented functions table_join and
	  table_leave.
	  No doubt these are left over from pre-ggzdmod days.


2002-01-24 10:59:56  Rev 3185   jdorje

	* ggzd/net.c ggzd/table.c ggzd/table.h ggzd/seats.c ggzd/transit.c:
	  Unified ggzd's table player tracking data fields.
	  Old method: there was one char* array containing a "name" for each 
	  player.
	  This would be "<open>", "<reserved>", "<bot>", "<none>" for unfilled
	  (non-human) seats.  A separate array tracked the names of reserved
	  seats.
	  New method: there is a GGZSeatType array that tracks the types of 
	  each
	  seat.  A separate array tracks the names of reserved/human players.
	  It
	  should work well enough for spectators, too (if we implement them 
	  that
	  way).


2002-01-24 04:17:22  Rev 3183   jdorje

	* ggzd/table.c ggzd/table.h:
	  Removed unused "pid" field of the table struct.
	  This data is tracked by ggzdmod now.


2002-01-24 04:11:49  Rev 3182   jdorje

	* ggzd/net.c:
	  Added extra "case" clauses to fit all GGZSeatType possibilities.


2002-01-24 04:08:08  Rev 3181   jdorje

	* ggzd/net.c ggzd/seats.c ggzd/seats.h:
	  Changed several "int"s to "GGZSeatType"s.


2002-01-23 05:00:41  Rev 3177   jdorje

	* ggzdmod/io.c tests/logmod.c ggzdmod/ggzdmod.c:
	  Now we ggz_free the pointers allocated within ggz_read_string_alloc.
	  In fact, all of ggzdmod uses libggz's memory management now.


2002-01-22 09:22:10  Rev 3175   jdorje

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/krosswater_server.cpp:
	  Changed krosswater to use libggz/easysock instead of easysock:
	  - Changed #include <easysock.h> to #include <ggz.h>.
	  - Changed es_*** functions to ggz_***.


2002-01-20 09:00:05  Rev 3161   jdorje

	* game_servers/reversi/Makefile.am game_servers/krosswater/Makefile.
	  am:
	  Removed -leasysock from several automake files.


2002-01-20 06:33:30  Rev 3157   jdorje

	* game_servers/muehle/Makefile.am 
	  game_servers/krosswater/zoneserver/Makefile.am:
	  Similarly fixed zoneserver and muehle to include ggzdmod correctly.


2002-01-20 06:27:53  Rev 3156   jdorje

	* game_servers/krosswater/Makefile.am:
	  Added $(top_srcdir)/ggzdmod to INCLUDES in the automake file so that
	  the local ggzdmod is used correctly.


2002-01-19 08:29:03  Rev 3143   bmh

	* configure.in:
	  - Don't check for easysock


2002-01-19 08:28:37  Rev 3142   bmh

	* game_servers/spades/engine_func.c game_servers/ggzcards/options.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/games/lapocha.c game_servers/escape/game.c 
	  game_servers/chinese-checkers/game.c game_servers/chess/game.c 
	  game_servers/combat/game.c game_servers/lapocha/game.c 
	  game_servers/spades/err_func.c game_servers/dots/game.c 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/Makefile.am 
	  game_servers/ggzcards/message.c game_servers/ggzcards/main.c 
	  game_servers/reversi/game.c game_servers/tictactoe/game.c 
	  game_servers/hastings/game.c game_servers/ggzcards/net.c:
	  - Remove dependency on easysock


2002-01-19 08:11:05  Rev 3141   bmh

	* ggzdmod/io.c ggzdmod/ggzdmod.c:
	  - Removed easysock lib


2002-01-19 08:08:52  Rev 3140   bmh

	* tests/logmod.c:
	  - Use libggz instead of easysock


2002-01-19 08:07:46  Rev 3139   bmh

	* ggzd/net.c ggzd/err_func.h ggzd/players.c ggzd/control.c 
	  ggzd/event.c ggzd/err_func.c ggzd/transit.c:
	  - Use libggz IO functions instead of easysock ones


2002-01-17 19:17:04  Rev 3128   dr_maux

	* game_servers/keepalive/src/protocol.h:
	  - use values for protocol opcodes (upwards compatibility)


2002-01-16 22:49:16  Rev 3126   jdorje

	* ggzd/net.c ggzd/table.c:
	  Make sure we allocate table->desc if we are given a table 
	  description,
	  and make sure we free it if it has been allocated.  When sending the
	  description to clients, check to see if it exists.


2002-01-16 16:22:31  Rev 3125   dr_maux

	* game_servers/keepalive/keepalive.dsc 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/player.cpp:
	  - fix *.dsc path
	  - some debug output


2002-01-16 15:16:57  Rev 3122   dr_maux

	* game_servers/keepalive/src/main.cpp 
	  game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/protocol.h 
	  game_servers/keepalive/src/world.cpp 
	  game_servers/keepalive/src/player.cpp 
	  game_servers/keepalive/src/world.h 
	  game_servers/keepalive/src/player.h:
	  - graveyard: don't let player die forever... when she joins back, 
	  restore her
	    from the graveyard
	  - notify client if login into game failed


2002-01-16 04:59:48  Rev 3118   jdorje

	* ggzd/net.c:
	  Changed an strcpy() to a snprintf() call to avoid a possible buffer
	  overrun.
	  This should mean than any table descriptions are safely truncated 
	  at 512
	  (MAX_GAME_DESC_LEN) characters.  But I haven't tested this.


2002-01-14 07:16:24  Rev 3116   jdorje

	* game_servers/ggzcards/ai.h:
	  Doh!  Fixed error in last commit.


2002-01-14 07:14:24  Rev 3115   jdorje

	* ggzd/net.c game_servers/ggzcards/ai.h:
	  Added additional ggz__attribute directives.


2002-01-14 07:04:15  Rev 3114   jdorje

	* ggzd/net.c:
	  Slight cleanup to _net_send_seat using new ggz_common functions.


2002-01-14 05:57:40  Rev 3112   jdorje

	* tests/logmod.c ggzdmod/ggzdmod.h:
	  Removed definitions of the GGZSeatType enum; replaced with 
	  #inclusion
	  of ggz_common.h from libggz.h.


2002-01-14 02:37:59  Rev 3109   jdorje

	* game_servers/keepalive/src/Makefile.am 
	  game_servers/muehle/Makefile.am 
	  game_servers/muehle/qtserv/Makefile.am 
	  game_servers/keepalive/Makefile.am 
	  game_servers/muehle/ggz/Makefile.am 
	  game_servers/muehle/variants/Makefile.am:
	  Added "make test" directives to Makefile.am files for muehle and
	  keepalive.
	  This whole process is very ugly, and it just gets worse each time 
	  we copy
	  the automake code into a new game's automake file.  But what other
	  alternative is there?


2002-01-14 00:06:53  Rev 3108   jdorje

	* ggzd/net.c ggzdmod/protocol.h ggzd/table.c ggzdmod/io.c 
	  tests/basic.c tests/logmod.c ggzdmod/ggzdmod.c ggzd/seats.c 
	  ggzdmod/ggzdmod.h tests/ggzdtest.c:
	  Changed GGZ_SEAT_RESV to GGZ_SEAT_RESERVED.
	  This can be changed back or renamed, but from now on we should 
	  keep the
	  naming consistent between server and client.


2002-01-13 19:02:42  Rev 3105   jdorje

	* ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h ggzdmod/ggzdmod.h 
	  ggzdmod/mod.h:
	  Changed "typedef void GGZdMod" to "typedef struct GGZdMod GGZdMod".
	  Many
	  other associated cleanups.


2002-01-12 21:50:49  Rev 3104   dr_maux

	* configure.in acconfig.h:
	  - define ${ggzddatadir}
	  - note: external games should use AC_GGZ_SERVER instead


2002-01-12 21:49:56  Rev 3103   dr_maux

	* game_servers/muehle/qtserv/.cvsignore 
	  game_servers/muehle/variants/roman game_servers/muehle/qtserv/qweb.
	  cpp game_servers/muehle/variants/.cvsignore 
	  game_servers/muehle/main.cpp game_servers/muehle/qtserv/qlist.h 
	  game_servers/muehle/variants/classic 
	  game_servers/muehle/qtserv/qweb.h game_servers/muehle/Makefile.am 
	  game_servers/muehle/variants/twelvemensmorris 
	  game_servers/muehle/qtserv/qwebpath.cpp 
	  game_servers/muehle/ggz/ggzgameserver.cpp 
	  game_servers/muehle/qtserv game_servers/muehle/qtserv/qpoint.h 
	  game_servers/muehle/qtserv/qwebpath.h 
	  game_servers/muehle/ggz/ggzgameserver.h 
	  game_servers/muehle/muehleserver.cpp game_servers/muehle/muehle.
	  dsc game_servers/muehle/loader.cpp game_servers/muehle/variants 
	  game_servers/muehle/muehleserver.h game_servers/muehle/loader.h 
	  game_servers/muehle/qtserv/Makefile.am 
	  game_servers/muehle/variants/Makefile.am:
	  - add Qt/Server support
	  - add 3 standard variants to the muehle game
	  - add loader class skeleton to load variants
	  - add copyrights
	  - install files in $ggzddatadir/muehle which has to be defined


2002-01-12 18:42:26  Rev 3101   jdorje

	* .cvsignore:
	  Added acinclude.m4 to .cvsignore.


2002-01-12 17:57:12  Rev 3100   dr_maux

	* configure.in:
	  - configure keepalive


2002-01-12 17:56:53  Rev 3099   dr_maux

	* game_servers/Makefile.am:
	  - build keepalive by default


2002-01-12 17:56:26  Rev 3098   dr_maux

	* game_servers/keepalive/.cvsignore game_servers/keepalive/keepalive.
	  dsc game_servers/keepalive/src/keepalive.cpp 
	  game_servers/keepalive/src/protocol.h 
	  game_servers/keepalive/keepalive.room 
	  game_servers/keepalive/src/keepalive.h game_servers/keepalive/src 
	  game_servers/keepalive/src/main.cpp 
	  game_servers/keepalive/src/world.cpp game_servers/keepalive 
	  game_servers/keepalive/src/Makefile.am 
	  game_servers/keepalive/README.keepalive 
	  game_servers/keepalive/src/world.h game_servers/keepalive/src/.
	  cvsignore game_servers/keepalive/src/player.cpp 
	  game_servers/keepalive/src/player.h 
	  game_servers/keepalive/Makefile.am:
	  - add experimental keepalive server


2002-01-12 12:16:43  Rev 3094   perdig

	* game_servers/chess/chess.dsc:
	  - Leaving is no longer permitted (until it is allowed in the code)


2002-01-12 10:32:27  Rev 3091   jdorje

	* configure.in autogen.sh:
	  Switch to using acinclude.ggz to check for libggz and easysock.


2002-01-12 10:13:19  Rev 3087   jdorje

	* acinclude.ggz:
	  Added acinclude.ggz to ggzd and ggz-client-libs.


2002-01-12 09:26:34  Rev 3084   jdorje

	* ggzd/parse_opt.c:
	  Fixed some or all of the free() calls on memory allocated by 
	  ggz_conf...
	  functions.  These of course had to be changed to ggz_free().


2002-01-12 08:06:23  Rev 3080   jdorje

	* ggzd/table.c game_servers/ggzcards/config/ggzcards-spades.dsc 
	  ggzd/parse_opt.c game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc ggzd/datatypes.h 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed ExecutablePath to take the arguments (parameters) for the
	  executable as well as the command-line executable itself.  
	  Consequently,
	  I removed the ArgList config parameter.
	  Things are still a bit ugly because the arglist must be 
	  NULL-terminated.
	  So after we read the arglist (the first element of which is the
	  executable itself) we must realloc to NULL-terminate it.  This is 
	  done
	  just once, rather than each time the game is launched.
	  Also, we still have to prepend the appropriate path if a relative
	  path for the executable is given.  This is also easily handled.


2002-01-12 06:26:11  Rev 3079   jdorje

	* ggzd/parse_opt.c ggzd/ggzd.h ggzd/datatypes.h:
	  Removed #definitions of MAX_GAME_PROTOCOL_LEN, MAX_GAME_AUTH_LEN, 
	  and
	  MAX_GAME_WEB_LEN.  Changed the appropriate fields of the GameInfo 
	  struct
	  to be character pointers, and got rid of the string-copying code 
	  when
	  we parse the config options.


2002-01-12 06:19:00  Rev 3078   jdorje

	* ggzd/parse_opt.c ggzd/table.h ggzd/ggzd.h ggzd/datatypes.h:
	  Removed MAX_GAME_DESC_LEN and changed the desc field of GameInfo 
	  to be
	  a straight character pointer.


2002-01-12 06:12:25  Rev 3077   jdorje

	* ggzd/parse_opt.c ggzd/ggzd.h ggzd/datatypes.h:
	  Removed MAX_GAME_VER_LEN; the version and p_version now just become
	  pointers to strings.
	  There could be problems if the client limits the version names, 
	  but I
	  don't think these will be any worse than they were before.


2002-01-12 06:02:51  Rev 3076   jdorje

	* ggzd/table.c ggzd/parse_opt.c ggzd/ggzd.h ggzd/datatypes.h:
	  Changed game_types[...].name from a fixed-size array to a pointer.
	  We therefore don't have to copy over the game name into the array; 
	  we
	  just use the memory allocated by ggz_conf_read_string.  I also got 
	  rid
	  of MAX_GAME_NAME_LEN, and made a few changes to allow that.


2002-01-12 03:08:57  Rev 3074   jdorje

	* ggzd/parse_opt.c:
	  Added check to ExecutablePath: check for spaces (' ', '\n', '\t', 
	  is there
	  a better way?) and remove anything after them, also printing an 
	  error
	  message.  This will most likely catch errors.


2002-01-12 02:23:45  Rev 3073   jdorje

	* ggzd/parse_opt.c:
	  Added new #definition, DEFAULT_GGZD_PORT==5688.


2002-01-12 02:18:47  Rev 3072   jdorje

	* ggzd/parse_opt.c:
	  Replaced '8' with 'MAX_TABLE_SIZE'.


2002-01-12 02:00:40  Rev 3071   jdorje

	* ggzd/table.c ggzd/parse_opt.c ggzd/ggzd.h ggzd/datatypes.h:
	  Added new game option kill_when_empty.
	  Its controlled by the KillWhenEmpty entry in the TableOptions 
	  section of
	  the game's description file, e.g.
	    [TableOptions]
	    KillWhenEmpty = 0
	  It defaults to 1, so the existing behavior will continue without any
	  changes necessary to the dsc files.


2002-01-12 01:34:30  Rev 3070   jdorje

	* game_servers/ggzcards/common.c:
	  Minor cleanup to common.c.


2002-01-11 17:42:38  Rev 3064   dr_maux

	* game_servers/hastings/main.c game_servers/hastings/hastings.dsc 
	  game_servers/hastings/game.c game_servers/hastings/game.h:
	  - small cleanups
	  - use constants rather than plain values where possible
	  - change homepage URL
	  - remove asserts (an ideal way to treat fatal game errors would be 
	  to have
	    something like ggzdmod_fatal(); which sends a text message to 
	  the main server
	    (who transmits it to the core client) and exits the game 
	  gracefully, e.g.
	    with a handler. Well... sounds like 0.0.6 stuff ;)


2002-01-11 14:47:51  Rev 3059   dr_maux

	* game_servers/krosswater/zoneserver/ZoneProtocols.h:
	  - remove old data structures


2002-01-11 14:46:59  Rev 3058   dr_maux

	* game_servers/krosswater/krosswater.dsc 
	  game_servers/krosswater/krosswater_server.h 
	  game_servers/krosswater/main.cpp game_servers/krosswater/Makefile.
	  am game_servers/krosswater/krosswater_server.cpp:
	  - other updates


2002-01-11 14:46:24  Rev 3057   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZModGGZ.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.h 
	  game_servers/krosswater/zoneserver/ZoneGGZModGGZ.h 
	  game_servers/krosswater/zoneserver/Makefile.am 
	  game_servers/krosswater/zoneserver/ZoneGGZ.h:
	  - remove old zone files based on ggz.[ch]
	  - let Zone use libggzdmod (port is not finished yet)


2002-01-11 13:25:57  Rev 3056   dr_maux

	* game_servers/krosswater/stackpath/cwpathitem.h 
	  game_servers/krosswater/stackpath/pathitem.cpp 
	  game_servers/krosswater/stackpath/.cvsignore 
	  game_servers/krosswater/stackpath 
	  game_servers/krosswater/stackpath/pathitem.h 
	  game_servers/krosswater/stackpath/main.cpp 
	  game_servers/krosswater/stackpath/cwpathitem.cpp 
	  game_servers/krosswater/stackpath/Makefile.am:
	  - reactivate stackpath test program
	  - remove unnecessary <iostream> include
	  - update copyrights
	  - well, maybe Krosswater will be converted to QWeb, but maybe not


2002-01-08 22:31:22  Rev 3025   bmh

	* ggzd/parse_opt.c:
	  - Now conf-file params have GGZ_ prefix


2002-01-08 21:25:11  Rev 3022   dr_maux

	* game_servers/krosswater/main.cpp 
	  game_servers/krosswater/krosswater_server.cpp:
	  - forgot these ones too.


2002-01-08 18:36:14  Rev 3016   bmh

	* ggzd/Makefile.am ggzd/lists.c ggzd/lists.h:
	  - Remove unused lists files since their functionality has been
	    included in libggz


2002-01-06 03:46:27  Rev 3002   jdorje

	* game_servers/ggzcards/message.c:
	  Fixed a bug that caused a (non-fatal) error in any multiplayer 
	  GGZCards
	  game.


2002-01-05 11:09:29  Rev 3001   rgade

	* ggzd/Makefile.am ggzd/conf.h ggzd/parse_opt.c ggzd/conf.c:
	  - Rewrote parse_opt to use ggz_conf_XXX routines from libggz


2002-01-05 10:33:05  Rev 3000   rgade

	* ggzd/net.c:
	  - Rewritten to comply with new ggz_xml_escape() functionality


2002-01-05 09:30:38  Rev 2997   rgade

	* ggzd/chat.c ggzd/hash.c:
	  chat.c
	  - Check for missing recipient in chat_player_enqueue
	  hash.c
	  - Check for NULL player name in hash_player_lookup


2001-12-28 22:55:32  Rev 2996   dr_maux

	* configure.in:
	  - create makefiles for muehle


2001-12-28 22:55:11  Rev 2995   dr_maux

	* game_servers/Makefile.am:
	  - build muehle by default


2001-12-28 22:54:38  Rev 2994   dr_maux

	* game_servers/muehle/ggz/.cvsignore 
	  game_servers/muehle/ggz/ggzgameserver.h game_servers/muehle/main.
	  cpp game_servers/muehle/ggz game_servers/muehle/muehle.dsc 
	  game_servers/muehle/muehleserver.cpp game_servers/muehle/Makefile.
	  am game_servers/muehle/muehle.room 
	  game_servers/muehle/muehleserver.h game_servers/muehle/.cvsignore 
	  game_servers/muehle/protocol.txt game_servers/muehle 
	  game_servers/muehle/ggz/Makefile.am 
	  game_servers/muehle/ggz/ggzgameserver.cpp:
	  - add muehle game server stub
	  - includes libzone successor (C++ library based on ggzdmod)


2001-12-28 20:19:10  Rev 2991   dr_maux

	* ggzdmod/ggzdmod.h:
	  - C++ compatibility


2001-12-21 08:21:05  Rev 2976   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed significanltly bad bug in previous commit.


2001-12-20 22:56:12  Rev 2970   jdorje

	* ggzdmod/protocol.h:
	  Added documentation on the communications protocol used by ggzdmod.


2001-12-20 18:49:46  Rev 2969   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/game.c:
	  Moved the static data storing the deck into a deck structure held 
	  within
	  the game structure.


2001-12-20 08:25:05  Rev 2968   jdorje

	* game_servers/ggzcards/message.c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/types.h:
	  Moved definition of struct global_message_list_t into message.c.
	  This should probably be a ggz_list, but...


2001-12-20 08:18:41  Rev 2967   jdorje

	* game_servers/ggzcards/games/bridge.c game_servers/ggzcards/types.h:
	  Removed unused #define of MAX_MESSAGE_LENGTH.


2001-12-19 01:07:53  Rev 2947   jdorje

	* ggzdmod/ggzdmod.c:
	  Make sure we return an error value if ggzdmod_loop or 
	  ggzdmod_dispatch is
	  called and we have no active FD's to monitor.
	  This should prevent ggzdmod_loop from locking up when a game 
	  server is
	  called from the command line.


2001-12-18 08:11:09  Rev 2934   jdorje

	* ggzd/table.c game_servers/escape/game.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c game_servers/chess/game.c 
	  game_servers/combat/game.c:
	  Fixed a bunch of malformed and buggy printf-style variadic 
	  arguments, plus
	  I changed a few that just produced spurious warnings.


2001-12-18 07:48:57  Rev 2932   jdorje

	* ggzd/err_func.h game_servers/spades/err_func.h ggzdmod/ggzdmod.h 
	  game_servers/ggzcards/message.h:
	  Added ggz__attribute's to printf-style variadic functions.


2001-12-18 00:33:36  Rev 2927   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c:
	  Added USE_GGZ_STATS directive to common.h (disabled by default).  If
	  enabled, this will use the (immature) API provided by ggz_stats to 
	  use
	  GGZ statistics tracking.
	  (Of course, GGZ statistics tracking isn't implemented, so 
	  ggz_stats just
	  makes stuff up right now.  That's why the feature is disabled.)


2001-12-18 00:18:06  Rev 2926   jdorje

	* ggzd/table.c ggzd/ggzd.h:
	  Added KILL_TABLES_WHEN_EMPTY directive to ggzd.h.  If defined (as 
	  it is
	  now), then a table will be destroyed when it has no human players 
	  left
	  at it.  Leaving it undefined requires the table to destroy itself 
	  when
	  it is finished.


2001-12-17 22:51:38  Rev 2925   jdorje

	* ggzdmod/Makefile.am:
	  Added missing source files to the automake list; without these
	  make dist[check] failes.


2001-12-17 22:27:22  Rev 2922   jdorje

	* game_servers/reversi/main.c game_servers/tictactoe/main.c 
	  game_servers/escape/main.c game_servers/hastings/main.c 
	  ggzdmod/ggzdmod.c game_servers/chinese-checkers/main.c 
	  game_servers/ggzcards/main.c game_servers/chess/main.c 
	  game_servers/combat/main.c game_servers/lapocha/main.c 
	  game_servers/dots/main.c:
	  Added an fprintf error message to stderr that ggzmod_connect 
	  prints if
	  it fails.  Changed the game servers to exit(-1) if this happens 
	  (previously
	  some game servers printed a message, some did exit(-1), and some 
	  just
	  ignored it).


2001-12-17 06:34:38  Rev 2915   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed things so that a bad easysock operation won't turn into a 
	  recursive
	  loop.
	  The problem happened because I unthinkingly added a debugging 
	  message
	  (ggzdmod_log) in the case where there is an unhandled event.  But, 
	  if the
	  game doesn't handle the ERROR event (as none do right now), then a 
	  failed
	  connect will result in an ERROR event which is unhandled, and 
	  naturally
	  the ggzdmod_log call will give another ERROR event.  Of course, this
	  wouldn't be a problem if game servers handled this event, but...
	  Most game servers may have code like this:
	    if (ggzdmod_connect(...) < 0) {
	      fprintf(stderr, SOME_REALLY_LONG_ERROR_MESSAGE);
	      exit(-1);
	    }
	  would it be appropriate to have ggzdmod_connect write out this error
	  message instead?  This would deny the possibility of any 
	  translation, but
	  might otherwise be convenient for most game servers.


2001-12-17 06:25:38  Rev 2914   jdorje

	* game_servers/ggzcards/main.c:
	  Fixed the game server so it'll handle a failed connection sanely.


2001-12-17 01:09:39  Rev 2902   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZModGGZ.cpp 
	  game_servers/krosswater/stackpath/pathitem.h 
	  game_servers/krosswater/zoneserver/ZoneGGZ.h:
	  - fix variadic macro
	  - fix namespaces
	  - gcc 3 compatibility is now required


2001-12-11 06:29:21  Rev 2875   jdorje

	* game_servers/ggzcards/common.h tests/basic.c tests/logmod.c 
	  ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h game_servers/ggzcards/common.c:
	  Changed GGZdModSeat to GGZSeatType.


2001-12-11 06:27:57  Rev 2874   jdorje

	* game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/lapocha.h:
	  Added several other game-specific protocol extensions to La Pocha.


2001-12-10 23:21:45  Rev 2869   jdorje

	* game_servers/ggzcards/common.c:
	  Handle a failed player name change more correctly.


2001-12-10 21:26:03  Rev 2865   jdorje

	* game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/lapocha.h:
	  As a test, I added some game-specific extensions for la pocha only.


2001-12-10 20:28:44  Rev 2861   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/message.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/net.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Restructured the message system of the ggzcards protocol.  I also 
	  took
	  this opportunity to add a lot of comments to protocol.h.


2001-12-10 03:53:27  Rev 2849   jdorje

	* game_servers/ggzcards/common.h:
	  Changed CONVERT_SEAT and UNCONVERT_SEAT to check the parameters.
	  Shortly I'll need to turn these into functions, as they're not too
	  complex for macros.


2001-12-10 03:52:32  Rev 2848   jdorje

	* game_servers/ggzcards/net.c:
	  Added some more debugging messages to net.c.


2001-12-10 03:27:13  Rev 2847   bmh

	* ggzd/table.c:
	  - When a module error occurs and we're in the CREATED state, 
	  trigger a
	    launch failure event


2001-12-10 03:18:21  Rev 2846   bmh

	* ggzd/table.c:
	  - Handle case when ggzdmod_connect() fails
	  - If table_start_game() fails, trigger a table launch event with the
	    appropriate error code so player gets notified


2001-12-10 00:11:23  Rev 2840   bmh

	* game_servers/tictactoe/main.c game_servers/tictactoe/game.c 
	  game_servers/tictactoe/game.h:
	  - Made everything in game.c (except for game_init) static since it
	    only needs to be called internally
	  - Some function renaming and moving


2001-12-09 23:55:02  Rev 2839   bmh

	* game_servers/tictactoe/main.c game_servers/tictactoe/game.c 
	  game_servers/tictactoe/game.h:
	  - Finish restructuring game to remove unnecessary TTT-specific 
	  events
	    and states


2001-12-09 22:45:36  Rev 2837   jdorje

	* game_servers/spades/engine_func.c game_servers/spades/protocols.h:
	  Changed spades to import the enumerations from ggzdmod: ggzdmod.h 
	  contains
	  seat and state enumerations; ggzdmod/protocol.h contains the opcode
	  enumerations.
	  Something will have to be done about spades before ggzdmod can be
	  significantly extended, however.


2001-12-09 22:26:19  Rev 2836   jdorje

	* ggzdmod/Makefile.am man/Makefile.am ggzdmod/ggz_server.c 
	  ggzdmod/ggz_server.h man/ggz_server_h.3:
	  Removed ggz_server interface and its documentation.


2001-12-09 22:22:31  Rev 2835   jdorje

	* game_servers/ggzcards/net.c:
	  Removed (hopefully) final dependency on ggz_server interface.


2001-12-09 22:12:57  Rev 2834   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games/sueca.
	  c game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/net.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/ai.c:
	  Updated GGZCards to use the new ggzdmod.


2001-12-09 21:55:26  Rev 2833   jdorje

	* game_servers/ggzcards/common.c:
	  Added function set_player_name, which
	    - sets the player name (using ggzdmod_set_seat).
	    - sets the seat name (if the above was successful)
	    - prints a debugging message
	    - prints an error message if ggzdmod_set_seat was _not_ 
	  successful.


2001-12-09 21:41:07  Rev 2832   jdorje

	* game_servers/ggzcards/ai/aicommon.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.
	  c game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/ai/suaro.c 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/suaro.h:
	  Changed system of #includes for ggzcards.


2001-12-09 10:00:41  Rev 2824   jdorje

	* game_servers/hastings/main.c game_servers/hastings/game.c 
	  game_servers/hastings/game.h:
	  Updated Hastings to use the new ggzdmod.
	  I also fixed a bug (most likely introduced by me in the past) 
	  whereby
	  the server would send out player FD's instead of GGZdModSeat types 
	  when
	  it broadcast the list of players (!).


2001-12-09 08:16:26  Rev 2823   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/random.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/games/spades.c ggzdmod/ggz_server.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/hastings/game.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  ggzdmod/ggz_server.h game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/ai.c:
	  Removed ggzd_debug() from ggz_server.h.


2001-12-09 08:04:08  Rev 2822   jdorje

	* game_servers/hastings/game.c ggzdmod/ggz_server.h 
	  game_servers/ggzcards/common.c:
	  Removed ggzd_num_seats() and ggzd_seats_open() from ggz_server.h.


2001-12-09 07:57:00  Rev 2821   jdorje

	* ggzdmod/ggz_stats.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/net.c ggzdmod/ggz_stats.c:
	  Updated ggz_stats to (pretend to) use the new ggzdmod.


2001-12-09 07:38:20  Rev 2820   jdorje

	* game_servers/ggzcards/common.h game_servers/hastings/main.c 
	  ggzdmod/ggz_server.c game_servers/ggzcards/main.c 
	  game_servers/hastings/game.c ggzdmod/ggz_server.h 
	  game_servers/ggzcards/common.c game_servers/hastings/game.h:
	  Removed ggzd_main_loop() and ggzd_set_handler() from ggz_server.h.


2001-12-09 07:16:45  Rev 2819   jdorje

	* game_servers/hastings/main.c game_servers/ggzcards/main.c 
	  game_servers/hastings/game.c ggzdmod/ggz_server.h:
	  Removed custom state #defines from ggz_server.h.


2001-12-09 06:43:08  Rev 2818   jdorje

	* game_servers/escape/main.c game_servers/escape/game.c 
	  game_servers/escape/game.h:
	  Updated Escape to use the new ggzdmod.
	  I wasn't able to test it, but the conversion was pretty simple and 
	  is
	  likely to be correct.


2001-12-09 06:12:24  Rev 2817   jdorje

	* ggzdmod/ggzdmod.h:
	  Updated and improved a lot of the comments (doxygen-style).


2001-12-09 06:06:41  Rev 2816   jdorje

	* ggzd/table.c:
	  GGZd ignores the return value of ggzdmod_connect!  This is very 
	  bad.  I'm
	  not sure how to handle the error, but I put a comment there for 
	  Brent or
	  Rich to do it.
	  Also, ggzdmod_disconnect has a return value to indicate an error, 
	  but it
	  can be safely ignored (for now).  I typecast these functions to 
	  (void)
	  just so we keep that in mind.


2001-12-09 05:51:07  Rev 2815   jdorje

	* ggzdmod/ggzdmod.c:
	  Changed ggzdmod_connect to return 0 on success instead of the 
	  GGZdMod
	  socket FD.
	  The reason for this is that games shouldn't be tempted to use this 
	  socket
	  at all - there's no reason for them (or ggzd, AFAICT) to need this
	  information.  I added a comment to this effect.
	  All current code just compares the return value to 0 (or ignores it
	  altogether), so this shouldn't conflict with anything.


2001-12-09 05:48:15  Rev 2814   jdorje

	* ggzdmod/ggzdmod.c:
	  Check for a null seat pointer in ggzdmod_set_seat.


2001-12-09 02:23:45  Rev 2813   jdorje

	* ggzdmod/ggzdmod.c:
	  Added a little more logging functionality.
	    - Unhandled events get logged.
	    - One log message is made understandable.


2001-12-09 01:52:00  Rev 2812   jdorje

	* game_servers/dots/ai.c game_servers/dots/game.c 
	  game_servers/dots/game.h game_servers/dots/main.c:
	  Updated dots to use the new ggzdmod.


2001-12-09 01:19:38  Rev 2811   jdorje

	* game_servers/combat/combat.h game_servers/combat/game.h 
	  game_servers/combat/main.c game_servers/combat/game.c:
	  Updated combat to use the new ggzdmod.


2001-12-09 00:39:33  Rev 2810   jdorje

	* game_servers/chess/chess.h game_servers/chess/game.h 
	  game_servers/chess/main.c game_servers/chess/game.c:
	  Updated chess to use the new ggzdmod.
	  Some things do not work correctly: for instance, leaving and 
	  rejoining a
	  game in progress does not work.  I think these are errors in the 
	  chess
	  game outside of the scope of this update, though.


2001-12-08 21:14:29  Rev 2807   jdorje

	* game_servers/chinese-checkers/game.h 
	  game_servers/chinese-checkers/main.c 
	  game_servers/chinese-checkers/ai.c 
	  game_servers/chinese-checkers/game.c:
	  Converted Chinese Checkers to use the new ggzdmod.


2001-12-08 06:20:10  Rev 2806   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed bug in ggzdmod.
	  seat_find_player() is used to search through a ggz_list to find a 
	  seat
	  with a matching name.  It uses strcmp() and (as ggz_list specifies,
	  though
	  I find odd) returns 0 in the case of a match, 1 if there's no match.
	  But since seat names can be NULL, this will quickly segfault.  I 
	  changed
	  it so that it always returns 1 (no match) in this case.  This 
	  function is
	  used to find the seat that matches the name that ggzdmod-ggz sends 
	  when
	  a player leaves the table, so this should be the correct behavior.
	  I also added a comment which mentioned this in passing: 
	  ggzdmod-ggz should
	  _not_ send the name in this case.  It should send the seat number, 
	  or the
	  player's UID (although the game doesn't yet know the UID, so this 
	  isn't an
	  option yet).  But that's an issue for another day (soon).


2001-12-08 05:26:33  Rev 2805   jdorje

	* game_servers/lapocha/game.c game_servers/lapocha/game.h 
	  game_servers/lapocha/main.c:
	  Updated La Pocha to use the new ggzdmod.


2001-12-07 23:11:21  Rev 2804   jdorje

	* game_servers/reversi/main.c game_servers/reversi/game.c 
	  game_servers/reversi/game.h:
	  Updated reversi to use the new ggzdmod.


2001-12-07 22:16:36  Rev 2803   bmh

	* ggzd/table.c:
	  - Disconnect from game module upon error


2001-12-07 21:15:25  Rev 2802   jdorje

	* ggzdmod/io.c:
	  Fixed major bug in ggzdmod: the player type wasn't being 
	  initialized when
	  a join notification was received!
	  GGZCards, and hopefully all other games should now work.


2001-12-07 21:04:03  Rev 2801   jdorje

	* ggzdmod/ggzdmod.h:
	  Fixed bug in example code: GGZdModSeat was used incorrectly in 
	  place of
	  GGZSeat.  (I always get those two confused!)


2001-12-07 03:41:16  Rev 2800   jdorje

	* ggzdmod/ggz_server.c ggzdmod/ggz_server.h:
	  Removed most of the ggz_server interface.  It no longer provides 
	  full
	  compatability for the old ggzdmod; it only provides enough to get 
	  the
	  internal game servers to compile.
	  Hopefully no external games will be too screwed over by this.  If 
	  so,
	  just retrieve an older version of CVS to use until you upgrade.


2001-12-07 03:06:51  Rev 2799   jdorje

	* ggzdmod/ggzdmod.c:
	  I messed up before in restricting the states that ggzdmod-game is 
	  allowed
	  to switch between.  Really, the whole system (with 
	  ggzdmod_set_state,
	  _ggzdmod_handle_state, and set_state) just has one function too 
	  many.
	  I've made things work for now, but I'm not sure this is the correct
	  solution.  The comment says:
	  		/* In contradiction to what I say above, the game
	  		   actually _is_ allowed to change its state from
	  		   CREATED to WAITING.  When ggzdmod-ggz sends a
	  		   launch packet to ggzdmod-game, ggzdmod-game
	  		   automatically changes the state from CREATED
	  		   to WAITING.  When this happens, it tells
	  		   ggzdmod-ggz of this change and we end up back
	  		   here.  So, although it's a bit unsafe, we have
	  		   to allow this for now.  The alternative would
	  		   be to have ggzdmod-ggz and ggzdmod-game both
	  		   separately change states when the launch packet
	  		   is sent. */
	  and the change is that ggzdmod-ggz no longer checks what state
	  ggzdmod-game is changing _from_, only what state it's chaning _to_ 
	  (all
	  but CREATED are allowed).


2001-12-07 02:56:06  Rev 2798   jdorje

	* ggzdmod/ggzdmod.c:
	  Modified ggzdmod_log so that it will work both ggz-side and 
	  game-side.
	  This is just a small change, mostly so that we don't end up 
	  missing log
	  messages if they happen to be requiested by ggzdmod-ggz.


2001-12-07 02:50:34  Rev 2797   jdorje

	* Makefile.am:
	  Changed message for "make test" so that ggzd run in test mode will 
	  usually
	  be run in the foreground (-F).


2001-12-07 02:28:03  Rev 2796   jdorje

	* ggzdmod/ggzdmod.h:
	  Changed example so that we set state to DONE when all human 
	  players have
	  left.
	  Unless we can figure out a better way to handle it, this will have 
	  to be
	  done manually by games now.  Some games may not want this, and GGZ 
	  isn't
	  going to decide for them.


2001-12-07 02:21:23  Rev 2795   jdorje

	* configure.in:
	  Changed message for "make test" so that ggzd run in test mode will 
	  usually
	  be run in the foreground (-F).


2001-12-06 22:58:17  Rev 2794   jdorje

	* game_servers/tictactoe/game.c:
	  Removed game_seats_open(); we now use ggzdmod_count_seats instead.


2001-12-06 22:51:25  Rev 2793   jdorje

	* ggzdmod/ggzdmod.h:
	  Drastically changed the example code in the documentation.
	  It's now much more verbose (bad), but also much more complete 
	  (good).
	  Perhaps now would be a good time to think about a simple example 
	  code and
	  a more complex one.


2001-12-06 22:04:17  Rev 2792   jdorje

	* ggzdmod/ggzdmod.c:
	  Removed static function seats_open which has identical 
	  functionality to
	  ggzdmod_count_seats and isn't needed anyway (since the last commit
	  removed its use).  I also (sort of) changed ggzdmod_count_seats to 
	  use
	  the form of seats_open (namely, searching through the list instead 
	  of
	  searching by player number).
	  This really doesn't resolve anything about ggzdmod_count_seats; it 
	  just
	  cleans things up a little.


2001-12-06 21:55:22  Rev 2791   jdorje

	* ggzdmod/ggzdmod.c:
	  Mostly fixed the state control problems:
	    - I removed the internal state control code that automatically 
	  switched
	      from WAITING to/from PLAYING when players joined/left.
	    - I added a comment in front of set_state explaining the 
	  problems it'll
	      have once ggzd is allowed to change the state.  For now, I 
	  haven't
	      fixed it (at all).
	    - I commented most of the state changes we do pretty thoroughly.


2001-12-06 21:06:22  Rev 2790   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Added ggzdmod_count_seats() function.  This function counts the 
	  number of
	  seats of a given type; it corresponds to a whole set of functions
	  provided by the original ggzdmod and (at least one of) which are 
	  used by
	  (just about) every GGZ game we currently have.
	  I've implemented this function entirely as a wrapper to existing 
	  ggzdmod
	  functions.  Of course, games could do the same thing (and some of 
	  them do),
	  but code duplication like this is bad.  Eventually one of two 
	  things should
	  happen with this function:
	    - It should be implemented using real GGZ structures.  This 
	  could make
	      it much faster (O(1) instead of O(n) or O(n^2) in number of 
	  seats).
	    - It should be moved off into a wrapper library.  This is the 
	  better
	      solution in my opinion, but we need some other functions to 
	  populate
	      this library as well.  Once ggzdmod is a little more mature, I'm
	      pretty sure we will find such functions.


2001-12-06 20:24:37  Rev 2789   jdorje

	* Doxyfile ggzdmod/.cvsignore ggzdmod ggzdmod/Doxyfile:
	  - Moved Doxyfile from the top directory into ggzdmod, and changed it
	    appropriately.  The reason for this is that it's entirely
	    ggzdmod-specific; if we later want to create Doxygen 
	  documentation for
	    ggzd it should be kept separate.
	  - I also changed the output directory name to "api".  I added this 
	  to
	    .cvsignore.


2001-12-06 09:44:43  Rev 2788   jdorje

	* tests/basic.c ggzdmod/ggzdmod.c ggzdmod/ggz_server.c 
	  game_servers/tictactoe/game.c ggzdmod/ggzdmod.h:
	  Replaced ggzdmod_halt_table with ggzdmod_set_state.
	  ggzdmod_set_state does strictly more than ggzdmod_halt_table did:
	    - ggzdmod_set_state(mod, GGZDMOD_STATE_DONE) is the same as
	      ggzdmod_halt_table(mod).
	    - The game can also use ggzdmod_set_state to change states between
	      WAITING and PLAYING (which is not otherwise possible).  The 
	  rest of
	      this process (ggzdmod-game telling ggzdmod-ggz telling ggzd) 
	  should
	      already be taken care of, so (after more testing) we may now 
	  think of
	      passing this information on to the client (if this is not 
	  already done).
	    - ggzd cannot yet use this function (nor does it need to).  
	  Later we
	      can add support for this (so that, for instance, a server 
	  admin can
	      force a game to be DONE).


2001-12-06 09:23:06  Rev 2787   jdorje

	* ggzdmod/ggzdmod.h:
	  More expansion (and updates) of the documentation.


2001-12-06 09:07:04  Rev 2786   jdorje

	* ggzdmod/ggzdmod.c:
	  Changed ggzdmod_connect() to have consistent return values for GGZ 
	  and
	  GAME: -1 for failure; ggzdmod->fd on success.


2001-12-06 02:33:36  Rev 2785   jdorje

	* game_servers/tictactoe/main.c game_servers/tictactoe/game.c 
	  game_servers/tictactoe/game.h:
	  I changed TTT's ggz interface code to closely match the example code
	  for ggzdmod.
	  This kind-of reverses the change I made earlier - but I think it's 
	  worth
	  it, since TTT is often used as the canonical example of a GGZ game.


2001-12-06 02:22:17  Rev 2784   jdorje

	* ggzdmod/ggzdmod.h:
	  Two minor fixes:
	  - I corrected an inconsistency in some of the example code (within 
	  the
	    doxygen documentation).
	  - I changed "typedef struct _GGZSeat {" to just "typedef struct {".
	  As
	    far as I can tell, this is cleaner and has no disadvantages (it 
	  also
	    has the benefit that doxygen recognizes the correct name).  
	  Brent, let
	    me know if there's a problem with this form of declaration.


2001-12-06 02:04:55  Rev 2783   jdorje

	* ggzdmod/ggzdmod.h:
	  Updated the doxygen documentation extensively, with a big 
	  improvement to
	  the example code.


2001-12-06 00:24:12  Rev 2782   jdorje

	* game_servers/ggzcards/common.h ggzdmod/ggzdmod.h 
	  game_servers/escape/game.c game_servers/chinese-checkers/game.c 
	  game_servers/chess/game.c game_servers/combat/game.c 
	  game_servers/escape/game.h game_servers/lapocha/game.c 
	  game_servers/chinese-checkers/game.h game_servers/dots/game.c 
	  game_servers/chess/game.h game_servers/combat/game.h 
	  game_servers/lapocha/game.h ggzdmod/ggz_server.c 
	  game_servers/dots/game.h game_servers/reversi/game.c 
	  game_servers/hastings/game.c ggzdmod/ggz_server.h 
	  game_servers/ggzcards/common.c game_servers/reversi/game.h 
	  game_servers/hastings/game.h:
	  Removed spurious typedef for GGZdModEvent in ggz_server.h, and 
	  updated
	  all games to match.
	  I don't think the ggzdmod interface is stable enough yet to justify
	  upgrading all games to it, but I'd like to bring the ggz_server
	  interface a _little_ closer to ease the transition.


2001-12-06 00:15:53  Rev 2781   jdorje

	* game_servers/ggzcards/common.h ggzdmod/ggz_server.c 
	  ggzdmod/ggz_server.h game_servers/ggzcards/common.c:
	  Removed spurious typedef from ggz_server.h for GGZdModSeat, and 
	  updated
	  all games (that use ggz_server.h) to comply.


2001-12-06 00:07:00  Rev 2780   jdorje

	* game_servers/tictactoe/main.c game_servers/tictactoe/game.c:
	  Cleaned up/fixed GGZ support in tictactoe.  Namely:
	  - I moved the handler registration functions into game init, at 
	  the same
	    place where the ggz object is created.
	  - I added an error message for a faild connection (probably not 
	  useful,
	    but...).
	  - I changed the EVENT_STATE handler to correctly identify a launch 
	  event.


2001-12-05 23:08:40  Rev 2779   jdorje

	* ggzdmod/ggzdmod.c:
	  Doh!  Correction to last commit.


2001-12-05 23:00:07  Rev 2778   jdorje

	* ggzdmod/ggzdmod.c:
	  Avoid ggz_strdup'ing a NULL seat name in seat_copy().


2001-12-05 22:36:23  Rev 2777   jdorje

	* .cvsignore:
	  Added ggzd.protocol to .cvsignore.


2001-12-05 22:33:25  Rev 2776   jdorje

	* ggzdmod/ggzdmod.c:
	  Added prototypes for all (hopefully) static functions.  #if 0'd 
	  out the
	  currently unused function dump_seats.


2001-12-05 21:58:43  Rev 2775   jdorje

	* tests tests/.cvsignore:
	  Added ggzdtest and logmod to .cvsignore.


2001-12-02 04:09:56  Rev 2774   jdorje

	* game_servers/tictactoe/main.c:
	  Changed exit() to return to avoid compiler warning.


2001-12-02 03:50:19  Rev 2773   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed small problem with handling of seat numbers in 
	  handle_join_event and
	  handle_leave_event.
	  The problem is that players can join/leave before the game is 
	  initialized.
	  If this happens, the seat number of the player will be 
	  uninitialized; it'll
	  be set to -1.  In this case we can't mess with any of the seat data
	  (obviously).
	  This was already taken mostly taken care of, but I finished it up 
	  and made
	  some comments making it explicit.  Note that if a seat isn't 
	  properly
	  initialized on a join event, it may not get correctly initialized 
	  at all
	  later!


2001-12-02 02:39:48  Rev 2772   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Added fatal_error() function.
	  This is something that should probably be handled by libggz, but 
	  it isn't
	  yet up to the task.


2001-12-01 16:56:21  Rev 2771   bmh

	* ggzdmod/protocol.h ggzdmod/io.c:
	  - Rename REQ_GAME_LAUNCH to MSG_GAME_LAUNCH since it is no longer a
	    request that gets a response


2001-12-01 06:54:17  Rev 2770   bmh

	* tests/basic.c tests/logmod.c tests/ggzdtest.c:
	  - More involved testing
	  - Updated to latests libggzdmod


2001-12-01 06:53:01  Rev 2769   bmh

	* game_servers/lapocha/Makefile.am game_servers/spades/engine_func.c 
	  game_servers/dots/Makefile.am game_servers/tictactoe/main.c 
	  game_servers/reversi/Makefile.am game_servers/tictactoe/Makefile.
	  am game_servers/hastings/Makefile.am game_servers/spades/protocols.
	  h game_servers/chess/game.c game_servers/spades/err_func.c 
	  game_servers/escape/Makefile.am game_servers/tictactoe/game.c 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/ggzcards/Makefile.am game_servers/combat/Makefile.am 
	  game_servers/tictactoe/game.h game_servers/chess/Makefile.am:
	  - Minimal amount of conversion necessary to get game moduels to
	    compile with new ggzdmod.  Mostly untested
	  - Look in included ggzdmod dir for header files


2001-12-01 06:51:06  Rev 2768   bmh

	* ggzd/table.c ggzd/Makefile.am ggzd/ggzdmod.c ggzd/table.h 
	  ggzd/players.c ggzd/ggzd.h ggzd/ggzdmod.h ggzd/transit.c:
	  - Convert over to using libggzdmod for communication with game 
	  module
	  - Look in included ggzdmod dir for headers


2001-12-01 06:44:49  Rev 2767   bmh

	* ggzdmod/protocol.h ggzdmod/io.c ggzdmod/ggzdmod.c ggzdmod/io.h 
	  ggzdmod/ggz_server.c ggzdmod/ggzdmod.h ggzdmod/ggz_server.h 
	  ggzdmod/mod.h:
	  - Changed most enums to GGZDMOD_ instaed of GGZ to prevent namespace
	    collision, except for seats since those are the same anyway
	  - Moved IO code into io.c
	  - Moved struct _GGZdMod declaration into mod.h since we need to 
	  access
	    it from io.c, but don't want it in ggzdmod.h
	  - debugging function dump_seats() and seat_print()
	  - new function seats_open() to tell whether there are any open seats
	  - Split out ggzdmod_set_num_seats()/ ggzdmod_set_seat() into 
	  external
	    and internal versions so we can call "internal" one from game
	    (normally not allowed)
	  - Renamed raise_error() to _ggzdmod_error() and made available 
	  through
	    mod.h
	  - Temporarily disable bot naming code until we can make it work with
	    IO split out (possibly moot once we use XML protocol)
	  - Rename handlers for opcodes to _ggzdmod_handle_XXX and make
	    available through mod.h
	  - Changed REQ_GAME_OVER into REQ_GAME_STATE
	  - Use REQ_GAME_STATE to notify GGZ when game is in WAITING and 
	  PLAYING
	    states
	  - Remove RSP_GAME_LAUNCH (obsoleted by above)
	  - Lots of misc. bug fixes and things I can't remember to make it 
	  work :)


2001-11-28 07:31:42  Rev 2766   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/games/lapocha.
	  c game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Fixed parameter type for game function get_bid_text().


2001-11-19 02:40:49  Rev 2756   bmh

	* ggzd/net.c:
	  - Don't consider type == 0 to be an error (since we actually do use
	    type 0....)


2001-11-19 00:00:12  Rev 2755   bmh

	* tests/logmod.c tests/ggzdtest.c:
	  - Filled in functions handle_game_[join, leave] in logmod to handle
	    REQ_GAME_[JOIN, LEAVE] and send back RSP_GAME_[JOIN, LEAVE]
	  - Handle JOIN and LEAVE events in ggzdtest
	  - Send a new player join when we get to the waiting state


2001-11-18 23:58:02  Rev 2754   bmh

	* ggzdmod/io.c ggzdmod/Makefile.am ggzdmod/ggzdmod.c ggzdmod/io.h:
	  - New files io.[ch] for functions to handle socket IO
	  - New functions io_send_req_join() and io_send_req_leave() to send
	    join and leave requests, respectively
	  - Call io_send_req_[join, leave] as necessary from set_seat()


2001-11-18 02:52:23  Rev 2753   bmh

	* tests/basic.c tests/logmod.c tests/Makefile.am tests/ggzdtest.c:
	  - Added ggzdtest to test ggzd side of libggzdmod
	  - Added logmod as a simple game module (no libggzdmod) to log 
	  protocol


2001-11-18 02:50:46  Rev 2752   bmh

	* ggzdmod/ggzdmod.c:
	  - Use GGZList to store seats, rather than malloc'd array.  This 
	  makes
	    it easier in the future for games that have no fixed table size
	  - New function call_handler() to perform halder calling
	  - New function raise_error() triggers a GGZ_EVENT_ERROR (and may do
	    other things in the future
	  - Lots of error checking and calls to raise_error() added
	  - Small cleanups here and there


2001-11-17 08:59:38  Rev 2751   bmh

	* ggzd/net.c ggzd/Makefile.am ggzd/stack.h ggzd/xmlelement.c 
	  ggzd/xmlelement.h ggzd/stack.c:
	  - Use libggz version of stack/list/xmlelement functions
	  - Remove local implementation of said functions


2001-11-17 08:25:04  Rev 2750   bmh

	* ggzd/net.c:
	  - New functions safe_strdup() does same as strdup, or returns NULL 
	  if
	    string is NULL
	  - Use safe_strdup() anytime strdup is called (prevents segfaults if
	    client doesn't send data)
	  - Check for presence of password if login type is 'normal'


2001-11-17 07:21:02  Rev 2746   bmh

	* ggzd/net.c ggzd/protocols.h:
	  - New error code E_BAD_XML for when client sends bad XML
	  - Don't try to parse if client has disconnected


2001-11-13 23:38:10  Rev 2744   jdorje

	* game_servers/ggzcards/game.c:
	  Minor cleanups.


2001-11-13 23:34:36  Rev 2743   jdorje

	* game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/games/euchre.c:
	  Added Euchre options: "Stick the Dealer" and "Super Euchre".


2001-11-13 22:52:40  Rev 2741   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/common.c:
	  Removed deprecated WH_ and wh_ prefixes.


2001-11-13 21:39:00  Rev 2739   jdorje

	* game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/game.c:
	  Fixed some messaging problems and other problems with Euchre.
	  There are still problems...


2001-11-13 21:12:44  Rev 2738   jdorje

	* game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/games/euchre.c:
	  Implemented Euchre scoring.


2001-11-13 11:28:03  Rev 2737   jdorje

	* game_servers/ggzcards/net.c game_servers/ggzcards/games/euchre.c:
	  Implemented going alone for Euchre.  Scoring bonuses for it still 
	  aren't
	  implemented.
	  Looks like there _is_ a problem with the 0-card hands - they are 
	  sometimes
	  spuriously sent at the wrong time, which makes the client look 
	  really ugly.


2001-11-13 11:18:46  Rev 2736   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c:
	  send_hand() will now allow a hand of size 0 to be sent to the 
	  clients.
	  However, send_sync() has been changed so that the hands will not 
	  be sent
	  if there is no game in progress.  Hopefully this will solve the 
	  (former)
	  problems of hands being sent at the wrong time.


2001-11-13 10:19:24  Rev 2735   jdorje

	* game_servers/ggzcards/games/euchre.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games/euchre.c:
	  Added multi-bid for Euchre: "going alone".
	  After a maker is chosen, each player must decide if they want to 
	  "go alone"
	  or not.  These bid requests are sent out simultaneously to everyone.
	  Going alone is not yet implemented, however.  Also, several ugly 
	  hacks
	  were required to track the bidding states properly in this case.


2001-11-13 10:09:16  Rev 2734   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/common.
	  h game_servers/ggzcards/bid.c game_servers/ggzcards/message.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c game_servers/ggzcards/ai.c:
	  Removed state WAIT_FOR_BID; this information is instead held in the
	  players' bid data structures.
	  Added state NONE; this state occurs when we're pending waiting to 
	  pick a
	  real state.


2001-11-13 09:56:05  Rev 2733   jdorje

	* game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/games/bridge.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games/sueca.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/lapocha.h 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/hearts.h game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c game_servers/ggzcards/ai.c:
	  Replaced super-outdated "WH_STATE_***" enumeration names with just
	  "STATE_***" names.


2001-11-13 06:56:14  Rev 2732   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/ai/suaro.
	  c game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/ai/spades.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/ai/random.c:
	  For clarity and error-checking, I added (void) as the parameter for
	  a bunch of non-parameter-taking functions.


2001-11-13 06:50:06  Rev 2731   jdorje

	* game_servers/ggzcards/bid.c game_servers/ggzcards/bid.h:
	  Added function request_all_bids().  This function will request all 
	  pending
	  bids; that is, for every player that has a list of bid choices set 
	  up it
	  will request a bid selection from that list.
	  This function is needed because req_bid won't do things in the 
	  right order
	  for multiple bids.  The correct order is to first mark all players 
	  as
	  bidding, then request bids from all human players, then request 
	  bids from
	  all bot players, then handle the bids from the bot players.
	  This function has not yet been used/tested.


2001-11-13 06:29:00  Rev 2730   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games.h game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/types.h game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/games/bridge.
	  c game_servers/ggzcards/ai.c:
	  Extensive changes that allow more than one bid at a time.
	  It is now possible for more than one player to bid at a time.  The
	  game-specific code must just call the core bidding functions for 
	  each
	  player that is to bid, and make sure to request a bid from each 
	  player
	  that is to bid, and the core functions will be able to understand 
	  and
	  track the different players' bids.
	  This has not been tested.


2001-11-13 02:08:38  Rev 2728   rgade

	* ggzd/net.c:
	  - Enabled use of ggz_xml_escape() feature of libggz
	  - Note that ggz.h is still incompatible with net.c overall - there 
	  are stack
	    feature differences - as such, the function defs for the ggz_* 
	  functions
	    are included inline in net.c


2001-11-13 00:05:44  Rev 2726   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/options.
	  c game_servers/ggzcards/cards.c game_servers/ggzcards/games/sueca.
	  c game_servers/ggzcards/common.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/ai/random.c:
	  GGZCards now uses libggz memory management routines.
	  None of the debugging checks are enabled yet.


2001-11-12 23:38:54  Rev 2725   jdorje

	* game_servers/ggzcards/games/euchre.c:
	  Removed no-longer-necessary euchre_send_hand().  game_send_hand() 
	  is used
	  instead for Euchre.


2001-11-11 18:34:44  Rev 2723   rgade

	* ggzd/net.c ggzd/net.h ggzd/parse_opt.c ggzd/ggzd.test.in 
	  ggzd/players.c ggzd/datatypes.h ggzd/ggzd.conf.in:
	  - ServerName now read from configuration file and sent by net.c
	  - Calls to ggz_xml_escape() and ggz_free() commented out for now, 
	  so until
	    we have the server linked to libggz the defined server name must 
	  be XML
	    safe, or bad things will probably happen.


2001-11-10 03:06:26  Rev 2717   bmh

	* tests/basic.c:
	  - Update to latest libggz


2001-11-09 02:57:46  Rev 2709   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed another strcmp problem with ggzdmod.
	  The problem here is that when a player leaves the table, the 
	  player is
	  transmitted from ggzd by _name_.  This means we must go through 
	  our full
	  list of players and strcmp to see which player it is that's leaving.
	  Again, one of the existing players' names might be NULL.


2001-11-09 02:47:03  Rev 2708   jdorje

	* ggzdmod/ggzdmod.c:
	  Dammit!  Why can't I write code without bugs anymore!
	    or
	  Fixed bug with ggzdmod_set_seat.  It _is_ allowed for games to 
	  change the
	  seat data, but each piece of data must be verified.  The only thing
	  allowed is to change the name of an AI player.  This cannot be 
	  checked
	  with strcmp() since one or both names might be NULL.


2001-11-09 02:22:20  Rev 2707   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/net.c 
	  game_servers/ggzcards/common.c:
	  Added broadcast_player_list() function.  I also used it to remove 
	  some
	  variables, and in the process fixed a horrible typo bug.


2001-11-09 02:05:18  Rev 2706   jdorje

	* game_servers/ggzcards/games/euchre.c:
	  Added assertion for debugging.  Very minor.


2001-11-09 02:03:54  Rev 2705   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed buglet in changing of game state.  Added better comment 
	  about it.


2001-11-09 01:44:56  Rev 2704   jdorje

	* game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/games/euchre.c:
	  Added "screw the dealer" option (not yet accessable to the users).


2001-11-09 01:35:30  Rev 2703   jdorje

	* game_servers/ggzcards/games/euchre.c:
	  Arbitrary code cleanups.


2001-11-09 01:33:52  Rev 2702   jdorje

	* game_servers/ggzcards/games/euchre.c:
	  Euchre: the 8th bid (the dealer's bid second-time around) he 
	  cannot pass.


2001-11-09 01:24:51  Rev 2701   jdorje

	* game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/games/euchre.c:
	  Added some explanation of Euchre bids, and cleaned up a little bit 
	  of code.


2001-11-08 20:39:15  Rev 2698   jdorje

	* game_servers/ggzcards/net.c:
	  Fixed another bug in the ordering of players for the cardlist 
	  message.


2001-11-08 10:19:14  Rev 2697   jdorje

	* game_servers/ggzcards/net.c:
	  Fixed ordering of players in cardlist message.


2001-11-08 07:46:19  Rev 2693   jdorje

	* game_servers/ggzcards/message.c:
	  Removed previous hand/last trick text messages; they are now sent 
	  only as
	  cardlist messages.


2001-11-08 00:39:06  Rev 2691   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed stupid, stupid bug in game_launch.


2001-11-07 14:49:37  Rev 2689   bmh

	* ggzd/net.c:
	  - Initialize byte count and tag_seen flag to 0 when creating a new
	    GGZNet object.  This should prevent the instant log out we've been
	    seeing on justin's server


2001-11-07 03:37:23  Rev 2683   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed bugs in memory management.
	  - ggz_free is used instead of free to destroy the seat data.  Doh!
	  - seat data is now destroyed on ggzdmod_free even if we were not
	    previously connected.  Doh!
	  - Consequently, seat data is _not_ destroyed on disconnect.  It'll 
	  sit
	    around until ggzdmod_free is called or it's used again.
	  - In two places where es_read_string_alloc is used to alocate a 
	  name, we
	    ggz_strdup the returned string and then free it.  This is a hack 
	  to
	    avoid confusing the libggz memory debugger.  A better solution 
	  would be
	    nice, but once we use an XML protocol this problem should 
	  hopefully go
	    away.


2001-11-05 22:24:39  Rev 2680   jdorje

	* tests/basic.c tests/Makefile.am:
	  Added some more tests.


2001-11-05 21:32:38  Rev 2679   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed bug in comparing of old and new seat names, for real this 
	  time.
	  Each time we ggzdmod_set_seat, we free the old string and strdup 
	  the new
	  one.  This is fine, except if the new and old strings point to the 
	  same
	  places in memory.
	  Note that we're still using ggz_free/ggz_strdup, whereas elsewhere
	  malloc is used to allocate the string (in es_read_string_alloc).


2001-11-05 21:26:47  Rev 2678   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed bug in comparing of old and new seat names.  Rather than 
	  bother to
	  compare the names (either or both of which may be NULL), we just 
	  duplicate
	  without checking (but we do check each for NULL).


2001-11-05 21:14:31  Rev 2677   jdorje

	* ggzdmod/ggzdmod.c:
	  Added extra initialization for ggzdmod object.


2001-11-05 21:11:37  Rev 2676   jdorje

	* ggzdmod/protocol.h ggzd/ggzdmod.c ggzdmod/ggzdmod.c:
	  Removed unused REQ_SEAT_CHANGE packet type from ggzdmod 
	  communication.


2001-11-05 00:28:34  Rev 2667   jdorje

	* ggzdmod/ggzdmod.c:
	  Free seat (player) names when the seat object is destroyed, in
	  ggzdmod_disconnect().


2001-11-05 00:19:07  Rev 2666   jdorje

	* ggzdmod/ggzdmod.c:
	  Use strcmp to compare strings instead of comparing pointers.
	  In the second case it doesn't matter, but in the first case it 
	  might.


2001-11-05 00:11:43  Rev 2665   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed bug in initialization of seat numbers.


2001-11-04 23:54:22  Rev 2664   bmh

	* tests/basic.c:
	  - Many more tests


2001-11-04 23:30:26  Rev 2663   jdorje

	* configure.in:
	  The compilation of programs in tests/ depends on the library in 
	  ggzdmod/.
	  I reordered the SIBDIRS to have this ordering so that make would 
	  follow
	  the correct behavior by default.  make/automake doesn't seem to be 
	  able
	  to figure out this dependency.


2001-11-04 22:59:16  Rev 2662   bmh

	* tests/Makefile.am:
	  - Add '-static' flag so that the executable is lib is linked in
	    statically.   This allows us to do better testing in place.


2001-11-04 22:45:53  Rev 2659   bmh

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  - Added ggzdmod_get/set_gamedata() so that ggz and games can set a
	    game-specific pointer and then later retrieve it (ie. from the
	    callbacks).  This allow ggz to get a pointer to the game table 
	  from
	    the ggzdmod object


2001-11-04 22:40:41  Rev 2658   bmh

	* ggzdmod/Makefile.am:
	  - Add in LDADD to ggzdmod linkagaes so we link to correct libs


2001-11-04 22:39:45  Rev 2657   bmh

	* configure.in:
	  - Added tests subdir


2001-11-04 22:39:18  Rev 2656   bmh

	* tests tests/basic.c tests/Makefile.am tests/.cvsignore:
	  - First unit tests for libggzdmod


2001-11-04 22:18:06  Rev 2655   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  ggzdmod_set_seat now does more intelligent parameter-checking, and 
	  strdup's
	  the name as necessary.


2001-11-04 22:04:28  Rev 2654   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggz_server.c ggzdmod/ggzdmod.h:
	  Changed ggzdmod_get_seat to return a copy of the seat structure, 
	  rather
	  than a pointer to the seat structure itself.


2001-11-04 21:56:47  Rev 2653   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed some problems in ggzdmod_disconnect.


2001-11-04 21:38:31  Rev 2652   bmh

	* game_servers/libggzmod:
	  - Removed last remaining file in old libggzmod dir


2001-11-04 19:36:16  Rev 2651   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Fixed up the "state change" event.
	  - First the state is changed.
	  - Then the event handler is called with GGZ_EVENT_STATE as the 
	  event.
	  - The "data" passed is a GGZdModState* containing the old state.
	  Some games will still misuse this event.


2001-11-04 19:28:31  Rev 2650   jdorje

	* game_servers/libggzmod/ggz_stats.c 
	  game_servers/libggzmod/ggz_stats.h:
	  Finally removed the last parts of the old libggzdmod.


2001-11-04 17:33:57  Rev 2649   jdorje

	* game_servers/lapocha/Makefile.am game_servers/libggzmod/ggz_server.
	  h game_servers/dots/Makefile.am game_servers/libggzmod/ggz.c 
	  game_servers/libggzmod/Makefile.am game_servers/tictactoe/Makefile.
	  am game_servers/hastings/Makefile.am game_servers/escape/game.c 
	  game_servers/chess/game.c game_servers/chess/chess.h 
	  game_servers/lapocha/game.c game_servers/chinese-checkers/game.h 
	  game_servers/dots/game.c configure.in game_servers/combat/game.h 
	  game_servers/escape/main.c ggzdmod/ggz_server.c 
	  game_servers/dots/game.h game_servers/escape/Makefile.am 
	  game_servers/Makefile.am game_servers/chess/main.c 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/lapocha/main.c ggzdmod/ggz_server.h 
	  game_servers/dots/main.c game_servers/combat/Makefile.am 
	  game_servers/chess/Makefile.am game_servers/tictactoe/game.h 
	  game_servers/hastings/game.h:
	  Completely remove old libggzdmod.


2001-11-04 03:50:54  Rev 2647   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  ggzdmod/Makefile.am ggzdmod/ggz_stats.h 
	  game_servers/libggzmod/Makefile.am game_servers/ggzcards/message.c 
	  game_servers/ggzcards/net.c game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/common.c ggzdmod/ggz_stats.c:
	  I moved the ggz_stats demo code to be in the new ggzdmod, removing 
	  the old
	  ggz_stats.  Consequently, I upgraded ggzcards to use the new ggzdmod
	  (through the ggz_server wrapper).
	  I'm just trying to get things slowly unified here.


2001-11-04 03:28:03  Rev 2646   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed serious bug in previous commit: in finding the active FD set,
	  we
	  didn't skip over unused FD's.  This resulted in an immediate 
	  segfault.


2001-11-04 01:57:23  Rev 2645   jdorje

	* game_servers/libggzmod/ggz.c:
	  Fixed error in last commit.


2001-11-04 01:45:17  Rev 2644   jdorje

	* ggzd/ggzdmod.c game_servers/libggzmod/ggz.c 
	  game_servers/libggzmod/Makefile.am 
	  game_servers/libggzmod/ggz_protocols.h:
	  Removed game_servers/libggzmod/ggz_protocols.h.  ggzdmod/protocol.
	  h is
	  used in its place.


2001-11-04 00:17:24  Rev 2643   jdorje

	* ggzdmod/ggzdmod.c:
	  I reviewed the code an made a number of cleanups and bugfixes:
	    - The biggest thing is that active_fd_set is no longer tracked 
	  by players
	      connecting and disconnecting.  It's rebuilt upon each use, and 
	  only
	      includes player FD's if a handler is registered for the player 
	  data
	      event.
	    - Similarly, fd_max (as used by select) only includes the player 
	  FD's if
	      necessary.
	    - I added some extra initializations in ggzdmod_new().
	    - Error return values of some functions are (possibly) more 
	  intelligent.
	    - I added a few FIXME comments for future work.
	    - Upon killing the table, the ggzdmod pid is reset to -1.
	    - Because of the above changes, the active FD set should now be 
	  tracked
	      correctly in GGZ mode.  There was a bug before: 
	  ggzdmod_connect did
	      not initialized the active_fd_set in GGZ mode.


2001-11-03 23:35:16  Rev 2642   jdorje

	* ggzdmod/Makefile.am:
	  Added static library compilation back.
	  Unfortunately, this is currently necessary for the game servers.  
	  Since the
	  dynamic library won't be installed until you make install, I don't 
	  know
	  how to get the binaries used in "make test" to use it.  Hopefully 
	  someday
	  we'll figure that out.


2001-11-03 23:03:17  Rev 2641   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed problems with previous commit: two typos and missing 
	  #includes, as
	  well as fixing a type variable for the game's pid.


2001-11-03 22:29:06  Rev 2640   bmh

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  - Removed ggzdmod_launch_game()
	  - ggzdmod_connect() can now be called from the ggz side to do the
	    equivalent of ggzdmod_launch_game
	  - ggzdmod_disconnect() can now be called from the ggz side to kill 
	  the
	    game server
	  - new function ggzdmod_set_module() to allow ggz side to specify
	    command-line args for executing game module
	  - Surround ggzdmod.h with __GGZDMOD_H__ define's so it can be 
	  included
	    multiple times


2001-11-03 19:47:39  Rev 2639   bmh

	* ggzdmod/ggzdmod.c ggzdmod/ggz_server.c ggzdmod/ggzdmod.h:
	  - Renamed states to GGZ_STATE_CREATED, WAITING, PLAYING, and DONE as
	    per discussion


2001-11-03 19:47:04  Rev 2638   bmh

	* ggzdmod/protocol.h ggzdmod/Makefile.am:
	  - Copied over protocol file from old ligggzdmod dir
	  - Include protocol.h in list of sources
	  - Remove old static lib since we don't need it


2001-11-03 18:38:58  Rev 2637   jdorje

	* Doxyfile:
	  Added Doxyfile for doxygen configuration.
	  There are a couple of issues.  For one, this only generates ggzdmod
	  documentation.  Should it therefore go in the ggzdmod directory?  
	  I don't
	  know.  It's easy to move, though.


2001-11-03 10:06:24  Rev 2636   jdorje

	* ggzdmod/ggzdmod.h:
	  Copied over a bit more documentation from the old ggz_server.h.


2001-11-03 10:02:39  Rev 2635   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggz_server.c ggzdmod/ggzdmod.h:
	  Added Doxygen-style documentation; made a few other fixes as I 
	  realized
	  some things weren't quite right to their definitions.


2001-11-03 09:11:41  Rev 2634   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggz_server.c ggzdmod/ggzdmod.h:
	  Switched GGZ_STATE_LAUNCHED to GGZ_STATE_WAITING.


2001-11-03 05:54:37  Rev 2632   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggz_server.c ggzdmod/ggzdmod.h:
	  A simple change to the new ggzdmod_dispatch system.
	  - ggzdmod_io_pending and ggzdmod_io_read are removed.
	  - ggzdmod_dispatch does not block.
	  - ggzdmod_dispatch reads all data, not just ggzdmod data.
	  - ggzdmod_loop acts as it did before.
	  It's not tested, but more changes will be required shortly so 
	  that's ok.


2001-11-03 01:38:19  Rev 2630   bmh

	* ggzd/net.c:
	  - Don't assume the encoding is UTF-8, use the one the client 
	  declares
	    in the <?xml?> declaration


2001-10-29 05:31:50  Rev 2628   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/games.c 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/games.h 
	  game_servers/ggzcards/net.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Added send_bid_request function, moving this portion of network 
	  code into
	  net.[ch].  I also cleaned up some assorted other stuff (mostly 
	  related).


2001-10-29 04:25:16  Rev 2627   rgade

	* ggzd/players.c ggzd/event.c:
	  - Don't call room_notify_lag() if still in room -1
	  - Trap attempts to enqueue events to room -1


2001-10-29 03:23:32  Rev 2624   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Two small changes: a formatting cleanup and removal of an 
	  unnecessary
	  memset call.


2001-10-29 03:20:37  Rev 2623   jdorje

	* game_servers/ggzcards/message.c:
	  Added send_last_trick_cardlist() so that a cardlist will be sent 
	  for the
	  last-trick message (in addition to the text message which is still 
	  sent).


2001-10-28 23:36:54  Rev 2622   rgade

	* ggzd/login.c ggzd/parse_opt.c ggzd/players.c ggzd/ggzd.h 
	  ggzd/datatypes.h ggzd/ggzd.conf.in:
	  - Read lag parameters from ggzd.conf
	  - Lowered the default values to tighten the lag classes
	  - Reduced default ping frequency to 10 seconds
	  - Don't send a ping until 5 seconds after a successful login


2001-10-28 09:47:24  Rev 2620   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/common.h 
	  game_servers/ggzcards/message.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/protocol.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/message.h:
	  Wrote send_last_hand_cardlist, with a wide variety of other 
	  changes to
	  keep things clean.
	  The server will now send a cardlist global message for the "last 
	  hand"
	  message (in addition to the text message).
	  Also, the CARD GROUP message type has been removed (merged with 
	  CARD LIST),
	  and the format of the CARD LIST message has been changed so 
	  players can
	  have different numbers of cards in the list.


2001-10-28 09:10:27  Rev 2619   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Changed alloc_string_array to alloc2, even though it's unused.  
	  (I'm not
	  quite sure why it is unused, though...)


2001-10-28 07:54:44  Rev 2618   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/message.c 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  I've had enough of the fixed messaging system.  Although incredibly
	  flexible, it's very limiting in terms of user interface issues.
	  So, I changed the protocol to allow different types of global 
	  messages
	  to be passed to the client.
	  Each message is still identified by a "mark" that is a single 
	  string.  In
	  the simplest case, the client can (and currently does) use this 
	  mark just
	  as the name of the message (for instance for the items on the 
	  "Messages"
	  menu).  In more complicated cases, the client may use this as an 
	  index
	  into its own system (ultimately this may be a reason for switching 
	  over to
	  an XML-style protocol, but that's a question for another day).
	  However, there are now different "types" of global messages.  The 
	  simplest
	  one is a "TEXT" message that is the same as the messaging system 
	  used now:
	  a single string, intended to be displayed as-is in a fixed-width 
	  font by
	  the client.  A second type of message is the "CARD GROUP" message, 
	  which
	  consists of a group of cards (one card per player).  A third is 
	  the "CARD
	  LIST" message, which consists of a list of cards (n cards per 
	  player).
	  (The card list message could be viewed as a superset of the card 
	  group
	  message, but since the display for the two is generally quite 
	  different
	  I've kept it like this for now.)  A final one is the "BLOCK" 
	  message,
	  which includes game-specific information that may or may not be 
	  used by
	  the client (in a format to be determined later).
	  For compatibility, I also bumped the protocol version number up.
	  It should be remembered that this is an experimental system; I'm 
	  really
	  going to have to see how things shake out as I go along.  The card 
	  group
	  and card list systems should be good enough to start with, once I 
	  put
	  together some code to use them.  After that, I'll see how things 
	  fall
	  together for the game-specific system.


2001-10-24 21:23:43  Rev 2615   jdorje

	* ggzdmod/ggzdmod.c:
	  Add sys/time.h to list of #includes.


2001-10-24 19:27:41  Rev 2614   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed minor problem with previous commit.


2001-10-24 19:23:09  Rev 2613   jdorje

	* ggzdmod/ggzdmod.c:
	  Added game_fork(), which should be called by ggzdmod_launch_game().


2001-10-24 18:53:54  Rev 2612   jdorje

	* ggzdmod/ggzdmod.c:
	  Wrote send_game_launch(), which will be a part of 
	  ggzdmod_game_launch().


2001-10-24 17:58:03  Rev 2611   jdorje

	* ggzdmod/Makefile.am:
	  Add .NOTPARALLEL target to Makefile so make won't try to build in
	  parallel.


2001-10-24 17:53:57  Rev 2610   jdorje

	* game_servers/reversi/main.c game_servers/reversi/Makefile.am 
	  game_servers/reversi/game.h:
	  Reversi now uses the new ggzdmod (via the compatibility wrapper 
	  library).
	  We can now do some consistent testing.


2001-10-24 17:52:35  Rev 2609   jdorje

	* ggzdmod/Makefile.am ggzdmod/ggz_server.c ggzdmod/ggz_server.h:
	  Added ggz_server.[ch] to be a wrapper for backwards-compatibility 
	  with
	  games that use the old ggzdmod.
	  This is NOT intended to be a permanent thing, but something to 
	  ease the
	  transition to the new ggzdmod.


2001-10-24 06:28:43  Rev 2608   jdorje

	* ggzdmod/ggzdmod.c:
	  Fixed bug in game_joine(): the status was not being sent with
	  RSP_GAME_JOIN.


2001-10-24 05:03:20  Rev 2607   jdorje

	* configure.in:
	  Added autoconf code to recognize/require libggz.
	  This is not currently used by any program in ggzd, but it will be.
	  This sort of thing should probably go into the common autoconf files
	  Josef was talking about providing...


2001-10-24 05:01:20  Rev 2606   jdorje

	* ggzdmod/ggzdmod.c:
	  Started using libggz for memory management.
	  I have done nothing to assure that libggz gets loaded; the 
	  libggzdmod
	  user will now be required to make sure -lggz is taken care of.  
	  Unless
	  there's a better way I don't know of...


2001-10-24 04:23:28  Rev 2605   jdorje

	* ggzdmod/Makefile.am:
	  Include dummy test target to avoid warning.


2001-10-24 04:20:39  Rev 2604   jdorje

	* ggzdmod/ggzdmod.c:
	  Player names are allocated on demand rather than placed into a fixed
	  array (which was a bug, since the array didn't exist).


2001-10-24 02:30:03  Rev 2603   jdorje

	* ggzdmod/ggzdmod.c:
	  Remove explicit gameover flag; just use the state variable to 
	  track it.


2001-10-24 02:25:25  Rev 2602   jdorje

	* ggzdmod/ggzdmod.c:
	  Cleaned up cruft.


2001-10-24 02:20:57  Rev 2601   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Added GGZdModState.
	  I've called it "state" instead of "status" everywhere now.
	  I also renamed the enumerations GGZ_STATE_*** and GGZ_EVENT_*** 
	  because
	  they conflicted.  These names may need improvement.


2001-10-24 01:10:13  Rev 2600   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Assorted fixes and cleanups to the existing code.


2001-10-24 00:36:12  Rev 2599   jdorje

	* game_servers/krosswater/zoneserver/ZoneGGZModGGZ.cpp 
	  game_servers/spades/err_func.c ggzd/ggzdmod.c ggzdmod/ggzdmod.c 
	  game_servers/libggzmod/ggz.c game_servers/spades/protocols.h 
	  game_servers/krosswater/zoneserver/ZoneProtocols.h 
	  game_servers/libggzmod/ggz_protocols.h:
	  Cleaned up ggzdmod's logging/debugging code.
	  I removed MSG_DBG, leaving only MSG_LOG in its place.  Of course, 
	  this
	  meant I had to remove all uses of MSG_DBG.  I also removed the log 
	  level
	  message from the ggzdmod communications; it is now up to ggzd to 
	  handle
	  this (ggzdmod-ggz calls a ggzd event callback function with the 
	  log info).
	  In summary, most of these changes are unnecessary, but will allow an
	  easier conversion to the new ggzdmod.


2001-10-23 22:34:55  Rev 2598   jdorje

	* ggzdmod/ggzdmod.c:
	  Implemented ggzdmod_dispatch() for the ggz-side of the 
	  communication,
	  basing things closely off of the code in ggzd/ggzdmod.c.
	  I made a slight change (simplification) to the protocol for the 
	  debugging
	  message.
	  Still not implemented: ggz-side function calls like 
	  ggzdmod_launch(), etc.


2001-10-23 21:53:31  Rev 2597   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Implemented ggzdmod_dispatch for game-side.  I also cleaned up 
	  some other
	  parts of the code.


2001-10-19 05:59:24  Rev 2578   rgade

	* ggzd/login.c ggzd/players.c:
	  Fix several bugs caused by a connection never logging in
	  - Disallow use of username "<none>" (reserved for not logged in 
	  users)
	  - Don't try to remove from hash or bump player count if user not 
	  logged in


2001-10-16 17:02:53  Rev 2574   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Implemented ggzdmod_loop(), ggzdmod_halt_game(), ggzdmod_connect(),
	  ggzdmod_disconnect(), and ggzdmod_log().  Implementations for many 
	  are
	  not complete (they will only work game-side).


2001-10-15 08:20:00  Rev 2571   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Implemented ggzdmod_io_pending; added ggzdmod_io_read.


2001-10-15 05:30:13  Rev 2570   jdorje

	* ggzdmod/README:
	  Added (probably temporary) README file containing discussion and 
	  ideas for
	  ggzdmod.
	  (Well, actually it only contains Brent's API proposal, but that's 
	  ok.)


2001-10-14 10:01:42  Rev 2564   jdorje

	* ggzdmod/ggzdmod.c ggzdmod/ggzdmod.h:
	  Wrote the easier functions for ggzdmod, and added stubs for the 
	  others.


2001-10-14 09:21:40  Rev 2563   jdorje

	* ggzdmod/Makefile.am configure.in ggzdmod/ggzdmod.c ggzdmod/.
	  cvsignore Makefile.am ggzdmod ggzdmod/ggzdmod.h:
	  Fixed things up so we can actually compile the "new" libggzdmod.


2001-10-14 09:05:00  Rev 2562   jdorje

	* ggzdmod ggzdmod/ggzdmod.h:
	  Added ggzdmod.h file.  This is the original API as proposed by 
	  Brent on
	  ggz-dev.


2001-10-14 06:56:17  Rev 2561   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/ai/suaro.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/ai.c game_servers/ggzcards/games/suaro.h:
	  Implemented preliminary Suaro AI.
	  The only thing really changed is the bidding: the AI will bid mildly
	  intelligently.  It still plays the hand randomly.


2001-10-09 00:04:59  Rev 2546   rgade

	* ggzd/net.c ggzd/protocols.h ggzd/net.h ggzd/room.c ggzd/players.c 
	  ggzd/ggzd.h ggzd/room.h ggzd/players.h:
	  - Phase one of lag tracking protocol


2001-10-04 23:44:50  Rev 2536   rgade

	* ggzd/err_func.h ggzd/login.c ggzd/players.c ggzd/control.c 
	  ggzd/err_func.c:
	  Phase one of LOG_UPDATE type
	  - control.c core loop select() modified to timeout when the log 
	  entry should
	    be emitted
	  - Update log will track (so far):
	      - uptime (in seconds) - internal
	      - anonymous users connected
	      - registered users connected
	      - number of logins since last update
	      - number of logouts since last update
	  - Updates set to occur every LOG_UPDATE_INTERVAL (err_func.h) 
	  seconds
	    default is 600 (10 minutes)


2001-10-04 07:50:05  Rev 2534   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Updated changes from ggzdmod-dev branch; things are compatible but 
	  the
	  interface is slightly different (simpler).
	  I wanted to get this all finished up before we started on the NEW
	  interface.


2001-10-03 05:24:34  Rev 2530   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Allowed AI to handle double nil bids in play.
	  The bot will consider a dnil to be the equivalent of a nil, and will
	  therefore try to set or cover it just the same.  Previously, a 
	  dnil was
	  considered the same as a 0-bid.


2001-10-02 06:34:03  Rev 2527   rgade

	* ggzd/perms.h ggzd/room.c ggzd/chat.c ggzd/players.c ggzd/room.h:
	  - Server-wide announcements hooked up
	  - New permission PERMS_CHAT_ANNOUNCE


2001-10-02 04:48:53  Rev 2526   rgade

	* ggzd/ggzduedit.c ggzd/perms.h:
	  - Now shows human-readable permissions in ggzduedit
	  - Still have to speak hex to enter permissions, but at least it 
	  will let
	    you know if you're wrong ;)


2001-10-02 04:08:37  Rev 2525   rgade

	* ggzd/net.c ggzd/perms.c ggzd/login.c ggzd/perms.h ggzd/players.c 
	  ggzd/ggzd.h ggzd/ggzdb.h ggzd/players.h:
	  - Set permissions on login more abstractly (perms_init)
	  - Eliminate type entry from player structure
	  - Determine player type from UID and permissions


2001-09-30 12:37:18  Rev 2522   dr_maux

	* game_servers/libggzmod/.cvsignore game_servers/libggzmod:
	  - ignore all .lo files, not just one


2001-09-29 15:57:43  Rev 2521   bmh

	* ggzd/net.c:
	  - Handle lots of unexpected cases where the client sends something
	    that doesn't make sense: just send a RESULT with ACTION="protocol"
	    and CODE="E_BAD_OPTIONS"  (there may be a better code to use.  
	  Must
	    examine later)


2001-09-29 15:56:14  Rev 2520   bmh

	* ggzd/parse_opt.c ggzd/control.c ggzd/datatypes.h:
	  - Added --foreground/-F option to force ggzd to run in foreground
	  - Always run daemon_init() unless --foreground is specified


2001-09-29 05:46:38  Rev 2519   rgade

	* ggzd/.cvsignore ggzd:
	  - Ignore ggzduedit file


2001-09-29 05:46:06  Rev 2518   rgade

	* ggzd/ggzdb_db2.c:
	  - Possible fix for anti-social sharing of db2 between ggzd and 
	  ggzduedit
	  I can't verify this fix as I don't have db2 anymore.  I don't even 
	  know
	  for 100% certain that it will compile.  But the fix "looks" right 
	  based on
	  the db2 documentation that I have.


2001-09-29 03:13:58  Rev 2516   bmh

	* ggzd/net.c ggzd/chat.c ggzd/event.c ggzd/hash.c:
	  - Moved name lowercasing into hash_player_lookup() so we don't 
	  have to
	    do it all the time
	  - In net_send_player_update(), if we're adding a player look up his
	    object and use net_send_player() so we get type info.
	  - If we're deleting a player just send the name


2001-09-29 02:02:23  Rev 2513   bmh

	* ggzd/net.c:
	  - oops! only disconnect if we actually exceed MAX_CHAT_LEN bytes, 
	  not
	    *every* time we don't see a tag :)


2001-09-29 01:55:09  Rev 2512   bmh

	* ggzd/net.c:
	  - Fix for Rich's DoS bug:
	    * mark glad when we see a tag
	    * keep tally of how mych data we've parsed without seeing a tag
	    * if it's more than MAX_CHAT_LEN, disconnect


2001-09-27 22:56:07  Rev 2511   bmh

	* ggzd/net.c:
	  - Some small cleanups:
	    * got rid of _net_error()
	    * no need to have local stck variable when it's available through
	      GGZNet


2001-09-27 21:06:07  Rev 2510   rgade

	* ggzd/parse_opt.c ggzd/room.c ggzd/room.h:
	  - New room file entry:
	    EntryRestriction = Admin/Registered/None
	  - Entering a restricted room without permission is denied with 
	  E_NO_PERMISSION


2001-09-25 19:11:19  Rev 2509   rgade

	* ggzd/ggzduedit.c:
	  - Added functions to add or edit a user db entry


2001-09-25 05:04:59  Rev 2508   rgade

	* ggzd/ggzduedit.c ggzd/Makefile.am ggzd/ggzdb.c ggzd/ggzdb.h 
	  ggzd/ggzdb_db2.c ggzd/ggzdb_db3.c:
	  Beginnings of ggzduedit program
	  - List all players in database
	  - Show all information regarding a single user
	  - Added 'standalone' modes to ggzdb_dbX routines
	      (basically don't auto-create db files)
	  - ggzdb_dbX routines no longer restricted to single running process
	  - added cursor routines for use by ggzduedit only to ggzdb_dbX
	      (currently these are NOT threadsafe)


2001-09-24 04:16:01  Rev 2507   rgade

	* ggzd/perms.c ggzd/Makefile.am ggzd/login.c ggzd/protocols.h 
	  ggzd/perms.h ggzd/players.c ggzd/ggzdb.h ggzd/players.h:
	  Basic bootstrap for the user permissions system
	  - Bump database version
	  - Revamp login process to copy info from db->player struct @ login
	  - Defined some basic permissions
	  - Test user permissions for table launches and joins


2001-09-24 02:37:50  Rev 2506   bmh

	* configure.in:
	  - Require expat lib for XML parsing


2001-09-24 02:36:50  Rev 2505   bmh

	* ggzd/net.c ggzd/table.c ggzd/Makefile.am ggzd/err_func.h 
	  ggzd/protocols.h ggzd/stack.h ggzd/xmlelement.c ggzd/net.h 
	  ggzd/parse_opt.c ggzd/table.h ggzd/players.c ggzd/xmlelement.h 
	  ggzd/players.h ggzd/stack.c:
	  - New files stack.[ch] and xmlelement.[ch] ported from ggzcore to
	    handle stacks and xml element parsing
	  - Converted all server->client communication to new XML-based 
	  protocol
	  - New debug type: XML
	  - Renamed table_new() to table_new_thread()
	  - New table_new() function to create/initialize a GGZTable object
	  - Redo table_launch() and player_table_launch() a bit to accept a
	    GGZTable* instead of a bunch of options


2001-09-23 21:42:43  Rev 2501   bmh

	* ggzd/login.c:
	  - Don't add (G) to guest player names anymore


2001-09-19 06:25:26  Rev 2499   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/net.c:
	  Small cleanups to net.[ch].


2001-09-17 07:00:59  Rev 2491   rgade

	* ggzd/table.c ggzd/err_func.h ggzd/login.c ggzd/parse_opt.c 
	  ggzd/room.c ggzd/ggzd.test.in ggzd/players.c:
	  err_func.h
	  - New log types, SECURITY and TABLES
	  parse_opt.c
	  - Added new log types
	  ggzd.test.in
	  - Default to All logs when testing
	  login.c
	  - Add (SECURITY) log entry for creating a new user
	  - Add (SECURITY) log entry for bad password
	  players.c
	  - Add (NOTICE) log entry for a server full condition
	  room.c
	  - Add (NOTICE) log entry for a room full condition
	  table.c
	  - Add (NOTICE) log entries for server/room full of tables
	  - Add (TABLES) log entries for table startup and end


2001-09-15 07:38:30  Rev 2488   rgade

	* ggzd/login.c:
	  - Must pass the db entry to login_check_password() or the last 
	  login timestamp
	    update will overwrite the record with garbage


2001-09-14 21:52:46  Rev 2482   bmh

	* ggzd/net.c ggzd/login.c ggzd/players.c ggzd/players.h:
	  - Added 'type' member element to GGZPlayer structure to hold login
	    type information
	  - New function player_get_type()
	  - Send actual type of player in TYPE attribute of PLAYER tag, 
	  instead
	    of always sending 'guest'


2001-09-14 21:10:19  Rev 2479   bmh

	* ggzd/net.c ggzd/players.c ggzd/players.h:
	  - New function player_get_room() to get index of player's current 
	  room
	  - Send room number on LIST and UPDATE messages when updating 
	  player or
	    table list


2001-09-14 13:11:38  Rev 2478   bmh

	* ggzd/Makefile.am:
	  - Include *all* of the database source files in the distribution
	  - Depend on the selected db source file in ggzd_SOURCES


2001-09-14 07:27:18  Rev 2476   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Added spades_start_game() function so that bags will be set to 0 
	  on the
	  start of *every* game.


2001-09-14 00:29:19  Rev 2474   jdorje

	* game_servers/ggzcards/protocol.h:
	  Fixed typo.


2001-09-14 00:23:14  Rev 2473   bmh

	* ggzd/net.c:
	  - Don't send a full table listing when the table is being deleted


2001-09-14 00:04:35  Rev 2472   bmh

	* ggzd/net.c ggzd/net.h ggzd/players.c:
	  - Renamed _net_send_table_seat() to _net_send_seat()
	  - New functions _net_send_table_seat() and 
	  _net_send_table_status() to
	    handle special cases where we're only sending a single seat (for a
	  - join or leave) or a status update
	  - Have _net_send_table() always send the full table, in which case 
	  we
	    don't need the seat parameter


2001-09-13 09:25:46  Rev 2466   jdorje

	* ggz_server.spec:
	  Updated file list for ggz_server RPM package.
	  Changes include:
	  - Added the many new ggzcards and escape config files to the 
	  installation.
	  - Added libggzdmod to the installation (hopefully all of it...).
	  - Bumped version to 0.0.5pre which is the current version number 
	  for the
	    module.
	  - Changed the packager to GGZ Development Team; this seems more
	    "official".
	  - Included README.GGZ in the documentation list.
	  - Changed "Gnu Gaming Zone" to "GGZ Gaming Zone".  (?)
	  - Slight wording change to the package description.
	  This is not a complete update, but a partial update for 0.0.5pre.  
	  Other
	  issues I've noticed are:
	  - Installing the entire doc/ directory as documentation places 
	  lots of
	    irrelevant non-documentation files into the distribution.
	  - Although the libggzdmod files are installed, the version 
	  information on
	    the shared library is 0.0.0.  This obviously needs to be fixed 
	  before
	    the next release.
	  - The libzoneserver is included in the package although it is now 
	  (I think)
	    incompatible with the current ggzd<->ggzdmod communications 
	  protocol.


2001-09-13 06:08:52  Rev 2465   rgade

	* ggzd/login.c ggzd/players.c ggzd/daemon.c ggzd/players.h:
	  daemon.c
	  - Removed log entry for creating pid file - not "interesting" 
	  activity
	  login.c
	  - Classify the login type within log files
	  - Track initial connection time
	  players.[ch]
	  - Track initial connection time
	  - Log total connection time at logout


2001-09-12 21:07:09  Rev 2464   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Added a quick hack so that a player with strong spades will pull 
	  spades.


2001-09-12 20:56:23  Rev 2463   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Fixed problems with expert non-trump bidding system.


2001-09-12 08:56:34  Rev 2462   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  General cleanups to play-choosing code.


2001-09-12 08:39:11  Rev 2461   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Removed code to recalculate bid based on other player's bids:
	    - It wasn't implemented yet anyway.
	    - It was commented out.
	    - It fit the NetSpades data model, not ggzcards'.
	  I replaced it with a FIXME comment.


2001-09-12 08:35:12  Rev 2460   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Replaced the "confidence level" method of bidding non-spade suits 
	  by a
	  very direct expert system.
	  The system is pretty simple right now, but more rules can be added.


2001-09-12 07:42:46  Rev 2459   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Use the play count tracker to track the number of "count cards" each
	  player has played.
	  "Count cards" are the ones that a player should have counted on to 
	  win a
	  trick; they can be used later for determining which cards remain 
	  in each
	  hand.  They include the A and K of non-trump suits, the A, K, Q of 
	  spades,
	  and any extra spade after the third.


2001-09-12 07:39:48  Rev 2458   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h:
	  Make use of the play count tracker: a function that will tell how 
	  many
	  cards a player has played in a suit.


2001-09-12 05:08:11  Rev 2457   jdorje

	* game_servers/ggzcards/ai/aicommon.c:
	  Two revisions to AI common library:
	    - Track how many cards each player has played in each suit 
	  (currently
	      unused; later quite useful in spades).
	    - Fix a horrendous bug; the bitmask of cards played in each suit 
	  was
	      being stored as a char instead of an int.


2001-09-12 02:59:16  Rev 2456   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  A few cleanups to spades AI code:
	    - A comment about the "tricks" we can use to evaluate other 
	  players'
	      plays.
	    - Restructured count_spades_ruff_winners() function (much 
	  shorter now).
	    - Fixed bug in preprocessor macro in 
	  count_spades_strength_winners().


2001-09-11 20:12:21  Rev 2454   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c game_servers/ggzcards/net.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/game.c:
	  Removed unneeded "#include <easysock.h>" lines.


2001-09-11 19:20:55  Rev 2453   jdorje

	* game_servers/ggzcards/net.h game_servers/ggzcards/common.h 
	  game_servers/ggzcards/net.c game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/common.c:
	  Moved network code into net.[ch].  This code still contains some 
	  game
	  handling code as well, which will need to be taken out of it.


2001-09-11 18:07:54  Rev 2452   jdorje

	* game_servers/ggzcards/ai.c:
	  Changed parameter definition to match return value of initializer 
	  function,
	  thus avoiding compiler warning.


2001-09-11 08:35:40  Rev 2451   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Reviewed and cleaned up a lot of common code in common.c.
	  common.c is now way too big, and should probably be split up into, 
	  say,
	  net.c and event.c.


2001-09-11 07:58:31  Rev 2450   jdorje

	* game_servers/ggzcards/common.c:
	  Replaced state_names[] array with get_state_name() function.


2001-09-11 02:18:15  Rev 2449   bmh

	* ggzd/net.c ggzd/net.h ggzd/room.c:
	  - Don't send room description if verbose listing wasn't requested


2001-09-10 23:53:19  Rev 2446   rgade

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc ggzd/parse_opt.c 
	  game_servers/lapocha/lapocha.dsc game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc ggzd/datatypes.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/reversi/reversi.
	  dsc game_servers/spades/spades.dsc game_servers/escape/escape.dsc 
	  game_servers/hastings/hastings.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc ggzd/players.c 
	  ggzd/control.c game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - Removed 'GameDisabled' option and associated code


2001-09-10 12:38:58  Rev 2442   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Made many additional enhancements to spades bidding.
	  In counting ruff winners:
	    - I entirely dropped the "trump sequence down from some high 
	  trump"
	      p1 calculation.  There's no point in determining the maximum 
	  number
	      of "guaranteed" trumps since this is just a subset of the spades
	      strength calculation (handled separately).
	    - Voids, singletons, and doubletons are calculated more sanely and
	      are valued less highly.  Specifically, the calculation goes 
	  like this:
	      * 90% chance of winning if you can trump the first round
	      * 70% chance of winning if you can trump the second round
	      * 40% chance of winning if you can trump the third round
	    - I also dropped the extra length calculation, since it also 
	  overlaps
	      with the spade strength calculation.
	    - I questionably dropped the "exhausting all spades" penalty.  
	  If you
	      run out of spades ruffing tricks, that'll screw over your 
	  partner
	      at the end of the hand.  On the other hand, this calculation 
	  somewhat
	      overlaps with the weak-spade penalty (applied separately).
	  Spade strength winners are conted in a loop.  It's more elegant.
	  I made the set of parameters passed into these functions smaller,
	  calculating more information on-the-fly.
	  Counting non-spade tricks was made a little more conservative, 
	  with a
	  lower confidence level for unprotected high cards.  This section 
	  still
	  needs a lot of work though; there are a number of situations in 
	  which
	  it is quite inaccurate.
	  A separate find_final_bid() function was created.  The code therein
	  was simplified a little bit.
	  I created a function consider_bidding_nil() that returns TRUE if the
	  player should bid nil.  I reviewed all of the code in the function,
	  and
	  changed a lot of it.  I also fixed a bad bug that had been in 
	  there since
	  I ported the code from NetSpades; it cause players to rarely bid 
	  nil.  I
	  think the calculated nil risk is on average larger now, but I'm 
	  not sure
	  if this is better or worse.
	  The actual get_bid() function is now quite short and understandable.
	  I introduced a preprocessor macro AGRESSIVE_BIDDING.  If set (not by
	  default) it will raise some of the constants used to calculate the
	  number of tricks.  But, the AI can't back up these more agressive 
	  bids
	  with good play.  Right now the bids are generally good 
	  conservative bids
	  that total to about 11.
	  Problems that remain:
	    - Calculating non-spade tricks is inaccurate.
	    - Calculating the nil risk is probably inaccurate.
	    - The big thing: the AI is still very bad at playing.  In one 
	  demo hand,
	      the bot got an incredibly good hand that it correctly bid 10 
	  on, but
	      was then completely unable to play the hand and only took 8.


2001-09-10 12:24:04  Rev 2441   jdorje

	* game_servers/ggzcards/ai.c:
	  Enhanced ai_debug() to write the game stage and player for which the
	  function was called.


2001-09-10 08:19:13  Rev 2440   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Removed static declaration of lastTrick.


2001-09-10 08:15:35  Rev 2439   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Removed static declaration of agg.


2001-09-10 07:00:12  Rev 2438   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Fixed a bug I introduced when porting the NetSpades AI code: the 
	  partner's
	  chance of winning a trick was always calculated as -1, even when the
	  partner had played a sure winner!
	  Now the AI is much smarter, although sometimes (always?) it'll 
	  count a
	  winning ace as an "unlikely" winner and so trump anyway.


2001-09-10 06:37:19  Rev 2437   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Fixed bug in last commit.


2001-09-10 06:19:07  Rev 2436   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Calculate agression levels a little more sanely:
	    - First, be more careful about when we whole-heartedly throw.  
	  Just
	      because one team has gone set doesn't mean the other team should
	      throw!
	    - Then, raise agression levels overall; basically by one trick.  
	  Use
	      full agression on a 12-bid or more; 75% agression on an 11-bid,
	  50%
	      agression on a 10-bid (0% once we've made our bid), and 25% 
	  agression
	      on a 9-bid (0% once we've made our bid).
	  This isn't completely fixed; ideally we'd consider the cards in 
	  our hand
	  and how many tricks we're expecting from our partner at this point.
	  But
	  the underagressive playing by the AI was a real drawback previously,
	  especially with the more agressive bidding.


2001-09-10 06:03:08  Rev 2435   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Fixed buglet: nil_tricks_count was only used for some players.


2001-09-09 22:05:57  Rev 2434   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Changed bidding: the determining of tricks in trumps.
	  There are two different viable ways of counting tricks (actually 
	  there's
	  a third, but it's not viable).
	  1.  Possible ruff tricks.  Here you count your sure winners plus 
	  any tricks
	  you think you can get by ruffing.  This is basically what the old 
	  style
	  of bidding was.  It works best with few spades and fails badly with
	  many spades.  This method has not been changed.
	  2.  Total strength tricks  I've adjusted this slightly to make it 
	  more
	  rigidly mathematical.  Here you count tricks that you can win 
	  flat-out in
	  spades:
	    - Each of A K Q counts as 1 trick.
	    - The 4th spade counts as .5 trick.
	    - The 5th and thereafter counts as 1 trick.
	    - If you have 6 or more, count the 4th spade as a full trick 
	  instead.
	  This method of counting spade winners has just been introduced.
	  There's one additional rule that I added on top of (after) both 
	  methods:
	  subtract tricks if you are weak in spades.  With 0 spades you 
	  subtract a
	  full trick, with 1 spade .5 tricks and with 2 spades .2 tricks.  
	  This is
	  because this weakness will really hurt your partner's ability to 
	  take
	  tricks.
	  There are two immediate problems with my implementation:
	    - The ruff-trick calculations are way too high, thus bidding is 
	  overall
	      too agressive.
	    - The method of playing out the hand is still very conservative. 
	  This
	      means it'll work out very badly with the more agressive style 
	  of play
	      demanded by the new bidding.
	  However, I am very happy with the new system overall.


2001-09-09 21:00:25  Rev 2433   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Moved spades calculation of trump tricks into a separate function.


2001-09-09 09:47:59  Rev 2423   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/ai/spades.c:
	  Added a few more functions to ai-common.


2001-09-09 09:29:19  Rev 2422   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/ai/spades.c:
	  Added two extra functions to the libai common code.


2001-09-09 09:16:41  Rev 2421   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai.c:
	  Removed some of the generalized card-tracking code from ai/spades.
	  c and
	  placed it into ai/aicommon.[ch].
	  It's not really "generalized" yet because it assumes there are four
	  players and four suits, but that's OK for now.


2001-09-09 04:50:01  Rev 2420   jdorje

	* game_servers/ggzcards/ai/aicommon.c 
	  game_servers/ggzcards/ai/aicommon.h 
	  game_servers/ggzcards/ai/Makefile.am:
	  Added stub files for AI common code.


2001-09-09 03:59:47  Rev 2419   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Completely re-did the spades debugging.  Now it uses ai_debug, which
	  handles all repetitive stuff like labelling and checking for 
	  AI_DEBUG.


2001-09-09 03:42:21  Rev 2418   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ai.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/options.h game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/bid.h game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/game.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/message.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/ai.c:
	  Made sure all files included config.h.  This meant I had to fix some
	  code that was previously hidden within #ifdef DEBUG...#endif 
	  statements.
	  Also I made general cleanups to the header lists.


2001-09-09 03:26:34  Rev 2417   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/ai.c:
	  Added ai_debug() function as a wrapper to ggzd_debug.


2001-09-09 03:15:38  Rev 2416   jdorje

	* game_servers/ggzcards/ai/random.c:
	  Implemented a slightly cleverer algorithm to correctly pick a random
	  card for the AI to play.


2001-09-09 02:47:49  Rev 2414   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/protocol.c game_servers/ggzcards/protocol.
	  html game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Changed protocol slightly (using chars instead of ints for some
	  communications) and bumped protocol version number.
	  This change has already been made in the client, so things should 
	  now
	  work fine.


2001-09-09 02:04:55  Rev 2412   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Corrected protocol version information.


2001-09-09 00:01:47  Rev 2410   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed typo in last commit.


2001-09-08 23:58:40  Rev 2409   jdorje

	* game_servers/ggzcards/protocol.c game_servers/ggzcards/message.c 
	  game_servers/ggzcards/protocol.h game_servers/ggzcards/common.c:
	  Added [read|write]_seat() to the common protocol code.


2001-09-08 23:03:15  Rev 2405   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/protocol.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/common.c:
	  Added new functions write_opcode and read_opcode.  Right now 
	  they're just
	  wrappers for es_[read|write]_int, but should make it easier to 
	  change
	  the structure.


2001-09-08 22:47:40  Rev 2403   jdorje

	* game_servers/ggzcards/protocol.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/common.c:
	  Changed misnamed es_[read|write]_card() to be just 
	  [read|write]_card().


2001-09-08 18:41:49  Rev 2401   jdorje

	* game_servers/ggzcards/common.c:
	  Minor cleanup in send_player_list().


2001-09-08 17:59:11  Rev 2400   jdorje

	* configure.in:
	  Changed error if db3 isn't present into a warning; now it should 
	  fall
	  back into db2 correctly.


2001-09-08 03:31:04  Rev 2398   bmh

	* ggzd/net.c ggzd/table.c ggzd/protocols.h ggzd/ggzd.motd.orig 
	  ggzd/net.h ggzd/ggzd.motd ggzd/room.c ggzd/players.c:
	  - New XML based protocol!
	  - Changed server to send XML (doesn't received yet)
	  - Different Motd that doesn't contain high ASCII


2001-09-08 02:32:43  Rev 2394   jdorje

	* game_servers/libggzmod/ggz.c:
	  Finally remove the code that sends the "statistics" across the 
	  socket upon
	  disconnection.  This is definitely not how things will be 
	  implemented.


2001-09-08 01:46:47  Rev 2393   jdorje

	* game_servers/libggzmod/Makefile.am:
	  Added .NOTPARALLEL target so that make will never build in parallel.
	  Building in parallel confuses make since libggzdmod.a and 
	  libggzdmod.la use
	  some of the same files.


2001-09-07 22:33:26  Rev 2392   jdorje

	* configure.in:
	  I implemented a VERY ugly checking system for the database that 
	  gives
	  slightly better results:
	    - If no db is specified, db3 becomes the default.
	    - If anything other than db2/db3 is specified, a warning is 
	  printed and
	      db3 because the default.
	    - If db3 is to be used it is checked for.  If present it is used,
	  if
	      not db2 is used.
	    - If db2 is to be used it is checked for.  If present it is used,
	  if
	      not there is an error/exit.
	  Note that db3 is the default, but if it's not present db2 will be 
	  used
	  instead.  If db2 is specified, though, no check for db3 will be 
	  done on
	  failure.  I haven't been able to test these failure cases since that
	  would (I think) involve uninstalling db[23].
	  A much better system would have a "checkfordatabase" function that 
	  checks
	  for an arbitrary database.  The logic could then be more 
	  straightforward:
	  check for the given database, then each database in turn until one 
	  is
	  found or the list is exhausted.


2001-09-07 13:10:52  Rev 2391   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/ai/spades.c:
	  Removed assumption that nil tricks do not count toward the team's 
	  bid.


2001-09-07 12:50:53  Rev 2390   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  More small cleanups to the spades AI code.


2001-09-07 12:04:29  Rev 2389   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Cleaned up name-generating code.


2001-09-07 12:01:05  Rev 2388   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Reviewed much of the spades code.  Cleaned up a some of it, 
	  including
	  fixing a horrid bug with misuse of memset().  Perhaps the AI will 
	  work
	  now.


2001-09-07 09:45:15  Rev 2386   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/protocol.c game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/Makefile.am:
	  Separated some common client-server data into protocol.[ch].
	  This might be substantially easier to maintain as an outside game; 
	  all
	  modules could then be contained together within the same source 
	  tree and
	  it wouldn't be necessary to make sure they were all kept in sync.  
	  On the
	  other hand, this would require work to set up configure to handle 
	  each
	  component and I really don't know how to do that.  A thought for 
	  another
	  day...


2001-09-05 17:36:52  Rev 2374   jdorje

	* game_servers/ggzcards/common.c:
	  Cleaned up and corrected many comments (including out-of-date 
	  ones) in
	  common.c.


2001-09-05 17:00:14  Rev 2373   jdorje

	* game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Fixed typo in Bridge .dsc file.


2001-09-05 16:44:55  Rev 2372   jdorje

	* game_servers/ggzcards/common.c:
	  With this one tiny change we always start a new game after we 
	  finish one.
	  There's a problem in that the client currently doesn't ask the 
	  user if they
	  *want* to start a new game, it just responds affirmatively every 
	  time it
	  gets a newgame request.


2001-09-05 16:28:44  Rev 2371   jdorje

	* game_servers/ggzcards/protocol.h:
	  Wait!  I forgot GGZ checks the protocol version automatically.  
	  That's why
	  I never implemented version checking.  I added a comment to this 
	  effect in
	  protocol.h.


2001-09-05 16:20:00  Rev 2370   jdorje

	* game_servers/ggzcards/protocol.h:
	  Defined the protocol version of the communications protocol.


2001-09-05 16:15:11  Rev 2369   jdorje

	* game_servers/ggzcards/common.h:
	  Some cleanup, reformatting, and restructuring of the header file 
	  data.


2001-09-05 07:01:58  Rev 2368   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/message.h:
	  Added *experimental* support for an ELO rating system.


2001-09-05 06:57:10  Rev 2367   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Slight cleanup to send_gameover() function.


2001-09-05 06:55:34  Rev 2366   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Fixed bug: spades player messages were not cleared before they 
	  were set.


2001-09-05 06:47:26  Rev 2364   jdorje

	* game_servers/libggzmod/ggz_stats.c game_servers/libggzmod/Makefile.
	  am game_servers/libggzmod/ggz_stats.h:
	  Added some *example* code for handling player ratings.


2001-09-05 05:14:15  Rev 2363   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Fixed typo in set_player_message function call.


2001-09-05 05:08:46  Rev 2362   jdorje

	* game_servers/libggzmod/ggz.c:
	  #included sys/time.h which may be necessary on some systems.


2001-09-05 04:56:14  Rev 2361   jdorje

	* game_servers/ggzcards/message.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/message.h:
	  Fixed up the messaging code.
	  Changes include:
	    - Removed the init_messages() function.  It was empty anyway.
	    - Made get_global_message return a const char*.
	    - Fixed add_player_score_message to add rather than put the 
	  message.
	    - #included necessary types.h in message.h.
	    - Add parameter names to function prototypes in message.h.
	    - Added a whole lot of documentation to message.h.


2001-09-05 02:47:42  Rev 2360   jdorje

	* game_servers/libggzmod/ggz.c:
	  Implemented ggzd_io_is_pending().


2001-09-04 20:22:55  Rev 2357   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Removed ggzd_fd_max from the ggzdmod API.  (It is still used 
	  internally.)
	  There is no good reason why game servers should want to use this 
	  function.


2001-09-04 19:30:07  Rev 2356   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Removed GGZ_EVENT_TICK, since (without a non-blocking mode for
	  ggzd_main_loop) it is completely useless.


2001-09-04 03:20:07  Rev 2352   rgade

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - Updated GGZCards .dsc files to use new ArgList config option


2001-09-04 03:19:36  Rev 2351   rgade

	* ggzd/table.c ggzd/parse_opt.c ggzd/datatypes.h:
	  - Added args entries to GameInfo struct
	  - Parse the (optional) ArgList entry in game config files
	  - Use the new args entry in table launch
	  - Eliminate table_split_args()


2001-09-04 02:20:47  Rev 2350   rgade

	* ggzd/parse_opt.c:
	  - Fixes memory leaks from not free()ing strval properly
	  - Bug fix if GameType not specified


2001-09-04 02:08:26  Rev 2349   rgade

	* game_servers/ggzcards/config/ggzcards-bridge.room 
	  game_servers/krosswater/krosswater.room game_servers/chess/chess.
	  room game_servers/combat/combat.room 
	  game_servers/ggzcards/config/ggzcards.room 
	  game_servers/lapocha/lapocha.room game_servers/dots/dots.room 
	  game_servers/ggzcards/config/ggzcards-lapocha.room 
	  game_servers/ggzcards/config/ggzcards-spades.room 
	  game_servers/chinese-checkers/ccheckers.room 
	  game_servers/tictactoe/tictactoe.room game_servers/reversi/reversi.
	  room game_servers/spades/spades.room game_servers/escape/escape.
	  room game_servers/hastings/hastings.room 
	  game_servers/ggzcards/config/ggzcards-hearts.room 
	  game_servers/ggzcards/config/ggzcards-suaro.room:
	  - Updated game server room files to new configuration file format


2001-09-04 02:07:51  Rev 2348   rgade

	* ggzd/entry.room ggzd/parse_opt.c:
	  parse_opt.c
	  - Room files are now parsed with conf_* functions
	  - Removed the old file parsing routine
	  entry.room
	  - Converted to new config file format


2001-09-03 19:25:40  Rev 2347   jdorje

	* man/ggz_server_h.3:
	  Doxygen-generated documentation updated.


2001-09-03 10:43:41  Rev 2346   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/reversi/main.c 
	  game_servers/tictactoe/main.c game_servers/escape/main.c 
	  game_servers/hastings/main.c game_servers/libggzmod/ggz.c 
	  game_servers/chinese-checkers/main.c game_servers/ggzcards/main.c 
	  game_servers/chess/main.c game_servers/combat/main.c 
	  game_servers/lapocha/main.c game_servers/dots/main.c:
	  Changed the core interface functions to follow Brent's proposed
	  specification (see
	  http://www.geocrawler.com/archives/3/1405/2001/8/0/6504430/).
	  Namely:
	    - ggzd_set_blocking() is removed.
	    - ggzd_io_is_pending() is inserted.  This checks to see if there's
	      ggzdmod data waiting to be read and returns.  Real-time games 
	  should
	      use this in non-blocking mode.  (Not implemented yet.)
	    - ggzd_read_data() is renamed to ggzd_io_read_all().
	    - ggzd_main() is renamed to ggzd_main_loop().


2001-09-03 09:38:27  Rev 2345   dr_maux

	* game_servers/libggzmod/ggz_server.h:
	  - fix typo
	  - enable c++ linking


2001-09-03 09:35:30  Rev 2344   jdorje

	* game_servers/ggzcards/games/euchre.h 
	  game_servers/ggzcards/games/euchre.c:
	  Cleaned up Euchre code with some extra comments and an enumeration.


2001-09-02 08:49:07  Rev 2341   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/spades.h:
	  Implemented double (blind) nil for spades.
	  Note: the AI will probably not be able to handle it!


2001-09-02 07:50:46  Rev 2340   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/spades.h:
	  Implemented no-nil-bids option for spades.


2001-08-31 21:58:33  Rev 2331   jdorje

	* game_servers/libggzmod/ggz_server.h ggzd/ggzdmod.c 
	  game_servers/libggzmod/ggz.c game_servers/libggzmod/ggz_protocols.h:
	  Implemented seat change request interface.
	  The game server calls ggzd_set_seat_status(seat, status) to 
	  request that
	  the seat type (assign) be changed.  ggzdmod then queries the 
	  server to see
	  if this is OK, and makes the change if so.  The server should then 
	  handle
	  the rest of the update.  The return value of the function indicates
	  success or failure.
	  Right now GGZD will always respond negatively to the request since 
	  it
	  can't yet make the change.
	  This should be an "extended" function that is not needed for normal
	  operation.  Perhaps it (and others like it) should be in a separate
	  file...


2001-08-31 03:54:57  Rev 2330   jdorje

	* ggzd/table.c ggzd/ggzdmod.c ggzd/table.h ggzd/ggzdmod.h 
	  ggzd/transit.c:
	  Did a lot of the work to move ggzdmod-ggzd to the desired new 
	  format.
	    - A ggzdmod object is created for each table, and passed around 
	  instead
	      of the file descriptor.
	    - The ggzdmod object is passed to the ggzd handler functions in 
	  the
	      callbacks.
	    - Many of the associated new functions have been created.
	    - Handlers are *not* registered yet, they're still extern 
	  definitions.
	    - Handlers still get all data from parameters.
	    - GGZdmod functions still get all data from parameters; the small
	      accessor functions aren't in use yet.
	  Again, everything looks ok to me and seems to work, but I'm not 
	  sure of
	  its correctness.


2001-08-31 03:06:17  Rev 2329   jdorje

	* ggzd/net.c ggzd/seats.c ggzd/ggzd.h:
	  Removed duplicate entry for the ggzd_assign_t enumeration.  
	  Although the
	  enumeration was declared in ggzdmod.h the values were still 
	  #defined in
	  ggzd.h.


2001-08-30 08:16:39  Rev 2328   jdorje

	* game_servers/krosswater/zoneserver/ZoneGGZModGGZ.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZModGGZ.h:
	  This change *should* allow the ggzdmod aspect of Krosswater to 
	  work.  It's
	  just a quick hack; in the long term Krosswater should use ggzdmod 
	  (or a
	  c++ wrapper, perhaps).
	  Note that I haven't tested this code since the Krosswater client 
	  won't
	  work yet either.


2001-08-30 00:58:20  Rev 2327   jdorje

	* game_servers/lapocha/Makefile.am game_servers/dots/Makefile.am 
	  game_servers/reversi/Makefile.am game_servers/tictactoe/Makefile.
	  am game_servers/escape/Makefile.am game_servers/hastings/Makefile.
	  am game_servers/chinese-checkers/Makefile.am 
	  game_servers/ggzcards/Makefile.am game_servers/chess/Makefile.am 
	  game_servers/combat/Makefile.am:
	  Replaced relative patchs in dependency listings with absolute paths
	  (from $(top_builddir)).  Recommended by Brent.


2001-08-29 17:47:26  Rev 2326   jdorje

	* ggzd/table.c ggzd/ggzdmod.c ggzd/ggzdmod.h:
	  The loglevel must be passed in to the table_log function.


2001-08-29 17:46:27  Rev 2325   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/ai.c:
	  If the AI module doesn't set the bot player name, we take it from
	  libggzdmod.  If that doesn't work we just use "Bot".


2001-08-29 07:59:31  Rev 2324   jdorje

	* game_servers/ggzcards/config/Makefile.am:
	  Made explicit list of dsc and room files instead of using *.dsc 
	  and *.room.
	  Brent said the wildcards wouldn't work, but I wanted to wait and 
	  see if
	  they'd break.  make distcheck is what did it.


2001-08-29 07:12:17  Rev 2323   jdorje

	* ggzd/ggzdmod.c:
	  Added in ggzdmod_handle_log() function, which somehow got lost in 
	  the
	  patch during the last commit (!).  Sorry.


2001-08-29 07:03:38  Rev 2322   jdorje

	* ggzd/table.c ggzd/ggzdmod.c ggzd/ggzdmod.h:
	  Pulled communications code out of table_log().  Created new function
	  ggzdmod_handle_log() to deal with it.


2001-08-29 07:01:30  Rev 2321   jdorje

	* ggzd/ggzdmod.c:
	  Removed statistic information from the REQ_GAME_OVER packet.  This 
	  data
	  should instead go into its own packet, since it may be reported 
	  many times
	  for each table.


2001-08-29 06:57:37  Rev 2320   jdorje

	* game_servers/libggzmod/ggz.c game_servers/libggzmod/ggz_protocols.h:
	  Added new protocol entries for possible future packet types.


2001-08-29 06:11:26  Rev 2319   bmh

	* ggzd/net.c ggzd/net.h ggzd/room.c:
	  - Changed net_send_room() to accept a room object


2001-08-29 06:06:33  Rev 2318   jdorje

	* game_servers/libggzmod/ggz.c:
	  Bot players now get "real" names instead of just being called 
	  "bot" by
	  libggzdmod.  Of course, the game server is free to change this 
	  name but
	  I figured "bot" was not a good default.
	  Heh heh.


2001-08-29 05:39:53  Rev 2317   bmh

	* ggzd/net.c ggzd/table.c ggzd/login.c ggzd/net.h ggzd/room.c 
	  ggzd/chat.c ggzd/players.c ggzd/event.c ggzd/players.h 
	  ggzd/transit.c:
	  - New GGZNetIO object to handle network IO
	  - GGZPlayer now has net field rather than fd
	  - Make all calls to net_XXX take a GGZNetIO obkect rather than a
	    GGZPlayer


2001-08-29 04:46:45  Rev 2316   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed problem with setting seat names.
	  The seat name should point to the player name for that seat 
	  (player==GGZ
	  seat).  When seats were assigned, this was not initialized.


2001-08-29 04:30:57  Rev 2315   bmh

	* ggzd/net.c ggzd/net.h ggzd/players.c ggzd/players.h:
	  - Moved network access from players.c into net.c


2001-08-29 04:00:38  Rev 2314   jdorje

	* ggzd/Makefile.am:
	  I accidentally left the dependency on libggzdmod in the automake
	  file.  Fixed.


2001-08-29 03:55:39  Rev 2313   jdorje

	* ggzd/table.c ggzd/Makefile.am ggzd/protocols.h ggzd/ggzdmod.c 
	  ggzd/ggzdmod.h ggzd/transit.c:
	  Split off ggzdmod code into separate ggzdmod files.
	    - ggzdmod_dispatch() handles input from the file descriptor.  This
	      basically replaces the table_handle() function.
	    - ggzdmod_send_launch, ggzdmod_req_gamejoin, and 
	  ggzdmod_req_gameleave
	      send the appropriate packets across the socket.  (These names 
	  are
	      rather poor; they should be changed in the future.)  I made some
	      ugly code to set up the parameters for ggzdmod_send_launch.
	    - Response packets (right now just RSP_GAME_OVER) are 
	  automatically
	      sent by the ggzdmod code (after the handler function is called).
	    - table_game_launch, table_game_join, table_game_leave, 
	  table_game_over,
	      and table_log, and dbg_msg are used as pseudo-callbacks by the 
	  ggzdmod
	      code.  This segregation should make it easy to split ggzdmod 
	  off into
	      a separate library, if desired.  I had to change the 
	  parameters of the
	      functions slightly (except dbg_msg).
	  Although this code looks good to me and GGZD runs well enough, I'm 
	  not
	  completely confident in its correctness.  Right now the behavior 
	  should
	  be completely unchanged, although with the ggzdmod code separated 
	  it will
	  be much easier to change the protocol.
	  Note that although the ggzd ggzdmod code is not a part of 
	  libggzdmod, it
	  is currently distributed in the same package (ggz-server), so 
	  compatibility
	  shouldn't be a problem so long as game servers use libggzdmod.


2001-08-29 03:51:30  Rev 2312   bmh

	* ggzd/table.c:
	  - Set index in table in all cases before sending to
	    net_send_table_update()


2001-08-29 02:07:32  Rev 2311   bmh

	* ggzd/net.c ggzd/table.c ggzd/net.h ggzd/players.c:
	  - New functions net_send_table() and net_send_table_update()
	  - Removed network IO from table.c and into net.c
	  - Use net_send_table() when listing tables as well


2001-08-29 01:17:32  Rev 2310   bmh

	* ggzd/players.c ggzd/control.c:
	  - Fixed some compiler warnings by explictly casting sockaddr_in* to
	    sockaddr*


2001-08-29 01:14:30  Rev 2309   bmh

	* ggzd/net.c ggzd/net.h ggzd/room.c ggzd/players.c ggzd/room.h:
	  - New functions: net_send_room_list_error(),
	    net_send_room_list_count(), net_send_room(), net_send_room_join(),
	    net_send_player_update()
	  - Move network access out of room.c into net.c


2001-08-29 00:29:20  Rev 2308   bmh

	* ggzd/net.c ggzd/net.h ggzd/motd.c ggzd/transit.c:
	  - Move network code out of transit.c into net.c
	  - New functions net_send_table_[launch, join, leave]


2001-08-28 23:31:51  Rev 2307   bmh

	* ggzd/net.c ggzd/login.c ggzd/motd.h ggzd/players.c ggzd/motd.c:
	  - New function motd_is_defined() returns motd_info.use_motd
	  - New function motd_get_num_lines() returns the number of lines in 
	  the motd
	  - New function motd_get_line() returns a particular motd line
	  - Send motd from net.c, not motd.c
	  - New function _net_send_result() for sending single result byte 
	  to client


2001-08-28 21:08:15  Rev 2306   jdorje

	* game_servers/chess/protocols.h:
	  Removed unused file protocols.h (it was left around by accident).


2001-08-28 08:24:35  Rev 2305   jdorje

	* game_servers/krosswater/krosswater.dsc:
	  Krosswater protocol engine should be version 0.0.4.


2001-08-28 06:03:31  Rev 2302   jdorje

	* game_servers/ggzcards/message.c:
	  Slight fix to dosend_global_message() to prevent recurring error 
	  message.


2001-08-28 05:48:31  Rev 2301   jdorje

	* game_servers/chinese-checkers/Makefile.am:
	  Fixed typo in dependency listing.


2001-08-28 05:35:33  Rev 2300   jdorje

	* game_servers/chinese-checkers/ggz.h 
	  game_servers/chinese-checkers/game.h 
	  game_servers/chinese-checkers/main.c 
	  game_servers/chinese-checkers/ggz.c 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/chinese-checkers/ai.c 
	  game_servers/chinese-checkers/game.c 
	  game_servers/chinese-checkers/protocols.h:
	  Updated chinese checkers to use libggzdmod.


2001-08-28 05:13:32  Rev 2299   jdorje

	* game_servers/combat/ggz.h game_servers/combat/game.h 
	  game_servers/combat/main.c game_servers/combat/ggz.c 
	  game_servers/combat/Makefile.am game_servers/combat/game.c 
	  game_servers/combat/protocols.h:
	  Updated combat to use libggzdmod.


2001-08-28 04:45:09  Rev 2298   jdorje

	* configure.in:
	  Echo a slightly more appropriate line on how to run the test ggzd. 
	  (It's
	  the same line as "make" gives.)


2001-08-28 04:38:37  Rev 2297   jdorje

	* game_servers/dots/ggz.c game_servers/dots/Makefile.am 
	  game_servers/dots/ai.c game_servers/dots/game.c 
	  game_servers/dots/protocols.h game_servers/dots/ggz.h 
	  game_servers/dots/game.h game_servers/dots/main.c:
	  Updated dots to use libggzdmod.


2001-08-28 04:33:14  Rev 2296   rgade

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc ggzd/parse_opt.c 
	  game_servers/lapocha/lapocha.dsc game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/reversi/reversi.
	  dsc game_servers/spades/spades.dsc game_servers/escape/escape.dsc 
	  game_servers/hastings/hastings.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - Updated parse_opt.c to use new config style for game description 
	  files
	  - Updated all game description files to new format


2001-08-28 04:30:16  Rev 2295   jdorje

	* game_servers/tictactoe/Makefile.am:
	  Fixed typo in dependency line.


2001-08-28 04:12:57  Rev 2294   jdorje

	* game_servers/libggzmod/ggz.c:
	  Substantially cleaned up parameter checking of several functions.


2001-08-28 03:58:24  Rev 2293   jdorje

	* man/ggz_server_h.3:
	  Update to the manual for ggz_server.h.


2001-08-28 03:49:43  Rev 2292   jdorje

	* game_servers/ggzcards/games/suaro.c game_servers/ggzcards/common.c:
	  Changed code to take advantage of new ggzd_set_player_name 
	  function.  This
	  fixes the buglets I've had with AI players showing up as "bot" 
	  without the
	  need for a lot of ugly code to lookup the correct name.


2001-08-28 03:48:00  Rev 2291   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  There are three new added functions and associated cleanups.  Each 
	  of
	  these functions is "experimental"; I'm not sure that they're 
	  necessary
	  or even beneficial but I think they cover a hole in the interface.
	    - int ggzd_set_player_name(seat, name).  This function allows 
	  the game
	      server to set a player's name.  Of course, they can't change the
	      name of a real GGZ player (since that name comes from GGZ), 
	  but they
	      can set the name of a bot.  Later on this information may be 
	  passed
	      back to ggzd and queried by the table; for now they're 
	  convenient for
	      the game.
	    - void ggzd_gameover(int status).  Since gameover is no longer
	      indicated by the return value of the handler functions, there 
	  must
	      be some way for the game servers to tell ggzdmod that the game 
	  is
	      over.  Or does there?  Of course, ggzd will end the game 
	  automatically
	      whenever there are no longer any players in it (well, that's 
	  up to
	      ggzd really but that's what's currently done), but shouldn't 
	  the game
	      server have some way of shutting down the game itself?  The 
	  "status"
	      variable is an exit/return status, so that on un unrecoverable 
	  error
	      ggzd_gameover(-1) can be called.  Note that once the gameover 
	  is set
	      there is no way to go back - is that necessary?
	    - int ggzd_get_gameover(void).  This simply returns 1 if 
	  gameover has
	      been set.  If the game server is handling the ggzdmod loop 
	  they'll
	      need to know this information (although it could of course be 
	  handled
	      separately); really it's just a convenience.
	  The associated cleanups are mostly to the ggzdmod main/loop 
	  functions;
	  they no longer use the return value to indicate status but set the
	  gameover instead.
	  
	  Some ideas for extra ggzdmod functionality:
	    - The ability to boot players from the game.  Many game servers 
	  allow
	      players to be booted, but only ggzdmod can do this.  Thus, it 
	  will be
	      necessary for ggzdmod to implement this at some point.
	    - The ability to have spectator players.  This can be simulated 
	  right
	      now by the game server - they just set a higher-than-normal 
	  value
	      for the # of players in the game and then the extras become
	      spectators.  However, this is a cop-out solution; the "correct"
	      solution I think is to have spectators as a specific type of 
	  player.
	      The game module file specifies the # of spectators a game can 
	  have
	      (or, better, the game server can do this through ggzdmod), 
	  then ggzd
	      allows players to connect as spectators (GGZ_SEAT_SPECTATOR).  
	  The
	      rest of the handling is left up to the game server.
	    - Of course, spectators will want to sit down in open seats of the
	      table.  They could of course do this by leaving the table and 
	  joining
	      again as a real player - but again this is a poor solution.  The
	      correct solution here is to allow the game server to let a 
	  spectator
	      player change status and become a real player (again, through 
	  a call
	      to ggzdmod).  On a similar vein, it should be possible for a 
	  game
	      server to put a bot into an open seat (or clear a bot out to 
	  make a
	      seat open).  All of this could be simulated by the game server,
	  but
	      unless GGZ knows about it there's no way for the information 
	  to show
	      up to the client and it'll all look very ugly.
	  All of this will require additions to the communications protocol, 
	  which
	  argues strongly in favor of moving the other end of the protocol 
	  into
	  the ggzdmod library.  Also, with all of these additions the 
	  library will
	  become more complicated; this problem can be alleviated by grouping
	  functions into different header files.


2001-08-28 03:04:36  Rev 2290   bmh

	* ggzd/net.c ggzd/login.c ggzd/net.h ggzd/login.h ggzd/chat.c 
	  ggzd/players.c ggzd/players.h:
	  - Removed networking code from chat.c
	  - Don't pass the player's fd around willy-nilly.  Just pass the
	    player* and get it from there


2001-08-28 01:55:12  Rev 2289   bmh

	* ggzd/login.c:
	  - Remove unnecessary #includes


2001-08-28 01:54:12  Rev 2288   bmh

	* ggzd/ggzd.test.in:
	  - motd field should be MOTD


2001-08-28 01:53:06  Rev 2287   bmh

	* ggzd/net.c ggzd/Makefile.am ggzd/login.c ggzd/net.h ggzd/login.h 
	  ggzd/players.c ggzd/ggzdb.h ggzd/players.h:
	  - New function net_read_data() to handle parsing opcode from the
	    network and dispatching to the correct handler: replaces
	    player_handle()
	  - Moved all reading and writing out of login.c and into net.c
	    where it belongs (yay!)
	  - Commonized login cases into single function to avoid much repeated
	    code
	  - Split out functionality into login_check_password() and 
	  login_add_user()


2001-08-27 20:03:43  Rev 2286   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed another bug introduced with recent changes: upon player join 
	  the
	  seat's name was set.  However, this can't be done before the game is
	  initialized, since the seats haven't been allocated yet.  The result
	  was a segfault.


2001-08-27 19:53:11  Rev 2285   jdorje

	* game_servers/lapocha/game.c game_servers/libggzmod/ggz_server.h 
	  game_servers/ggzcards/common.h game_servers/chess/game.h 
	  game_servers/lapocha/game.h game_servers/reversi/game.c 
	  game_servers/escape/game.c game_servers/hastings/game.c 
	  game_servers/ggzcards/common.c game_servers/reversi/game.h 
	  game_servers/chess/game.c game_servers/escape/game.h 
	  game_servers/hastings/game.h:
	  Updated all game servers to match the new ggzdmod interface.
	  I think this will defintely work out better.


2001-08-27 19:50:52  Rev 2284   jdorje

	* game_servers/tictactoe/main.c game_servers/tictactoe/ggz.c 
	  game_servers/tictactoe/Makefile.am game_servers/tictactoe/game.c 
	  game_servers/tictactoe/protocols.h game_servers/tictactoe/ggz.h 
	  game_servers/tictactoe/game.h:
	  Updated tictactoe to use ggzdmod.


2001-08-27 19:32:01  Rev 2283   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Upon further consideration, it will be easier for game developers if
	  the handler returns a void value.
	  Gameover or error conditions can be reported using different 
	  functions,
	  to be decided later.  This makes things much easier for most games 
	  since
	  worrying about propogating the return values is really tricky and
	  unnecessary (since we can do it this way instead).
	  Existing games will no longer compile cleanly.


2001-08-27 19:02:17  Rev 2282   jdorje

	* game_servers/reversi/game.c:
	  Changed player handler to not always return a gameover value.
	  Now it needs to be determined if it should ever return a gameover 
	  value.
	  For now it always return 0 except on error.  In fact, even the error
	  handling may be wrong - it returns -1 on any kind of error; when 
	  in fact
	  most errors probably aren't fatal.  Maybe it should just return 0.


2001-08-27 18:59:15  Rev 2281   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Changed event handling slightly: an event handler should return 0
	  normally, -1 on error and 1 one gameover.  Because most games 
	  aren't set
	  up like this right now, things may not work quite right - especially
	  end-of-game.
	  Question: should the event handlers just return a void?  I'm 
	  really not
	  sure that the integer return value gains much.


2001-08-27 18:29:25  Rev 2280   jdorje

	* game_servers/reversi/main.c game_servers/reversi/ggz.c 
	  game_servers/reversi/Makefile.am game_servers/reversi/game.c 
	  game_servers/reversi/protocols.h game_servers/reversi/ggz.h 
	  game_servers/reversi/game.h:
	  Updated reversi to use ggzdmod.


2001-08-27 18:01:30  Rev 2279   jdorje

	* game_servers/chess/game.h game_servers/chess/main.c 
	  game_servers/chess/game.c:
	  Added function ggz_update to translate a GGZ event into a chess 
	  event.
	  It looks like I didn't mangle the code - it was always set up so 
	  that the
	  GGZ event was passed into game_update() and handled like a chess 
	  event.
	  It just happened that the events were identically numbered.


2001-08-27 17:52:23  Rev 2278   jdorje

	* game_servers/ggzcards/main.c game_servers/ggzcards/common.c:
	  Fixed a bug introduced when I switched ggzdmod to the event-driven
	  interface.
	  init_ggzcards() was never called, so the game type was never set
	  properly.  This mean it always got left at 0 (suaro), so that no 
	  other
	  games would work.


2001-08-27 10:37:12  Rev 2277   jdorje

	* game_servers/ggzcards/Makefile.am:
	  Added new rule to avoid warning on "make test".
	  This could surely be solved by editing the rule for test-recursive,
	  but
	  I don't feel up to that right now...


2001-08-27 10:29:46  Rev 2276   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c game_servers/Makefile.am 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/games/bridge.
	  c game_servers/ggzcards/types.h:
	  Updated GGZCards for new libggzdmod:
	    - New functions assign_seat() and empty_seat() are far better 
	  than the
	      old way of doing things.
	    - Accessor functions get_seat_name and get_seat_status are just
	      because I'm afraid of bugs elsewhere in the code.  They may be
	      temporary.
	    - There's a cleaner way of assigning seat names.
	    - There are some known bugs with seat names: sometimes ggzdmod is
	      queried about the seat name instead of using the local name.  
	  This is
	      a problem when the player is a bot (since they get named by 
	  the game).
	      Should ggzdmod allow renaming of bots?  Should ggzdmod send 
	  out NULL
	      names for bots?  Probably one of the two...


2001-08-27 07:52:17  Rev 2275   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c 
	  man/ggz_server_h.3:
	  Added a new function, ggzd_get_player_udp_socket() to the ggzdmod
	  interface.
	  Note:
	    - It is not implemented; it always returns -1.
	    - The name is too long.
	    - I also updated the documentation.


2001-08-27 07:33:22  Rev 2274   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c 
	  man/ggz_server_h.3:
	  Added significantly more documentation, and updated the man page for
	  ggz_server.h.
	  The API should be ready for serious discussion now.


2001-08-27 06:48:01  Rev 2273   jdorje

	* game_servers/spades/engine_func.c game_servers/ggzcards/options.c 
	  game_servers/libggzmod/ggz_server.h 
	  game_servers/ggzcards/games/sueca.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/bid.c game_servers/libggzmod/ggz.c 
	  game_servers/ggzcards/games/lapocha.c game_servers/spades/ai.c 
	  game_servers/escape/game.c game_servers/ggzcards/games/euchre.c 
	  game_servers/chess/game.c game_servers/ggzcards/games/spades.c 
	  game_servers/lapocha/game.c game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/main.c 
	  game_servers/Makefile.am game_servers/ggzcards/games/suaro.c 
	  game_servers/hastings/game.c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/common.c:
	  I've merged the differences from the ggzdmod-dev branch back into 
	  the
	  main tree.  I guess it wasn't so hard to make the change after all.
	  GGZCards is still unusable with the new encapsulated ggzdmod - in 
	  fact it
	  won't compile at all.  I've disabled it for now.  If only I hadn't 
	  been
	  so clever!
	  These games should now work: Chess, Hastings, Spades, La Pocha, and
	  Escape.  I haven't tested Escape, of course - the others I have 
	  done very
	  limited testing on.


2001-08-26 22:09:09  Rev 2267   jdorje

	* ggzd/table.h:
	  Removed unnecessary #inclusion of ggzd.h from table.h.
	  This is significant because table.[ch] is a substantial part of 
	  the ggz
	  end of the ggzdmod communication.  It may be easy to copy most of 
	  the
	  code directly over into libggzdmod so that it handles both sides 
	  of the
	  communication.


2001-08-26 21:51:03  Rev 2266   jdorje

	* ggzd/parse_opt.c ggzd/control.c ggzd/err_func.c ggzd/motd.c:
	  Fixed a few compiler warnings:
	    - Used socklen_t instead of int as a type.
	    - #included <stdlib.h> for the exit() function.
	    - Commented out an unused variable (associated with an #if 0... 
	  block).
	    - Made a parameter of two callback functions (parse_gselect,
	      parse_rselect) const so it would match the expected type.
	  There are a couple more warnings where it appears the wrong type is
	  actually being passed to a function.  However, it seems to work so.
	  ..


2001-08-26 21:33:32  Rev 2265   jdorje

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZModGGZ.h:
	  Removed two compiler warnings:
	    - Added a newline at the end of a file.
	    - Returned 0 for a tiny function supposed to return an int.


2001-08-26 21:31:23  Rev 2264   jdorje

	* game_servers/tictactoe/game.c game_servers/combat/game.c:
	  #included <string.h> to prevent compiler warning.


2001-08-26 21:30:10  Rev 2263   jdorje

	* game_servers/dots/ai.c:
	  Put unused function in #if 0 block to prevent compiler warning.


2001-08-26 21:25:21  Rev 2261   jdorje

	* game_servers/spades/err_func.c game_servers/spades/ai.c 
	  game_servers/spades/card.c:
	  Fixed a number of compiler warnings:
	    - #including header files for functions that are used.
	    - Commenting out unused variables (usually associated with #if 0 
	  blocks).
	    - Returning values for the default case in several functions.
	    - Initializing one variable (it looked safe to do so).


2001-08-26 20:50:00  Rev 2259   jdorje

	* game_servers/libggzmod/ggz_server.h:
	  Created stub function prototype for setting blocking.
	  Now we need to decide if we want to allow non-blocking.


2001-08-26 20:39:01  Rev 2258   jdorje

	* ggzd/event.c:
	  Slight cleanup to avoid "extra tokens at end of endif directive" 
	  warning.


2001-08-26 07:09:04  Rev 2256   jdorje

	* man/Makefile.am man/ggz_server_h.3:
	  Placed manual created by doxygen in man/ directory.
	  Again, it will have to be manually updated (after being 
	  automatically
	  generated by doxygen).


2001-08-25 23:53:52  Rev 2255   jdorje

	* game_servers/libggzmod/ggz_server.h:
	  Added many more comments.


2001-08-25 23:53:19  Rev 2253   jdorje

	* game_servers/libggzmod/ggz.c:
	  Add "default" case to prevent compiler warning.


2001-08-25 15:21:40  Rev 2244   jdorje

	* game_servers/hastings/main.c game_servers/hastings/ggz.c 
	  game_servers/hastings/Makefile.am game_servers/hastings/game.c 
	  game_servers/hastings/protocols.h game_servers/hastings/ggz.h 
	  game_servers/hastings/game.h:
	  Switched hastings over to use libggzdmod.


2001-08-25 14:58:07  Rev 2242   jdorje

	* game_servers/escape/main.c game_servers/escape/game.c 
	  game_servers/escape/game.h:
	  Fixed a problem I introduced into escape, mixing up game events 
	  and GGZ
	  events.


2001-08-25 14:52:34  Rev 2229   jdorje

	* game_servers/ggzcards/options.c game_servers/libggzmod/ggz_server.
	  h game_servers/ggzcards/games.c game_servers/ggzcards/games/sueca.
	  c game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/bid.c game_servers/libggzmod/ggz.c 
	  game_servers/ggzcards/games/lapocha.c game_servers/escape/game.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/ai/random.c game_servers/ggzcards/game.c 
	  game_servers/escape/game.h game_servers/chess/game.c 
	  game_servers/ggzcards/games/spades.c game_servers/lapocha/game.c 
	  game_servers/chess/game.h game_servers/escape/main.c 
	  game_servers/lapocha/game.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/main.c game_servers/ggzcards/message.c 
	  game_servers/chess/main.c game_servers/ggzcards/games/suaro.c 
	  game_servers/lapocha/main.c game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/common.c:
	  Changed ggzdmod names to use ggzd_*** naming convention.


2001-08-25 14:09:43  Rev 2228   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Added functions ggzdmod_dispatch and ggzdmod_read_data.
	  ggzdmod_read_data is controversial; it may not be a part of the 
	  final API.


2001-08-25 14:01:56  Rev 2227   jdorje

	* game_servers/chess/main.c:
	  Removed name parameter from ggz_main call.
	  It was nice of gcc to let Chess compile with the parameter there...


2001-08-25 13:56:44  Rev 2226   jdorje

	* game_servers/libggzmod/Makefile.am:
	  Removed unneeded ggz_protocols.h from installation as a header file.
	  From now on, all games must use the event-based interface.


2001-08-25 13:48:17  Rev 2225   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Removed old-style "manual" interface to ggzdmod.


2001-08-25 13:41:48  Rev 2224   jdorje

	* game_servers/escape/game.c:
	  Removed unnecessary #inclusion of ggz_protocols.h.


2001-08-25 03:34:14  Rev 2223   jdorje

	* man/Makefile.am game_servers/ggzcards/ai/Makefile.am 
	  game_servers/libggzmod/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am:
	  Added 'test" entries to Makefile.am files.


2001-08-25 03:30:43  Rev 2222   jdorje

	* game_servers/ggzcards/main.c:
	  Removed accidentally-left-in printf's.
	  Oops!


2001-08-24 22:31:26  Rev 2221   jdorje

	* game_servers/escape/game.c:
	  Fixed compiler warning problems: commenting out unused variables,
	  returning values (with an error message) in supposedly impossible 
	  cases.


2001-08-24 06:15:14  Rev 2218   jdorje

	* game_servers/escape/main.c game_servers/escape/game.c 
	  game_servers/escape/game.h:
	  Changed escape to use the event-driven ggzdmod interface instead 
	  of the
	  manual one.


2001-08-24 05:16:27  Rev 2217   jdorje

	* game_servers/libggzmod/ggz.c:
	  Separated ggzdmod_loop() out of ggzdmod_main().
	  ggzdmod_main now looks like
	  	ggzdmod_connect();
	  	while (ggzdmod_loop())
	  		;
	  	ggzdmod_disconnect();
	  ggzdmod_loop will be a useful alternative; games that want more 
	  control
	  over execution (i.e. real-time games) will want to call it instead.
	  However, right now it always blocks waiting for data so it's not 
	  ready
	  for that yet.
	  To get this to work I had to move active_fd_set (the active FD 
	  set) into
	  a static file variable.  It is initialized in ggzdmod_connect; 
	  after this,
	  ggzdmod_loop can be called at any time.  While I was at it, I also 
	  moved
	  the other FD updates into the associated GGZ event functions.


2001-08-24 04:31:57  Rev 2216   jdorje

	* game_servers/libggzmod/ggz.c:
	  Restructured ggzdmod_connect slightly.
	  Upon connecting, ggzdmod_connect sends a debugging message to ggzd.
	  It
	  also uses this to make sure that the socket is open.  This may not 
	  be
	  failsafe.


2001-08-24 04:16:58  Rev 2215   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Changed ggzdmod_debug to return an integer error value.
	  This is not necessary for most purposes, but the value will have 
	  some
	  specific uses.


2001-08-24 02:54:33  Rev 2214   jdorje

	* game_servers/chess/ggz.h game_servers/chess/main.c 
	  game_servers/chess/ggz.c game_servers/chess/Makefile.am 
	  game_servers/chess/game.c:
	  Updated chess to use libggzdmod, removing old GGZ files and changing
	  function calls to match the current ggzdmod specification.


2001-08-23 21:38:59  Rev 2208   jdorje

	* game_servers/Makefile.am:
	  Escape works again now, so I added it back to Makefile.am.
	  Let's keep it compiling from now on!


2001-08-23 21:32:06  Rev 2206   jdorje

	* game_servers/spades/engine_func.c:
	  "Fixed up" NetSpades to use new GGZ connection method.
	  I don't use libggzdmod for this; I just manually set the 
	  connection socket
	  FD to 3.  Obviously, a lot more cleanup could be done.


2001-08-23 21:11:51  Rev 2204   jdorje

	* game_servers/escape/main.c game_servers/escape/game.c:
	  I updates Escape to work with the current libggzdmod.  It still 
	  uses the
	  old "manual" system (although this should be changed), but at 
	  least it
	  will compile now.
	  I didn't realize it needed to be updated since it's no longer 
	  automatically
	  compiled as a part of the game_servers.  However, it _does_ 
	  compile again
	  now so maybe this functionality should be added back.


2001-08-23 20:45:46  Rev 2203   jdorje

	* game_servers/ggzcards/common.h:
	  Removed unnecessary #inclusion of ggz_protocols.h.
	  Any game that uses the event-based system should not need 
	  ggz_protocols.h.
	  Thus I think that both systems can be supported concurrently by 
	  moving the
	  old manual system into another file (ggz_server_manual.h?).  For 
	  those
	  who wanted to use this system they could include this file (along 
	  with
	  ggz_protocols.h) instead.  The important thing is to keep them 
	  apart.


2001-08-23 20:42:32  Rev 2202   jdorje

	* game_servers/lapocha/game.c:
	  Removed unnecessary #inclusion of ggz_protocols.h.


2001-08-23 20:38:58  Rev 2201   jdorje

	* game_servers/lapocha/game.c game_servers/lapocha/game.h 
	  game_servers/lapocha/main.c:
	  Switched La Pocha over to using the event-based GGZ interface.
	  The manual interface can be safely removed...although this would 
	  deny
	  programmers the ability to do some things.


2001-08-23 19:56:45  Rev 2200   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Added in "tick" event.  The tick event is called once each time 
	  through
	  the GGZ loop under the event-driven system.  This allows real-time 
	  games
	  to function.
	  With this tick event, it no longer made sense to have the 
	  GGZ_EVENT_DEFAULT
	  default event.  Most games won't want to register one function for 
	  all
	  events since they will not use the tick event.  This could be 
	  added back
	  in, of course.


2001-08-23 19:45:12  Rev 2199   jdorje

	* game_servers/ggzcards/game.h:
	  Added many more comments to game.h.


2001-08-23 09:55:56  Rev 2198   jdorje

	* game_servers/libggzmod/ggz_server.h:
	  Added a few doxygen-style comments to the header file.


2001-08-23 09:34:23  Rev 2197   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/common.c:
	  Made allocation calls more sane.


2001-08-23 09:24:47  Rev 2196   jdorje

	* game_servers/ggzcards/game.c:
	  Reordered game functions to match function struct.


2001-08-23 09:02:56  Rev 2195   jdorje

	* game_servers/ggzcards/options.h:
	  Added yet more comments to options.h.
	  Now if only all my code was this documented...


2001-08-23 09:02:04  Rev 2194   jdorje

	* game_servers/ggzcards/main.c:
	  Minor cleanup: removed now-unused variables from main().


2001-08-23 08:57:10  Rev 2193   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c:
	  Switched over GGZCards to use Perdig's event-based GGZ interface 
	  (still
	  using GGZDMod).
	  Less code is required.  Things are cleaner.


2001-08-23 08:50:43  Rev 2192   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Handlers return int's so that errors can be handled by GGZ.
	  ggz_main no longer takes a game name.


2001-08-23 08:26:46  Rev 2191   jdorje

	* game_servers/ggzcards/options.h:
	  Added lots of header comments.


2001-08-23 08:06:05  Rev 2190   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/ai.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/options.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/bid.h game_servers/ggzcards/message.h:
	  Removed all utterly unnecessary and counter-productive extern 
	  usages.
	  I think I just kept using them without thinking because La Pocha 
	  did.


2001-08-23 07:59:17  Rev 2189   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/config/Makefile.am 
	  game_servers/ggzcards/config/ggzcards-bridge.room 
	  game_servers/ggzcards/ai.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/games.h 
	  game_servers/ggzcards/config/ggzcards.room 
	  game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.room 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.room 
	  game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/hearts.h 
	  game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/games/suaro.h 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc 
	  game_servers/ggzcards/options.c game_servers/ggzcards/games/sueca.
	  c game_servers/ggzcards/cards.c game_servers/ggzcards/games/bridge.
	  h game_servers/ggzcards/options.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/games/sueca.h game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/games/lapocha.h game_servers/ggzcards/game.c 
	  game_servers/ggzcards/ai/random.c game_servers/ggzcards/types.h 
	  game_servers/ggzcards/games/euchre.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/games/Makefile.am game_servers/ggzcards/main.
	  c game_servers/ggzcards/message.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.room 
	  game_servers/ggzcards/common.c game_servers/ggzcards/ai.c 
	  game_servers/ggzcards/message.h 
	  game_servers/ggzcards/config/ggzcards-suaro.room:
	  Updated all file documentation.  Corrections include:
	    - Added CVS ID tags to everything.
	    - Made all header entries regular.
	    - Added short and long descriptions for lots of files.


2001-08-23 07:13:00  Rev 2188   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Added a "default event" to Perdig's event-based ggzdmod interface.
	  The internals are clumsy, but it should be easy enough from the game
	  programmer's point of view.  Doing
	  	ggzdmod_set_handler(GGZ_EVENT_DEFAULT, &handler_function);
	  will set handler_function() to handle all unhandled ggzdmod events 
	  (all
	  events that don't already have handlers).  For the typical game 
	  with a
	  single update() function (ugly!), this is ideal.
	  Note that the event-based system is in most cases much better than 
	  the
	  old manual system.  The GGZ main loop is moved into libggzdmod, 
	  which is
	  much cleaner from the game programmer's point of view!  I'm going to
	  convert GGZCards over straightaway...
	  The only problem I see is with real-time games.  They probably 
	  need their
	  own main loop so that they can do actions in real time (as opposed 
	  to
	  actions in response to ggzd or client messages).  This could be 
	  allowed by
	  adding another event, GGZ_EVENT_TIME (or something to that effect) 
	  that
	  is called periodically.  Of course, real-time games have lots of 
	  other
	  problems besides this one!


2001-08-23 06:43:28  Rev 2187   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c 
	  game_servers/ggzcards/main.c game_servers/lapocha/main.c:
	  General cleanups of libggzdmod.
	    - Removed ggzdmod_initialize and ggzdmod_done functions.
	      * Primary functions ggzdmod_connect and ggzdmod_disconnect are
	        now used.  (ggzdmod_quit becomes ggzdmod_disconnect.)
	      * ggzdmod_done is moved into ggzdmod_disconnect; all pending 
	  stats
	        should be sent upon disconnect.  They may also be sent if 
	  registered
	        (if the protocol allows).
	      * Other functions were updated to use these new function names.
	    - Cleaned up ggzdmod_disconnect.
	      * Wait for a RSP_GAME_OVER before leaving the function.
	      * Some extra comments added.
	      * It doesn't all seem to work just yet...maybe it never did.
	    - Cleaned up ggzdmod_set_handler.
	      * Check event_id thoroughly.
	  Overall, things are a little bit cleaner now.


2001-08-23 05:37:18  Rev 2185   jdorje

	* game_servers/ggzcards/options.c game_servers/libggzmod/ggz_server.
	  h game_servers/ggzcards/cards.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/bid.c game_servers/libggzmod/ggz.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.
	  c game_servers/lapocha/game.c game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/main.c game_servers/ggzcards/message.c 
	  game_servers/ggzcards/games/suaro.c game_servers/lapocha/main.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/common.c:
	  Changed libggzdmod to use function names of the form ggzdmod_***.  
	  I also
	  updated all ggzdmod-using game servers to use these new functions.
	  ggz[d]mod, unlike ggzcore, is a library that will be largely used by
	  people unfamiliar with GGZ.  For this reason, I'm not sure that 
	  using
	  this naming convention is correct.  I went ahead and made the 
	  change; it
	  would be easy enough to undo.


2001-08-20 19:08:41  Rev 2184   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  I think the comment I put in ggz_server.h says it best:
	  /*
	   * FIXME: libggzdmod currently allows for *either* interface:
	   *  - In the old-style manual method ("teg's way"), the main GGZ
	   *    loop is in the game code.  This code calls ggzdmod functions
	   *    to handle GGZ events (as well as doing its own handling).
	   *  - In the new-style event-driven method ("chess's way"), the main
	   *    GGZ loop is in ggzdmod.  Functions are registered by the game
	   *    server to handle specific GGZ events.  All GGZ handling is 
	  done
	   *    automatically by the GGZ loop.
	   *
	   * Right now, these methods are entirely incompatible - using the
	   * functions together will lead to Very Bad Things.  They shouldn't
	   * even be in the same library - I've only put them together in this
	   * file so that all code is out in the open and a sensible way for
	   * them to work together can be thought of.
	   *
	   * It should be safe to convert your games to use libggzdmod through
	   * either of these interfaces; although one or both of them will
	   * probably be changed slightly it shouldn't be anything too 
	  drastic.
	   */
	  I've taken "chess's way" and put it into ggzdmod right next to the
	  original interface.  This situation cannot last, but I think having
	  both interfaces side-by-side will help us to come up with a good
	  compromise interface.  It also allows games that use "chess's way" 
	  to
	  go ahead and switch over to ggzdmod.


2001-08-20 07:54:01  Rev 2182   jdorje

	* game_servers/lapocha/Makefile.am game_servers/escape/Makefile.am 
	  game_servers/ggzcards/Makefile.am:
	  Removed ../libggzmod from list of SUBDIRS for these games.  This 
	  means
	  the libggzdmod.a dependency won't be handled properly, but at least
	  "make dist" and "make distclean" will work.
	  A better solution is needed, obviously.


2001-08-20 07:32:31  Rev 2181   jdorje

	* game_servers/lapocha/Makefile.am game_servers/lapocha/game.c 
	  game_servers/lapocha/protocols.h game_servers/lapocha/ggz.h 
	  game_servers/lapocha/main.c game_servers/lapocha/ggz.c:
	  Upgraded LaPocha game server to use libggzdmod instead of local 
	  ggz code.
	  This was quite easy since LaPocha (naturally) has the exact same 
	  setup as
	  GGZCards.


2001-08-20 07:14:31  Rev 2180   jdorje

	* ggzd/protocols.h:
	  Removed ggzmod (ggzd<->game server) enumerations from protocols.h, 
	  and
	  instead just #include the file ..
	  /game_servers/libggzmod/ggz_protocols.h.
	  The result is a bit dirtier, but safer since the matching code isn't
	  duplicated.  The #inclusion of the file is very similar to what 
	  the game
	  servers are currently using to link to libggzdmod.


2001-08-20 07:12:24  Rev 2179   jdorje

	* game_servers/libggzmod/ggz_protocols.h:
	  Removed spurious enumerations and #defines from ggz_protocols.h.
	  It looks like the file was just an old copy of protocols.h from 
	  ggz, thus
	  it had all of the ggzd<->ggz client communication definitions in 
	  it as
	  well.  None of this is necessary or wise to duplicate, so I took 
	  out all
	  but the ggzdmod (ggzd<->game server) enumerations.


2001-08-20 01:38:01  Rev 2178   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  A minor cleanup.
	  I moved debug levels out of ggz_server.h and into ggz.c since 
	  they're not
	  used at all outside of libggzdmod.  I then removed all of the extra
	  definitions except for GGZ_DBG_TABLE, and commented this as being an
	  exceprt from ggzd.
	  A better solution would be to #include err_funcs.h directly from 
	  ggzd.
	  However, this can't be done cleanly since err_funcs.h won't stand 
	  on its
	  own.


2001-08-19 22:57:01  Rev 2177   jdorje

	* game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.c:
	  Auto-indented all code.  From now on I'll keep consistent 
	  formatting.


2001-08-19 22:14:01  Rev 2176   jdorje

	* game_servers/libggzmod/ggz_protocols.h:
	  Added doxygen documentation to ggz_protocols.h.
	  I know we're not set on doxygen yet, but the file's definitely 
	  better off
	  with this documentation in it than without.


2001-08-19 21:25:51  Rev 2175   jdorje

	* game_servers/libggzmod/ggz_server.h:
	  Switched clumped #defines to be enumerations instead.
	  Advantages:
	  	- Cleaner; more legible.
	  	- Easier to document with doxygen or another tool.
	  	- Possible type checking _if_ the enumeration type is used.
	  Disadvantages:
	  	- The GGZ_DBG_* enumerations aren't strictly enumerated values;
	  	  they're masks.  My research indicates this shouldn't be a
	  	  problem, but it makes them slightly less intuitive.


2001-08-19 08:13:16  Rev 2167   jdorje

	* ggzd/table.c game_servers/libggzmod/ggz.c:
	  Changed ggzd <-> game server connection code to use sockets 
	  generated by
	  socketpair() rather than unix domain (file) sockets.  This has a 
	  number of
	  good effects - mostly it's less error-prone (errors can be caught
	  immediately) and faster (there's no waiting for the socket to be 
	  connected
	  to).  The code is also cleaner.
	  File descriptor #3 is used for the connection.  This means that 
	  ggzd must
	  close FD 3 before executing the game server, and copy (dup2) the 
	  socket's
	  FD over to FD 3.  A major problem with this is that after FD 3 has 
	  been
	  closed, no more log/debugging messages can safely be sent, since 
	  they get
	  sent across a (possibly closed) socket to the ggzd daemon.  This is
	  "solved" just by not sending any such messages after the FD is 
	  closed.
	  libggzdmod is changed to use the new protocol as well.  Mostly 
	  this just
	  required removing a bunch of now-useless code.  Note, though, that 
	  any
	  game servers that don't use libggzdmod (i.e. all of them) will be
	  completely broken by this change.  They should be easy to upgrade.


2001-08-14 02:03:16  Rev 2143   jdorje

	* game_servers/escape/main.c game_servers/escape/ggz.c 
	  game_servers/escape/Makefile.am game_servers/escape/game.c 
	  game_servers/escape/protocols.h game_servers/escape/ggz.h:
	  Updated escape server to use libggzdmod instead of local ggz files.


2001-08-14 02:02:04  Rev 2142   jdorje

	* game_servers/ggzcards/Makefile.am:
	  Fixed dependency listing in Makefile.am so dependency on 
	  libggzdmod.a is
	  handled correctly.  It's not pretty.


2001-08-07 06:51:25  Rev 2124   dr_maux

	* game_servers/escape/game.c:
	  - hide character errors by replacing \' with \`


2001-08-07 06:46:41  Rev 2123   rgade

	* ggzd/login.c:
	  - Server automatically prepends (G) to guest user name, if name is 
	  too long
	    then letters are cut off so that (G) is always present


2001-08-07 04:55:24  Rev 2122   rgade

	* ggzd/parse_opt.c ggzd/ggzd.test.in ggzd/ggzd.conf.in:
	  - Primary configuration file now loaded using conf_* functions
	  - Corrections/Tweaks to configuration .in files


2001-08-07 03:08:04  Rev 2121   rgade

	* ggzd/Makefile.am ggzd/conf.h ggzd/lists.c ggzd/lists.h ggzd/conf.c:
	  - Phase one of new configuration system, integrated the 
	  ggzcore_confio_*
	    functions into ggzd as conf_*
	  - Integrated ggzcore_lists_* functions as list_* - required by 
	  conf functions


2001-08-07 01:21:50  Rev 2120   rgade

	* game_servers/Makefile.am:
	  - Removed non-working 'escape' server from SUBDIRS to compile


2001-08-05 23:44:31  Rev 2119   oojah

	* game_servers/escape/game.c game_servers/escape/game.h:
	  Fixed repeat move at corner bug.
	  Added debug code to game_checkwin()


2001-08-05 22:52:40  Rev 2118   oojah

	* game_servers/escape/game.c game_servers/escape/game.h:
	  Changed bounds to fix


2001-08-05 16:24:30  Rev 2117   oojah

	* game_servers/escape/game.c:
	  Added a ;


2001-08-05 16:07:38  Rev 2116   oojah

	* game_servers/escape/game.c:
	  Added further debug code


2001-08-05 13:12:34  Rev 2115   oojah

	* game_servers/escape/game.c:
	  Added missing comment character.


2001-08-05 01:36:36  Rev 2112   oojah

	* game_servers/escape/game.c:
	  Fix to game_send_move()


2001-08-05 01:18:53  Rev 2111   oojah

	* game_servers/escape/game.c:
	  Removed unnecessary code from game_update()


2001-08-05 01:07:14  Rev 2110   oojah

	* game_servers/escape/game.c:
	  Further attempt to fix repeat moves.


2001-08-02 14:45:07  Rev 2100   oojah

	* game_servers/escape/game.c:
	  Another repeat move fix attempt.


2001-08-02 14:17:42  Rev 2099   oojah

	* game_servers/escape/game.c:
	  Another repeat move fix attempt.


2001-08-02 13:50:35  Rev 2098   oojah

	* game_servers/escape/game.c:
	  Another repeat move fix attempt.


2001-08-02 13:40:22  Rev 2097   oojah

	* game_servers/escape/game.c game_servers/escape/game.h:
	  Another repeat move fix attempt.


2001-08-02 13:19:16  Rev 2096   oojah

	* game_servers/escape/game.c:
	  Fix fix fix. Removed references to escape_game.opponent.


2001-08-02 12:12:28  Rev 2095   oojah

	* game_servers/escape/game.c:
	  Further fix to passing moves.


2001-08-02 11:46:54  Rev 2094   oojah

	* game_servers/escape/game.c:
	  Fixed repeat move handling.


2001-08-02 01:15:53  Rev 2093   oojah

	* game_servers/escape/game.c:
	  Initialise starting position on new game.


2001-07-26 01:02:41  Rev 2086   oojah

	* game_servers/escape/ggz.c:
	  Removed commenting that had been required for compiling under 
	  cygwin.


2001-07-22 19:43:30  Rev 2066   jdorje

	* game_servers/ggzcards/protocol.html:
	  Slight updates/improvements to the protocol specification document.


2001-07-22 06:22:02  Rev 2065   jdorje

	* game_servers/libggzmod/ggz_server.h:
	  Doh!  I didn't mean to commit ggz_server.h!  This commit replaces 
	  the
	  original file.
	  My bad.  I swear I won't do it again...


2001-07-22 06:17:37  Rev 2064   jdorje

	* game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c:
	  Fixed some bugs all over again: replacing sprintf's with 
	  snprintf's and
	  lengthening the name of the unix domain socket file name 
	  appropriately.


2001-07-21 05:34:46  Rev 2060   jdorje

	* game_servers/ggzcards/games/lapocha.c:
	  Three things to fix La Pocha trump bidding:
	  	- The trump bid text is determined correctly.
	  	- The trump bid is interpreted slightly more safely.
	  	- In between hands a "trump is not set" message is given.


2001-07-19 15:40:23  Rev 2058   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Disabled open hands in all single-game ggzcards rooms.  This also
	  demonstrates how options can be set at the command line.


2001-07-19 15:19:08  Rev 2057   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/message.h:
	  Added four different "automated" player messages.  These functions 
	  can be
	  called by the game player message code to add common message 
	  information.


2001-07-19 05:06:55  Rev 2056   jdorje

	* game_servers/ggzcards/games/sueca.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ai.h game_servers/ggzcards/bid.c 
	  game_servers/ggzcards/bid.h game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/games/lapocha.h 
	  game_servers/ggzcards/ai/random.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/hearts.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/ai.c:
	  Wrote new, better interface to bidding system.
	  A lot of stuff changed for this to happen.  One side effect was 
	  that I
	  broke La Pocha trump bidding.  Most other code should be shorter 
	  and more
	  legible.


2001-07-19 04:05:13  Rev 2055   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/message.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Fixed/cleaned up a lot of "TODO" comments.  Actually, most of them 
	  had
	  already been taken care of and I neglegently left the comments 
	  behind.


2001-07-18 21:49:09  Rev 2050   jdorje

	* game_servers/chinese-checkers/main.c:
	  Updated chinese checkers to use the protocol engine name, rather 
	  than the
	  game name, for the name of the socket file used for communication 
	  with the
	  server.  Before this, it wouldn't work at all!


2001-07-18 19:35:01  Rev 2048   jdorje

	* game_servers/ggzcards/ggz.h game_servers/ggzcards/common.h 
	  game_servers/ggzcards/ggz.c game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/protocols.h:
	  Removed old libggzdmod code, and set up GGZCards to use global 
	  libggzdmod.
	  	- Removed ggz.c, ggz.h, and protocols.h.
	  	- Removed the above files from Makefile.am.
	  	- Added libggzdmod.a to Makefile.am.
	  	- Changed the #include to be "../libggzmod/<files>.h".


2001-07-18 07:49:38  Rev 2046   jdorje

	* game_servers/ggzcards/config/Makefile.am:
	  Setting ggzdgame_DATA = *.dsc (and similar for ggzdroom) seems to 
	  work
	  fine.  However, I neglected adding EXTRA_DIST into the Makefile so 
	  that
	  all these files will be included in a make dist.
	  I'm still not sure that saying "ggzdgame_DATA = *.dsc" will work 
	  in all
	  cases, but I'm willing to leave it like that for now.  A comment 
	  to that
	  effect has been added.


2001-07-17 16:22:24  Rev 2042   jdorje

	* configure.in game_servers/Makefile.am:
	  Added game_servers/libggzmod/ directory to configure.in and
	  game_servers/Makefile.am.  libggzdmod should now be compiled 
	  normally
	  (although not yet used).
	  Note: the directory was called "libggzmod", and it's really too 
	  late to
	  change it.  However, it would have been better IMO to call it 
	  libggzdmod.


2001-07-17 16:13:46  Rev 2041   jdorje

	* game_servers/libggzmod/.cvsignore game_servers/libggzmod:
	  Added .cvsignore file to ignore extra files - at least the ones 
	  built on
	  my system.


2001-07-17 16:06:59  Rev 2040   jdorje

	* game_servers/libggzmod/Makefile.in:
	  Removed unneeded Makefile.in.


2001-07-17 04:40:52  Rev 2039   jdorje

	* game_servers/libggzmod/Makefile.in game_servers/libggzmod/Makefile.
	  am:
	  Changed Makefile.am so that:
	  	- ggzdmod will be compiled as "libggzdmod" rather than "libggzd".
	  	- Both a static and shared library should be compiled.  The intent
	  	  is that the ggzd game servers link to the static library, while
	  	  external game servers are able to link to the shared library.
	  Notes:
	  	- None of this should have any effect on compilation yet, since
	  	  automake and autoconf haven't been told about this directory.
	  	- There is a note within Makefile.am about the static/shared
	  	  problem.
	  	- Since Makefile.in was already included in CVS (?), it is also
	  	  affected by the change.


2001-07-16 15:12:18  Rev 2034   jdorje

	* ggzd/ggzd.h:
	  Increased maximum game name length to 24 characters.


2001-07-16 04:16:44  Rev 2033   jdorje

	* game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Put Version information back into each of the .dsc files.


2001-07-16 01:20:31  Rev 2032   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/ggz.h game_servers/ggzcards/common.h 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/ggz.c 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/protocols.h:
	  Preparation for integration with libggzdmod:
	  	- Updated current ggz code by copying over the ggzmod code in
	  	  its place.
	  	- Updated ggzcards code to use this new (current) ggz code.


2001-07-15 23:55:27  Rev 2031   jdorje

	* game_servers/ggzcards/ggz.h game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/bid.c game_servers/ggzcards/config/ggzcards.
	  dsc game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/bid.h 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/games/spades.
	  c game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/main.c game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/common.c game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/games/bridge.c 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Split off bidding functions into bid.[ch].  Also restructures 
	  #includes of
	  some files.


2001-07-15 20:25:35  Rev 2030   jdorje

	* game_servers/ggzcards/config/Makefile.am:
	  Changed Makefile.am to (hopefully) insall all existing dsc and 
	  room files.


2001-07-15 18:57:29  Rev 2029   jdorje

	* ggzd/table.c:
	  Fixed another problem causing the multiple-games one-module system 
	  to work.
	  Namely, it is the protocol engine name that must be used for the
	  communications socket to the game server, not the game name.  This 
	  work
	  may be invalidated once the socket pair is generated before the game
	  server is forked off.


2001-07-15 18:30:14  Rev 2028   jdorje

	* game_servers/ggzcards/config/ggzcards-lapocha.dsc:
	  Fixed problem causing LaPocha room to not work.


2001-07-15 07:09:46  Rev 2027   jdorje

	* game_servers/ggzcards/config/ggzcards-bridge.room 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.room 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards.room 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.room 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.room 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.room:
	  Fixed dsc and room files, including setting correct number of 
	  botsallowed
	  for each game and improving formatting of all files.


2001-07-15 04:10:44  Rev 2024   jdorje

	* game_servers/ggzcards/config/Makefile.am:
	  Added other existing game rooms for ggzcards games.


2001-07-14 20:20:59  Rev 2021   dr_maux

	* game_servers/escape game_servers/escape/.cvsignore:
	  - ignore created files


2001-07-14 20:02:18  Rev 2018   bmh

	* ggzd/protocols.h ggzd/players.c:
	  - Bumped protocol version to 4
	  - Send gametype's protocll engine and version with RSP_LIST_TYPES


2001-07-14 00:18:34  Rev 2011   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c:
	  Wrote and used easysock error and exit functions.  Removed some of 
	  the
	  existing redundant error messages.


2001-07-13 16:56:26  Rev 2008   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/cards.h:
	  Cleaned up list of available decks, including correcting an 
	  incorrect
	  comment about the La Pocha deck.


2001-07-13 15:24:07  Rev 2007   jdorje

	* game_servers/ggzcards/game.c:
	  Fixed bug in the way trick winners are calculated.  This bug only 
	  had an
	  effect when there was more than one deck.


2001-07-13 14:59:15  Rev 2006   jdorje

	* game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/hearts.h:
	  Implemented a 2-deck option for Hearts.
	  This was very ugly - I need to give some though on how to change the
	  deck/hand size after the game has been initialized.


2001-07-13 07:18:56  Rev 2005   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Removed spades_deal_hand(), since it was identical to 
	  game_deal_hand().
	  The default behaviour for dealing cards is now used with spades.


2001-07-13 07:16:11  Rev 2004   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/game.c:
	  Changed hand size code to use cards_deck_size() (the actual size 
	  of the
	  deck) instead of assuming a 52-card deck.


2001-07-13 07:05:31  Rev 2003   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/cards.h:
	  - Added a new type of deck, GGZ_DECK_DOUBLE (a 104-card double 
	  deck).
	  - Added a new function to return the size of a deck.
	  Both are unused as of yet.


2001-07-13 04:06:48  Rev 2002   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/types.h:
	  "Fixed" the implementation of global messages so that the server can
	  reliably track all of them.
	  I did this by making them into a linked list; not the most efficient
	  solution but definitely a step up.  A hash would be better, but I'm
	  not sure what hash library to link to (ggzd doesn't seem to use 
	  glib),
	  and we have several additional needs that hash libraries don't
	  always satisfy.


2001-07-13 03:00:55  Rev 2000   jdorje

	* game_servers/ggzcards/message.c:
	  Changed last trick/last hand messages so that they format the output
	  better.  Specifically, the names aren't any wider than they need 
	  to be,
	  and the winner is marked.


2001-07-13 01:23:57  Rev 1999   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/games/suaro.
	  c game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/games/bridge.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/types.h:
	  Changed the interface to the player message code to be much more 
	  powerful.
	  Now, instead of accessing the string directly, the game-specific 
	  code just
	  calls put_player_message() and add_player_message().  Much cleaner.
	  One down side is that the current implementation of the above 
	  functions
	  makes add_player_message very inefficient.  I dont think this will 
	  be a
	  problem, but if it is a more effecient implementation could be 
	  devised
	  without changing the interface.


2001-07-12 19:08:03  Rev 1997   jdorje

	* game_servers/ggzcards/games/bridge.h 
	  game_servers/ggzcards/games/bridge.c:
	  Fixed Bridge so that the declarer is the first person on the team 
	  to open
	  in the contract suit, not the most recent bidder.


2001-07-12 02:03:54  Rev 1996   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  Implemented additional bridge scoring:
	  	- Added bonuses for slams.
	  	- Added handling of "vulnerable".
	  	- Corrected handling of doubled/redoubled undertricks.
	  	- Added "Hand Score" message summarizing the score (incomplete).
	  	- TODO: optional bonus for honors


2001-07-11 22:24:18  Rev 1993   jdorje

	* game_servers/ggzcards/games/bridge.h 
	  game_servers/ggzcards/games/bridge.c:
	  Implemented rubber bridge!
	  Namely, there are three games to 100.  After one team wins 2 of 
	  these, the
	  rubber is over and they get a bonus.  However, we don't end the 
	  game here
	  (this is an option that will be added in the near future); rather, 
	  we
	  continue to play another rubber with a running tally of the scores.
	  There are just a few things left for this to be an excellent 
	  implementation
	  of Bridge:
	  	- Set up declarer properly; it should be the first person to
	  	  bid the suit rather than the most recent bidder of that suit.
	  	- Add bonus points for all the different things you get bonus
	  	  points for (vulnerability, slams, honors, etc.).


2001-07-11 21:22:11  Rev 1992   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  Added "Scores" message for Bridge.
	  We don't have rubber bridge yet, but that will soon be an option.  
	  For now,
	  the scoring system just gives the team 500 points above the line 
	  for each
	  game they win.
	  Once we do have rubber bridge, and have the ability to play 
	  multiple games
	  consecutively, things will be a bit confusing since each ggzcards 
	  "game"
	  is really a bridge "rubber" - like tennis, Bridge has a different 
	  meaning
	  for "game".


2001-07-11 17:55:19  Rev 1990   jdorje

	* game_servers/ggzcards/options.c:
	  Changed Options message code to correctly set the message as "No 
	  options".


2001-07-11 17:17:29  Rev 1989   jdorje

	* game_servers/ggzcards/games/suaro.c:
	  Fixed bug in Suaro code: after a kitty bid, the declarer's new 
	  hand was
	  only sent to the declarer.  This meant that when open_hands was set,
	  the defender would see the declarer's hand as not changing.


2001-07-11 16:46:06  Rev 1988   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/suaro.c:
	  Implemented get_option_text for Spades, Hearts, and Suaro.
	  It should all "work" now; if anything's been left out there should 
	  be
	  an error message in the debugging logs.


2001-07-11 16:29:20  Rev 1987   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/options.
	  c game_servers/ggzcards/games/sueca.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Added get_option_text game-specific function, implemented for the 
	  default
	  case (game_get_option_text) only.
	  This function is used to determine the descriptive text for any 
	  options
	  chosen, which is then used to assemble the "Options" message for the
	  client.


2001-07-11 06:04:47  Rev 1986   jdorje

	* game_servers/ggzcards/message.c:
	  Insert a check to make sure game.funcs->set_player_message isn't 
	  called
	  when the game isn't set.  Otherwise, we can have some weird seg 
	  faults
	  (for instance, when a second player joins and leaves the game before
	  the first player has chosen the game).


2001-07-11 03:35:04  Rev 1985   jdorje

	* game_servers/ggzcards/games/lapocha.c:
	  Fixed bug in La Pocha - there was one hand too many.


2001-07-11 02:53:36  Rev 1983   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Changed all SERVER BUG debug messages to ERROR: SERVER_BUG.


2001-07-11 02:31:37  Rev 1982   jdorje

	* game_servers/ggzcards/message.c:
	  Fixed formatting of previous change to this file.


2001-07-11 02:31:03  Rev 1981   jdorje

	* game_servers/ggzcards/common.c:
	  Added check so we don't try (and fail) to send WH_REQ_NEWGAME and
	  WH_MSG_NEWGAME messages to bot players.


2001-07-11 02:25:39  Rev 1980   jdorje

	* game_servers/ggzcards/message.c game_servers/ggzcards/common.c:
	  Bugfix for bad player index into array, plus debugging code to 
	  warn of
	  similar errors in the future.


2001-07-11 01:13:58  Rev 1979   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  Fixed bridge "double", and made some other slight improvements to 
	  the
	  bidding code.


2001-07-11 01:04:27  Rev 1978   jdorje

	* game_servers/ggzcards/games/Makefile.am:
	  Removed unnecessary dependancy listings from Makefile.am.


2001-07-11 00:50:20  Rev 1977   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Cleaned up comments in game.c and common.c.


2001-07-11 00:27:54  Rev 1976   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/cards.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/ggz.h 
	  game_servers/ggzcards/common.h game_servers/ggzcards/ai.h 
	  game_servers/ggzcards/options.h game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/types.h game_servers/ggzcards/game.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/message.c game_servers/ggzcards/ggz.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/ai.c game_servers/ggzcards/protocols.h:
	  Reformated all code using the indent program.


2001-07-11 00:19:54  Rev 1975   jdorje

	* game_servers/ggzcards/game.c:
	  Fixed bug in game_end_trick - failure to map the lead card when 
	  determining
	  who won.  Also, I removed the lo_card/lo_player code from that 
	  function,
	  since it's not used there anymore (it's used in suaro_end_trick.)


2001-07-10 23:11:49  Rev 1974   perdig

	* game_servers/ggzcards/games/sueca.c:
	  - Added URL for the game rules


2001-07-10 22:54:42  Rev 1973   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/message.h 
	  game_servers/ggzcards/types.h:
	  Added "Bid History" message.  It's a generalized message, 
	  maintained by the
	  common code and controlled by game.bid_history (enabled by default).
	  Unlike the other messages, the code to set up this one is mostly 
	  in the
	  core code in common.c.  This is because even if game.bid_history 
	  is not
	  set, the bid history itself is still maintained - and can be used by
	  game-specific code to send out whatever message is desired.  The 
	  game
	  flag just controlls whether the message is sent by default.
	  For some games (like Hearts and Sueca) this should be disabled.


2001-07-10 22:12:25  Rev 1972   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  Disabled cumulative scores for bridge.


2001-07-10 22:08:18  Rev 1971   jdorje

	* game_servers/ggzcards/games/bridge.c:
	  Fixed Bridge scoring and message system.


2001-07-10 19:30:23  Rev 1969   perdig

	* game_servers/ggzcards/games/sueca.c:
	  - The trump now is determined randomly
	  - (hopefully) fixed ordering of cards (sometimes the server failed 
	  to realize which card won the trick)


2001-07-10 18:37:42  Rev 1968   perdig

	* game_servers/ggzcards/cards.c game_servers/ggzcards/games/sueca.c:
	  Fixed 3 bugs in the Sueca code
	  - Ordering of the cards in cards.c now follows the standard
	  - Removing some extra zeroing of variables (alloc() already does it)
	  - Changed a set_all_player_messages to two set_player_message


2001-07-10 09:58:58  Rev 1967   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/games/sueca.c 
	  game_servers/ggzcards/games.c game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/games/sueca.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/Makefile.am:
	  Added support for the Sueca game, implemented by Ismael Orenstein.
	  I applied the patch submitted to SF as-is, except for some changes 
	  to the
	  ggzcards core code: indenting lines consistently, and fixing a 
	  small bug
	  in cards.c.  games/sueca.[ch] were added as-is.  There's one large 
	  bug in
	  the Sueca code itself which hasn't been addressed.
	  Thanks Perdig!  Soon the client will include you in the credits.


2001-07-10 05:08:41  Rev 1966   rgade

	* ggzd/room.c ggzd/chat.c ggzd/chat.h:
	  - A quick little hack to show number of players connected when you 
	  enter
	    the Entry Room


2001-07-10 04:23:03  Rev 1965   rgade

	* ggzd/login.c:
	  - Validate login username
	    * No spaces or control characters
	    * No extended ASCII (> 127) or DEL
	    * No & - can mess with M$ Windows labels and menu items
	    * No % - can screw up log and debug's printf()s
	    * No \ - can screw up log and debug's printf()s


2001-07-10 03:41:08  Rev 1964   rgade

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc ggzd/parse_opt.c 
	  game_servers/lapocha/lapocha.dsc ggzd/ggzd.h 
	  game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc ggzd/datatypes.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/reversi/reversi.
	  dsc game_servers/spades/spades.dsc game_servers/hastings/hastings.
	  dsc game_servers/escape/escape.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - Added "ProtocolVersion" line to parse_opt and all .dsc files


2001-07-09 21:45:17  Rev 1963   jdorje

	* game_servers/ggzcards/game.c:
	  Removed a little bit of unnecessary debugging code.


2001-07-09 21:20:30  Rev 1962   jdorje

	* game_servers/ggzcards/ai/spades.c:
	  Removed ValidPlay function and replaced it with call to
	  game.funcs->verify_play.


2001-07-09 20:41:37  Rev 1961   rgade

	* game_servers/krosswater/krosswater.dsc game_servers/chess/chess.
	  dsc game_servers/combat/combat.dsc 
	  game_servers/ggzcards/config/ggzcards.dsc ggzd/parse_opt.c 
	  game_servers/lapocha/lapocha.dsc ggzd/ggzd.h 
	  game_servers/dots/dots.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc ggzd/datatypes.h 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/reversi/reversi.
	  dsc game_servers/spades/spades.dsc game_servers/hastings/hastings.
	  dsc game_servers/escape/escape.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  - Added "ProtocolEngine" to game info file parse
	  - Added protocol field to GameInfo struct
	  - Added appropriate ProtocolEngine lines to all game description 
	  files


2001-07-09 16:32:19  Rev 1960   jdorje

	* game_servers/ggzcards/message.c:
	  Fixed silly bug in cumulative score message.


2001-07-09 15:58:13  Rev 1959   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Split up valid game code into game-specific functions.  Added new
	  game-specific funciton, is_valid_game.


2001-07-09 15:24:10  Rev 1958   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/games.h game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Added another field to the game_data structure, full_name.  This 
	  contains
	  the full name of the game, used for requesting game type and now 
	  used
	  automatically as the name of the game.


2001-07-09 15:22:46  Rev 1957   jdorje

	* game_servers/ggzcards/ai.c:
	  Added extra debugging code to general AI functions.


2001-07-09 07:05:32  Rev 1956   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/message.h:
	  Added "Scores" message containing cumulative scores of all players.


2001-07-09 04:24:02  Rev 1955   jdorje

	* game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/hearts.h:
	  Added "no blood on the first trick" rule for Hearts.


2001-07-09 04:12:02  Rev 1954   jdorje

	* game_servers/ggzcards/games/hearts.c:
	  Fixed another silly bug in Hearts, causing a misdisplay of 
	  players' scores.


2001-07-09 03:58:13  Rev 1953   jdorje

	* game_servers/ggzcards/games/hearts.c:
	  Fixed big bug in hearts: the jack of spades went to whoever lead 
	  it, not whoever won it.


2001-07-09 00:05:43  Rev 1951   oojah

	* game_servers/escape/game.c:
	  Corrected errors caused by commiting incorrect version.


2001-07-08 22:57:39  Rev 1950   oojah

	* game_servers/escape/game.c:
	  Added debug code.


2001-07-08 22:48:56  Rev 1949   jdorje

	* game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.c:
	  Changed Spades-AI bot naming to names of writers (Brent Hendricks 
	  and Britt
	  Yenne); changed Random-AI bot naming to fit a little better (ugh!).


2001-07-08 22:34:39  Rev 1948   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed silly bug in AI naming.  You can't name the AI's before you 
	  initialize
	  the AI, and you can't initialize the AI until you initialize the 
	  game!


2001-07-08 22:22:28  Rev 1947   jdorje

	* game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai/random.c:
	  Added names for Random and Spades AI bots.


2001-07-08 22:14:22  Rev 1946   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/ai/spades.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/ai/random.c 
	  game_servers/ggzcards/ai.c:
	  Added code to allow AI modules to pick their bot names.
	  Added default bot name of "Bot <p>".


2001-07-08 21:54:17  Rev 1945   jdorje

	* game_servers/ggzcards/message.c:
	  Changed last trick and previous hand messages to be formatted for
	  fixed-width font.


2001-07-08 21:05:38  Rev 1944   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games.h:
	  Added a few extra comments to help in adding new games.


2001-07-08 19:47:29  Rev 1941   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/types.h:
	  Changed host code to determine the host on-the-fly.  The "host" is 
	  the player
	  who gets to choose the game type and options.  In the future, more 
	  power may
	  be given to them.
	  As of now, the host should always be the human player who has been 
	  at the
	  table the longest.  It is updated when players join or leave.


2001-07-08 05:46:51  Rev 1938   jdorje

	* game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/hearts.h:
	  Add jack-of-diamonds rule to Hearts as an option.


2001-07-08 05:45:24  Rev 1937   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/options.h:
	  Slight change to options #includes.


2001-07-07 06:02:29  Rev 1932   jdorje

	* game_servers/ggzcards/games/lapocha.c:
	  Fixed buglet causing La Pocha bids to be wrongly shown.


2001-07-07 02:35:15  Rev 1931   jdorje

	* game_servers/ggzcards/games/hearts.c game_servers/ggzcards/game.c:
	  Fixed to buglets in the messages that affected Hearts.


2001-07-07 01:53:12  Rev 1930   oojah

	* game_servers/escape/game.c:
	  Moved the board init code to *after* the options have been 
	  received...


2001-07-06 22:30:34  Rev 1929   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed buglet that caused problem with bots playing from other 
	  people's
	  hands.


2001-07-06 22:11:07  Rev 1928   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Slight improvements to Spades player messaging.


2001-07-06 22:09:11  Rev 1927   jdorje

	* game_servers/ggzcards/message.c:
	  Fixed buglet causing player messages to not always be updated 
	  properly.


2001-07-06 22:05:27  Rev 1926   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/types.h:
	  Added bid_count for each player containing the number of times 
	  they've bid
	  this hand.  Various games will wish to use this information.


2001-07-06 20:49:49  Rev 1925   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/games/bridge.c:
	  Fixed two other functions that were missing return statements.


2001-07-06 20:19:12  Rev 1924   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed bug that's been sitting around since update() was split up.
	  handle_launch_event and handle_leave_event didn't return 0 as they 
	  were
	  supposed to.


2001-07-06 17:50:48  Rev 1923   jdorje

	* game_servers/ggzcards/options.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/options.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/games/spades.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/protocol.html game_servers/ggzcards/main.c 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/Makefile.
	  am game_servers/ggzcards/common.c 
	  game_servers/ggzcards/games/bridge.c:
	  Implemented much more powerful option system, and switched all 
	  existing
	  games over to use it.
	  - It is much easier for game-specific code to ask for and 
	  determine the
	    values of options.
	  - Any option can be set from the command line, using a slightly 
	  awkward
	    syntax:
	      ggzd.ggzcards --game=spades --option=open_hands:0 
	  --option=nil_value:1
	  	          --option=minimum_bid:3 --option=target_score:2
	    will set the game to play spades, and completely determine the 
	  options
	    to be used.
	  - Some aspects of the interface are still dirty; for instance, the 
	  options
	    message does not work particularly well with the current system.
	  CVSl---------------------------------------------------------------
	  -------


2001-07-06 05:22:14  Rev 1921   jdorje

	* game_servers/ggzcards/Makefile.am:
	  Fixed typo bug in Makefile.am - left \ off of line that needed it.


2001-07-06 04:07:13  Rev 1920   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed a pesky bug that would cause the game to not be initialized 
	  properly
	  if an options response came before all players were ready.


2001-07-06 00:26:42  Rev 1918   jzaun

	* configure.in game_servers/Makefile.am ggzd/ggzd.h:
	  - updated the MAX_GAME_TYPES to 35
	  - added escape to configure in and game_server/Makefile.am


2001-07-06 00:05:12  Rev 1917   rgade

	* ggzd/Makefile.am ggzd/entry.room ggzd/parse_opt.c:
	  - Added a lobby/entry room, for now it's required but it should be 
	  optional


2001-07-04 05:08:12  Rev 1915   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/suaro.c:
	  Made two small improvements for the messaging system, to Suaro and 
	  Spades.
	  There's still a big problem in Spades because bids don't show up 
	  correctly.


2001-07-04 04:57:13  Rev 1914   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/ai.h 
	  game_servers/ggzcards/ai/Makefile.am 
	  game_servers/ggzcards/ai/spades.c game_servers/ggzcards/ai.c:
	  I inserted the AI module from NetSpades.  Now we have AI for 
	  Spades that
	  should be almost identical to the NetSpades AI (different only 
	  inasmuch as
	  my conversion was buggy).  Sweet!


2001-07-03 20:29:49  Rev 1913   jdorje

	* configure.in:
	  Added game_servers/ggzcards/ai Makefile.


2001-07-03 20:28:58  Rev 1912   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/ai.h 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/ai/Makefile.am game_servers/ggzcards/ai/.
	  cvsignore game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/ai game_servers/ggzcards/ai/random.c 
	  game_servers/ggzcards/ai.c:
	  Added an AI directory, along with a generalized ai routine (that 
	  always
	  picks a move at random).


2001-07-03 20:27:05  Rev 1911   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/suaro.c:
	  Small bugfix and cleanup.


2001-07-03 19:13:35  Rev 1910   jdorje

	* game_servers/ggzcards/ai.h game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/common.c game_servers/ggzcards/ai.c:
	  Added stub functions for AI code.


2001-07-03 18:15:30  Rev 1909   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/games/lapocha.
	  c game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/euchre.c 
	  game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.c:
	  Cleaned up the interface for some functions, including 
	  compare_cards and
	  handle_bid.


2001-07-03 17:25:40  Rev 1908   jdorje

	* game_servers/ggzcards/games/euchre.h game_servers/ggzcards/games.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/Makefile.
	  am game_servers/ggzcards/message.c 
	  game_servers/ggzcards/games/euchre.c game_servers/ggzcards/game.c:
	  Separated game-specific functions for one final game: Euchre.
	  All game-specific code is now in the files games/<game>.[ch].  
	  game.c
	  now contains nothing game-specific, just the default routines.
	  There were a couple lines of Skat code; I just deleted them.


2001-07-03 16:54:18  Rev 1907   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games/lapocha.c 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/games/lapocha.h game_servers/ggzcards/game.c:
	  Separated game-specific functions for another game: La Pocha.


2001-07-03 16:13:29  Rev 1906   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/games/suaro.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.
	  c game_servers/ggzcards/message.h:
	  Made wrapper function set_player_message() for game-specific
	  set_player_message functions.  Substituted this wrapper in may 
	  places.
	  Fixed a buglet related to this that had been sitting around for a 
	  while.


2001-07-03 15:50:03  Rev 1905   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games/bridge.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/Makefile.
	  am game_servers/ggzcards/games/bridge.c game_servers/ggzcards/game.
	  c:
	  Separate game-specific functions for another game: Bridge.


2001-07-03 15:02:17  Rev 1904   jdorje

	* game_servers/ggzcards/games/hearts.c 
	  game_servers/ggzcards/games/hearts.h:
	  Oops!  Forgot the files themselves.


2001-07-03 15:01:47  Rev 1903   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/game.c 
	  game_servers/ggzcards/games/suaro.h:
	  Separate out game-specific functions for another game: Hearts.


2001-07-03 12:23:23  Rev 1901   oojah

	* game_servers/escape game_servers/escape/main.c 
	  game_servers/escape/escape.dsc game_servers/escape/ggz.c 
	  game_servers/escape/Makefile.am game_servers/escape/game.c 
	  game_servers/escape/protocols.h game_servers/escape/escape.room 
	  game_servers/escape/ggz.h game_servers/escape/game.h:
	  Initial upload of Escape game server.


2001-07-03 06:44:58  Rev 1900   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/message.
	  c game_servers/ggzcards/games/suaro.c game_servers/ggzcards/common.
	  c game_servers/ggzcards/game.c game_servers/ggzcards/message.h:
	  Moved more code into the common area, this time by creating 
	  functions
	  send_last_trick and send_last_hand.  These are called right after
	  the game's end_trick and end_hand and will only run if
	  game.last_trick and game.last_hand are set, respectively.


2001-07-03 06:32:02  Rev 1899   jdorje

	* game_servers/ggzcards/games/spades.c:
	  Tiny cleanups in spades.c.


2001-07-03 06:29:29  Rev 1898   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/games.h 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Moved some code out of the get_options game-specific functions; 
	  namely,
	  determining the host fd from the host player number.
	  TODO: determine the host on-the-fly in an intelligent manner 
	  rather than
	  just use the 0th player.  The current method only works because 
	  none of
	  the games support AI.


2001-07-03 06:20:27  Rev 1897   jdorje

	* game_servers/ggzcards/games/spades.c 
	  game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/games/suaro.h:
	  Cleaned up spades and suaro functions/files.


2001-07-03 06:10:16  Rev 1896   jdorje

	* game_servers/ggzcards/games/spades.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/spades.h 
	  game_servers/ggzcards/games/Makefile.am 
	  game_servers/ggzcards/games/suaro.c game_servers/ggzcards/game.c:
	  Separated game-specific functions for another game: Spades.


2001-07-03 05:12:42  Rev 1895   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games.h 
	  game_servers/ggzcards/common.c:
	  Changed game list data slightly to make determining the game more 
	  "automatic".


2001-07-03 04:20:26  Rev 1894   jdorje

	* game_servers/ggzcards/games game_servers/ggzcards/games/.cvsignore:
	  Added cvsignore for newly created directory.


2001-07-03 04:17:05  Rev 1893   jdorje

	* configure.in:
	  Added extra subdirectory to configure.in, left out of previous 
	  commit.


2001-07-03 04:15:50  Rev 1892   jdorje

	* game_servers/ggzcards/games game_servers/ggzcards/games.c 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games/Makefile.
	  am game_servers/ggzcards/games/suaro.c 
	  game_servers/ggzcards/Makefile.am game_servers/ggzcards/game.c 
	  game_servers/ggzcards/types.h game_servers/ggzcards/games/suaro.h:
	  Broke off game-specific functions into their own file for just one 
	  game:
	  Suaro.  This promises to be better in the long run, but I see that 
	  some
	  additional common code needs to be written first.  I also 
	  restructured
	  the games data a bit to make things more "automatic"; more can be 
	  done
	  in this regard.  I think more testing needs to be done before I 
	  proceed
	  with this conversion.


2001-07-02 22:00:30  Rev 1891   jdorje

	* game_servers/ggzcards/types.h:
	  Fixed typo in types.h header comment.


2001-07-02 21:48:05  Rev 1890   jdorje

	* game_servers/ggzcards/games.h game_servers/ggzcards/game.c:
	  Cleaned up after recent changes.


2001-07-02 21:36:24  Rev 1889   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/games.h 
	  game_servers/ggzcards/common.c:
	  Implemented method for automatically setting up which function set 
	  to use
	  with each game.  Next up: making separate function sets for each 
	  game.


2001-07-02 21:22:02  Rev 1888   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/message.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Made a collection of pointers-to-functions that are used to access 
	  the
	  game-specific functions.  Next up: making a different collection 
	  for each
	  game.


2001-07-02 20:28:27  Rev 1887   jdorje

	* game_servers/ggzcards/Makefile.am:
	  Fixed another typo in previous entry.


2001-07-02 18:28:02  Rev 1886   jdorje

	* game_servers/ggzcards/common.h:
	  Fixed typo in previous entry.


2001-07-02 18:25:53  Rev 1885   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/types.h:
	  Created new file types.h, and moved some data from common.h into 
	  it.  The
	  goal is to be able to include this data from multiple locations.


2001-07-02 05:57:59  Rev 1884   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/message.c 
	  game_servers/ggzcards/Makefile.am game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c game_servers/ggzcards/message.h:
	  Moved messaging system into separate files, messages.[ch].  This 
	  should be
	  quite a bit cleaner, and allow easier expansion of the messaging 
	  system.


2001-07-02 02:46:21  Rev 1883   rgade

	* ggzd/table.c:
	  - Tweak to table_log() - only make a copy if there are %'s to be 
	  expanded


2001-07-01 05:44:30  Rev 1880   rgade

	* ggzd/table.c:
	  Fixed bug #436586 - seg fault in ggzd
	  - table_log() now scans incoming messages to make sure they do not 
	  have
	    un-escaped % qualifiers as the debugging routines will crash 
	  trying to
	    use the snprintf() variants on them.  Existing %'s are expanded 
	  to %% so
	    that snprintf() and friends will print the % sign properly.


2001-06-29 09:16:59  Rev 1879   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/game.c:
	  Added some code to get Euchre features to work (better), including
	  game_map_card() and restructuring of player_set_message().


2001-06-29 08:07:54  Rev 1878   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Added "Rules" message that tells the user of a URL at which to 
	  read the
	  rules of the game being played.  I'm not sure if this is the best 
	  way to
	  do it; perhaps a better option would just be to have a page at ggz.
	  sf.net
	  devoted to game rules.


2001-06-29 07:53:51  Rev 1877   jdorje

	* game_servers/ggzcards/games.c:
	  Oops!  Missed a spot when changing game_init_game to init_game.


2001-06-29 07:42:45  Rev 1876   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Split off common code from game_init_game into a new function, 
	  init_game.  Renamed the old init_game function to init_ggzcards, 
	  which is really more descriptive.  This is looking more and more 
	  like using classes and inheritence for the games is the way to go.


2001-06-28 09:12:41  Rev 1875   jdorje

	* game_servers/ggzcards/common.c:
	  A one-line fix so that bots will always be ready.


2001-06-28 08:53:46  Rev 1874   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Restructure play_event handling code similarly to bid_event code.  
	  It's now the card itself that's passed around, rather than an 
	  index into the hand.  Again, this should make AI routines easier 
	  to integrate.  I also cleaned up a few artifacts in this area.


2001-06-28 08:48:02  Rev 1873   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/cards.h:
	  Added cards_equal routine.


2001-06-28 08:28:33  Rev 1872   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Changed game_handle_bid and handle_bid_event to receive the bid 
	  itself, not an index for the bid.  With an increasing number of 
	  games, this seemed like the most stable and intelligent thing to 
	  do.  It may have had the side effect of fixing the La Pocha 
	  problem, or maybe I'm just imagining things.  It should certainly 
	  make it easier to implement AI routines.


2001-06-28 08:14:57  Rev 1871   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Changed comments and debugging lines to update all references to 
	  WH_EVENT_***.


2001-06-28 08:05:36  Rev 1870   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Removed update() and event sytem entirely.  (Events still work the 
	  same way, they're just not enumerated; each gets a function 
	  instead of there being one switch inside the update function.)  I 
	  think this may have broken La Pocha, or maybe it was broken all 
	  along and I just never noticed.


2001-06-28 07:49:39  Rev 1869   jdorje

	* game_servers/ggzcards/common.c:
	  Separated update() out into individual handle_***_event functions.


2001-06-27 22:13:16  Rev 1868   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Added lots more comments for the game-specific functions.


2001-06-27 20:33:25  Rev 1867   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Added 'previous hand' message, and cleaned up after 'last trick' 
	  code.


2001-06-27 19:43:52  Rev 1866   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Left the 'last trick' message as a game option, but turned on by 
	  default.


2001-06-27 19:12:20  Rev 1863   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  The last-trick code brought to light some bug; I can't find it so 
	  I've added some more debugging lines and made the last-trick code 
	  a game option.


2001-06-27 06:41:40  Rev 1862   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Expanded debugging messages to include players names.


2001-06-27 05:40:42  Rev 1860   jdorje

	* game_servers/ggzcards/common.c:
	  Removed misleading error message.


2001-06-27 05:28:24  Rev 1859   jdorje

	* game_servers/ggzcards/game.c:
	  And just like that, 15 lines of code gets us a 'last trick' window.


2001-06-27 04:06:12  Rev 1857   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Added 'Options' global message.


2001-06-27 03:58:29  Rev 1856   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Added extra features to Suaro, Bridge, and Euchre.


2001-06-27 02:09:58  Rev 1855   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Did a lot more work to get Euchre running.


2001-06-27 02:08:49  Rev 1854   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/cards.h:
	  Added card face names.


2001-06-26 19:44:32  Rev 1852   jdorje

	* game_servers/ggzcards/.cvsignore game_servers/ggzcards:
	  Added kdevelop project file to unincluded file list.


2001-06-26 19:32:50  Rev 1850   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c:
	  Changed server state and event data to be enumerations.


2001-06-26 19:24:26  Rev 1848   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/protocol.h 
	  game_servers/ggzcards/Makefile.am:
	  Created single protocol file protocol.h.


2001-06-26 18:54:06  Rev 1847   jdorje

	* game_servers/ggzcards/ggz.h game_servers/ggzcards/game.c 
	  game_servers/ggzcards/protocols.h:
	  Disassembled protocols.h; moved enumerations into ggz.h.


2001-06-26 08:29:18  Rev 1844   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/common.c:
	  Changed deck list and game list to be enumerations.


2001-06-26 00:34:32  Rev 1841   jdorje

	* game_servers/ggzcards/game.c:
	  Added the beginnings of a card-sorting routine for Skat.  It is 
	  quite apparent something more powerful will be needed.


2001-06-25 23:59:50  Rev 1840   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/cards.h 
	  game_servers/ggzcards/game.c:
	  Slightly hackish attempt to allow resorting of cards in the middle 
	  of a hand (in particular, for bridge).


2001-06-25 23:24:40  Rev 1839   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/game.c:
	  Moved compare_cards into game-specific code area.


2001-06-25 23:18:50  Rev 1838   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/game.c:
	  Moved game_valid_game into games files.


2001-06-25 23:16:07  Rev 1837   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Automated determination of bid texts.


2001-06-25 23:06:28  Rev 1836   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/game.c:
	  Added a little bit of code for Skat.


2001-06-25 22:49:17  Rev 1835   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/game.c:
	  Initial implementation of Euchre.


2001-06-25 21:29:56  Rev 1834   jdorje

	* game_servers/ggzcards/config/ggzcards.dsc:
	  We'll allow 5 or 6 players too.


2001-06-25 20:58:50  Rev 1832   jdorje

	* game_servers/ggzcards/config/ggzcards.dsc:
	  Three-player games are possible.


2001-06-25 19:03:41  Rev 1826   jdorje

	* game_servers/ggzcards/common.c:
	  Table message shouldn't be sent before players are initialized.


2001-06-25 03:12:45  Rev 1823   rgade

	* ggzd/login.c configure.in ggzd/chat.c ggzd/players.c ggzd/event.c 
	  ggzd/hash.c:
	  - Bumped ggzd version to 0.0.5pre
	  - Convert names to lowercase before sending to hash or db functions


2001-06-22 21:54:06  Rev 1820   jdorje

	* configure.in:
	  Oops!  Left out this file in adding new directory.


2001-06-22 19:08:59  Rev 1818   jdorje

	* game_servers/ggzcards/config/.cvsignore 
	  game_servers/ggzcards/config:
	  Added cvsignore for new directory.


2001-06-22 19:07:53  Rev 1817   jdorje

	* game_servers/ggzcards/ggzcards.dsc 
	  game_servers/ggzcards/config/Makefile.am 
	  game_servers/ggzcards/config/ggzcards-bridge.room 
	  game_servers/ggzcards/ggzcards.room 
	  game_servers/ggzcards/config/ggzcards.dsc 
	  game_servers/ggzcards/config/ggzcards.room 
	  game_servers/ggzcards/config/ggzcards-lapocha.dsc 
	  game_servers/ggzcards/config/ggzcards-lapocha.room 
	  game_servers/ggzcards/config/ggzcards-spades.dsc 
	  game_servers/ggzcards/config/ggzcards-spades.room 
	  game_servers/ggzcards/config 
	  game_servers/ggzcards/config/ggzcards-hearts.dsc 
	  game_servers/ggzcards/config/ggzcards-hearts.room 
	  game_servers/ggzcards/config/ggzcards-suaro.dsc 
	  game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/config/ggzcards-suaro.room 
	  game_servers/ggzcards/config/ggzcards-bridge.dsc:
	  Expanded module files (dsc and room).


2001-06-22 17:19:29  Rev 1815   jdorje

	* game_servers/ggzcards/common.c:
	  No longer send a token seat count at the beginning.


2001-06-22 17:10:36  Rev 1813   jdorje

	* game_servers/ggzcards/protocol.html:
	  Added cross-referencing tags.


2001-06-22 16:55:16  Rev 1812   jdorje

	* game_servers/ggzcards/protocol.html:
	  Added WH_MSG_TRICK protocol.


2001-06-22 16:48:46  Rev 1811   jdorje

	* game_servers/ggzcards/game.c:
	  Fixed bug in hearts/shooting the moon.


2001-06-22 16:36:06  Rev 1810   jdorje

	* game_servers/ggzcards/game.c:
	  Improved max_hand_size initialization.


2001-06-22 05:12:43  Rev 1805   jdorje

	* game_servers/ggzcards/common.c:
	  Added two small debugging lines.


2001-06-22 04:54:23  Rev 1803   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Added set_num_seats to provide a more elegant way to create seats 
	  at multiple locations.


2001-06-22 01:53:38  Rev 1800   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/game.c:
	  Added a lot of features to the game hearts.


2001-06-22 01:15:31  Rev 1799   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/game.c:
	  Expanded global messages because there's more space for them now.


2001-06-21 10:28:10  Rev 1790   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/game.c:
	  Added kitty/dummy revealing code so they'll stay revealed on rejoin.


2001-06-21 10:27:12  Rev 1789   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed buglet.


2001-06-21 09:46:14  Rev 1785   jdorje

	* game_servers/ggzcards/common.c:
	  Finished fixing that bug.


2001-06-21 09:40:21  Rev 1784   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed obscure bug causing not being able to play from the dummy 
	  upon rejoining a game.


2001-06-21 09:14:35  Rev 1780   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Added extra player message update points to use the 'wait for ...' 
	  message.


2001-06-21 06:25:05  Rev 1779   jdorje

	* game_servers/ggzcards/common.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Added support for the WH_MSG_TABLE protocol; moved table card data 
	  from a per-player to a per-seat basis.


2001-06-21 06:01:11  Rev 1777   jdorje

	* game_servers/ggzcards/protocol.html:
	  Removed all the nbsp spaces composer put in the file.


2001-06-21 05:59:45  Rev 1776   jdorje

	* game_servers/ggzcards/protocol.html:
	  Added WH_MSG_TABLE to the specification.


2001-06-21 05:54:13  Rev 1775   jdorje

	* game_servers/ggzcards/protocol.html:
	  Added protocol specification file.


2001-06-21 05:51:13  Rev 1774   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Fixed several buglets in the creation of player messages.


2001-06-21 05:41:27  Rev 1772   jdorje

	* game_servers/ggzcards/common.c:
	  Fixed two buglets: one with ggz status, the other with restarting 
	  after a player rejoins.


2001-06-20 22:12:06  Rev 1770   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Added commented-out code to mark players as being 'waiting for 
	  bid' or 'waiting for play'.


2001-06-20 22:04:20  Rev 1769   jdorje

	* game_servers/ggzcards/game.c:
	  In Suaro and Bridge, you shouldn't be labeled as declarer until 
	  you've won the bid.


2001-06-20 21:55:33  Rev 1768   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/common.h 
	  game_servers/ggzcards/game.h game_servers/ggzcards/ggz.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Dealt with or removed a lot of TODO's.


2001-06-20 20:34:44  Rev 1767   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Implemented minimum bids for spades; also added lots of debugging 
	  messages.


2001-06-20 19:48:17  Rev 1766   jdorje

	* game_servers/ggzcards/games.c game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/main.c 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Added header comments to all game.c functions.


2001-06-20 19:18:50  Rev 1765   jdorje

	* game_servers/ggzcards/game.c:
	  Fixed game_end_trick so both players on a team have their tricks 
	  updated after each trick.


2001-06-20 19:13:33  Rev 1764   jdorje

	* game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Moved game definition to common.c.


2001-06-20 19:09:47  Rev 1763   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/games.h game_servers/ggzcards/common.c 
	  game_servers/ggzcards/game.c:
	  Moved more functions and data into games.[ch].


2001-06-20 18:54:47  Rev 1762   jdorje

	* game_servers/ggzcards/.cvsignore game_servers/ggzcards:
	  Updated for new project.


2001-06-20 18:54:03  Rev 1761   jdorje

	* game_servers/ggzcards/cards.c game_servers/ggzcards/games.c 
	  game_servers/ggzcards/common.h game_servers/ggzcards/game.h 
	  game_servers/ggzcards/cards.h game_servers/ggzcards/games.h 
	  game_servers/ggzcards/main.c game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/common.c game_servers/ggzcards/game.c:
	  Moved functions out out of game.c, creating more appropriate files 
	  for them.


2001-06-20 08:08:07  Rev 1759   jdorje

	* game_servers/ggzcards/game.h game_servers/ggzcards/game.c:
	  Fixed bridge dummy playing and playing from hands other than your 
	  own.


2001-06-20 06:50:50  Rev 1758   jdorje

	* game_servers/ggzcards/ggzcards.dsc game_servers/ggzcards/game.h 
	  game_servers/ggzcards/main.c game_servers/ggzcards/protocols.h:
	  Brought files up-to-date for new project.


2001-06-20 06:05:10  Rev 1757   jdorje

	* game_servers/ggzcards/ggzcards.dsc game_servers/ggzcards/.
	  cvsignore game_servers/ggzcards/cards.c game_servers/ggzcards/ggz.
	  h game_servers/ggzcards/game.h game_servers/ggzcards/ggzcards.room 
	  configure.in game_servers/ggzcards game_servers/ggzcards/cards.h 
	  game_servers/Makefile.am game_servers/ggzcards/main.c 
	  game_servers/ggzcards/ggz.c game_servers/ggzcards/Makefile.am 
	  game_servers/ggzcards/game.c game_servers/ggzcards/protocols.h:
	  Added GGZCards server sources.  These were originally based upon 
	  the La Pocha code, but were heavily modified before being imported.


2001-06-18 22:25:57  Rev 1748   riq

	* game_servers/libggzmod/Makefile.in 
	  game_servers/libggzmod/ggz_server.h game_servers/libggzmod/ggz.c 
	  game_servers/libggzmod/Makefile.am game_servers/libggzmod 
	  game_servers/libggzmod/ggz_protocols.h:
	  libggzmod for the server.
	  this is more or less a copy of the ggz.c file that are in most of 
	  the
	  internal games, with some renamed functions to avoid collision


2001-06-18 02:46:19  Rev 1743   rgade

	* ggz_server.spec:
	  - .spec file updates - these were actually necessary for 0.0.4, 
	  but as they
	    aren't part of the distros they needn't be tagged as such


2001-06-17 20:56:23  Rev 1733   rgade

	* ChangeLog:
	  - Updated ChangeLog


2001-06-16 04:10:00  Rev 1724   rgade

	* doc/admin-guide.txt:
	  - Mini ggzd administration guide updated


2001-06-16 03:44:43  Rev 1722   rgade

	* game_servers/spades/engine_func.c game_servers/dots/ggz.c 
	  ggzd/table.c game_servers/krosswater/zoneserver/ZoneGGZModGGZ.cpp 
	  ggzd/parse_opt.c game_servers/reversi/ggz.c 
	  game_servers/tictactoe/ggz.c game_servers/hastings/ggz.c 
	  game_servers/combat/combat.c ggzd/motd.c ggzd/login.c 
	  game_servers/spades/err_func.c game_servers/chinese-checkers/ggz.c 
	  game_servers/chess/ggz.c game_servers/combat/ggz.c 
	  game_servers/lapocha/ggz.c:
	  - Applied snprintf patches to avoid buffer overruns


2001-06-14 21:58:52  Rev 1721   bmh

	* NEWS:
	  - Updated NEWS file for 0.0.4 release


2001-06-14 08:33:27  Rev 1714   bmh

	* README.GGZ configure.in ggz_server.spec Makefile.am:
	  - Updated docs
	  - Bumped version to 0.0.4


2001-06-14 06:52:34  Rev 1706   bmh

	* man/Makefile.am:
	  - Use SUBDIRS = . otherwise 'make dist' fails
	  - Put $(man_MANS) in EXTRA_DIST otherwise the man page doesn't get
	    included in the tarball


2001-06-14 06:51:11  Rev 1705   bmh

	* game_servers/krosswater/Makefile.am 
	  game_servers/krosswater/stackpath/Makefile.am 
	  game_servers/krosswater/zoneserver/Makefile.am:
	  - Fix name of description and room files to krosswater, not hastings
	  - List header files in Makefile.am, otherwise they don't get 
	  included
	    in the tarball
	  - Use include paths relative to $(top_srcdir) otherwise people can't
	    build outside the srcdir.


2001-06-08 18:54:17  Rev 1684   dr_maux

	* .cvsignore:
	  - add build-stamp to cvsignore


2001-06-08 18:53:50  Rev 1683   dr_maux

	* man/ggz-txt.6 man/Makefile.am:
	  - ouch! put ggz-txt.6 into wrong directory :)


2001-06-08 18:02:38  Rev 1679   dr_maux

	* man/ggz-txt.6 man/Makefile.am:
	  - add man page


2001-06-08 17:07:53  Rev 1677   dr_maux

	* README.GGZ:
	  - actually add readme.ggz


2001-06-08 16:55:23  Rev 1673   dr_maux

	* configure.in Makefile.am:
	  - create Makefile in man dir


2001-06-08 16:54:52  Rev 1672   dr_maux

	* man/Makefile.am man/.cvsignore man/ggzd.6 man:
	  - add man page


2001-06-07 21:28:55  Rev 1664   dr_maux

	* debian/docs:
	  - add project-wide readme file


2001-06-02 20:25:29  Rev 1634   dr_maux

	* configure.in:
	  - find new easysock version


2001-06-02 20:20:42  Rev 1631   dr_maux

	* debian/postinst debian/prerm:
	  - suppress warning messages on server startup/shutdown


2001-06-02 17:16:31  Rev 1627   dr_maux

	* debian/ggzd.init.d:
	  - improved start/stop code of the server


2001-05-30 21:33:24  Rev 1595   jzaun

	* configure.in:
	  - Fixed spelling


2001-05-30 13:25:06  Rev 1576   dr_maux

	* debian debian/control debian/postinst debian/postrm debian/shlibs 
	  debian/prerm debian/changelog debian/conffiles debian/copyright 
	  debian/docs debian/rules debian/.cvsignore debian/README.Debian 
	  debian/ggzd.init.d game_servers/krosswater/zoneserver/Makefile.am:
	  - debianized source tree
	  - don't install Zone headers


2001-05-29 20:00:55  Rev 1569   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZ.h:
	  - added string.h


2001-05-22 04:42:22  Rev 1552   bmh

	* game_servers/spades/spades.dsc:
	  - Bumped version nbumber to 0.0.3 because of incompatible protocol
	    change


2001-05-22 02:37:44  Rev 1550   bmh

	* game_servers/spades/engine_func.c:
	  - Once all players are "seated", send them their player numbers.  
	  This
	    enables player 0 to send us the game options


2001-05-19 22:52:44  Rev 1534   dr_maux

	* configure.in:
	  - create krosswater makefiles in configure.in


2001-05-19 22:50:42  Rev 1533   dr_maux

	* game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/Makefile.am:
	  - compile krosswater server on default
	  - fix krosswater bug


2001-05-12 19:20:56  Rev 1514   dr_maux

	* game_servers/krosswater/krosswater_server.cpp:
	  - send winner


2001-05-12 17:55:31  Rev 1513   dr_maux

	* game_servers/krosswater/krosswater.dsc:
	  - fixed number of valid players


2001-05-11 22:50:08  Rev 1511   dr_maux

	* game_servers/krosswater/krosswater.dsc game_servers/krosswater/.
	  cvsignore game_servers/krosswater/krosswater.room 
	  game_servers/krosswater game_servers/krosswater/Makefile.am 
	  game_servers/krosswater/krosswater_server.cpp:
	  - removed nasty move bug (move stone, not water)


2001-04-29 17:12:07  Rev 1470   dr_maux

	* game_servers/krosswater/stackpath/.cvsignore 
	  game_servers/krosswater/zoneserver/.cvsignore 
	  game_servers/krosswater/stackpath 
	  game_servers/krosswater/zoneserver:
	  -added .cvsignore files (the usual stuff)
	  -modified Makefile to fit current GGZ game module concept


2001-04-29 16:47:09  Rev 1469   dr_maux

	* game_servers/hastings/game.c game_servers/hastings/game.h:
	  - get rid of move bug (better checked now)
	  - fixed bug so that 8 players can now participate
	  - AI improvement: enemy is now the first target


2001-04-27 23:57:56  Rev 1458   bmh

	* ggzd/table.c:
	  - Handle case where user sends us a seat with GGZ_SEAT_PLAYER:
	    E_BAD_OPTIONS
	  - In table_check() handle unknown seat types with E_BAD_OPTIONS


2001-04-23 04:04:58  Rev 1440   rgade

	* game_servers/chess/.cvsignore game_servers/chess 
	  game_servers/chess/libcgc/.cvsignore game_servers/chess/libcgc:
	  - .cvsignore files for chess server


2001-04-23 04:03:27  Rev 1439   rgade

	* game_servers/chinese-checkers/.cvsignore 
	  game_servers/chinese-checkers:
	  - Added .cvsignore file


2001-04-08 00:27:19  Rev 1405   perdig

	* game_servers/reversi/Makefile.am game_servers/reversi/game.c:
	  - Added a 1 second delay before the AI sends a move
	  - Added -leasysock to $(LDADD) in Makefile.am (for some weird 
	  reason, it was missing and the server wouldn't compile)


2001-04-05 19:29:33  Rev 1392   dr_maux

	* game_servers/krosswater/stackpath/cwpathitem.h 
	  game_servers/krosswater/zoneserver/ZoneGGZModGGZ.cpp 
	  game_servers/krosswater/stackpath/pathitem.cpp 
	  game_servers/krosswater/krosswater_server.h 
	  game_servers/krosswater/stackpath/Makefile.stackpath 
	  game_servers/krosswater/stackpath 
	  game_servers/krosswater/zoneserver/ZoneGGZModGGZ.h 
	  game_servers/krosswater/stackpath/pathitem.h 
	  game_servers/krosswater/stackpath/main.cpp 
	  game_servers/krosswater/stackpath/Makefile.am 
	  game_servers/krosswater/zoneserver/ZoneGGZModServer.cpp 
	  game_servers/krosswater game_servers/krosswater/stackpath/README.
	  stackpath game_servers/krosswater/zoneserver/ZoneGGZModServer.h 
	  game_servers/krosswater/zoneserver game_servers/krosswater/main.
	  cpp game_servers/krosswater/stackpath/cwpathitem.cpp 
	  game_servers/krosswater/zoneserver/ZoneProtocols.h 
	  game_servers/krosswater/Makefile.am 
	  game_servers/krosswater/zoneserver/Makefile.am 
	  game_servers/krosswater/krosswater_server.cpp 
	  game_servers/krosswater/zoneserver/ZoneGGZ.h:
	  Initial krosswater server sources
	  contains server-side Zone files
	  contains Stackpath library


2001-03-31 06:31:35  Rev 1368   rgade

	* game_servers/dots/dots.dsc:
	  - Reset server version to 0.0.1 to match protocol revision number 
	  - this is
	    OK as there really weren't any changes to the server anyway


2001-03-30 23:17:21  Rev 1349   bmh

	* ggzd/table.c:
	  - New function table_split_args() to split command line string into
	    array of args (thanks to riq for the patch)


2001-03-30 21:56:03  Rev 1348   bmh

	* configure.in:
	  - Portablilty fix for FreeBSD: look for threads in -lc_r


2001-03-29 22:51:37  Rev 1346   bmh

	* game_servers/chess/libcgc/Makefile.am Makefile.am 
	  game_servers/reversi/Makefile.am game_servers/spades/spades.room 
	  game_servers/chess/Makefile.am game_servers/combat/Makefile.am:
	  - Lots of little fixes for files not being included in the dist: 
	  'make
	    dist' should work now


2001-03-29 22:27:05  Rev 1344   bmh

	* game_servers/lapocha/Makefile.am game_servers/dots/Makefile.am 
	  ggzd/Makefile.am configure.in game_servers/reversi/Makefile.am 
	  game_servers/spades/Makefile.am game_servers/tictactoe/Makefile.am 
	  game_servers/hastings/Makefile.am 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/chess/Makefile.am game_servers/combat/Makefile.am:
	  - Removed included easysock.  easysock 0.2.X must now be installed 
	  on
	    the system in order to compile


2001-03-25 05:06:59  Rev 1318   perdig

	* game_servers/reversi/game.c:
	  - Fixed a really dumb bug where an invalid move would break 
	  complete havoc in the server


2001-03-17 16:14:19  Rev 1309   perdig

	* game_servers/combat/combat.c game_servers/combat/game.c:
	  - Fixed some spelling errors
	  - Fixed a division by zero bug when Silent Defense was set


2001-03-17 05:31:18  Rev 1305   rgade

	* game_servers/dots/dots.dsc:
	  - Version bump - Dots is now version 0.0.2


2001-03-14 22:49:42  Rev 1276   perdig

	* game_servers/combat/game.c:
	  - Fixed bug with the random setup option


2001-03-10 03:44:10  Rev 1240   perdig

	* game_servers/chess/chess.dsc:
	  - Updated the version number to 0.0.6 (so that it matches the 
	  client one)


2001-03-10 03:10:01  Rev 1234   perdig

	* game_servers/reversi/reversi.dsc:
	  - Updated the server .dsc so that it matchs the client protocol 
	  version (it is 0.0.1 while it should be 0.0.5)


2001-03-04 23:09:35  Rev 1196   rgade

	* game_servers/chinese-checkers/game.c:
	  - Added support to server for leave/rejoin
	  - A few miscellaneous fixes


2001-03-03 17:36:48  Rev 1188   perdig

	* game_servers/chess/game.c:
	  - Fixed bug when calling a flag using server clock, that led to 
	  the wrong
	    player being named winner
	  - Only start the time after both players have moved, not only the 
	  white one


2001-02-27 21:41:39  Rev 1178   jzaun

	* ggzd/ggzd.motd:
	  - MOTD update to new colors


2001-02-22 21:38:39  Rev 1161   bugg

	* game_servers/chess/libcgc/movecheck.c:
	  Sync with the other versions.  I'm tired
	  of typing out all of these commit messages! :)
	  We're fooling with the check to see if we're entering
	  check.
	  (Do you folks realize when I make a change to libcgc,
	  I have to make three commits?)


2001-02-20 18:06:23  Rev 1137   perdig

	* game_servers/chess/chess.h game_servers/chess/game.h 
	  game_servers/chess/game.c:
	  - Changed REQ_UPDATE to send a RSP_UPDATE to both players, instead 
	  of just the
	    one that requested it, and update the time structures as well. 
	  (so that, in
	    server clock, if a player is out of time it won't just refuse to 
	  play so that
	    the server never knows his time is over)


2001-02-19 23:22:16  Rev 1133   bugg

	* game_servers/chess/libcgc/movecheck.h 
	  game_servers/chess/libcgc/movecheck.c:
	  Remove the debugging info that I had placed in
	  Fix the bugs that were reported to me by jzaun
	  Namely, interposition code, en passant code, and
	  contact mate code


2001-02-19 17:08:55  Rev 1126   perdig

	* game_servers/chess/chess.h game_servers/chess/game.c:
	  - Changed protocol so that promoting of pieces now works


2001-02-18 23:36:09  Rev 1122   bugg

	* game_servers/chess/libcgc/movecheck.c:
	  Fix the bug introduced in last commit.


2001-02-18 23:28:16  Rev 1120   bugg

	* game_servers/chess/libcgc/movecheck.c:
	  Oops, I commited twice to the client and not once
	  to the server.  (and the latter of the commits to
	  the client was probably like whitespace)
	  Fixing the interposition bug introduced in the last
	  commit..
	  dunce cap: bugg


2001-02-18 22:45:08  Rev 1117   bugg

	* game_servers/chess/libcgc/movecheck.c:
	  Fix (haha, Fix- more like try to fix) a bug
	  that caused mates in which there was a piece that
	  would have been able to interpose if it wasn't pinned
	  to be recognised as checks.
	  I haven't tested this with the game that broke it,
	  but the patch has passed regression testing- and
	  everyone (jzaun, perdig) wants me to commit in the form
	  that it is.


2001-02-17 16:29:42  Rev 1107   bugg

	* game_servers/chess/libcgc/board.c 
	  game_servers/chess/libcgc/movecheck.h 
	  game_servers/chess/libcgc/cgc.c game_servers/chess/libcgc/games.c 
	  game_servers/chess/libcgc/cgc.h 
	  game_servers/chess/libcgc/movecheck.c:
	  Sync libcgc (in ggzd) to fischer's version.
	  Hopefully this won't break anything ^^; (should be no API changes)


2001-02-11 02:56:26  Rev 1073   perdig

	* game_servers/chess/game.c:
	  - Fixed a bug when translating between the representation of the 
	  moves used by
	    the protocol and by libcgc (it was just completely wrong)


2001-01-22 16:47:17  Rev 1052   rgade

	* game_servers/dots/game.c:
	  - Simulate that a bot always requests to play a new game


2001-01-20 01:17:20  Rev 1036   dr_maux

	* game_servers/hastings/game.c:
	  Bugfix for game with 5 players and AI.


2001-01-14 07:12:03  Rev 1027   rgade

	* ggzd/ggzd.motd:
	  - Name change "GNU-Gaming Zone" -> "GGZ Gaming Zone"


2001-01-14 07:02:57  Rev 1026   rgade

	* ggzd/parse_opt.c NEWS README:
	  - Name change "Gnu Gaming Zone" -> "GGZ Gaming Zone"


2001-01-14 05:58:58  Rev 1024   rgade

	* game_servers/chinese-checkers/game.c:
	  - Removed temporary debugging printf's
	  - Eliminated all compiler warnings


2001-01-11 12:17:48  Rev 1016   perdig

	* game_servers/chess/game.c:
	  - The time for the first turn is not counted anymore
	  - When some client sends REQ_FLAG and clock type is SERVER, it 
	  will get the
	    time that the current player is taking to think about the move 
	  to check if
	    his flag has fall. (This way, even if the player never sends a 
	  move when his
	    time is over, the other player can still call a flag)
	  - Fixed but that wasn't sending time = 0
	  - The player that is out of time can't claim. When a player is out 
	  of time,
	    it's forced to be 0, not going negative ever (looks better)


2001-01-10 17:37:53  Rev 1014   perdig

	* game_servers/chess/chess.h game_servers/chess/game.h 
	  game_servers/chess/main.c game_servers/chess/game.c:
	  - Added CHESS_REQ_DRAW to the protocol
	  - The server should handle draws in a nice way now


2001-01-10 15:24:05  Rev 1012   perdig

	* game_servers/chess/chess.h game_servers/chess/game.h 
	  game_servers/chess/game.c:
	  - Added CHESS_REQ_FLAG to the protocol, used by the client when he 
	  wants to
	    end the game because his oponnent has run out of time (the 
	  client will have
	    auto-flag, not the server)
	  - Added gameover codes, and updated EVENT_GAMEOVER to send the 
	  right ones to
	    the player (no work done on the draw stuff, though)


2001-01-10 13:24:30  Rev 1011   perdig

	* game_servers/chess/chess.h game_servers/chess/libcgc/board.c 
	  game_servers/chess/libcgc/movecheck.h game_servers/chess/game.h 
	  game_servers/chess/libcgc/cgc.c game_servers/chess/libcgc/games.c 
	  game_servers/chess/libcgc/cgc.h game_servers/chess/libcgc/games.h 
	  game_servers/chess/libcgc/movecheck.c game_servers/chess/game.c:
	  - In libcgc:
	    Applied Dan's patch to remove the player argument to cgc_join_game
	  - In the chess server:
	    Added CHESS_REQ_UPDATE and CHESS_RSP_UPDATE to the protocol.
	      - Send the current time from the server to the client, so that 
	  he can
	        update his time structures if they are out of sync
	    Added CHESS_MSG_UPDATE to the protocol.
	      - Used by the client when using CLOCK_CLIENT, to note how much 
	  time he
	        has spent until now, and hasn't made a move yet. This makes 
	  the server
	        send CHESS_RSP_UPDATE to the other player. (the use of it: 
	  when the time
	        is over in CLOCK_CLIENT mode, the losing client sends this 
	  message to the
	        server, that updates his structures and send them to the 
	  other player.
	        Then he can decide about ending the game or not)


2001-01-09 20:42:29  Rev 1009   dr_maux

	* game_servers/hastings/game.c:
	  Changed HASTINGS_STATE_INIT to HASTINGS_STATE_WAIT after game 
	  launching; this
	  prevents black client screens.


2001-01-08 23:09:00  Rev 1006   dr_maux

	* game_servers/hastings game_servers/hastings/main.c 
	  game_servers/hastings/hastings.dsc game_servers/hastings/game.c 
	  game_servers/hastings/.cvsignore game_servers/hastings/game.h:
	  Server updates include e.g. game over handling.


2001-01-08 18:31:48  Rev 1003   rgade

	* game_servers/chinese-checkers/game.h 
	  game_servers/chinese-checkers/ai.c 
	  game_servers/chinese-checkers/game.c:
	  - Enhanced the AI by making it give precedence to more distant 
	  marbles
	    as the game progresses


2001-01-08 03:41:27  Rev 999    rgade

	* game_servers/chinese-checkers/game.c:
	  - Added path display routines
	  - Added 1 second delay in server so things don't blink super-quick 
	  with AI's
	  - Updated statusbar to pop entries after they are done displaying


2001-01-07 23:20:00  Rev 998    rgade

	* game_servers/chess/Makefile.am:
	  - Fixed problems which prevented easysock from being found


2001-01-07 16:29:31  Rev 996    perdig

	* game_servers/chess/game.c:
	  - Fixed bugs with the clock stuff (should be working fine now)


2001-01-06 17:39:53  Rev 994    perdig

	* game_servers/chess/chess.h game_servers/chess/libcgc/movecheck.c 
	  game_servers/chess/game.c:
	  - Changed protocol
	    REQ_MOVE and MSG_MOVE now sends (char)FROM and (char)TO
	    with the index of the source and destination positions on the 
	  board
	  - Fixed some more bugs
	  - The player id in cgcs aren't the seat numbers any more, but 5 
	  and 6
	    (because 1 was the code for EMPTY seat, and it was causing 
	  problems)
	  - libcgc/movecheck.c:85
	    Changed
	      if(curgame->player1 == NULL || curgame->player2 == NULL)
	    To
	      if(curgame->player1 == EMPTY || curgame->player2 == EMPTY)
	    As player1 and player2 aren't pointers and are initialized as 
	  EMPTY, not
	    NULL


2001-01-06 03:00:03  Rev 989    rgade

	* game_servers/chinese-checkers/ccheckers.dsc:
	  - Fixed an error which disallowed having four bots (six players, 
	  two human)


2001-01-06 01:59:55  Rev 988    rgade

	* game_servers/chinese-checkers/ai.c 
	  game_servers/chinese-checkers/game.c:
	  - Corrected player move order
	  - Added statusbar messages for movement and game over


2001-01-06 00:44:08  Rev 987    jzaun

	* configure.in:
	  Updated the configure.in script to output useful information about 
	  the
	  resulting build.


2001-01-05 23:12:39  Rev 982    bugg

	* game_servers/chess/libcgc/games.c:
	  Fix returning E_GAMEFULL and E_SEATFULL - it was doing
	  the exact opposite of what it should before this fix.


2001-01-05 18:27:38  Rev 981    perdig

	* game_servers/chess/libcgc/games.c game_servers/chess/game.c:
	  - Fixed typos and other simple mistakes (like using es_read_int 
	  instead of
	    es_read_char)
	  - In libcgc/games.c:139
	    Changed
	       joined->player2 = player;
	    To
	       joined->player1 = player;
	    From what it seems, it was a typo... and it wasn't allowing the 
	  black player
	    to join the table


2001-01-04 23:41:32  Rev 979    perdig

	* game_servers/chess/game.h:
	  - Ops, another file


2001-01-04 23:40:36  Rev 978    perdig

	* game_servers/chess/ggz.h game_servers/chess/protocols.h:
	  - Ops, forgot those files


2001-01-04 22:59:13  Rev 977    perdig

	* game_servers/chess/libcgc/movecheck.h game_servers/chess/chess.dsc 
	  game_servers/chess/chess.room game_servers/chess/libcgc 
	  game_servers/chess/game.c game_servers/chess/chess.h 
	  game_servers/chess/libcgc/board.c 
	  game_servers/chess/libcgc/Makefile.am configure.in 
	  game_servers/chess game_servers/chess/libcgc/board.h 
	  game_servers/chess/libcgc/cgc.c game_servers/chess/libcgc/games.c 
	  game_servers/Makefile.am game_servers/chess/libcgc/games.h 
	  game_servers/chess/libcgc/cgc.h game_servers/chess/main.c 
	  game_servers/chess/ggz.c game_servers/chess/libcgc/movecheck.c 
	  game_servers/chess/Makefile.am:
	  - Initial commit of chess server


2001-01-04 08:03:30  Rev 976    rgade

	* game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/chinese-checkers/ai.c:
	  - Basic AI added - easy to beat


2001-01-04 02:20:58  Rev 975    rgade

	* game_servers/chinese-checkers/game.c:
	  + Fixed game_find_path()
	  + Server determines end of game and winner
	  + Clients accept end of game message
	  - No statusbar prompts or anything yet


2001-01-03 04:31:24  Rev 974    rgade

	* game_servers/chinese-checkers/ggz.h 
	  game_servers/chinese-checkers/ai.h 
	  game_servers/chinese-checkers/game.h game_servers/chinese-checkers 
	  configure.in game_servers/chinese-checkers/ccheckers.dsc 
	  game_servers/chinese-checkers/ccheckers.room 
	  game_servers/chinese-checkers/main.c game_servers/Makefile.am 
	  game_servers/chinese-checkers/ggz.c 
	  game_servers/chinese-checkers/Makefile.am 
	  game_servers/chinese-checkers/ai.c 
	  game_servers/chinese-checkers/game.c 
	  game_servers/chinese-checkers/protocols.h:
	  - First semi-playable version of Chinese Checkers


2000-12-31 22:22:11  Rev 971    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.dsc 
	  game_servers/combat/main.c game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Cleaned up the debug messages
	  - Changed game version to 1.0


2000-12-31 21:37:29  Rev 970    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c:
	  - combat_options_describe now supports a quick description option, 
	  to be used
	    w/ the preview of the map


2000-12-31 18:48:14  Rev 967    perdig

	* game_servers/combat/combat.h game_servers/combat/game.c:
	  - If the server receives a NULL option string it will change the 
	  current host
	    player (ie, it will ask the next player in the table for the 
	  game options)
	  - If someone who isn't the current host send the options, the 
	  server won't
	    accept them
	  - Fixed some bugs due to the RANDOM_SETUP option:
	    - The game was sometimes starting before players have sent setup
	    - The game state wasn't being update


2000-12-31 00:52:41  Rev 965    perdig

	* game_servers/combat/combat.h game_servers/combat/game.h 
	  game_servers/combat/combat.c game_servers/combat/game.c:
	  - Added 2 more options:
	    Rush Attack
	    Random setup
	  - All the 16 binary options are now implemented


2000-12-30 21:24:03  Rev 964    perdig

	* game_servers/combat/combat.h game_servers/combat/game.c:
	  - Added 3 more options:
	    Unknown Victor
	    Silent Offense
	    Silent Defense


2000-12-30 18:40:34  Rev 962    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Added Random Outcome of Attack option
	  - Changed protocol for changing options (was causing problems when 
	  sending a
	    255 byte... it would be converted to 0 and would mean the end of 
	  the options
	    string)


2000-12-30 14:55:21  Rev 961    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c:
	  - Added a combat_options_describe to combat.[ch] that returns a 
	  string w/ the
	    current game options


2000-12-30 14:10:43  Rev 958    perdig

	* game_servers/combat/combat.c:
	  - Fixed bug with Scouts attacking w/ diagonal move enabled


2000-12-29 23:11:13  Rev 953    perdig

	* game_servers/combat/combat.c:
	  - Added 5 options
	    Super Scout
	    Diagonal Move
	    Special Forces Sergeant
	    Remember enemy units
	    Hide enemy list


2000-12-29 21:40:17  Rev 951    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Implemented 5 options:
	    Open Map
	    One Time Bomb
	    Terrorist Spy
	    Moving Bombs
	    Moving Flags


2000-12-29 19:08:22  Rev 950    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Added preliminary support for the 16 binary game options


2000-12-24 22:34:22  Rev 946    perdig

	* game_servers/combat/game.c:
	  - Added a game_send_players() call when someones leaves the game 
	  (it wasn't
	    updating the client's player list)


2000-12-24 20:32:48  Rev 945    perdig

	* game_servers/combat/combat.h game_servers/combat/game.c:
	  - It's now possible to leave and then return to a running game (at 
	  any moment of it)


2000-12-24 18:30:57  Rev 944    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Added the ARMY(OPTIONS, TYPE) macro that is on client's combat.h 
	  file
	  - Fixed a bug (missing \0 on combat_options_string_read) that 
	  caused the client
	    to think it had a wrong version of the protocol


2000-12-24 03:45:04  Rev 941    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Moved all the options checking stuff to combat.[ch]
	  - combat_options_string_read now makes a copy of option string and 
	  uses it, so
	    that the string isn't corrupted after the call to it


2000-12-23 23:27:29  Rev 940    perdig

	* game_servers/combat/combat.h game_servers/combat/main.c 
	  game_servers/combat/combat.c game_servers/combat/game.c:
	  - It now uses the same combat.[ch] files of the client


2000-12-09 00:35:56  Rev 912    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Modified protocol to include support for game options (details 
	  in combat.h)
	  - Added a O_NAME option (Map name)


2000-12-03 20:25:57  Rev 897    jzaun

	* configure.in game_servers/Makefile.am:
	  - Added Hastings to the configre process


2000-11-23 20:48:02  Rev 878    dr_maux

	* game_servers/hastings game_servers/hastings/main.c 
	  game_servers/hastings/ggz.c game_servers/hastings/hastings.dsc 
	  game_servers/hastings/Makefile.am game_servers/hastings/game.c 
	  game_servers/hastings/protocols.h game_servers/hastings/hastings.
	  room game_servers/hastings/ggz.h game_servers/hastings/game.h:
	  -the server part of Hastings1066
	  -also unchanged


2000-11-10 07:36:04  Rev 861    rgade

	* ggzd/Makefile.am configure.in acconfig.h ggzd/ggzdb_db3.c:
	  - Added libdb3 support to ggzd server


2000-11-09 18:50:49  Rev 857    rgade

	* configure.in acconfig.h ggzd/ggzdb_db2.c:
	  - Modified db2 library and header lookup to work with RH7


2000-10-26 23:48:50  Rev 834    perdig

	* game_servers/combat/combat.h game_servers/combat/game.h 
	  game_servers/combat/game.c:
	  - Fixed the sync message
	  - Two modes of sync message: Full (with all the units) and Normal 
	  (with only
	  	the units this player knows)
	  - Sends a full sync message when the game is over


2000-10-22 15:38:11  Rev 829    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Added common functions to combat.[ch] to check if a move is valid
	  - Now uses this functions instead of the old, ugly, way


2000-10-21 21:37:34  Rev 825    perdig

	* game_servers/combat/combat.h game_servers/combat/.cvsignore 
	  game_servers/combat game_servers/combat/main.c 
	  game_servers/combat/combat.c game_servers/combat/game.c:
	  - Responds to CBT_REQ_SYNC (sends the game sync)
	  - Responds to CBT_REQ_OPTIONS (sends the current game options)
	  - Checks the validity of the options sent
	  - Checks the validity of the setup sent


2000-10-21 01:11:59  Rev 822    perdig

	* game_servers/combat/combat.dsc:
	  - Fixed the game dir on the combat.dsc (it pointed to my home dir..
	  . ops! :) )


2000-10-20 23:47:51  Rev 819    perdig

	* game_servers/combat/combat.h game_servers/combat/.cvsignore 
	  game_servers/combat/game.h game_servers/combat 
	  game_servers/combat/game.c:
	  - Added .cvsignore (had forgotten)
	  - Server receives CBT_REQ_MOVE msgs, and answers with
	  	CBT_MSG_MOVE or CBT_MSG_ATTACK
	  - Implemented moving logic, with some sanity checks (to avoid 
	  cheating)
	  - Checks if the game is over, and send a CBT_MSG_GAMEOVER if its 
	  the case
	  - In general: The game now works! :)


2000-10-19 18:59:04  Rev 814    perdig

	* game_servers/combat/combat.h game_servers/combat/game.h 
	  game_servers/combat/game.c:
	  - Requests player setups
	  - Receives player setups
	  	(Does some basic validity checks)
	  - Starts the game when all the players are done


2000-10-15 18:34:36  Rev 807    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.c 
	  game_servers/combat/game.c:
	  - Sends player names to the client


2000-10-13 19:47:38  Rev 790    perdig

	* configure.in:
	  - Creates a Makefile for the Combat game module


2000-10-13 19:45:33  Rev 789    perdig

	* game_servers/combat/combat.h game_servers/combat/combat.dsc 
	  game_servers/combat/ggz.h game_servers/combat/game.h 
	  game_servers/combat game_servers/combat/combat.room 
	  game_servers/combat/main.c game_servers/combat/combat.c 
	  game_servers/combat/ggz.c game_servers/combat/Makefile.am 
	  game_servers/combat/game.c game_servers/combat/protocols.h:
	  Initial files for the Combat game module server. Already 
	  implemented:
	  - Launching the table
	  - Joining / Leaving the table
	  - Sending the joining player game info (number of players, seat 
	  number, etc)
	  - Asking the host player for the options
	  - Receiving the options from him
	  - Broadcasting this options to the other players


2000-10-13 19:42:57  Rev 788    perdig

	* game_servers/Makefile.am:
	  - Creates Makefile for the Combat game module


2000-10-10 00:17:18  Rev 778    perdig

	* game_servers/reversi/main.c game_servers/reversi/game.c:
	  - Fixed bug that caused the server to hang when the player did 
	  stupid things
	  - Sends sync to the player when he does stupid things


2000-10-08 19:42:17  Rev 774    perdig

	* game_servers/reversi/main.c game_servers/reversi/game.c 
	  game_servers/reversi/game.h:
	  - Honors a RVR_REQ_AGAIN message (added play again feature)


2000-09-27 00:00:55  Rev 738    perdig

	* game_servers/reversi/game.c game_servers/reversi/game.h:
	  - Fixed stupid bug that caused scores to be wrongly calculated
	  (no more tries to calculate the score from the players moves... do 
	  it by hand, checking each square)


2000-09-25 23:40:24  Rev 737    perdig

	* game_servers/reversi/game.c:
	  - Made AI work
	  - Added random AI (better than nothing!)


2000-09-25 20:37:19  Rev 735    perdig

	* game_servers/reversi/game.c game_servers/reversi/game.h:
	  - Added RVR_REQ_SYNC to protocol (client requesting sync)
	  - The server now honors the RVR_REQ_SYNC message (sends sync to 
	  the player)
	  - Fixed bug when a player was returning the game (ignored the 
	  current turn - reseted it to BLACK)


2000-09-24 22:51:26  Rev 730    bmh

	* configure.in game_servers/reversi/TODO game_servers/reversi/main.c 
	  game_servers/reversi/reversi.dsc game_servers/reversi/ggz.c 
	  game_servers/reversi/Makefile.am game_servers/Makefile.am 
	  game_servers/reversi/game.c game_servers/reversi/protocols.h 
	  game_servers/reversi/reversi.room game_servers/reversi/.cvsignore 
	  game_servers/reversi/ggz.h game_servers/reversi/game.h 
	  game_servers/reversi:
	  - Added reversi game module from Ismael Orenstein


2000-09-24 21:25:44  Rev 728    rgade

	* ggzd/parse_opt.c ggzd/ggzd.h:
	  - Increased MAX_GAME_TYPES to 15
	  - parse_game() now checks to see if we are adding too many games


2000-09-15 01:07:44  Rev 718    rgade

	* game_servers/dots/game.c:
	  - Addressed bug #113525 by not issuing DOTS_REQ_MOVE until both 
	  clients
	    have specified "yes" to a new game request


2000-09-12 19:35:53  Rev 717    bugg

	* game_servers/dots/ggz.c ggzd/table.c game_servers/tictactoe/ggz.c 
	  ggzd/transit.c game_servers/lapocha/ggz.c:
	  Always include <sys/types.h> before <sys/socket.h>
	  Well, it's not technically not always, but it's a good habit
	  because with most common things defined in sys/socket.h
	  sys/types.h must have been included first.  (If it were always,
	  then socket.h should obviously always include types.h for itself)
	  Bruce Evans (A FreeBSD developer who really, really, really knows
	  his stuff) had explained it to a FreeBSD list once, if anyone thinks
	  that this behavior is braindead.  To summarize: it's not braindead,
	  so include sys/types.h before sys/socket.h for most things :)
	  glibc is in the minority for having sys/socket.h include sys/types.
	  h.
	  First of several commits to make ggzd portable.


2000-09-07 22:10:05  Rev 712    bmh

	* ChangeLog:
	  - Updated ChangeLog before 0.0.3 release


2000-09-07 21:32:11  Rev 711    bmh

	* doc/C/design/client-server.sgml:
	  - Fix missing </para>


2000-09-07 20:32:50  Rev 709    bmh

	* game_servers/spades/engine.h ggzd/control.c:
	  - Use RETSIGTYPE as return type for signal handlers


2000-09-01 21:36:51  Rev 704    bmh

	* INSTALL NEWS:
	  - Modified INSTALL to reflect new dir layout
	  - Deleted excess whitespace from NEWS


2000-09-01 02:09:21  Rev 703    rgade

	* ggz_server.spec:
	  - Moved default location for db files to /var/tmp/ggzd


2000-08-31 07:02:44  Rev 702    rgade

	* ggz_server.spec:
	  - Updated client and server RPM spec files to 0.0.3


2000-08-29 19:02:21  Rev 700    bmh

	* doc/game-modules.txt TODO INSTALL configure.in doc/admin-guide.txt 
	  NEWS:
	  - Set version to 0.0.3
	  - Documentation updates for new release


2000-08-29 17:57:36  Rev 699    bmh

	* doc/C/design/design.sgml:
	  - doc updates


2000-08-29 17:55:39  Rev 698    bmh

	* doc/C/design/client-server.sgml doc/C/design/overview.sgml 
	  doc/C/design/Makefile.am doc/C/design/appendix.sgml:
	  - More design doc updates
	  - Include all sgml files with dist


2000-08-29 00:33:17  Rev 697    bmh

	* doc/C/design/client-server.sgml:
	  - Wrote section on table commands
	  - Wrote skeleton for chat commands


2000-08-27 23:24:40  Rev 696    rgade

	* game_servers/lapocha/game.c:
	  - Full leave/rejoin capability coded


2000-08-27 21:52:59  Rev 695    rgade

	* game_servers/lapocha/game.c game_servers/lapocha/game.h:
	  - Handle game leave/rejoin during card play only


2000-08-26 20:45:09  Rev 693    bmh

	* doc/C/design/design.sgml:
	  - Changed chapter title
	  - Corrected revision number after move


2000-08-26 20:35:11  Rev 692    bmh

	* doc/images:
	  - Remove old copies of files in images/ dir


2000-08-26 20:30:42  Rev 691    bmh

	* doc/C/.cvsignore doc/C/design/images doc/C/design/overview.sgml 
	  doc/C/design/ggz.dsl doc/C/design/Makefile.am 
	  doc/C/design/appendix.sgml doc/C/design/design.sgml 
	  doc/C/design/images/server_arch.fig doc/C/design/.cvsignore 
	  doc/Makefile.am doc/design.sgml doc/C/design/images/.cvsignore 
	  doc/C/design/client-server.sgml doc/C/design/requirements.sgml 
	  configure.in doc/C game_servers/spades/spades.dsc 
	  game_servers/tictactoe/tictactoe.dsc doc/C/design doc/C/Makefile.am:
	  - Documentation overhaul:
	  - Moved design doc into C/design dir so that in the future
	    translations can be done more easily
	  - Split out chapters from design doc
	  - Started re-writing the section on client-server interactions to be
	    more descriptive.
	  - Bumped version number of ttt and spades games


2000-08-23 02:47:19  Rev 687    rgade

	* game_servers/lapocha/ggz.h game_servers/dots/ggz.h 
	  game_servers/tictactoe/ggz.h:
	  - Game servers need to handle 16 character names


2000-08-20 21:48:10  Rev 679    rgade

	* ggzd/hash.h ggzd/control.c ggzd/hash.c:
	  hash.[ch]
	    - Added hash_initialize() to init lock structures
	  control.c
	    - Call hash_initialize() at startup


2000-08-20 05:14:34  Rev 678    bmh

	* configure.in:
	  - s/datadir/tmpdir at one spot.  oops


2000-08-20 04:37:23  Rev 677    bmh

	* ggzd/control.c:
	  - Use select() on listening socket to determine when there is an
	    incoming connection.
	  - Make listening socket non-blocking in case connection gets removed
	    between select() and accept().  See UNPv1 ch15.


2000-08-19 17:59:41  Rev 675    bmh

	* ggzd/table.c:
	  - Rewrite table_game_join():
	  - If player notification of succesful join fails, assume player has
	    logged out and force them to leave table


2000-08-19 05:13:29  Rev 674    rgade

	* ggzd/hash.c:
	  - Does this fix the hash bug?  We think it might....


2000-08-18 04:08:27  Rev 670    rgade

	* game_servers/lapocha/game.c:
	  server
	    - Alter MSG_HAND protocol to send a char representing dealer's 
	  seat
	  client
	    - Display dealer's seat with a (D) after name
	    - Display current bidder's seat with a (B) after name ((DB) if 
	  dealer too)


2000-08-16 06:42:14  Rev 668    bmh

	* ggzd/players.c:
	  - Don't attempt to leave table for empty messages (either form 
	  player
	    or from table)


2000-08-16 05:25:16  Rev 665    bmh

	* game_servers/spades/engine_func.c game_servers/dots/ggz.c 
	  ggzd/hash.h ggzd/protocols.h game_servers/tictactoe/ggz.c 
	  ggzd/ggzd.h ggzd/motd.c ggzd/datatypes.h ggzd/ggzd.conf.in 
	  ggzd/motd.h ggzd/login.c ggzd/room.c ggzd/login.h ggzd/players.c 
	  ggzd/chat.c ggzd/event.c ggzd/room.h ggzd/transit.c ggzd/chat.h 
	  ggzd/players.h ggzd/event.h ggzd/table.c ggzd/Makefile.am 
	  ggzd/transit.h ggzd/table.h ggzd/parse_opt.c ggzd/err_func.h 
	  configure.in game_servers/spades/engine_main.c ggzd/seats.c 
	  ggzd/control.c game_servers/spades/engine.h ggzd/hash.c acconfig.h 
	  ggzd/seats.h:
	  - Merge experimental dynamic-players branch back into main tree


2000-08-16 04:32:46  Rev 663    bmh

	* game_servers/lapocha/ggz.c:
	  - Use TMPDIR to store Unix domain sockets in
	  - enable use of --with-tmpdir=PATH to configure it
	  - Default to /tmp/ggzd for TMPDIR
	  - enable use of --localstatedir to configure DATADIR (db and pid
	    files)
	  - In spades module, don't send new game to players until after 
	  sending
	    REQ_GAME_OVER to ggz server
	  - Create DATADIR and TMPDIR (and parent dirs) automatically if they
	    don't exist


2000-08-15 02:51:20  Rev 658    rgade

	* game_servers/lapocha/cards.c game_servers/dots/ai.h 
	  game_servers/lapocha/cards.h:
	  - Added license notice


2000-08-05 06:40:13  Rev 651    bmh

	* game_servers/spades/spades.dsc game_servers/tictactoe/tictactoe.
	  dsc game_servers/dots/dots.dsc:
	  - Output player's name for debug messages, not just pointer address
	  - Specify BotsAllowed 0 in all game description files
	  - Return from hash_player_lookup() with returned player 
	  write-locked:
	    this prevents a situation where the desired player could logout in
	    between when we look them up and when we try to acquire a lock
	  - Pass player name, not pointer, to event_player_enqueue()
	  - Write-lock player structure when clearing fd in player_remove(): 
	  we
	    need to acquire the lock at least once there anyway so that 
	  someone
	    holding the lock wil prevent us from being removed
	  - Started updating function comments in players.c


2000-07-28 05:58:25  Rev 644    rgade

	* game_servers/spades/spades.dsc game_servers/tictactoe/tictactoe.
	  dsc game_servers/dots/dots.dsc:
	  - Removed obsolete OptionsSize entries


2000-07-28 05:06:12  Rev 640    rgade

	* game_servers/lapocha/main.c:
	  - Almost forgot, don't exit until everyone's gone, even if game is 
	  over


2000-07-28 05:04:13  Rev 639    rgade

	* game_servers/lapocha/game.c game_servers/lapocha/main.c:
	  - Figure end of game winner and notify clients


2000-07-28 04:42:24  Rev 638    rgade

	* game_servers/lapocha/game.c game_servers/lapocha/game.h:
	  - Added game state for user-choice trump (hands 13-16)
	  - Request and verify trump from dealer


2000-07-26 23:03:39  Rev 634    rgade

	* game_servers/lapocha/cards.c:
	  - Fixed stupid miscalculation bug in card_value()


2000-07-26 07:12:51  Rev 633    rgade

	* game_servers/lapocha/game.c game_servers/lapocha/cards.c 
	  game_servers/lapocha/game.h game_servers/lapocha/cards.h:
	  First (semi)playable version of La Pocha
	  WHAT WORKS
	  ----------
	  - Cards are dealt out properly, per rules - deal passes to the right
	  - Trump is chosen by cutting the remainder of the deck in a random 
	  fashion
	  - Bidding is properly dealt with, per the rules - to the left
	  - Trick play is properly dealt with, cards must be played by the 
	  rules
	  - End of hand play is properly dealt with, score calculated and 
	  sent to clients
	  WHAT DOESN'T WORK
	  -----------------
	  - Leave/Rejoin is not functional (and is going to be hell to 
	  implement)
	  - Hands which use the full deck will not function (could crash? 
	  not sure)
	    - Don't play past the hand where 9 cards are dealt ;)
	  - End of game is not detected


2000-07-23 23:24:03  Rev 627    rgade

	* game_servers/lapocha/game.c game_servers/lapocha/cards.c 
	  game_servers/lapocha/game.h game_servers/lapocha/cards.h 
	  game_servers/lapocha/main.c:
	  - Deal proper sized hand of cards to players
	  - Cut deck for trump card and send to players
	  - Request and process player bids


2000-07-23 17:10:19  Rev 624    rgade

	* game_servers/dots/ai.c game_servers/dots/game.c 
	  game_servers/dots/game.h:
	  - Implement protocol extension to send scoring information with
	    each move update message (DOTS_RSP_MOVE and DOTS_MSG_MOVE_(H/V))


2000-06-30 04:18:53  Rev 616    rgade

	* game_servers/lapocha/Makefile.am game_servers/lapocha/protocols.h 
	  game_servers/lapocha/ggz.h game_servers/lapocha/.cvsignore 
	  game_servers/lapocha/cards.c game_servers/lapocha/lapocha.dsc 
	  game_servers/lapocha/lapocha.room game_servers/lapocha/cards.h 
	  game_servers/lapocha/game.c configure.in game_servers/lapocha/game.
	  h game_servers/lapocha game_servers/Makefile.am 
	  game_servers/lapocha/main.c game_servers/lapocha/ggz.c:
	  Initial checkin of La Pocha server.
	  Current status:
	  - Clients can connect and a sample 10 cards are dealt by the server.
	  - No game play is functional.
	  - Player one is told to play (so card animation can still be tested)
	  Bugs:
	  - Far far too numerous to mention, but nothing that appears to 
	  make either
	    server or client unstable


2000-06-30 03:16:59  Rev 615    rgade

	* ggzd/parse_opt.c ggzd/datatypes.h:
	  datatypes.h
	  - Removed game options size
	  parse_opt.c
	  - Emit a warning about obsolete OptionsSize configuration line


2000-06-25 06:24:17  Rev 609    bmh

	* ggzd/Makefile.am ggzd/daemon.h ggzd/control.c acconfig.h 
	  ggzd/daemon.c:
	  - Borrowed some of daemon_init() and daemon_cleanup() from atd by
	    Thomas Koenig.  This gives us our daemon pidfile
	  - Add in signal handlers for SIGINT and SIGTERM
	  - Do db and daemon cleanup before exiting


2000-06-24 17:36:26  Rev 605    bmh

	* ggzd/table.c ggzd/event.c:
	  - Fixes to allow compilation without debugging enabled


2000-06-19 03:41:41  Rev 590    bmh

	* ggzd/ggzdb.h:
	  - Incremented db version number to 0.2 due to increase in player 
	  name
	    length to 16


2000-06-19 03:05:34  Rev 588    bmh

	* game_servers/spades/engine_func.c game_servers/spades/protocols.h:
	  - Use REQ/RSP_GAME_OVER at the end of the game


2000-06-19 02:31:40  Rev 587    bmh

	* ggzd/table.c ggzd/table.h ggzd/players.c ggzd/seats.c ggzd/ggzd.h 
	  ggzd/seats.h ggzd/transit.c:
	  - Changed the internal representation of seat assignments from 
	  integer
	    player indices to player name strings: this makes it easier when 
	  we
	    go to dynamically allocated players and eliminate player indices
	  - New function seats_type() to translate special seat assignment
	    strings into the old integer codes: GGZ_SEAT_XXXX


2000-06-17 03:52:00  Rev 585    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/players.c:
	  - Updated to comply with protocol version 3:
	  - send bot_allow_mask in RSP_LIST_TYPES
	  - send ID before room in RSP_LIST_TABLES
	  - added GGZ_UPDATE_STATE subop to MSG_UPDATE_TABLES


2000-06-17 00:11:09  Rev 584    bmh

	* doc/design.sgml:
	  - Updated protocol version to 3:
	  - Added bot_mask to RSP_LIST_TYPES
	  - Send table ID before room in RSP_LIST_TABLES
	  - Added GGZ_UPDATE_STATE subopcode to MSG_UPDATE_TABLES


2000-06-14 04:23:51  Rev 581    bmh

	* game_servers/tictactoe/game.c:
	  - Removed many debugging statements from ttt bot code


2000-06-14 03:20:00  Rev 580    rgade

	* ggzd/hash.c:
	  - Added parens around hash_pjw line that caused a warning


2000-06-14 03:18:32  Rev 579    rgade

	* ggzd/ggzdb.c ggzd/players.c ggzd/ggzdb_db2.c:
	  - Wrote update and close functions for the database
	  - Player last login timestamp is now updated at login


2000-06-14 02:42:49  Rev 578    rgade

	* ggzd/err_func.c:
	  - Removed lock for fputs() - stream output in glibc2 is threadsafe


2000-06-14 02:35:33  Rev 577    rgade

	* ggzd/table.c ggzd/room.c ggzd/players.c ggzd/control.c 
	  ggzd/datatypes.h ggzd/motd.c ggzd/transit.c:
	  - Switched over completely to personal locks for player structures
	  - Renamed main player lock (still used to protect count) to mainlock


2000-06-14 02:06:29  Rev 576    bmh

	* ggzd/table.h ggzd/seats.c ggzd/control.c ggzd/datatypes.h 
	  ggzd/motd.c ggzd/seats.h:
	  - Moved definition of table struct into table.h


2000-06-13 16:32:21  Rev 575    bmh

	* doc/design.sgml:
	  - Uncommented the {REQ,RSP}_LOGIN_NEW and {REQ,RSP}_LOGIN reference
	    pages since they are now supported by the server
	  - NOTE: protocol version did not change


2000-06-12 17:54:35  Rev 573    bmh

	* ggzd/table.c ggzd/players.c ggzd/ggzd.h:
	  - Set player's table index to -1 immediately after a successful 
	  leave:
	    This fixes the bug Doug found where a table gets removed after one
	    player leaves
	  - Fixed subtle bug in transit system caused by the table getting 
	  removed
	    before a player was notified of a successfule leave


2000-06-12 05:28:08  Rev 572    bmh

	* ggzd/Makefile.am configure.in:
	  - Added --database option to configure script.  Currently only 
	  accepts
	    db2
	  - Only build database object code selected at configure time


2000-06-12 02:12:32  Rev 570    rgade

	* ggzd/ggzdb.c ggzd/ggzdb.h:
	  - Place a db version in datadir to check for outdated database files


2000-06-11 23:15:03  Rev 569    rgade

	* ggzd/Makefile.am ggzd/ggzdb_db2.h ggzd/ggzdb.c ggzd/ggzdb_db2.c:
	  - Altered backend definitions to use functions instead of macros
	    so Brent doesn't have to deal with backend header files


2000-06-11 22:56:56  Rev 568    rgade

	* ggzd/ggzdb_db2.c:
	  - Fixed stupid error that caused a segfault


2000-06-11 22:40:24  Rev 567    rgade

	* ggzd/players.c ggzd/control.c:
	  - Generates a "decent" password, common word + 2 digits for new 
	  users


2000-06-11 22:11:10  Rev 566    rgade

	* ggzd/ggzdb_db2.h ggzd/ggzdb.c ggzd/players.c ggzd/ggzdb.h 
	  ggzd/ggzdb_db2.c:
	  Phase 2 of database implementation
	  ggzdb/db2.c
	    - Wrote player_get functions
	    - Altered db2 backend to be threadsafe w/o thread locks
	  players.c
	    - Wrote player_login_normal to login a registered player
	    - Altered player_login_anon to check if name is in db


2000-06-11 18:17:15  Rev 561    rgade

	* ggzd/Makefile.am ggzd/ggzdb_db2.h configure.in ggzd/ggzdb.c 
	  ggzd/players.c ggzd/control.c ggzd/ggzdb.h acconfig.h 
	  ggzd/ggzdb_db2.c:
	  Big update to kickstart the database stuff
	  acconfig.h
	    - Missed an undef
	  configure.in
	    - Added check for db2 in libdb
	  control.c
	    - Call the ggzdb_init() function
	  players.c
	    - Enabled REQ/RSP_LOGIN_NEW
	    - Updated players_login_new to work with newer ggzd features
	  ggzdb.c
	    - Wrote initial front-end functions to support writing to database
	  ggzdb_db2.c
	    - Wrote initial back-end functions to support db2


2000-06-11 05:26:12  Rev 558    rgade

	* configure.in ggzd/parse_opt.c ggzd/ggzd.test.in ggzd/datatypes.h 
	  ggzd/ggzd.conf.in:
	  - Added configure.in variable ggzddatadir/DATADIR
	  - Parse and store DataDir from ggzd.conf configuration file
	  - Default to DATADIR in config.h if not in ggzd.conf
	  - Set DataDir to test directory in ggzd.test


2000-06-10 04:51:41  Rev 551    bmh

	* ggzd/table.c ggzd/room.c:
	  - Don't send MSG_UPDATE_PLAYERS to myself
	  - Pack player number and seat into data for table updates
	  - Send GGZ_UPDATE_LEAVE events for remaining players when a table is
	    removed


2000-06-10 00:58:09  Rev 549    rgade

	* ggzd/chat.c ggzd/hash.c:
	  Personal messages between rooms now functional
	  chat.c
	    - replace in-room name search with call to hash_player_lookup()
	  hash.c
	    - coded hash_player_lookup() - returns p_index or -1 if not found


2000-06-09 06:25:29  Rev 548    rgade

	* ggzd/Makefile.am ggzd/hash.h ggzd/players.c ggzd/hash.c:
	  Started work on player name hash tables
	  Makefile.am
	    - Added hash.[ch] to compilation list, remember to run autogen.sh!
	  players.c
	    - Call hash_player_add to add player name to hash at login
	    - Use hash_player_add return code to determine if login name is 
	  in use
	    - Call hash_player_delete to remove player name at disconnect
	  hash.[ch]
	    - Initial coding of hash_player_add/delete - seems stable :)
	    - Initial number of lists coded at 31 - good for small to medium 
	  site
	    - Uses one thread lock per list to minimize contention
	    - List usage tracking coded in (for large site tuning; gives min,
	  max,
	      and average list depths)
	    - Ripped a hash function from Holub who ripped it from Aho


2000-06-09 03:04:47  Rev 546    rgade

	* game_servers/dots/game.c game_servers/dots/game.h:
	  - handle a DOTS_REQ_NEWGAME by reseting the game and asking for 
	  options


2000-06-07 04:01:39  Rev 545    rgade

	* ggzd/chat.c:
	  - Personal chats sent from a table are now blocked (E_AT_TABLE)
	  - Added note to add read locks in the future


2000-06-07 02:41:43  Rev 544    rgade

	* game_servers/dots/game.c game_servers/dots/game.h:
	  - Send DOTS_REQ_OPTIONS to first joining client (the launcher)
	  - Send options to all clients (including launcher) when a OPTIONS 
	  event occurs
	  - Send seats and names on join now that client always has a main 
	  dialog


2000-06-06 06:35:12  Rev 541    rgade

	* game_servers/dots/game.h:
	  - Moved DOTS_SND_OPTIONS to client->server portion of protocol 
	  where it belongs


2000-06-06 06:05:53  Rev 540    rgade

	* game_servers/dots/ggz.c game_servers/dots/game.c 
	  game_servers/dots/ggz.h game_servers/dots/game.h 
	  game_servers/dots/main.c:
	  Updated server to work with new launch protocol
	  game.c:
	    - Get DOTS_SND_OPTIONS (9) opcode and process with 
	  game_get_options
	    - Added new state DOTS_STATE_OPTIONS when waiting for options
	    - Queue JOIN events so that they are not fulfilled until options 
	  are set
	  ggz.c:
	    - Server no longer obtains options from main ggzd server on launch
	  main.c:
	    - Don't send an options buffer to ggz_init()


2000-06-06 04:34:59  Rev 537    rgade

	* ggzd/protocols.h ggzd/chat.c:
	  - Personal chat messages (/msg, /beep) to a user at a table are 
	  denied
	  - Added E_AT_TABLE (-14) error code to return for RSP_CHAT


2000-06-05 03:06:25  Rev 535    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/room.c:
	  - Updated to comply with protocol version 2:
	  - Have MSG_UPDATE_XXX send actual update information
	  - In table_loop(), unlock transit_lock, not state_lock


2000-06-05 02:51:35  Rev 534    bmh

	* doc/design.sgml:
	  - Modified MSG_UPDATE_{PLAYERS|TYPES|TABLES|ROOMS} to send update
	    information, rather than just notification of a change
	  - Bumped protocol version to 2


2000-05-23 04:26:02  Rev 532    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/room.c ggzd/players.c ggzd/room.
	  h ggzd/datatypes.h:
	  - Use event system for table updates
	  - Remove all traces of old timestamp-based update system
	  - No longer send room and type update messages upon login
	  - No longer send player and table updates upon entering a room


2000-05-22 23:00:45  Rev 531    bmh

	* ggzd/room.c:
	  - Use event system when players join/leave room (still sends 
	  "/SxxxS")


2000-05-22 04:37:58  Rev 530    bmh

	* ggzd/table.c ggzd/parse_opt.c ggzd/room.c ggzd/chat.c ggzd/players.
	  c ggzd/event.c ggzd/room.h ggzd/datatypes.h:
	  - s/chat_room/rooms/g;
	  - Move definition of room struct into room.h


2000-05-20 05:19:57  Rev 528    bmh

	* game_servers/spades/engine_func.c ggzd/table.c ggzd/protocols.h 
	  game_servers/tictactoe/main.c game_servers/tictactoe/ggz.c 
	  ggzd/players.c game_servers/spades/engine.h 
	  game_servers/tictactoe/ggz.h doc/design.sgml ggzd/datatypes.h:
	  - Updated server to comply with protocol version 1:
	  - Moved option handling into game server modules
	  - Updated ttt and spades; dots still broken


2000-05-19 21:15:17  Rev 527    bmh

	* doc/design.sgml:
	  - Removed game option handling from REQ_TABLE_LAUNCH.
	  - Incremented protocol version number to 1


2000-05-19 21:08:54  Rev 526    bmh

	* doc/design.sgml:
	  - Spelling corrections
	  - Misc doc fixes


2000-05-16 02:50:13  Rev 525    bmh

	* doc/design.sgml:
	  - Updated a few more opcodes


2000-05-15 23:51:31  Rev 524    bmh

	* doc/design.sgml:
	  - Finished making index entires for client/server protocol items 
	  (some
	    still need work though).


2000-05-15 03:33:00  Rev 523    bmh

	* doc/design.sgml:
	  - Documentation updates


2000-05-14 18:12:40  Rev 521    rgade

	* ggzd/table.c ggzd/players.c:
	  Server now verifies validity of seating assignments
	  table.c
	    - Supplement printing of seats and bots with tests to insure 
	  validity
	    - Return E_BAD_OPTIONS if seating invalid
	  players.c
	    - Don't bother trying to join the table if it failed to create
	      (ensures proper return of error code for RSP_TABLE_LAUNCH)


2000-05-14 05:48:21  Rev 519    bmh

	* ggzd/protocols.h ggzd/players.c:
	  - Updated server to comply with protocol version 0:
	  - Pass protocol version and max chat length after MSG_SERVER_ID


2000-05-14 05:15:51  Rev 518    bmh

	* doc/design.sgml:
	  - Updated MSG_SERVER_ID protocol.
	  - Added protonum entity and set to 0.
	  - Removed protocol items which we don't implement


2000-05-13 07:45:13  Rev 515    rgade

	* game_servers/dots/ai.c:
	  - AI skill upgraded to medium, now gives away least possible 
	  number of squares
	    if unable to make a safe move (1 move lookahead)


2000-05-13 04:45:22  Rev 512    rgade

	* doc/design.sgml:
	  Updated documentation on chat protocol


2000-05-12 05:36:27  Rev 510    rgade

	* game_servers/dots/Makefile.am game_servers/dots/ai.c 
	  game_servers/dots/game.c game_servers/dots/ai.h 
	  game_servers/dots/dots.dsc game_servers/dots/main.c:
	  Added AI to CtD
	  Fairly simplistic, equates to "easy" mode if difficulty levels are 
	  ever
	  included.  First looks for any scoring moves, if none it will pick 
	  a random
	  safe move, and if no safe moves it will pick a random move with 
	  what is left.
	  Future (long range?) enhancement is to add look-ahead


2000-05-11 18:49:20  Rev 509    bmh

	* ggzd/event.h ggzd/Makefile.am ggzd/room.c ggzd/chat.c ggzd/players.
	  c ggzd/event.c ggzd/room.h ggzd/datatypes.h ggzd/chat.h:
	  - New event subsystem!
	  - Added room-specific and player-specific event queues to player 
	  data
	    structure
	  - Reworked chat system to use events


2000-05-11 04:59:46  Rev 508    rgade

	* game_servers/dots/game.c game_servers/dots/game.h:
	  Completed implementation of DOTS_SND_SYNC
	  Server:
	  - Keep track of owned squares and send them as part of DOTS_SND_SYNC
	  Client:
	  - After receiving DOTS_SND_SYNC, call board_redraw() to display game
	  - Implemented board_redraw() to draw all lines and owned squares


2000-05-10 14:33:57  Rev 506    bmh

	* Makefile.am:
	  - Always rebuild testdir from scratch


2000-05-10 00:46:00  Rev 504    rgade

	* game_servers/dots/game.c game_servers/dots/game.h:
	  Altered CtD protocol to always send DOTS_MSG_OPTIONS
	  - Removed DOTS_REQ_OPTIONS
	  - Renamed DOTS_RSP_OPTIONS -> DOTS_MSG_OPTIONS
	  - Send DOTS_MSG_OPTIONS to joining board, before SYNC is sent


2000-05-08 05:07:05  Rev 500    bmh

	* game_servers/tictactoe/game.c game_servers/tictactoe/game.h:
	  - Made ttt bot a *lot* smarter


2000-05-06 23:18:26  Rev 495    rgade

	* ggzd/players.c:
	  /msg and /beep implemented
	  FIXME:
	    player's personal chat should be zapped when they leave the server


2000-05-06 20:23:11  Rev 492    rgade

	* ggzd/protocols.h ggzd/room.c ggzd/players.c:
	  Updated to new chat protocol, currently handles only GGZ_CHAT_NORMAL


2000-05-06 02:54:05  Rev 488    bmh

	* ggzd/table.c ggzd/ggzd.h ggzd/transit.c:
	  - Small redesign of transit system:
	  - Eliminate GGZ_TRANSIT_RECV
	  - Make GGZ_TRANSIT_LEAVE its own bit
	  - When table removed signal anyone waiting for transit
	  - Return error if table sends RSP_GAME_{JOIN, LEAVE} when we're 
	  not in
	    transit
	  - This should eliminate the player handler thread hangs completely


2000-05-06 02:20:02  Rev 487    bmh

	* game_servers/dots/Makefile.am configure.in 
	  game_servers/spades/Makefile.am game_servers/tictactoe/Makefile.am:
	  - s/ggzdmod/ggzdexecmod/g;  Now you can do 'make install-exec' to 
	  just
	    install executables and not conf files


2000-04-29 18:11:13  Rev 475    rgade

	* game_servers/dots/game.c game_servers/dots/game.h:
	  Connect the Dots getting ever closer
	  - Games now launch, moves are sent to server
	    (don't know what happens if you include a bot - DDT cuz there 
	  are no bots)
	  - Server calculates moves and responds to both clients
	  - Turn processing not handled just right yet (sometimes it's both 
	  players turn!)
	  - Game leaves ghost at end of game (clients don't handle EOG yet)


2000-04-28 04:21:23  Rev 471    rgade

	* game_servers/dots/ggz.c game_servers/dots/game.c 
	  game_servers/dots/game.h game_servers/dots/main.c:
	  Get and respond to options (board width, board height)


2000-04-28 00:34:26  Rev 468    rgade

	* game_servers/dots/ggz.c game_servers/dots/Makefile.am 
	  game_servers/dots/game.c game_servers/dots/protocols.h configure.
	  in game_servers/dots/.cvsignore game_servers/dots/ggz.h 
	  game_servers/dots/game.h game_servers/Makefile.am 
	  game_servers/dots game_servers/dots/dots.dsc 
	  game_servers/dots/dots.room game_servers/dots/main.c:
	  Initial stab at Connect the Dots server
	  - Compiles, but can't test, client needs updating to utilize server
	  - Not sure how to handle the option passing, need to talk to Brent 
	  about this


2000-04-26 21:12:59  Rev 461    bmh

	* doc/ggz.dsl doc/design.sgml:
	  - Support for role="bold" attribute of emphasis tag in ggz.dsl
	  - Use <emphasis role="bold"> to get bold, not <parameter> hack


2000-04-26 21:11:15  Rev 460    bmh

	* configure.in ggz_server.spec:
	  - Bump version to 0.0.3pre


2000-04-25 04:00:07  Rev 456    bmh

	* ChangeLog:
	  - Updated ChamgeLog entries


2000-04-25 03:55:16  Rev 455    bmh

	* doc/Makefile.am:
	  - Include our DSSSL file and admin guide in dist


2000-04-25 03:54:22  Rev 454    bmh

	* ggz_server.spec:
	  - Don't include easysock files


2000-04-24 04:35:01  Rev 450    bmh

	* NEWS:
	  - Updated NEWS file for upcoming 0.0.2 release


2000-04-24 04:18:24  Rev 449    bmh

	* INSTALL README:
	  - Updated docs to reflect new compilation and install procedures


2000-04-24 04:14:45  Rev 448    bmh

	* doc/game-modules.txt:
	  - Updated to document Unix domain socket used for communication
	  - Mention tic-tac-toe example module


2000-04-24 02:45:57  Rev 447    bmh

	* doc/admin-guide.txt:
	  - Moved configuration stuff into INSTALL.  Added/clarified some 
	  stuff.


2000-04-24 02:02:44  Rev 446    bmh

	* doc/design.sgml:
	  - Added REQ/RSP_LOGIN_* items to appendix


2000-04-23 23:30:15  Rev 445    bmh

	* doc/ggz.dsl doc/design.sgml:
	  - Put all server interactions into refentries in appendix


2000-04-22 15:41:39  Rev 444    bmh

	* doc/admin-guide.txt:
	  - Rich's first go at a GGZ admin guide (with the syslog stuff added)


2000-04-21 22:49:02  Rev 443    bmh

	* doc/Makefile.am:
	  - Always remake docs


2000-04-21 06:10:35  Rev 442    rgade

	* doc/design.sgml:
	  Documentation updated muchly:
	  - New documentation for room, chat, server options, MOTD and log 
	  internals
	  - Description of the config file parse phases
	  - A few bad tags and mispelings fixed I happened to see


2000-04-21 05:06:48  Rev 441    rgade

	* ggz_server.spec:
	  RPM Spec file modifications
	  - Wrote the ggz_client spec file
	  - Updated the ggz_server spec file to allow a BuildRoot so it can 
	  be built
	    by non-root users
	  - Updated ggz_server spec file to use /etc for the SYSCONFDIR


2000-04-18 20:18:41  Rev 433    bmh

	* TODO game_servers/spades/spades.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/spades/Makefile.
	  am game_servers/tictactoe/Makefile.am game_servers/spades/.
	  cvsignore game_servers/tictactoe/.cvsignore ggzd/ggzd.conf.in 
	  game_servers/spades game_servers/tictactoe:
	  - Renamed game modules to ggzd.* rather than ggzd_*


2000-04-15 17:27:48  Rev 427    rgade

	* ggz_server.spec:
	  A spec file to generate a GGZ Server RPM


2000-04-15 05:23:26  Rev 421    rgade

	* game_servers/spades/spades.dsc game_servers/tictactoe/tictactoe.
	  dsc game_servers/spades/Makefile.am 
	  game_servers/tictactoe/Makefile.am:
	  spades executable now ggzd_spades
	  tictactoe executable now ggzd_tictactoe


2000-04-11 15:41:36  Rev 414    bmh

	* ggzd/table.c ggzd/protocols.h game_servers/tictactoe/main.c 
	  game_servers/tictactoe/ggz.c game_servers/tictactoe/game.c 
	  game_servers/tictactoe/protocols.h ggzd/players.c:
	  - MSG_GAME_OVER -> REQ/RSP_GAME_OVER
	  - Game module doesn't exit until receiving RSP_GAME_OVER
	  - As soon as table handler receives REQ_GANE_OVER, make table as 
	  done
	  - Don't follow through with leave, if table marked as done


2000-04-11 02:24:45  Rev 413    bmh

	* ggzd/transit.c:
	  - If there is an error in transit, set GGZ_TRANSIT_RECV so player
	    thread won't hang.


2000-04-11 00:34:18  Rev 412    bmh

	* Makefile.am ggzd/ggzd.test.in game_servers/spades/Makefile.am 
	  game_servers/tictactoe/Makefile.am game_servers/tictactoe/game.c 
	  ggzd/ggzd.conf.in ggzd/transit.c:
	  - Small autoconf updates (typos, omitted files, etc)
	  - Don't forget to close the remote end of the socketpair!!!


2000-04-10 22:46:24  Rev 411    bmh

	* ggzd/table.c ggzd/players.c:
	  - Added more log entries for failure conditions


2000-04-10 22:35:39  Rev 410    rgade

	* ggzd/table.c:
	  - Make sure the socket is created before we exec() the game server


2000-04-10 21:25:34  Rev 408    bmh

	* ggzd/table.c ggzd/Makefile.am ggzd/ggzd.motd ggzd/ggzd.test.in 
	  game_servers/spades/Makefile.am game_servers/tictactoe/Makefile.am:
	  - Added sample ggzd.motd
	  - Force overwrite of files when doing 'make test'


2000-04-09 20:12:22  Rev 407    rgade

	* ggzd/parse_opt.c:
	  - Turned off TmpDir option parsing for now


2000-04-09 19:56:02  Rev 406    bmh

	* ggzd/Makefile.am TODO configure.in ggzd/.cvsignore Makefile.am 
	  ggzd/ggzd.test.in game_servers/spades/Makefile.am 
	  game_servers/tictactoe/Makefile.am autogen.sh 
	  game_servers/Makefile.am ggzd .cvsignore:
	  - Added 'test' target.  Just do a 'make test' to create the testdir
	  - Added ggzd.test.in to be filled in by configure and then used in
	    testing.


2000-04-09 19:51:00  Rev 405    rgade

	* ggzd/players.c:
	  - Allocate a MAX_CHAT_LEN buffer for chat messages rather than 
	  allowing
	    arbitrary size strings.


2000-04-08 21:12:33  Rev 400    rgade

	* ggzd/parse_opt.c ggzd/datatypes.h ggzd/err_func.c:
	  - If the user specifies --debug=#, don't overwrite it from ggzd.conf


2000-04-08 21:08:50  Rev 399    bmh

	* ggzd/ggzd.conf.in:
	  - Added example for ConfDir option, but default to commented out


2000-04-08 20:46:42  Rev 398    rgade

	* ggzd/parse_opt.c:
	  - Set error defaults for admin name and email


2000-04-08 20:04:57  Rev 397    rgade

	* game_servers/tictactoe/tictactoe.room:
	  - GameType should be TicTacToe


2000-04-08 20:03:57  Rev 396    rgade

	* ggzd/parse_opt.c ggzd/control.c ggzd/datatypes.h ggzd/motd.c:
	  Making directory structure work
	  control.c
	    - Keep logfiles off until JUST before daemon_init
	  datatypes.h
	    - Added tmp_dir, conf_dir
	  motd.c
	    - Default to loading MOTD file from conf_dir
	  parse_opt.c
	    - Use GGZDCONFDIR for finding config file
	    - Set defaults for directories which are not specified in conf 
	  file
	    - Use opt.conf_dir as base directory for game and room files


2000-04-08 19:41:19  Rev 395    bmh

	* ggzd/Makefile.am TODO ggzd/parse_opt.c ggzd/ggzd_competitive.room 
	  game_servers/spades/Makefile.am game_servers/tictactoe/Makefile.am 
	  ggzd/ggzd.conf ggzd/ggzd.conf.in configure.in 
	  game_servers/spades/spades.dsc game_servers/tictactoe/tictactoe.
	  dsc ggzd/ggzd_casual.room game_servers/spades/spades.room 
	  game_servers/tictactoe/tictactoe.room ggzd/players.c acconfig.h:
	  - Redid autoconf stuff to put things in correct places
	  - Moved room files in with game modules
	  - Have configure create ggzd.conf from ggzd.conf.in
	  - Enable debugging by default


2000-04-07 19:13:56  Rev 391    rgade

	* ggzd/room.c ggzd/control.c:
	  room.c
	    - room_join - don't ignore error code from room_send_chat
	    - Don't bother trying to send chat if they are moving off the 
	  server
	    - Check for GGZ_REQ_DISCONNECT in room_handle_join
	    - Replaced 0/-1's with GGZ_REQ_OK/GGZ_REQ_DISCONNECT
	  control.c
	    - Don't ignore a SIGPIPE except in production


2000-04-07 19:11:30  Rev 390    bmh

	* game_servers/tictactoe/game.c:
	  - Fixed game_send_sync() to send whole board, not just first row


2000-04-07 01:23:32  Rev 389    rgade

	* ggzd/control.c:
	  - Setup to ignore SIGPIPE from a sick client


2000-04-06 21:16:25  Rev 388    rgade

	* ggzd/players.c:
	  - Separated player_list_tables() into separate functions
	  - player_list_tables_room() handles room-specific table lists
	  - player_list_tables_global() handles server-wide table lists


2000-04-05 22:31:26  Rev 385    bmh

	* game_servers/tictactoe/tictactoe.dsc game_servers/tictactoe/ggz.c 
	  game_servers/tictactoe/game.c game_servers/tictactoe/game.h:
	  - Collapsed TTT_STATE_WAIT_INIT and TTT_STATE_WAIT_MID
	  - Initalize turn to -1 in game_init() and then set to 0 when game
	    begins
	  - Rewrote game_update to be event based, not state based
	  - Add void* data parameter to game_update.  Much more useful now
	  - Always send name, even if it's a bot
	  - New function game_bot_move() does a simple bot (first available
	    square)
	  - New function game_move() abstracts player and bot
	  - Updated .dsc file now that bots are allowed


2000-04-05 22:09:59  Rev 384    bmh

	* ggzd/room.c:
	  - In room_join(), don't call room_send_chat() if in room -1


2000-04-05 18:52:31  Rev 383    bmh

	* ggzd/control.c:
	  - Remove mtrace stuff (it's GNU specific and not that helpful)


2000-04-05 18:51:09  Rev 382    bmh

	* ggzd/room.c:
	  - Fixed bug in room_handle_join if user tries to enter non-existent
	    room.


2000-04-05 18:23:26  Rev 381    rgade

	* ggzd/room.c ggzd/players.c ggzd/ggzd.h ggzd/room.h:
	  Lock fixes/optimizations on room code
	  players.c
	    - Send file descriptor to room_join() and room_send_chat()
	  room.c
	    - Rewrote room_send_chat, no buffer - chats sent outside of locks
	    - room_send_chat builds a list of chats to delete and removes them
	      outside of lock
	    - Don't call room_spew_chat_room() unless list debugging is 
	  enabled as it
	      is a high cost algorithm


2000-04-05 12:42:32  Rev 380    bmh

	* doc/design.sgml:
	  - s/game/table in a couple places


2000-04-05 04:22:04  Rev 379    rgade

	* ggzd/room.c ggzd/ggzd.h:
	  ggzd.h
	    - New define: CHAT_OUTBUF_SIZE
	  room.c
	    - room_chat_send() now copies chats to a buffer, then sends out
	      the I/O in a lock-free loop.


2000-04-05 00:37:52  Rev 378    rgade

	* ggzd/room.c:
	  - Fixed a missing free()


2000-04-05 00:21:57  Rev 376    rgade

	* ggzd/players.c ggzd/control.c:
	  - Fixed two nasty memory leaks
	  - Added a call to mtrace() in control.c if DEBUG is on


2000-04-04 19:57:30  Rev 375    bmh

	* ggzd/players.c:
	  - Return error if trying to do a non-global table list when not in
	    room


2000-04-04 19:51:16  Rev 374    bmh

	* ggzd/room.c:
	  - In room_send_chat, unlock the chat_room lock if there is an error
	    sending the chats.  This should prevent hangs due to inability to
	    acquire locks held by dead people.


2000-04-03 20:28:34  Rev 372    bmh

	* game_servers/tictactoe/game.c game_servers/tictactoe/game.h:
	  - Added detection for tie game


2000-04-03 15:48:27  Rev 369    bmh

	* TODO:
	  - Fixed up a bit.  Moved some itmes from 0.0.2 to 0.0.3


2000-04-03 15:43:49  Rev 368    bmh

	* game_servers/tictactoe/main.c game_servers/tictactoe/ggz.c 
	  game_servers/tictactoe/Makefile.am game_servers/tictactoe/game.c 
	  game_servers/tictactoe/protocols.h game_servers/tictactoe/ggz.h 
	  game_servers/tictactoe/game.h:
	  - First stab at a Tic-Tac-Toe game with GGZ stuff tucked nicely away
	    in ggz.[ch]


2000-04-03 15:37:08  Rev 367    bmh

	* ggzd/table.c ggzd/transit.c:
	  - Fixed bug where a message coming from the game server between
	    REQ_GAME_{LEAVE|JOIN} and RSP_GAME_{LEAVE|JOIN} would cause the
	    table thread to hang.


2000-04-02 23:48:55  Rev 360    rgade

	* ggzd/protocols.h ggzd/parse_opt.c ggzd/room.c ggzd/players.c 
	  ggzd/room.h ggzd/datatypes.h:
	  Added MSG_UPDATE_ROOMS to server and client
	  - Client does not yet act upon it, merely accepts it


2000-04-02 19:17:01  Rev 359    rgade

	* ggzd/table.c ggzd/players.c:
	  - Table changes have to trigger a player list update


2000-04-02 19:01:02  Rev 356    rgade

	* ggzd/table.c ggzd/parse_opt.c ggzd/room.c ggzd/players.c 
	  ggzd/datatypes.h:
	  Room support for tables:
	  datatypes.h
	    - Timestamp for table changes in chat room
	    - List of table indices in chat room
	  parse_opt.c
	    - Allocate the list of table indices for chat room
	  players.c
	    - Alter update code to use table_timestamp from chat room
	    - Alter joins/launches to update chat room table_timestamp
	    - Alter launches to update table index list in chat room
	    - Alter player_list_tables() to avoid search for valid tables if 
	  !global
	  room.c
	    - Zap out the count of tables at room initialization
	    - Small optimization to reordering of player index list
	  table.c
	    - Remove table index from chat room on table_remove and update 
	  timestamp


2000-04-01 08:56:08  Rev 352    bmh

	* ggzd/players.c ggzd/datatypes.h:
	  - Added room member to TableInfo
	  - Do some error checking on REQ_TABLE_LAUNCH (type checking, and 
	  don't
	    allow multiple tables per player)
	  - Add room support to {REQ|RSP}_LIST_TABLES to comply with 
	  protocol spec


2000-04-01 07:07:30  Rev 351    bmh

	* doc/design.sgml:
	  - Added MSG_UPDATE_ROOMS and added room stuff to REQ_TABLE_LIST
	  - Minor renaming to GGZ <-> game server protocol to prevent 
	  namespace
	    clash
	  **Client/Server Protocol is now frozen for 0.0.2 release**


2000-03-31 23:43:59  Rev 346    bmh

	* game_servers/spades/engine_func.c:
	  - Comply with protocols (had forgotten to recevie size of options)


2000-03-31 23:41:21  Rev 345    bmh

	* ggzd/table.c ggzd/players.c:
	  - Added Rich's patch for player_list_players (more efficient lock 
	  handling)
	  - Don't send player list if we're not in a room.
	  - Rewrote table_pass_options to be more lock-efficient and to comply
	    with protocol.


2000-03-31 19:50:43  Rev 344    rgade

	* ggzd/err_func.c:
	  err_msg_exit() shouldn't print errno string


2000-03-31 06:34:00  Rev 343    bmh

	* ggzd/players.c ggzd/ggzd.h ggzd/datatypes.h:
	  - Removed state member from UserInfo object (it's function can be 
	  done
	    just as easily elsewhere)


2000-03-31 06:19:20  Rev 342    bmh

	* TODO:
	  - Updated TODO list


2000-03-31 06:08:49  Rev 341    bmh

	* ggzd/room.c ggzd/players.c:
	  - Do better validity checking
	  - Don't allow anything until you're logged in (except logging in)


2000-03-31 05:40:46  Rev 340    bmh

	* ggzd/players.c:
	  - Don't try to update player list when in room -1


2000-03-31 04:28:02  Rev 339    rgade

	* ggzd/room.c ggzd/players.c ggzd/datatypes.h:
	  Modified RSP_LIST_PLAYERS to only list players in a user's room
	  - Move timestamp into the chat_room, so only if the room contents 
	  changed
	    does an update go out
	  - Rewrite of player_list_players
	  - room_join updates the timestamps


2000-03-31 03:18:55  Rev 338    rgade

	* ggzd/room.c ggzd/players.c:
	  Fixed some lock misuses
	  players.c
	    - race condition in room_emit()
	  both files
	    - removed extraneous unlocks of player structure


2000-03-31 03:12:47  Rev 337    bmh

	* doc/design.sgml:
	  - Actually commit these changes....
	  - Make sure protocol matches what we actually do.


2000-03-31 00:24:51  Rev 334    bmh

	* ggzd/protocols.h ggzd/players.c:
	  - Check player state in appropriate places
	  - New error codes


2000-03-30 23:10:30  Rev 333    bmh

	* ggzd/table.c ggzd/players.c ggzd/seats.c ggzd/ggzd.h ggzd/players.
	  h ggzd/seats.h:
	  - s/comp/bot in various places (it's shorter and more recognizable)


2000-03-30 22:06:24  Rev 332    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/parse_opt.c ggzd/players.c 
	  ggzd/ggzd.h ggzd/datatypes.h:
	  - Finally got around to renaming defines to get rid of NG_ prefix
	  - Eliminated COMP_ALLOW_XXX
	  - Renamed type allow member elements to player_allow_mask and
	    bot_allow_mask
	  - Renamed UserInfo element from playing to state
	  - Created some #defines for player state


2000-03-30 16:19:11  Rev 331    rgade

	* ggzd/room.c ggzd/room.h:
	  - Added warning about room_emit() behaviour in room.c and room.h


2000-03-30 14:59:04  Rev 329    bmh

	* ggzd/Makefile.am TODO ggzd/players.c ggzd/chat.c ggzd/control.c 
	  ggzd/chat.h:
	  - Removed last vestiges of old chat system
	  - Updated TODO list


2000-03-30 08:12:32  Rev 323    bmh

	* ggzd/parse_opt.c ggzd/room.c:
	  - Added memset() to cleae game_info when we malloc it
	  - Remove extraneous RSP_ROOM_JOIN


2000-03-30 03:04:57  Rev 322    rgade

	* ggzd/protocols.h ggzd/room.c ggzd/players.c:
	  REQ/RSP_ROOM_JOIN implemented
	  room.c
	    - Wrote room_handle_join()
	  players.c
	    - Players start in room -1
	    - Chat in room -1 receives a RSP_CHAT code of -1
	    - "/join" command removed
	    - cleanups to follow


2000-03-30 00:58:26  Rev 319    bmh

	* doc/design.sgml:
	  - Reverted ROOM_JOIN protocol change


2000-03-29 23:48:23  Rev 318    rgade

	* ggzd/room.c:
	  - Fixed a bug in room_create_additional() - realloc() doesn't 
	  initialize
	    memory to 0's like malloc() does
	  - Made same change to room_initialize() just in case


2000-03-29 23:06:26  Rev 317    rgade

	* doc/design.sgml:
	  - Small change to REQ/RSP_ROOM_JOIN for Justin


2000-03-29 23:02:26  Rev 316    rgade

	* doc/design.sgml:
	  - Added REQ/RSP section for rooms
	  - Documented REQ/RSP_ROOM_JOIN


2000-03-29 20:50:21  Rev 315    rgade

	* ggzd/room.c:
	  Rewrote room_create_additional() to use realloc()


2000-03-29 19:50:48  Rev 313    rgade

	* ggzd/room.c doc/design.sgml:
	  RSP_LIST_ROOMS protocol fix


2000-03-29 09:42:03  Rev 312    rgade

	* ggzd/parse_opt.c:
	  - Fixed lack of fclose() on game and room configuration files
	  - Fixed invalid parse of AllowLeave config option


2000-03-29 03:34:54  Rev 311    rgade

	* ggzd/table.c ggzd/players.c:
	  Altered select call wait times, 5 seconds is a long time to wait
	   - just a test to see how it affects load (shouldn't)


2000-03-29 02:46:13  Rev 310    jzaun

	* ggzd/room.c:
	  - fixed small bug in room code == -1 to != -1


2000-03-29 02:21:35  Rev 307    bmh

	* ggzd/players.c:
	  - Expect seat 0 information from client when doing table launch
	  - leave table if error in responding to client after successful 
	  launch
	    or join


2000-03-28 07:25:53  Rev 306    rgade

	* ggzd/room.c ggzd/players.c ggzd/room.h:
	  Implemented REQ/RSP_LIST_ROOMS on server end
	  players.c
	    - Inserted call to room_handle_request()
	  room.c
	    - Added room_handle_request() to handle all opcodes dealing with 
	  rooms
	    - Added room_list_send() to handle a REQ_LIST_ROOMS per latest 
	  protocol spec


2000-03-28 05:25:26  Rev 304    bmh

	* ggzd/table.c ggzd/protocols.h game_servers/spades/spades.dsc 
	  game_servers/tictactoe/tictactoe.dsc game_servers/spades/protocols.
	  h game_servers/tictactoe/protocols.h:
	  - When enough people have joined a table, mark it as 
	  GGZ_TABLE_PLAYING
	  - Don't attempt leave if table type is -1 (prevents leaving a 
	  removed table)
	  - Don't attempt leave if !allow_leave and state is playing
	  - New error code E_TABLE_FORBIDDEN for when allow_leave is 0
	  - Added AllowLeave and a comment to .dsc files


2000-03-28 04:49:43  Rev 303    rgade

	* doc/design.sgml:
	  Protocol change to REQ/RSP_LIST_ROOMS


2000-03-28 04:35:18  Rev 302    rgade

	* ggzd/protocols.h game_servers/spades/protocols.h doc/design.sgml:
	  - Added protocol specifier for REQ/RSP_LIST_ROOMS
	  - Added documentation for REQ/RSP_LIST_ROOMS


2000-03-28 02:12:54  Rev 300    rgade

	* ggzd/parse_opt.c ggzd/room.c ggzd/ggzd_casual.room 
	  ggzd/ggzd_competitive.room ggzd/ggzd.conf ggzd/players.c 
	  ggzd/control.c ggzd/ggzd.h ggzd/parse_opt.h ggzd/room.h 
	  ggzd/datatypes.h:
	  Added AllowLeave game option to GameInfo parse and datatype
	  Removed an unused var from players.c
	  Implemented room definition files
	    - Put *.room files into game_dir.  Sample files are included.
	    - MaxTables parsed, stored, but not enforced.


2000-03-28 02:00:14  Rev 299    bmh

	* ggzd/table.c ggzd/players.c ggzd/transit.c:
	  - Try to avoid another ghost condition by calling table_leave() when
	    doing the player's table cleanup.
	  - Added some dbg messages to the transit code
	  - Don't update timestamp if you've removed last player (remove 
	  will do
	    it)


2000-03-28 00:14:06  Rev 294    bmh

	* ggzd/players.c:
	  - Call table_leave() upon player logout/error (prevents ghost 
	  tables)


2000-03-27 23:02:31  Rev 292    bmh

	* ggzd/table.c ggzd/err_func.h TODO ggzd/parse_opt.c ggzd/ggzd.conf 
	  ggzd/players.c:
	  - Added new debug level GGZ_DBG_GAME_MSG for those byte-level 
	  "User to
	    Game" messages that everybody loves
	  - Lengthed log/debug defines to 32 bit
	  - Fixed truncation problem on MSG_LOG/DEBUG


2000-03-27 22:34:29  Rev 291    bmh

	* game_servers/spades/err_func.c game_servers/spades/err_func.h 
	  game_servers/spades/engine_main.c:
	  - Added log_msg() function which utilizes MSG_LOG to the GGZ server


2000-03-27 22:32:52  Rev 290    bmh

	* doc/ascii-lynx.dsl doc/ggz.dsl doc/Makefile.am doc/design.sgml:
	  - Created GGZ stylesheet from gnome one
	  - Improved doc-making system


2000-03-27 22:14:17  Rev 289    bmh

	* ggzd/table.c ggzd/transit.c:
	  - Put game module type and pid in log/debug files if options enabled


2000-03-27 21:26:57  Rev 288    bmh

	* game_servers/spades/engine_func.c:
	  - Use es_read_int_or_die() when reading bids.


2000-03-27 21:07:20  Rev 287    bmh

	* ggzd/table.c ggzd/players.c ggzd/datatypes.h:
	  - When launching a table, don't hardcode self to seat[0].  Instead,
	    wait until table is launched and then call table_join()
	  - Removed player_fd member of TableInfo (no longer necessary)


2000-03-27 20:41:58  Rev 284    bmh

	* ggzd/table.c ggzd/players.c ggzd/datatypes.h ggzd/transit.c:
	  - Made transit_flag an unsigned char so we can use all 8 bits
	  - Fixup TRANSIT_LEAVE logic since it's not a flag but the absence of
	    one.
	  - Added some debug messages to transit code
	  - Remove table if seat count goes down to zero (fixes some ghost 
	  tables)


2000-03-27 18:55:32  Rev 283    rgade

	* ggzd/room.c:
	  General cleanups to room_join()
	    - Cleaned up deadlock avoidance strategy
	    - Now checks for invalid room number rather than implicitly 
	  trusting caller
	    - Send off chat messages from old room before switching
	    - Check for already NULL chat_head before sending off to dequeue()
	    - A few other misc cleanups


2000-03-27 18:21:25  Rev 282    rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/ggzd.conf ggzd/err_func.c:
	  Added option for GameTypeInLogs
	  err_func.c
	    - Intialize log options to default to GameTypeInLogs ON
	  err_func.h
	    - Added GGZ_LOGOPT_INC_GAMETYPE bitmask
	  ggzd.conf
	    - Demonstration of syntax
	  parse_opt.c
	    - Parse and set the log option


2000-03-27 04:24:31  Rev 281    bmh

	* TODO:
	  - Fixed up TODO list


2000-03-27 04:22:48  Rev 280    bmh

	* ggzd/table.c ggzd/Makefile.am ggzd/err_func.h ggzd/transit.h 
	  ggzd/table.h ggzd/players.c ggzd/ggzd.h ggzd/datatypes.h 
	  ggzd/transit.c:
	  - Moved much of transit code to transit.c
	  - Rewrote launch and transit systems to not require synchronous 
	  messages
	    from game module
	  - Added transit variable transit_seat to hold seat number of joining
	    player
	  - Cleaned up table_handle()


2000-03-27 03:40:44  Rev 279    bmh

	* game_servers/spades/engine_func.c game_servers/spades/err_func.c 
	  game_servers/spades/err_func.h game_servers/spades/engine_main.c 
	  game_servers/spades/protocols.h:
	  - Use MSG_LOG/MSG_DEBUG mechanism.
	  - Updated to newest protcols.h
	  - Code cleanups


2000-03-27 02:48:00  Rev 278    rgade

	* ggzd/parse_opt.c:
	  Streamlined parse_log/dbg_types() using table searches


2000-03-26 23:43:12  Rev 277    rgade

	* ggzd/room.c:
	  - room_join() now tests for room full conditions and returns 
	  E_ROOM_FULL
	  - locks rewritten using trywrlock() to avoid deadlock


2000-03-26 09:30:12  Rev 275    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/players.c ggzd/motd.c:
	  - Implemented REQ/RSP_MOTD
	  - Implemented MSG_LOG and MSG_DBG


2000-03-26 07:47:06  Rev 274    bmh

	* doc/design.sgml:
	  - Formatting changes
	  - Spelling Fixes
	  - Added REQ/RSP_MOTD
	  - Added MSG_LOG, MSG_DBG


2000-03-26 06:58:26  Rev 273    rgade

	* ggzd/err_func.c:
	  - Added lock around fputs based log output when not using 
	  multi-threaded logs


2000-03-25 19:48:25  Rev 272    bmh

	* configure.in:
	  - Create tictactoe makefile


2000-03-25 19:47:14  Rev 271    bmh

	* game_servers/Makefile.am:
	  - Added tictactoe to list of modules to make


2000-03-25 19:46:42  Rev 270    bmh

	* game_servers/spades/engine_func.c:
	  - Added support for REQ_GAME_LEAVE


2000-03-25 19:39:48  Rev 269    bmh

	* game_servers/tictactoe/main.c game_servers/tictactoe/tictactoe.dsc 
	  game_servers/tictactoe/ggz.c game_servers/tictactoe/Makefile.am 
	  game_servers/tictactoe/protocols.h game_servers/tictactoe/.
	  cvsignore game_servers/tictactoe/ggz.h game_servers/tictactoe:
	  - Added skeleton of new game module


2000-03-25 17:38:59  Rev 268    rgade

	* ggzd/room.c ggzd/ggzd.h ggzd/datatypes.h:
	  - Added array of indexes to players in room
	  - Search players in room when chatting, not all players
	  - WARNING: There is no check for overstuffing a room yet, I want 
	  to think
	  	   about how to handle a failed room_join() from -1 to 0 first.
	  	   So don't let >100 people in a room :)
	  	-  Option 1: Drop their connection
	  	-  Option 2: Qeuue them for entry
	  	-  Option 3: Find any room we can stuff 'em into


2000-03-24 18:46:26  Rev 266    rgade

	* ggzd/room.c:
	  DOH! - Always 'make' even after a simple change.  Missing 
	  semicolon fixed.


2000-03-24 18:45:25  Rev 265    rgade

	* ggzd/room.h:
	  Removed room_dequeue_chat() - static function now


2000-03-24 18:44:49  Rev 264    rgade

	* ggzd/room.c ggzd/players.c:
	  room.c
	    - Restructured locks to make player lock unnecessary
	    - Made room_dequeue_chat() static
	  players.c
	    - Removed an unncessary call to room_dequeue_chat()


2000-03-24 06:17:16  Rev 262    bmh

	* ggzd/players.c:
	  - Updated to new es_read_string() interface


2000-03-24 02:58:23  Rev 260    rgade

	* ggzd/room.c:
	  - Small chat bug-fix, fixes a "this could never happen" crash


2000-03-24 02:43:46  Rev 259    rgade

	* ggzd/room.c:
	  - Minor chat improvement, changed a write lock to a read lock


2000-03-23 05:07:32  Rev 257    rgade

	* ggzd/room.c ggzd/players.c ggzd/control.c:
	  Emit a room change message for both entering and leaving a room
	  control.c
	    - We now have 2 rooms hardcoded, 0 and 1
	  players.c
	    - Players enter at room -1, auto-switched to room 0 at login 
	  completion
	    - Blocked off entry to room -1 (old chat can cause hung chats)
	    - Players switch to room -1 at disconnect
	      (By entering and leaving at room -1 causes a room change msg 
	  automatically)
	  room.c
	    - Fixed an assumption in room_emit() which is not true for room 
	  leave msgs
	      (check for chat emission to an empty room)
	    - Reconnected room_notify_change() now that problems from last 
	  night are gone
	    - Fixed a VERY minor memory leak (only occured if a malloc() 
	  failed)


2000-03-22 19:25:51  Rev 252    rgade

	* ggzd/room.c:
	  - Repaired a memory leak, strings need to be dealloced with chat 
	  items


2000-03-22 05:40:28  Rev 250    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/table.h ggzd/players.c:
	  - Implemented {REQ,RSP}_TABLE_LEAVE


2000-03-22 04:12:27  Rev 249    rgade

	* ggzd/room.c:
	  - Fixed a negative array index bug in room.c
	  - Set default # of rooms back to 1


2000-03-21 21:07:44  Rev 247    rgade

	* ggzd/room.c ggzd/players.c ggzd/room.h:
	  Chat now works in room 0, should work in 'X' rooms also, but 
	  haven't tried yet
	  players.c
	    - Inserted hooks to read chat from our current room
	  room.c
	    - Wrote room_send_chat() to send room chat to a player
	    - Fixed a memory leak in room_dequeue_chat()
	    - Fixed a nasty server lock in room_join()


2000-03-21 19:20:36  Rev 245    rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/room.c ggzd/ggzd.conf 
	  ggzd/players.c ggzd/room.h ggzd/datatypes.h:
	  - Messages are now enqueued for player consumption in room 0
	  - This server should be memory leak free (/join is safe to use)
	  - Can't read messages yet, but can view them queueing in debug
	  datatypes.h
	    - Couple of tweaks
	  err_func.h
	    - Added new debug types (GGZ_DBG_ROOM, GGZ_DBG_LISTS)
	  parse_opt.h
	    - Added new debug types (GGZ_DBG_ROOM, GGZ_DBG_LISTS)
	  players.c
	    - Calling conventions altered for some room_* calls
	    - Fixed all known memory leaks
	  room.c
	    - Chat now enqueued for (later) consumption
	    - Dequeueing chat works properly
	    - List debug spewer coded - to check for leaks
	    - No memory leaks have been noticed


2000-03-21 06:54:47  Rev 244    rgade

	* ggzd/room.c ggzd/players.c ggzd/room.h:
	  Room change code, DON'T use '/join #' to change rooms (see ggz-dev)


2000-03-21 05:01:28  Rev 243    rgade

	* ggzd/Makefile.am ggzd/err_func.h ggzd/room.c ggzd/players.c 
	  ggzd/control.c ggzd/room.h ggzd/datatypes.h:
	  Starting to add room functionality
	  Changes are pretty self-explanatory, basically what I've done is 
	  setup
	  the player to automatically join room -1 at connection time.  
	  There is no
	  way to change to another room :)
	  If the player's room is -1, then the old chat functions are used 
	  as-is.


2000-03-21 03:23:38  Rev 242    rgade

	* ggzd/players.c:
	  - Emit a log_msg() when a player is removed


2000-03-20 05:00:14  Rev 239    bmh

	* game_servers/spades/engine_func.c game_servers/spades/Makefile.am 
	  game_servers/spades/protocols.h:
	  - Updated to work with new table launching/joining system


2000-03-20 04:59:24  Rev 238    bmh

	* ggzd/table.c ggzd/protocols.h ggzd/table.h ggzd/players.c 
	  ggzd/ggzd.h ggzd/datatypes.h ggzd/motd.c:
	  - Rewrote table launching/joining code to fork table immediately 
	  upon
	    launch and then pass players to table as they join
	  - Removed all code that actually deals with table to table.c
	  - Created new "transit" system for joining/leaving table
	  - Replaced table.info[].playing flag with table.info[].state 
	  variable


2000-03-19 05:32:03  Rev 236    rgade

	* ggzd/parse_opt.c:
	  Changed the short form option for --debug to -d


2000-03-19 05:27:26  Rev 235    rgade

	* ggzd/parse_opt.c:
	  Added --debug configuration line option so we can debug 
	  GGZ_DBG_CONFIGURATION


2000-03-19 05:05:24  Rev 234    rgade

	* ggzd/table.c ggzd/err_func.h ggzd/parse_opt.c ggzd/ggzd.conf 
	  ggzd/chat.c ggzd/players.c ggzd/control.c ggzd/datatypes.h 
	  ggzd/err_func.c ggzd/motd.c:
	  DebugTypes is now implemented
	  Important changes:
	    dbg_msg now requires the FIRST parameter to be a valid GGZ_DBG_* 
	  debug type
	    See ggzd.conf for configuration file syntax


2000-03-19 03:14:46  Rev 233    rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/ggzd.conf ggzd/control.c 
	  ggzd/parse_opt.h ggzd/datatypes.h ggzd/err_func.c:
	  LogLevel has been replaced by bitmap LogTypes
	  ggzd.conf
	    - Describes and demonstrates new syntax
	  control.c
	    - Updated printf() of log level to print log types as a hex value
	  err_func.c
	    - log_msg() now outputs if the level passes through the log type 
	  bitmask
	  parse_opt.c
	    - parse_log_types() parses a list of log types and returns a 
	  bitmask


2000-03-19 00:17:17  Rev 229    rgade

	* ggzd/err_func.c:
	  - Fixed a reentrancy problem


2000-03-19 00:03:32  Rev 228    rgade

	* ggzd/ggzd.conf ggzd/err_func.c:
	  ThreadLogs configuration option now works
	  err_func.c
	    - log_open_logfile() opens a logfile, appending PID if necessary
	    - err_doit() now fopen()'s the log before writing and the 
	  fclose()'s it
	  ggzd.conf
	    - Cleaned up example ggzd.conf a little bit


2000-03-18 22:25:07  Rev 227    rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/ggzd.conf ggzd/players.c 
	  ggzd/control.c ggzd/datatypes.h ggzd/err_func.c:
	  Initial changes to support logs by thread PID
	  - Moved all log options into log_info.options bitmap, there were 
	  enough options
	    to make it worthwhile
	  - Altered #defines to reduce namespace pollution
	  - Rewrote functions to deal with bitmap options
	  - Parse (but don't act on) the ThreadLogs ggzd.conf directive


2000-03-18 19:39:02  Rev 226    rgade

	* ggzd/players.c:
	  - Replaced inet_ntoa with thread-safe inet_ntop


2000-03-18 07:18:45  Rev 224    rgade

	* ggzd/parse_opt.c ggzd/players.c:
	  - Disabled HostnameLookup until further notice


2000-03-18 06:18:09  Rev 223    rgade

	* ggzd/err_func.c ggzd/motd.c:
	  - Replaced all calls to localtime() with calls to thread-safe 
	  localtime_r()


2000-03-18 05:34:38  Rev 222    jzaun

	* TODO ggzd/players.c:
	  - Update table description


2000-03-18 03:13:35  Rev 220    rgade

	* ggzd/players.c:
	  - Move motd display into player_login_* so it appears after 
	  successful login


2000-03-17 23:11:09  Rev 217    bmh

	* ggzd/table.c ggzd/err_func.h ggzd/players.c ggzd/control.c 
	  ggzd/motd.c:
	  - Removed all occurrences of FAIL() macro since some system
	    calls return different values for success and failure


2000-03-17 16:48:19  Rev 214    bmh

	* ggzd/protocols.h ggzd/players.c ggzd/ggzd.h:
	  - Added MSG_ERROR to protocol
	  - New function player_send_error() to send MSG_ERROR to client in
	    response to unrecognized opcodes
	  - Rename player_handler() responses
	  - Fixed bug in player_updates() where player number not printed
	    correctly
	  - When checking for duplicate names, don't compare to players who
	    aren't logged in
	  - Don't disconnect on failed login
	  - Cleaned up read_name()


2000-03-17 15:45:17  Rev 213    bmh

	* ggzd/parse_opt.c ggzd/players.c ggzd/control.c ggzd/motd.c:
	  - In parse_file(), set motd_info.use_motd if a motd file is 
	  specified
	  - Call motd_read_file() from main() if it is set
	  - Only try to send MOTD to client if it is set
	  - Don't set it by default in motd_read_file()
	  - Flag some non-reentrant functions in players.c
	  - Close socket if we encounter an error in player_new()


2000-03-17 14:48:44  Rev 212    bmh

	* ggzd/parse_opt.c ggzd/control.c:
	  - Removed hardcoded spades gametype.  Game types *MUST* be loaded 
	  from
	    description files in gamedir now.
	  - Various cleanups
	  - Make 5688 default port (as we discussed on ggz-dev)


2000-03-17 04:36:38  Rev 211    rgade

	* ggzd/players.c:
	  - Fixed a warning in players.c


2000-03-17 04:33:43  Rev 210    rgade

	* ggzd/players.c ggzd/players.h:
	  - anonymous login now fails on duplicate name


2000-03-17 03:09:01  Rev 209    rgade

	* ggzd/players.c ggzd/datatypes.h:
	  - player handler thread now determines IP address for itself


2000-03-17 02:47:33  Rev 208    rgade

	* ggzd/players.c ggzd/control.c ggzd/players.h:
	  - We no longer pass ip_addr to the thread, it will determine it on 
	  it's own


2000-03-17 01:33:43  Rev 207    rgade

	* ggzd/chat.c:
	  - fixed chat_mark_all_read() to remove a finished chat message


2000-03-17 00:52:01  Rev 205    jzaun

	* ggzd/players.c ggzd/datatypes.h:
	  - Adds the option for players to add coments to games


2000-03-16 03:25:39  Rev 204    rgade

	* ggzd/chat.c ggzd/players.c:
	  - Implemented chat_mark_all_read(), should fix bug #102763


2000-03-15 04:04:36  Rev 203    rgade

	* ggzd/err_func.c:
	  - fixed log file opens to append rather than overwrite


2000-03-14 00:37:38  Rev 200    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf ggzd/datatypes.h ggzd/err_func.c:
	  - Added configuration option for logs (TimeInLogs) to include a 
	  timestamp
	  - Fixed some potential buffer overruns in err_doit() - replaced all
	    v/sprintf with v/snprintf so we can't do that in the future.


2000-03-12 23:39:31  Rev 199    rgade

	* ggzd/ggzd.conf:
	  Removed erroneous (Not Implemented) flags


2000-03-12 23:11:16  Rev 198    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf ggzd/players.c:
	  Hostname lookup on connecting client IP address now performed.  
	  The default
	  is not to do a hostname lookup, configurable in ggzd.conf.


2000-03-12 22:23:19  Rev 196    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf ggzd/datatypes.h ggzd/err_func.c:
	  Enabled new ggzd.conf feature (PIDInLogs)


2000-03-12 21:52:44  Rev 195    rgade

	* ggzd/parse_opt.c:
	  Fixed a bug which caused a syntax error if debugging not enabled


2000-03-12 21:41:49  Rev 194    rgade

	* ggzd/datatypes.h:
	  Marked some items for eventual cleanup() that I hadn't been 
	  keeping up with :)


2000-03-12 21:33:17  Rev 193    rgade

	* ggzd/players.c ggzd/control.c ggzd/datatypes.h ggzd/players.h:
	  IP address is now sent down to player functions to store in player 
	  table
	  datatypes.h
	    - added ip_addr to UserInfo
	  control.c
	    - stuff the ip address into a char buffer
	  players.c
	    - modified players_handler_launch() and player_new() to pass the
	      IP address to player_new() in addition to the socket fd
	    - player_new() stores IP address in player info structure


2000-03-12 21:01:59  Rev 192    rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/control.c ggzd/err_func.c:
	  Created log_msg function for general log messages
	  err_func.c
	    - log_info now gets initialized with some defaults
	    - added log_msg function
	    - default log_level is set to 1
	  err_func.h
	    - several defines added for log_level implementation
	  control.c
	    - added some examples of using log_msg()
	    - we now retrieve the IP address of connections made to the server
	  parse_opt.c
	    - don't overwrite log_level if specified at command prompt


2000-03-11 06:13:21  Rev 190    rgade

	* ggzd/err_func.h ggzd/parse_opt.c ggzd/ggzd.conf ggzd/control.c 
	  ggzd/datatypes.h ggzd/err_func.c:
	  Basic logfile handling introduced
	  err_func.c
	    - logfile_set_facility() sets the syslogd facility to use
	    - logfile_initialize() opens logfiles or sets up syslog
	    - err_doit() now logs to stderr only if logging not initialized 
	  yet
	    - err_doit() is now passed a syslog priority to use
	  parse_opt.c
	    - parse the logfile configuration options
	  datatypes.h
	    - added a log_info structure to keep things organized
	  control.c
	    - calls logfile_initialize() after configuration files parsed


2000-03-10 01:52:07  Rev 187    rgade

	* ggzd/datatypes.h ggzd/motd.c:
	  - Added cputype to message of the day parsing (%C)


2000-03-10 01:51:28  Rev 186    rgade

	* doc/design.sgml:
	  - Updated to include %C code in MOTD parsing


2000-03-09 20:48:26  Rev 185    bmh

	* TODO:
	  - Some TODO updates (still needs work)


2000-03-09 20:47:45  Rev 184    bmh

	* game_servers/spades/engine_func.c game_servers/spades/socketfunc.c 
	  game_servers/spades/engine_main.c game_servers/spades/socketfunc.h 
	  game_servers/spades/engine.h:
	  - Use unix domain socket to communicate with GGZ rather than 
	  stdin/stdout
	  - Fixed various compiler warnings


2000-03-09 20:46:28  Rev 183    bmh

	* ggzd/table.c:
	  - Changed GGZ to use unix domain sockets for communication with 
	  game_server.
	    Socket names take the form of /tmp/<game name>.<process id>
	  - Don't close STDIN and STDOUT on forked table


2000-03-09 06:00:48  Rev 181    bmh

	* ggzd/table.c ggzd/Makefile.am ggzd/parse_opt.c ggzd/chat.c 
	  ggzd/players.c ggzd/seats.c ggzd/control.c ggzd/ggzd.h 
	  ggzd/datatypes.h ggzd/motd.c:
	  - Split out #define statements into ggzd.h


2000-03-09 04:09:27  Rev 180    rgade

	* doc/design.sgml:
	  - Added docs for MOTD
	  - Fixed a missing </listitem>


2000-03-08 23:10:02  Rev 179    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf ggzd/datatypes.h ggzd/motd.c:
	  - Added AdminName and AdminEmail to ggzd.conf
	  - Added %a and %e to MOTD


2000-03-08 19:56:48  Rev 177    rgade

	* ggzd/datatypes.h ggzd/motd.c:
	  - Removed static variables from motd functions


2000-03-08 02:36:58  Rev 176    jzaun

	* ggzd/datatypes.h ggzd/motd.c:
	  - Upped the MOTD to 80 lines, should be enought to make most 
	  people happy
	  - Addet %p for the port number, please check it to make shure I 
	  did it right


2000-03-08 01:40:52  Rev 175    rgade

	* ggzd/motd.c:
	  - Implemented %g (total tables running) and %G (tables waiting for
	    players) codes for MOTD


2000-03-08 00:20:01  Rev 174    jzaun

	* ggzd/motd.c:
	  - Added version to motd paser


2000-03-08 00:18:50  Rev 173    bmh

	* doc/design.sgml:
	  - Filled in section on GGZ-control/game_server protocol
	  - Added MOTD subsystem


2000-03-07 23:59:54  Rev 172    rgade

	* ggzd/datatypes.h ggzd/motd.c:
	  - More MOTD functionality
	  - Added MAX_MOTD_LINES to resolve potential future problems


2000-03-07 23:17:28  Rev 170    rgade

	* ggzd/datatypes.h:
	  - Upped maximum MOTD lines to 40


2000-03-07 23:09:06  Rev 169    jzaun

	* ggzd/motd.c:
	  - Made the MOTD a little longer 40 lines now.


2000-03-07 06:59:57  Rev 166    rgade

	* ggzd/datatypes.h:
	  - Just popped a little warning comment in the motd structure


2000-03-07 06:53:47  Rev 164    rgade

	* ggzd/motd.c:
	  - motd lines are now sent through motd_parse_motd_line()
	  - %h specifier is replaced by hostname


2000-03-07 04:59:10  Rev 160    rgade

	* ggzd/players.c ggzd/motd.c:
	  motd.c
	    - altered return code of motd_show_motd to return true on failure
	  players.c
	    - moved call to motd_show_motd to a more sensible location


2000-03-07 04:32:16  Rev 158    rgade

	* ggzd/motd.h ggzd/ggzd.conf ggzd/players.c ggzd/motd.c:
	  Server now sends out (basic) MOTD file
	  motd.c
	    - added motd_send_motd() function
	  players.c
	    - calls motd_send_motd() function after sending server ID


2000-03-07 02:55:05  Rev 156    rgade

	* ggzd/motd.c:
	  - Server now reads in the motd file


2000-03-07 02:27:56  Rev 153    rgade

	* ggzd/Makefile.am ggzd/motd.h ggzd/parse_opt.c ggzd/ggzd.conf 
	  ggzd/motd.c:
	  - Added motd.c, motd.h
	  - parse_opt.c calls motd_read_file()


2000-03-07 02:23:04  Rev 152    rgade

	* ggzd/datatypes.h:
	  - Added a structure for message of the day information


2000-03-07 00:05:12  Rev 148    rgade

	* ggzd/parse_opt.c:
	  - Fixed a few logic errors that could cause a segfault later


2000-03-06 01:53:11  Rev 143    rgade

	* ggzd/parse_opt.c ggzd/datatypes.h:
	  - parse and store the motd_file from the configuration file


2000-03-06 01:15:08  Rev 142    rgade

	* ggzd/ggzd.conf:
	  - Removed (Not Implemented) notations where applicable


2000-03-06 01:05:01  Rev 141    rgade

	* game_servers/spades/spades.dsc ggzd/parse_opt.c ggzd/control.c 
	  ggzd/parse_opt.h:
	  control.c
	    - setup to call parse_game_files()
	    - if it failed, use the old hardwired code for people who don't 
	  have
	      valid conf files
	    - moved code to set default port to parse_opt.c
	  parse_opt.h
	    - added prototype for parse_game_files()
	  parse_opt.c
	    - set defaults at end of parse_conf_file() for important values, 
	  including
	      Port and GameDir
	    - added parse_game_files() - selects game files to add to 
	  game_types
	    - parse_game_files() cleans up the add_ignore_list when done
	    - added parse_dselect() - selects filenames ending in ".dsc" for 
	  scandir
	    - added parse_game() - opens a game description file and imports 
	  values
	      into a GameInfo struct and finally adding it to game_types
	    - reorganized order of functions in module
	  spades.dsc
	    - Updated syntax in spades.dsc


2000-03-06 00:34:42  Rev 140    bmh

	* ggzd/players.c:
	  - Write timestamp while we still have write lock!


2000-03-05 19:25:49  Rev 137    rgade

	* game_servers/spades/spades.dsc game_servers/spades.dsc:
	  - Moved spades.dsc file into the spades srcdir proper


2000-03-05 14:26:57  Rev 135    jzaun

	* ggzd/players.c:
	  - Added a tables.timestamp to joining a table. The table list 
	  client side
	  - now show the correct number of open seats.


2000-03-04 20:46:14  Rev 130    jzaun

	* ggzd/ggzd.conf ggzd/players.c ggzd/control.c:
	  - When sending the game type list, we now send the num_play_allow 
	  as well
	  - This is neede by the client so the launch dialog know how many 
	  combo
	  - items to show.


2000-03-04 17:05:49  Rev 128    bmh

	* game_servers/spades/engine_func.c ggzd/table.c ggzd/Makefile.am 
	  TODO game_servers/spades/engine_main.c ggzd/players.c ggzd/seats.c 
	  doc/design.sgml ggzd/datatypes.h ggzd/seats.h:
	  - Changed TableInfo structure to only hold information about not 
	  seat
	    assignments, not num_players, comp_players, etc.
	  - Updated REQ_LAUNCH_GAME and REQ_LIST_TABLES to reflect new table 
	  structure
	  - Changed the table data passed to game_server for same reason
	  - Added seats.[ch] to provide functions seats_num(), seats_open(), 
	  etc.
	  - #define special seat assignments GGZ_SEAT_OPEN, GGZ_SEAT_COMP,
	    GGZ_SEAT_RESV, and GGZ_SEAT_NONE


2000-03-04 00:49:27  Rev 127    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf:
	  - Added initial functionality for AddGame, AddAllGames, and 
	  IgnoreGame


2000-03-03 22:13:53  Rev 125    bmh

	* ggzd/table.c TODO:
	  - Acquire readlock in a couple places
	  - Small formatting changes


2000-03-03 05:39:59  Rev 124    rgade

	* ggzd/parse_opt.c:
	  - Fixed a spurious conf file syntax error


2000-03-03 05:27:18  Rev 123    rgade

	* game_servers/spades.dsc:
	  - Sample spades.dsc file


2000-03-03 05:08:09  Rev 122    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf ggzd/datatypes.h:
	  - Added some functionality for GameDir parameter
	    (parsed, not acted upon yet)


2000-03-02 22:02:33  Rev 120    bmh

	* ggzd/players.c ggzd/control.c:
	  - Fixed list_players() and list_types() send correct results even if
	    desired elements are not the first elements (closes bug #102477)


2000-03-02 19:42:02  Rev 119    bmh

	* ggzd/players.c ggzd/control.c:
	  - Don't initialize player's table_index and uid upon startup
	  - Don't need to obtain write lock when initializing types since at 
	  that
	    point there is only one thread
	  - Initialize player info fields when we find an open spot.  Then we
	    don't need to do it in player_remove()
	  - Have player_handler() pass players fd as often as possible to 
	  avoid
	    having to look it up.
	  - Fixed a few spots that needs to obtain write-lock
	  - Don't rely on players.info[].playing.  Do we even need this*?
	  - Mark player timestamp when player leaves table at end of game
	  - Some formatting changes


2000-03-02 19:31:37  Rev 118    bmh

	* ggzd/chat.c ggzd/chat.h:
	  - Change chat_add() to accpet a 'name' string as well.  This
	    eliminates another lookup requiring mutex locks
	  - Acquire read lock on players before doing chat_mark_all_unread
	    since we need to determine who is online
	  - Determine online status by looking at fd, not uid (since we no
	    longer initilaize uid to UID_NONE)


2000-03-02 16:16:33  Rev 117    bmh

	* ggzd/table.c TODO ggzd/chat.c ggzd/players.c ggzd/control.c:
	  - Renamed global structure from game_tables to tables (concise is
	    good)


2000-03-02 15:56:02  Rev 116    bmh

	* ggzd/table.c ggzd/players.c:
	  -  Rename functions to match file and opcode names where appropriate


2000-03-02 15:30:55  Rev 115    bmh

	* TODO ggzd/protocols.h ggzd/players.c:
	  - Renamed opcodes according to new design spec


2000-03-02 07:25:15  Rev 114    bmh

	* TODO:
	  - Updated TODO list for 0.0.2


2000-03-02 07:01:13  Rev 113    bmh

	* doc/design.sgml:
	  - Renamed a few opcodes to be more consistent
	  - Added REQ_TABLE_LEAVE


2000-03-02 06:48:15  Rev 112    rgade

	* ggzd/parse_opt.c ggzd/ggzd.conf ggzd/control.c:
	  control.c
	  	- If no port specified, default to 1174
	  ggzd.conf
	  	- Sample ggzd.conf
	  parse_opt.c
	  	- Altered parse_conf_file to open a configuration file
	  	- Added parse_file to drive the configuration file parse
	  	- Added parse_line to parse individual lines of config file
	  	- Port=### syntax implemented


2000-03-02 06:04:05  Rev 110    bmh

	* configure.in:
	  - Bumped version to 0.0.2


2000-03-01 05:10:53  Rev 106    bmh

	* README:
	  - Updated README for new package names


2000-03-01 05:04:34  Rev 104    bmh

	* configure.in:
	  - Renamed package to ggz_server (prgram files remain the same)


2000-02-29 21:13:42  Rev 103    bmh

	* doc/game-modules.txt Makefile.am NEWS doc/Makefile.am doc/design.
	  sgml configure.in ChangeLog README:
	  - Documentation updates for 0.0.1 release


2000-02-29 18:42:39  Rev 102    bmh

	* HACKING:
	  - First go at a HACKING file to describe GGZ coding style


2000-02-29 18:25:27  Rev 101    bmh

	* game_servers/spades/err_func.c game_servers/spades/Makefile.am 
	  game_servers/spades/err_func.h:
	  - Remove easysock dependent portion since we don't use it here


2000-02-29 18:24:13  Rev 100    bmh

	* doc/Makefile.am:
	  - Fixed up rules so that text and html docs get distributed


2000-02-29 16:22:44  Rev 99     bmh

	* ggzd/Makefile.am Makefile.am game_servers/spades/Makefile.am 
	  doc/Makefile.am:
	  - make dist chokes when SUBDIRS is empty, so put SUBDIRS = .


2000-02-29 16:21:04  Rev 98     bmh

	* AUTHORS TODO:
	  - Documentation updates


2000-02-29 15:23:03  Rev 96     bmh

	* ggzd/players.c ggzd/control.c:
	  - Don't chdir to / when daemonizing (we still have hardcoded paths)
	  - Don't send RSP_GAME header if "message" from game is a closed 
	  socket


2000-02-29 15:21:26  Rev 95     bmh

	* game_servers/spades/engine_func.c game_servers/spades/err_func.c 
	  game_servers/spades/socketfunc.c game_servers/spades/Makefile.am 
	  game_servers/spades/err_func.h game_servers/spades/engine_main.c:
	  - Use dbg_msg() rather than fprintf()


2000-02-29 15:18:47  Rev 93     bmh

	* doc/game-modules.txt doc/Makefile.am doc/design.sgml:
	  - Documentation updates


2000-02-29 03:24:57  Rev 90     rgade

	* configure.in autogen.sh:
	  - Fixed a few remaining 'NetGames' instances in configure scripts


2000-02-27 07:44:39  Rev 87     bmh

	* ggzd/players.c:
	  - Send RSP_CHAT status as a char, not an int.  This fixes the "can't
	    see my own chats" bug which I uncovered when I fixed the "my 
	  table list
	    blanks when I receive my chat" bug.  Sheesh.
	  - Send MSG_SERVER_FULL as int, not char.  Apparently nobody has 
	  tested this
	    functionality yet otherwise it would be a bug.  Anyway, it's 
	  fixed now.


2000-02-27 01:19:12  Rev 85     bmh

	* ggzd/players.c:
	  - Oops!  After REQ_CHAT we should respond with a RSP_CHAT, not
	    RSP_TABLE_LIST.  This fixes the "vanishing table list" bug
	  - Update player timestamps when they launch or join a table.  This 
	  fixes
	    the bug that the player table numbers were not getting updated.


2000-02-23 00:25:16  Rev 81     jzaun

	* AUTHORS:
	  - Updated AUTHORS file.


2000-02-21 23:31:10  Rev 76     bmh

	* ggzd/table.c ggzd/err_func.h ggzd/protocols.h ggzd/parse_opt.c 
	  ggzd/table.h ggzd/chat.c ggzd/players.c ggzd/control.c 
	  ggzd/parse_opt.h ggzd/datatypes.h ggzd/err_func.c ggzd/chat.h 
	  ggzd/players.h:
	  - Replaced occurances of 'NetGames' with 'GGZ' (ok, so it breaks the
	    freeze, but I figured for our first release the server at least
	    ought to know it's own name!)


2000-02-21 21:57:27  Rev 74     bmh

	* ggzd/table.c ggzd/parse_opt.c ggzd/players.c ggzd/datatypes.h:
	  - First stab at MSG_XXX_UPDATE functionality:
	  - Added timestamp member to players, game_types, and game_tables
	    structures.
	  - Each player thread send MSG_XXX_UPDATE if timestamp is newer than
	    local copy
	  - Update appropriate timestamp when making changes to global lists
	    (table handling needs updating after 0.0.2 re-write)


2000-02-20 07:05:23  Rev 70     bmh

	* TODO:
	  - Added reservations to TODO list


2000-02-20 07:03:26  Rev 69     bmh

	* ggzd/players.c:
	  - New function type_match_table() to match game table types 
	  including
	    ALL, OPEN, and RES (will need player number for RES...)
	  - Fixed up table_list() so that we send tables of interest, not just
	    the first game_tables.count tables regardless of status


2000-02-20 03:40:40  Rev 68     bmh

	* doc/Makefile.am:
	  - Made targets for htmldir, txtdir, and psdir.
	  - Made XXX-docs depend on XXXdir
	  - Uncommented ps-docs stuff (it works here)


2000-02-20 03:34:12  Rev 66     bmh

	* doc/design.sgml:
	  - Updated interactions to reflect reality
	  - Removed title tag from programlisting (docbook complains invalid)


2000-02-20 03:25:32  Rev 65     bmh

	* ggzd/protocols.h ggzd/players.c:
	  - When handling REQ_JOIN_GAME, return error if table is empty, and
	    only create socketpair if table is valid
	  - Redefined some error constants


2000-02-20 00:43:21  Rev 64     bmh

	* TODO:
	  - Specified TODO elements for 0.0.1 and 0.0.2


2000-02-19 19:01:00  Rev 57     bmh

	* ggzd/protocols.h:
	  - Added MSG_USERS_UPDATE, MSG_TYPES_UPDATE, and MSG_TABLES_UPDATE


2000-02-19 17:23:51  Rev 56     bmh

	* doc/.cvsignore doc:
	  - Added html, txt, and ps dirs


2000-02-19 17:22:37  Rev 55     bmh

	* doc/ascii-lynx.dsl:
	  - Added ascii-lynx.dsl (we use lynx to create our plaintext)


2000-02-19 17:21:50  Rev 54     bmh

	* doc/Makefile.am:
	  - Made more machine-indpendent.
	  - Made general rules for sgml->html,txt,ps


2000-02-19 05:23:51  Rev 53     rgade

	* doc/Makefile.am doc/design.sgml:
	  Makefile.am
	    - Remove directory html so that the following mv command will work
	      on updates.
	  design.sgml
	    - Added tables to sections 2.1/2.2


2000-02-18 14:04:12  Rev 47     bmh

	* doc/images/.cvsignore doc/images doc/README.Design 
	  doc/images/server_arch.fig:
	  - Removed old READEME.Design
	  - Added images directory


2000-02-18 13:49:36  Rev 46     bmh

	* configure.in Makefile.am:
	  - Added doc subdir to build


2000-02-17 05:33:52  Rev 45     bmh

	* doc/.cvsignore doc doc/Makefile.am doc/design.sgml:
	  - Added DocBook format design.sgml
	  - Begin writing Makefile.am to make docs


2000-02-10 00:43:08  Rev 38     jzaun

	* ggzd/control.c:
	  - Updated the *hack* for game_types to fill in all the descriptions


2000-02-08 18:29:28  Rev 34     bmh

	* ggzd/protocols.h ChangeLog ggzd/players.c:
	  - Make select() in player_loop() timeout after NG_RESYNC_SEC seconds
	    so we can do player_updates() including chats.
	  - New function player_send_chat() when new chat is read
	  - New function player_chat() for reading msg from player
	  - Close t_fd if there was an error during a game
	  - New protocol opcode MSG_CHAT for chat messages from server


2000-02-08 18:22:52  Rev 33     bmh

	* ggzd/chat.c ggzd/datatypes.h ggzd/chat.h:
	  - Added unread count to ChatInfo
	  - Added array player_unread_count[MAX_USERS] to chats
	  - Finished up chat interface functions:
	  - Made chat_remove() and chat_mark_all_unread() local to chat.c
	  - Added chat_get() and stub for chat_mark_all_read()
	  - Debugging function chat_status()


2000-02-08 13:52:18  Rev 29     bmh

	* ggzd/protocols.h ggzd/players.c ggzd/datatypes.h:
	  - Implemented supporyt for REQ_GAME and RSP_GAME
	    (removes ugly message passing hack while at a table)
	  - New functions player_msg_{to|from}_sized() for passing messages
	    between client and game server
	  - Fixed ugly reference return of t_fd (now, it's a pretty reference
	    return)


2000-02-07 19:05:01  Rev 26     bmh

	* ggzd/Makefile.am ggzd/chat.c ggzd/players.c ggzd/control.c 
	  ggzd/datatypes.h ggzd/chat.h:
	  - Added infratructure for chat facility (data types and
	    func. interface)


2000-02-06 00:10:32  Rev 24     bmh

	* ggzd/players.c:
	  - Fixed player_remove() to reses table index to -1, not 0.
	  - Added stub function player_updates() for doing periodic updates


2000-02-05 23:05:32  Rev 22     bmh

	* ggzd/table.c ggzd/table.h ggzd/players.c ggzd/control.c 
	  ggzd/players.h:
	  - Renamed functions to better reflect filename and purpose
	    (all in the name of clean code)


2000-02-05 22:18:44  Rev 21     bmh

	* ggzd/table.c ggzd/err_func.h ggzd/protocols.h ggzd/parse_opt.c 
	  ggzd/table.h ggzd/players.c ggzd/control.c ggzd/parse_opt.h 
	  ggzd/datatypes.h ggzd/err_func.c:
	  - Ran code through 'indent -kr -i8'


2000-01-29 19:40:11  Rev 16     bmh

	* ggzd/control.c:
	  - Updated path to spades game server (still needs permanenet fix)


2000-01-26 16:43:41  Rev 13     bmh

	* configure.in:
	  - Packahe name is ggzd, not ggz


2000-01-26 16:31:43  Rev 12     bmh

	* doc doc/README.Design:
	  - Created doc dir and put README.Design there


2000-01-26 16:28:40  Rev 11     bmh

	* configure.in:
	  - Moved easysock to beginning of SUBDIRS since other depend on it
	    being compiled


2000-01-26 16:22:10  Rev 10     bmh

	* game_servers/spades/engine_func.c TODO ggzd/protocols.h INSTALL 
	  ggzd/.cvsignore COPYING game_servers/spades/protocols.h 
	  game_servers/spades/.cvsignore ggzd/datatypes.h game_servers 
	  game_servers/spades/socketfunc.c ChangeLog ggzd 
	  game_servers/spades/socketfunc.h game_servers/Makefile.am 
	  ggzd/players.c game_servers/.cvsignore ggzd/players.h 
	  game_servers/spades ggzd/table.c ggzd/Makefile.am ggzd/table.h 
	  ggzd/parse_opt.c Makefile.am ggzd/ggzd.conf 
	  game_servers/spades/Makefile.am autogen.sh game_servers/spades/ai.
	  c NEWS ggzd/parse_opt.h .cvsignore ggzd/err_func.c 
	  game_servers/spades/options.h ggzd/err_func.h AUTHORS configure.in 
	  game_servers/spades/engine_main.c game_servers/spades/card.c 
	  game_servers/spades/engine.h ggzd/control.c README acconfig.h 
	  game_servers/spades/card.h:
	  - Imported files from NetGames project


