Description: <short summary of the patch>
 TODO: Put a short summary on the line above and replace this paragraph
 with a longer explanation of this change. Complete the meta-information
 with other relevant fields (see below for details). To make it easier, the
 information below has been extracted from the changelog. Adjust it or drop
 it.
 .
 gtkboard (0.11pre0+cvs.2003.11.02-7) unstable; urgency=medium
 .
   * add icon to menu entry (closes: #737925)
Author: Barak A. Pearlmutter <bap@debian.org>
Bug-Debian: http://bugs.debian.org/737925

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: http://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>

--- /dev/null
+++ gtkboard-0.11pre0+cvs.2003.11.02/configure.ac
@@ -0,0 +1,121 @@
+AC_PREREQ([2.67])
+AC_INIT([gtkboard],[0.11pre0])
+AC_CONFIG_SRCDIR([src/])
+AC_CONFIG_HEADERS([config.h])
+
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE(gtkboard,0.11pre0)
+
+# Checks for programs.
+AC_PROG_CC
+
+# Checks for libraries.
+AC_ARG_ENABLE(gtk2,
+		[  --disable-gtk2      Don't look for GTK2 libraries],
+		enable_gtk2=$enableval,
+		enable_gtk2="yes")
+
+found_gtk2=0;
+
+if test "$enable_gtk2" = "yes" ; then
+	dnl check if user has gtk2
+	PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.0.0, found_gtk2=1, found_gtk2=0)
+fi
+
+
+AC_ARG_ENABLE(sdl,
+        [  --disable-sdl      Don't look for the SDL library],
+        enable_sdl=$enableval,
+        enable_sdl="yes")
+
+if test "$enable_sdl" = "yes" ; then
+	dnl Check for SDL
+#	SDL_VERSION=1.2.0
+#	AM_PATH_SDL($SDL_VERSION,
+#			AC_DEFINE([HAVE_SDL], [], [Do we have the SDL library]), 
+#			AC_MSG_WARN([*** SDL version $SDL_VERSION not found. Sound will be disabled])
+#	)
+	AC_CHECK_LIB( SDL_mixer, Mix_OpenAudio, 
+		have_SDL_mixer=yes, have_SDL_mixer=no)
+
+	if test "$have_SDL_mixer" = "yes" ; then 
+#		CFLAGS="$CFLAGS -DHAVE_SDL" 
+		AC_DEFINE([HAVE_SDL], [], [Do we have the SDL library])
+	    LIBS="$LIBS -lSDL_mixer -lSDL"
+	else
+	    echo "*** SDL_mixer not found.  Configuring without audio support."
+	fi
+
+	
+#	CFLAGS="$CFLAGS $SDL_CFLAGS"
+#	LIBS="$LIBS $SDL_LIBS -lSDL_mixer"
+fi
+
+AC_CHECK_LIB([gmodule-2.0], [g_module_symbol], [LIBS="$LIBS -lgmodule-2.0"], AC_MSG_WARN([Cannot find gmodule-2.0 library]))
+
+AC_CHECK_LIB([m], [sincosf], [LIBS="$LIBS -lm"], AC_MSG_WARN([Cannot find math library]))
+
+gnome=false
+
+GNOME_CFLAGS=""
+GNOME_LIBS=""
+
+AC_ARG_ENABLE(gnome,[  --enable-gnome    Turn on gnome ],[
+	if test "x$enableval" = "xyes"; then
+		gnome=true
+	fi
+])
+
+if test "$gnome" = true ; then
+	PKG_CHECK_MODULES(GNOME, [
+			libgnome-2.0 >= 2.0.0
+			libgnomeui-2.0 >= 2.0.0
+	])
+	GNOME_CFLAGS="$GNOME_CFLAGS -DHAVE_GNOME=1"
+fi
+
+AC_SUBST(GNOME_CFLAGS)
+AC_SUBST(GNOME_LIBS)
+	
+AM_CONDITIONAL(WITH_GNOME, test "x$gnome" = "xtrue")
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([stdlib.h string.h unistd.h])
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_HEADER_STDBOOL
+
+dnl Checks for library functions.
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_CHECK_FUNCS([getcwd memset mkdir sqrt strcasecmp strncasecmp strpbrk strstr strtol])
+
+AC_CONFIG_FILES([Makefile
+                 doc/Makefile
+                 pixmaps/Makefile
+                 sounds/Makefile
+                 src/Makefile])
+AC_OUTPUT
+
+echo " "
+
+if test "$enable_gtk2" = "yes" ; then
+	AC_MSG_RESULT([    GTK2 enabled.])
+else
+	AC_MSG_RESULT([    GTK2 disabled.])
+fi
+
+if test "$enable_sdl" = "yes" ; then
+	AC_MSG_RESULT([     SDL enabled.])
+else
+	AC_MSG_RESULT([     SDL disabled.])
+fi
+if test "$enable_gnome" = "yes" ; then
+	AC_MSG_RESULT([   GNOME enabled.])
+else
+	AC_MSG_RESULT([   GNOME disabled.])
+fi
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/aaball.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/aaball.c
@@ -297,3 +297,6 @@ char ** pixmap_die_gen(int len, char *pi
 	return map;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/ab.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/ab.c
@@ -88,7 +88,7 @@ float ab_with_tt (Pos *pos, int player,
 	// origmove is the owning pointer and move is the aliasing pointer
 	else orig_move = move = movdup (move);
 	
-	newpos.board = (char *) malloc (board_wid * board_heit);
+	newpos.board = malloc (board_wid * board_heit);
 	assert (newpos.board);
 	if (game_stateful)
 	{
@@ -367,3 +367,7 @@ byte * ab_dfid (Pos *pos, int player)
 	}
 	return found ? best_move : NULL;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/antichess.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/antichess.c
@@ -731,3 +731,7 @@ ResultType antichess_eval_incr (Pos *pos
 	}
 	return RESULT_NOTYET;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/ataxx.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/ataxx.c
@@ -401,3 +401,6 @@ unsigned char * ataxx_get_rgbmap (int id
 	return rgbbuf;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/blet.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/blet.c
@@ -152,3 +152,6 @@ unsigned char * blet_get_rgbmap (int idx
 	return rgbbuf;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/board.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/board.c
@@ -74,7 +74,7 @@ gboolean state_board_flipped = FALSE;
 //! default background
 char board_default_colors [9] = {215, 215, 215, 215, 215, 215, 0, 0, 0};
 
-static int cell_size, num_pieces;
+int cell_size, num_pieces;
 
 extern void ui_make_human_move (byte *move, int *rmove);
 
@@ -677,4 +677,6 @@ void board_init ()
 	gdk_gc_destroy (def_gc);
 }
 
-
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/breakthrough.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/breakthrough.c
@@ -362,3 +362,6 @@ int breakthrough_getmove (Pos *pos, int
 	return 1;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/checkers.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/checkers.c
@@ -300,3 +300,7 @@ char ** checkers_get_pixmap (int idx, in
 			CHECKERS_ISWHITE(idx) ? 0xffffff : 0x0000ff, bg, 
 			(idx == CHECKERS_WP || idx == CHECKERS_BP) ? 8 : 12, 24);
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/chess.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/chess.c
@@ -895,3 +895,7 @@ ResultType chess_eval (Pos * pos, Player
 	*eval = sum;
 	return RESULT_NOTYET;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/cpento.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/cpento.c
@@ -576,3 +576,6 @@ static int cpento_getmove(Pos *pos, int
     }
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/dirmaze.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/dirmaze.c
@@ -275,3 +275,6 @@ char ** hypermaze_get_pixmap (int idx, i
 	}
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/dotsandboxes.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/dotsandboxes.c
@@ -447,3 +447,7 @@ void dnb_search (Pos *pos, byte **movp)
 		return;
 	}
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/eightqueens.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/eightqueens.c
@@ -43,7 +43,7 @@ char eightqueens_colors[6] = {200, 200,
 
 void eightqueens_init ();
 
-char ** eightqueens_pixmaps [] = 
+char ** eightqueens_pixmaps [] =
 {
 	chess_wq_54_xpm,
 	grey_square_54_xpm,
@@ -126,10 +126,13 @@ int eightqueens_getmove (Pos *pos, int x
 	*mp++ = x, *mp++ = y, *mp++ = EIGHTQUEENS_QUEEN;
 	for (i=0; i<board_wid; i++)
 	for (j=0; j<board_heit; j++)
-		if (!(i==x && j==y) && pos->board[j * board_wid + i] == EIGHTQUEENS_EMPTY 
+		if (!(i==x && j==y) && pos->board[j * board_wid + i] == EIGHTQUEENS_EMPTY
 				&& ATTACKS (i, j, x, y))
 			*mp++ = i, *mp++ = j, *mp++ = EIGHTQUEENS_CONTROLLED;
 	*mp++ = -1;
 	return 1;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/engine.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/engine.c
@@ -433,3 +433,6 @@ byte * engine_search (Pos *pos/*, int pl
 	return move;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/engine.h
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/engine.h
@@ -42,3 +42,7 @@ void engine_poll ();
 
 
 #endif
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/fifteen.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/fifteen.c
@@ -227,7 +227,7 @@ char ** fifteen_pixmap_square_gen (char
 	static char line[FIFTEEN_CELL_SIZE];
 	memset(line, ' ', FIFTEEN_CELL_SIZE);
 	pixmap = g_new(char *, FIFTEEN_CELL_SIZE + 2);
-	pixmap[0] = "60 60 1 1"; // FIXME: dont hard code
+	pixmap[0] = "60 60 1 1"; // FIXME: don't hard code
 	// FIXME: not freed
 	pixmap[1] = g_strdup_printf (" c %s", col);
 	for (i=0; i<FIFTEEN_CELL_SIZE; i++) pixmap[i+2] = line; return pixmap;
@@ -284,3 +284,7 @@ guchar *fifteen_get_rgbmap (int idx, int
 	}
 	return buf;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/flw.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/flw.c
@@ -342,3 +342,6 @@ void flw_free ()
 	flw_curx = flw_cury = -1;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/flwords.h
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/flwords.h
@@ -4360,3 +4360,7 @@ static const int num_flwords = sizeof (f
 
 
 #endif
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/game.h
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/game.h
@@ -27,6 +27,8 @@
   This is the only file that the games need to include.
 */
 
+#define GTKBOARD_VERSION "0.11pre0"
+
 //! Both moves and positions are arrays of <tt>byte</tt>s
 #ifndef byte 
 #define byte gint8
@@ -518,3 +520,7 @@ extern int (*game_scorecmp_def_iscore) (
 extern int (*game_scorecmp_def_time) (gchar *, int, gchar*, int);
 
 #endif
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/hash.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/hash.c
@@ -236,3 +236,7 @@ void hash_print_stats ()
 	}
 	if (opt_verbose) printf ("stale=%d\n", stale);
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/hiq.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/hiq.c
@@ -286,3 +286,6 @@ InputType hiq_event_handler
 	return INPUT_LEGAL;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/infiltrate.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/infiltrate.c
@@ -205,3 +205,7 @@ char ** infiltrate_get_pixmap (int idx,
 			8, 24);
 }
 */
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/knights.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/knights.c
@@ -367,3 +367,7 @@ ResultType knights_eval (Pos *pos, Playe
 {
 	return knights_eval_real (pos, player, eval, FALSE);
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/kttour.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/kttour.c
@@ -266,3 +266,6 @@ int kttour_getmove
 	return 1;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/mastermind.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/mastermind.c
@@ -470,3 +470,6 @@ int mastermind_getmove_kb (Pos *pos, int
 	return 1;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/maze.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/maze.c
@@ -289,3 +289,6 @@ char ** maze_get_pixmap (int idx, int co
 	//else return pixmap_ball_gen(MAZE_CELL_SIZE, 0xc0c040, bg, 2, 50);
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/memory.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/memory.c
@@ -302,3 +302,6 @@ int memory_getmove (Pos *pos, int x, int
 	return 1;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/menu.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/menu.c
@@ -51,7 +51,7 @@ GtkItemFactory *menu_factory = NULL;
 void sb_messagebar_message (gchar *);
 void menu_cleanup_var_menus ();
 
-static char * menu_paths_sens_machine_thinking[] = 
+static char * menu_paths_sens_machine_thinking[] =
 {
 //	"/File/Load game",
 //	"/File/Save game",
@@ -63,7 +63,7 @@ static char * menu_paths_sens_machine_th
 	"/Move/Forward",
 };
 
-static char * menu_paths_sens_no_game[] = 
+static char * menu_paths_sens_no_game[] =
 {
 	"/Game/Start",
 	"/Game/Pause",
@@ -77,7 +77,7 @@ static char * menu_paths_sens_no_game[]
 	"/Settings/Player",
 };
 
-static char * menu_paths_sens_no_back_forw[] = 
+static char * menu_paths_sens_no_back_forw[] =
 {
 	"/Move/Back",
 	"/Move/Forward",
@@ -96,17 +96,17 @@ static char *menu_paths_sens_two_players
 	"/Game/Zap Highscores",
 };
 
-static char *menu_paths_sens_ui_stopped[] = 
+static char *menu_paths_sens_ui_stopped[] =
 {
 	"/Game/Pause",
 };
 
-static char *menu_paths_sens_machine_not_thinking[] = 
+static char *menu_paths_sens_machine_not_thinking[] =
 {
 	"/Move/Move Now",
 };
 
-static char *menu_paths_sens_eval_function[] = 
+static char *menu_paths_sens_eval_function[] =
 {
 //	"/Settings/Eval function",
 };
@@ -124,60 +124,63 @@ void menu_sensitize (int which, gboolean
 	if (!state_gui_active) return;
 	switch (which)
 	{
-		case MENU_SENS_MACHINE_THINKING: 
+		case MENU_SENS_MACHINE_THINKING:
 			menu_des_paths = menu_paths_sens_machine_thinking;
-			num_paths = sizeof (menu_paths_sens_machine_thinking) / 
+			num_paths = sizeof (menu_paths_sens_machine_thinking) /
 				sizeof (menu_paths_sens_machine_thinking[0]);
 			break;
-		case MENU_SENS_MACHINE_NOT_THINKING: 
+		case MENU_SENS_MACHINE_NOT_THINKING:
 			menu_des_paths = menu_paths_sens_machine_not_thinking;
-			num_paths = sizeof (menu_paths_sens_machine_not_thinking) / 
+			num_paths = sizeof (menu_paths_sens_machine_not_thinking) /
 				sizeof (menu_paths_sens_machine_not_thinking[0]);
 			break;
-		case MENU_SENS_NO_GAME: 
+		case MENU_SENS_NO_GAME:
 			menu_des_paths = menu_paths_sens_no_game;
-			num_paths = sizeof (menu_paths_sens_no_game) / 
+			num_paths = sizeof (menu_paths_sens_no_game) /
 				sizeof (menu_paths_sens_no_game[0]);
 			break;
-		case MENU_SENS_NO_BACK_FORW: 
+		case MENU_SENS_NO_BACK_FORW:
 			menu_des_paths = menu_paths_sens_no_back_forw;
-			num_paths = sizeof (menu_paths_sens_no_back_forw) / 
+			num_paths = sizeof (menu_paths_sens_no_back_forw) /
 				sizeof (menu_paths_sens_no_back_forw[0]);
 			break;
-		case MENU_SENS_SINGLE_PLAYER: 
+		case MENU_SENS_SINGLE_PLAYER:
 			menu_des_paths = menu_paths_sens_single_player;
-			num_paths = sizeof (menu_paths_sens_single_player) / 
+			num_paths = sizeof (menu_paths_sens_single_player) /
 				sizeof (menu_paths_sens_single_player[0]);
 			break;
 		case MENU_SENS_TWO_PLAYERS: 
 			menu_des_paths = menu_paths_sens_two_players;
-			num_paths = sizeof (menu_paths_sens_two_players) / 
+			num_paths = sizeof (menu_paths_sens_two_players) /
 				sizeof (menu_paths_sens_two_players[0]);
 			break;
-		case MENU_SENS_UI_STOPPED: 
+		case MENU_SENS_UI_STOPPED:
 			menu_des_paths = menu_paths_sens_ui_stopped;
-			num_paths = sizeof (menu_paths_sens_ui_stopped) / 
+			num_paths = sizeof (menu_paths_sens_ui_stopped) /
 				sizeof (menu_paths_sens_ui_stopped[0]);
 			break;
 		case MENU_SENS_EVAL_FUNCTION:
 			menu_des_paths = menu_paths_sens_eval_function;
-			num_paths = sizeof (menu_paths_sens_eval_function) / 
+			num_paths = sizeof (menu_paths_sens_eval_function) /
 				sizeof (menu_paths_sens_eval_function[0]);
 			break;
 		default:
 			g_assert_not_reached ();
 	}
 	for (i=0; i<num_paths; i++)
-		gtk_widget_set_sensitive (gtk_item_factory_get_widget (menu_factory, 
+		gtk_widget_set_sensitive (gtk_item_factory_get_widget (menu_factory,
 					menu_des_paths[i]), sens);
 }
 
+#if GTK_MAJOR_VERSION == 2
+#define size_sb_set_turn_image 20
+#endif
+
 void sb_set_turn_image ()
 {
 #if GTK_MAJOR_VERSION == 2
 	// FIXME: can't get existing bgcolor
-	const int size = 20;
-	static char pixbufs [7][size*(size+1)];
+	static char pixbufs [7][size_sb_set_turn_image*(size_sb_set_turn_image+1)];
 	char **pixmap_data;
 	static GdkPixmap *pixmaps[7];
 	int colors[7] = {0x007700, 0x77ff77, 0x770000, 0xff7777, 0x000077, 0x7777ff,
@@ -191,18 +194,18 @@ void sb_set_turn_image ()
 		int i;
 		for (i=0; i<7; i++)
 		{
-			pixmap_data = pixmap_ball_gen (size, pixbufs[i], colors[i], 
+			pixmap_data = pixmap_ball_gen (size_sb_set_turn_image, pixbufs[i], colors[i],
 					0xffffff, 6.5, 24);
-			pixmaps[i] = gdk_pixmap_create_from_xpm_d 
+			pixmaps[i] = gdk_pixmap_create_from_xpm_d
 				((GdkWindow *)main_window->window, NULL, NULL, pixmap_data);
 		}
-		gtk_image_set_from_pixmap (GTK_IMAGE (sb_turn_image), 
+		gtk_image_set_from_pixmap (GTK_IMAGE (sb_turn_image),
 				pixmaps[previndex = 6], NULL);
 		first = 0;
 	}
 	if (opt_infile || !opt_game)
 		index = 6;
-	else 
+	else
 	{
 		if (!game_single_player && ui_white == HUMAN && ui_black == HUMAN
 				&& cur_pos.player == BLACK) index = 4;
@@ -211,14 +214,14 @@ void sb_set_turn_image ()
 	}
 	g_assert (index >= 0 && index <= 6);
 	if (index == previndex) return;
-	gtk_image_set_from_pixmap (GTK_IMAGE (sb_turn_image), 
+	gtk_image_set_from_pixmap (GTK_IMAGE (sb_turn_image),
 			pixmaps[previndex = index], NULL);
 #endif
 }
 
 static void sb_set_cursor ()
 {
-	static GdkCursor *cursor_normal = NULL, *cursor_busy = NULL, 
+	static GdkCursor *cursor_normal = NULL, *cursor_busy = NULL,
 		*cursor_inactive = NULL;
 	// FIXME: is it ok to hard code the shape of the normal cursor?
 	if (!cursor_normal) cursor_normal = gdk_cursor_new (GDK_LEFT_PTR);
@@ -272,9 +275,9 @@ static void menu_show_dialog_real (gchar
 	dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (main_window),
 			GTK_DIALOG_MODAL, NULL);
 	gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 100);
-	okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog), 
+	okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
 			GTK_STOCK_OK, GTK_RESPONSE_NONE);
-	g_signal_connect_swapped (GTK_OBJECT (dialog), 
+	g_signal_connect_swapped (GTK_OBJECT (dialog),
 			"response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT (dialog));
 	gtk_label_set_selectable (GTK_LABEL (label), TRUE);
 #endif
@@ -294,7 +297,7 @@ void menu_show_dialog_wrap (gchar *title
 {
 	menu_show_dialog_real (title, message, TRUE);
 }
-	
+
 
 void menu_pause_cb (GtkWidget *dialog)
 {
@@ -332,11 +335,12 @@ void menu_show_pause_dialog ()
 			GTK_DIALOG_MODAL,
 			GTK_MESSAGE_INFO,
 			GTK_BUTTONS_OK,
+			"%s",
 			msg);
 /*	dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (main_window),
 			GTK_DIALOG_MODAL, NULL);
 	gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 100);
-	okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog), 
+	okay_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
 			GTK_STOCK_OK, GTK_RESPONSE_NONE);
 	gtk_label_set_selectable (GTK_LABEL (label), TRUE);
 */
@@ -375,13 +379,11 @@ void menu_show_about_dialog (gpointer da
 	menu_show_dialog ("About gtkboard", 
 			"gtkboard " VERSION "\n"
 			"http://gtkboard.sourceforge.net/\n"
-			"Maintainer: Arvind Narayanan <arvindn@users.sourceforge.net>\n"
+			"Author: Arvind Narayanan <arvindn@users.sourceforge.net>\n"
 			"Released under the GNU General Public License\n"
 			"See the file COPYING for details\n"
 			"\n"
-			"The documentation is available in the doc/ directory\n"
-			"of the source distribution or in the directory\n" 
-			"/usr/local/doc/gtkboard-" VERSION "/ if you installed from binary rpm.\n"
+			"The documentation is available locally in /usr/share/doc/gtkboard/.\n"
 			"The latest documentation will always be available at\n"
 			"http://gtkboard.sourceforge.net/doc/"
 			);
@@ -425,8 +427,8 @@ void menu_start_stop_game (gpointer data
 				sb_error ("Game over", FALSE);
 				break;
 			}
-			if (!impl_check()) 
-			{	
+			if (!impl_check())
+			{
 				sb_error ("Not yet implemented", TRUE);
 				break;
 			}
@@ -470,19 +472,19 @@ void menu_start_stop_game (gpointer data
 // if first is TRUE use opt_white and opt_black
 void menu_put_player (gboolean first)
 {
-	gchar *path, *paths[4] = { 
+	gchar *path, *paths[4] = {
 		"/Settings/Player/Human-Human", "/Settings/Player/Human-Machine",
 		"/Settings/Player/Machine-Human", "/Settings/Player/Machine-Machine"};
 	if (!state_gui_active) return;
 	if (first) {ui_white = opt_white; ui_black = opt_black;}
 	if (opt_infile)
 	{
-		gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM 
-		(gtk_item_factory_get_widget (menu_factory, "/Settings/Player/File")), 
+		gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
+		(gtk_item_factory_get_widget (menu_factory, "/Settings/Player/File")),
 		              TRUE);
-			
+
 		return;
-	}	
+	}
 	else if (ui_white == HUMAN && ui_black == HUMAN)
 		path = paths[0];
 	else if (ui_white == HUMAN && ui_black == MACHINE)
@@ -493,35 +495,38 @@ void menu_put_player (gboolean first)
 		path = paths[3];
 	else
 		return;
-	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM 
+	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
 			(gtk_item_factory_get_widget (menu_factory, path)), TRUE);
 }
 
 void menu_put_game ()
 {
-	gchar path[128] = "/Game/Select Game/";
+	gchar *prefix = "/Game/Select Game/";
+	gchar path0[128], path[128];
 	if (opt_game->group)
 	{
-		// FIXME: don't use strcat
-		strncat (path, opt_game->group, 128);
-		strncat (path, "/", 128);
+		snprintf (path0, sizeof (path0), "%s%s/", prefix, opt_game->group);
 	}
-	strncat (path, opt_game->name, 128);
-	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM 
+	else
+	{
+		snprintf (path0, sizeof (path0), "%s", prefix);
+	}
+	snprintf (path, sizeof (path), "%s%s", path0, opt_game->name);
+	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
 			(gtk_item_factory_get_widget (menu_factory, path)), TRUE);
 }
 
 GtkWidget *menu_selector;
-	
-void menu_load_file (GtkFileSelection *selector, gpointer user_data) 
+
+void menu_load_file (GtkFileSelection *selector, gpointer user_data)
 {
 	gchar const *filename;
 	static FILE *in;
-	filename = gtk_file_selection_get_filename 
+	filename = gtk_file_selection_get_filename
 		(GTK_FILE_SELECTION(menu_selector));
 	if (!(in = fopen (filename, "r")))
 	{
-		gchar *tempstr = g_strdup_printf 
+		gchar *tempstr = g_strdup_printf
 			("Could not open file \"%s\" for reading", filename);
 		sb_error (tempstr, TRUE);
 		g_free (tempstr);
@@ -544,7 +549,7 @@ void menu_set_player (gpointer *data, gu
 	/* the callback for a radio button appears to
 	   be called TWICE, once when selected and once when something else
 	   is selected. */
-	
+
 	if (!GTK_CHECK_MENU_ITEM(widget)->active)
 		return;
 
@@ -601,12 +606,12 @@ void menu_load_file_dialog ()
 	g_assert (menu_selector);
 	/*gtk_file_selection_complete (
 			GTK_FILE_SELECTION (menu_selector), "*.cbgf");*/
-	
-	gtk_signal_connect (GTK_OBJECT 
+
+	gtk_signal_connect (GTK_OBJECT
 		(GTK_FILE_SELECTION(menu_selector)->ok_button),
 		"clicked", GTK_SIGNAL_FUNC (menu_load_file), NULL);
-			   
-	gtk_signal_connect_object (GTK_OBJECT 
+
+	gtk_signal_connect_object (GTK_OBJECT
 		(GTK_FILE_SELECTION(menu_selector)->ok_button),
 		"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
 		(gpointer) menu_selector);
@@ -615,7 +620,7 @@ void menu_load_file_dialog ()
 		GTK_OBJECT (GTK_FILE_SELECTION(menu_selector)->cancel_button),
 		"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
 		(gpointer) menu_selector);
-   
+
    gtk_widget_show (menu_selector);
 }
 
@@ -671,7 +676,7 @@ void menu_show_game_doc (gpointer data,
 	dialog = gtk_dialog_new();
 	gtk_window_set_title (GTK_WINDOW (dialog), titlestr);
 	hbox = gtk_hbox_new (FALSE, 0);
-	msgarea = gtk_text_new (NULL, 
+	msgarea = gtk_text_new (NULL,
 			gtk_range_get_adjustment (GTK_RANGE (vbar)));
 	gtk_text_set_word_wrap (GTK_TEXT (msgarea), TRUE);
 	gtk_text_insert (GTK_TEXT (msgarea), NULL, NULL, NULL, msgstr, -1);
@@ -680,7 +685,7 @@ void menu_show_game_doc (gpointer data,
 	okay_button = gtk_button_new_with_label("  OK  ");
 	gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked",
 			GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog);
-	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), 
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area),
 			okay_button, FALSE, FALSE, 0);
 	gtk_widget_grab_focus (okay_button);	// contributed by Paddu
 	gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), hbox);
@@ -696,7 +701,7 @@ void menu_show_game_doc (gpointer data,
 	gtk_text_view_set_editable (GTK_TEXT_VIEW (msgarea), FALSE);
 	gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (msgarea), GTK_WRAP_WORD);
 	gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (msgarea), FALSE);
-	gtk_text_buffer_set_text (gtk_text_view_get_buffer 
+	gtk_text_buffer_set_text (gtk_text_view_get_buffer
 			(GTK_TEXT_VIEW (msgarea)), msgstr, -1);
 	scrwin = gtk_scrolled_window_new (NULL,
 		gtk_range_get_adjustment (GTK_RANGE(vbar)));
@@ -827,21 +832,21 @@ void menu_insert_recent_game (gchar *gam
 void menu_start_game ()
 {
 	ui_start_game ();
-	
+
 	{
 	int i;
-	GtkItemFactoryEntry help_items [3];
+	GtkItemFactoryEntry help_items [4];
 	help_items[0].path = g_strdup_printf ("/Help/%s", opt_game->name);
 	help_items[0].accelerator = NULL;
 	help_items[0].callback = NULL;
 	help_items[0].item_type = "<Branch>";
 	gtk_item_factory_create_item (menu_factory, help_items, NULL, 1);
-	
-	help_items[0].path = g_strdup_printf ("/Help/%s/_About", opt_game->name); 
+
+	help_items[0].path = g_strdup_printf ("/Help/%s/_About", opt_game->name);
 	help_items[0].callback_action = MENU_DOC_ABOUT;
-	help_items[1].path = g_strdup_printf ("/Help/%s/_Rules", opt_game->name); 
+	help_items[1].path = g_strdup_printf ("/Help/%s/_Rules", opt_game->name);
 	help_items[1].callback_action = MENU_DOC_RULES;
-	help_items[2].path = g_strdup_printf ("/Help/%s/_Strategy", opt_game->name); 
+	help_items[2].path = g_strdup_printf ("/Help/%s/_Strategy", opt_game->name);
 	help_items[2].callback_action = MENU_DOC_STRATEGY;
 	help_items[3].path = g_strdup_printf ("/Help/%s/_History", opt_game->name); 
 	help_items[3].callback_action = MENU_DOC_HISTORY;
@@ -980,7 +985,7 @@ void menu_back_forw (gpointer data, guin
 					sb_message ("You cheated! No highscore for this game.", FALSE);
 				ui_cheated = TRUE;
 			}
-			// FIXME: there should be only one round of communication 
+			// FIXME: there should be only one round of communication
 			// in which client gets both the move and who_won
 			ui_check_who_won ();
 			if (game_reset_uistate) game_reset_uistate();
@@ -1037,7 +1042,7 @@ void menu_set_eval_function ()
 		if (game_htab)
 		for (i=0; game_htab[i].name; i++)
 		{
-			heur_item.path = g_strdup_printf ("/Settings/Eval function/%s/%s", 
+			heur_item.path = g_strdup_printf ("/Settings/Eval function/%s/%s",
 					*color, game_htab[i].name);
 			if (i == 0) strncpy (pathbuf, heur_item.path, 63);
 			heur_item.accelerator = NULL;
@@ -1261,9 +1266,9 @@ void sb_update ()
 		if (ui_white == MACHINE) player[0] = 'M';
 		if (ui_black == HUMAN) player[2] = 'H';
 		if (ui_black == MACHINE) player[2] = 'M';
-		gtk_label_set_text (GTK_LABEL(sb_player_label), 
+		gtk_label_set_text (GTK_LABEL(sb_player_label),
 				ui_white != NONE ? player : "File");
-		gtk_label_set_text (GTK_LABEL(sb_who_label), cur_pos.player == WHITE ? 
+		gtk_label_set_text (GTK_LABEL(sb_who_label), cur_pos.player == WHITE ?
 				game_white_string : game_black_string);
 	}
 	gtk_label_set_text (GTK_LABEL(sb_score_label), sb_score_str);
@@ -1295,3 +1300,7 @@ gboolean sb_update_periodic ()
 	first = FALSE;
 	return TRUE;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/move.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/move.c
@@ -190,4 +190,6 @@ byte *mov_getinv (byte *board, byte *mov
 	return inv;
 }
 
-
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/ninemm.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/ninemm.c
@@ -263,3 +263,7 @@ void ninemm_reset_uistate ()
 {
 	curx = cury = -1;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/othello.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/othello.c
@@ -564,3 +564,7 @@ gboolean othello_use_incr_eval (Pos *pos
 	// TODO: use different threshold for Othello6x6
 	return pos->num_moves > 50 ? TRUE : FALSE;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/pacman.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/pacman.c
@@ -204,7 +204,7 @@ int pacman_animate (Pos *pos, byte **mov
 	int oldboard;
 	// FIXME: do this using stateful
 	static int prevx[4] = {0, 0, 0, 0}, prevy[4] = {0, 0, 0, 0};
-	// make sure the ghosts dont step on each others toes
+	// make sure the ghosts don't step on each others' toes
 	int taken[4] = {-1, -1, -1, -1}, t=0, gid;
 	byte *board = pos->board;
 	pacman_set_dist (board);
@@ -500,3 +500,6 @@ char ** pacman_get_pixmap (int idx, int
 	return NULL;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/pentaline.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/pentaline.c
@@ -495,3 +495,7 @@ void *pentaline_newstate (Pos *pos, byte
 	pos->board [move[1] * board_wid + move[0]] = 0; 
 	return &state;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/plot4.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/plot4.c
@@ -302,3 +302,6 @@ char ** plot4_get_pixmap (int idx, int c
 	return pixmap_ball_gen(55, pixbuf, fg, bg, 17.0, 30.0);
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/prefs.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/prefs.c
@@ -563,3 +563,7 @@ void prefs_read_config_file ()
 	
 	fclose (in);
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/prefs.h
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/prefs.h
@@ -80,3 +80,7 @@ void prefs_write_config_file ();
 gboolean prefs_get_bool_val (gchar *value);
 extern int (*game_scorecmp) (gchar *, int, gchar*, int);
 #endif
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/quarto.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/quarto.c
@@ -312,4 +312,6 @@ unsigned char * quarto_get_rgbmap (int i
 	
 }
 
-
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/rgb.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/rgb.c
@@ -224,3 +224,7 @@ static ResultType rgb_eval (Pos *pos, Pl
 	*eval = 0;
 	return RESULT_NOTYET;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/samegame.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/samegame.c
@@ -409,3 +409,7 @@ void samegame_getxy (byte *board, int *x
 		}
 	}
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/sound.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/sound.c
@@ -169,3 +169,7 @@ void sound_play (SoundEvent event)
 	sound_play_real (sound_file);
 	g_free (sound_file);
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/sound.h
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/sound.h
@@ -25,3 +25,7 @@ void sound_set_enabled (gboolean enabled
 void sound_enable_pref_cb (gchar *key, gchar *value);
 
 #endif
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/stack.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/stack.c
@@ -34,6 +34,9 @@
    movstack_ptr ---> movstack_max : "forward" list
 */
 
+//! Start offset of the stack in the circular buffer
+static int movstack_start = 0;
+
 //! Current position in the stack
 static int movstack_ptr = 0;
 
@@ -67,31 +70,38 @@ int movstack_get_num_moves()
 
 void movstack_push (byte *board, byte *move)
 {
-	assert (movstack_ptr < STACK_SIZE - 1);
-	movstack[movstack_ptr] = movdup (move);
-	movinvstack[movstack_ptr] = mov_getinv (board, move);
-	movstack_ptr++;
-	if (movstack_ptr > movstack_max)
-		movstack_max = movstack_ptr;
+	movstack[(movstack_start + movstack_ptr) % STACK_SIZE] = movdup (move);
+	movinvstack[(movstack_start + movstack_ptr) % STACK_SIZE] = mov_getinv (board, move);
+	if (movstack_ptr < STACK_SIZE - 1) {
+		movstack_ptr++;
+		if (movstack_ptr > movstack_max)
+			movstack_max = movstack_ptr;
+	} else {
+		free (movstack[movstack_start]);
+		free (movinvstack[movstack_start]);
+		movstack_start = (movstack_start + 1) % STACK_SIZE;
+	}
 }
 
 byte *movstack_pop ()
 {
 	if (movstack_ptr == 0)
 		return NULL;
-	return movstack[--movstack_ptr];
+	movstack_ptr--;
+	return movstack[(movstack_start + movstack_ptr) % STACK_SIZE];
 }
 
-//! Truncates a stack to the current poisition. 
-/** This will be called when the user makes a move when it is not the final poisition. */
+//! Truncates a stack to the current position. 
+/** This will be called when the user makes a move when it is not the final position. */
 void movstack_trunc ()
 {
 	int i;
 	assert (movstack_ptr <= movstack_max);
 	for (i = movstack_ptr; i < movstack_max; i++)
 	{
-		free (movstack[i]);
-		free (movinvstack[i]);
+		int j = (movstack_start + i) % STACK_SIZE;
+		free (movstack[j]);
+		free (movinvstack[j]);
 	}
 	movstack_max = movstack_ptr;
 }
@@ -101,7 +111,7 @@ byte * movstack_forw ()
 	if (movstack_ptr < movstack_max)
 		movstack_ptr++;
 	else return NULL;
-	return movstack[movstack_ptr-1];
+	return movstack[(movstack_start + movstack_ptr - 1) % STACK_SIZE];
 }
 
 byte * movstack_back ()
@@ -109,7 +119,7 @@ byte * movstack_back ()
 	if (movstack_ptr > 0)
 		movstack_ptr--;
 	else return NULL;
-	return movinvstack[movstack_ptr];
+	return movinvstack[(movstack_start + movstack_ptr) % STACK_SIZE];
 }
 
 void movstack_free ()
@@ -117,8 +127,9 @@ void movstack_free ()
 	int i;
 	for (i=0; i<movstack_max; i++)
 	{
-		free (movstack[i]);
-		free (movinvstack[i]);
+		int j = (movstack_start + i) % STACK_SIZE;
+		free (movstack[j]);
+		free (movinvstack[j]);
 	}
 	movstack_max = movstack_ptr = 0;
 }
@@ -128,7 +139,7 @@ void movstack_free ()
    state stack
 */
 
-static int statestack_ptr = 0, statestack_max = 0;
+static int statestack_start = 0, statestack_ptr = 0, statestack_max = 0;
 
 static void *statestack[STACK_SIZE];
 
@@ -136,28 +147,35 @@ static void *statestack[STACK_SIZE];
 void statestack_push (void *state)
 {
 	void *newstate;
-	assert (statestack_ptr < STACK_SIZE - 1);
 	newstate = malloc (game_state_size);
 	assert (newstate);
 	memcpy (newstate, state, game_state_size);
-	statestack[statestack_ptr] = newstate;
-	statestack_ptr++;
-	if (statestack_ptr > statestack_max)
-		statestack_max = statestack_ptr;
+
+	statestack[(statestack_start + statestack_ptr) % STACK_SIZE] = newstate;
+
+	if (statestack_ptr < STACK_SIZE - 1) {
+		statestack_ptr++;
+		if (statestack_ptr > statestack_max)
+			statestack_max = statestack_ptr;
+	} else {
+		free (statestack[statestack_start]);
+		statestack_start = (statestack_start + 1) % STACK_SIZE;
+	}
 }
 
 void *statestack_peek ()
 {
 	if (statestack_ptr == 0)
 		return NULL;
-	return statestack[statestack_ptr-1];
+	return statestack[(statestack_start + statestack_ptr - 1) % STACK_SIZE];
 }
 
 void *statestack_pop ()
 {
 	if (statestack_ptr == 0)
 		return NULL;
-	return statestack[--statestack_ptr];
+	statestack_ptr--;
+	return statestack[(statestack_start + statestack_ptr) % STACK_SIZE];
 }
 
 void statestack_trunc ()
@@ -165,7 +183,7 @@ void statestack_trunc ()
 	int i;
 	assert (statestack_ptr <= statestack_max);
 	for (i = statestack_ptr; i < statestack_max; i++)
-		free (statestack[i]);
+		free (statestack[(statestack_start + i) % STACK_SIZE]);
 	statestack_max = statestack_ptr;
 }
 
@@ -174,7 +192,7 @@ void * statestack_forw ()
 	if (statestack_ptr < statestack_max)
 		statestack_ptr++;
 	else return NULL;
-	return statestack[statestack_ptr-1];
+	return statestack[(statestack_start + statestack_ptr - 1) % STACK_SIZE];
 }
 
 void * statestack_back ()
@@ -182,13 +200,17 @@ void * statestack_back ()
 	if (statestack_ptr > 0)
 		statestack_ptr--;
 	else return NULL;
-	return statestack[statestack_ptr-1];
+	return statestack[(statestack_start + statestack_ptr - 1) % STACK_SIZE];
 }
 
 void statestack_free ()
 {
 	int i;
 	for (i=0; i<statestack_max; i++)
-		free (statestack[i]);
+		free (statestack[(statestack_start + i) % STACK_SIZE]);
 	statestack_max = statestack_ptr = 0;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/stopgate.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/stopgate.c
@@ -527,5 +527,6 @@ int stopgate_getmove (Pos *pos, int x, i
 	return 1;
 }
 
-
-
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/tetris.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/tetris.c
@@ -505,3 +505,6 @@ char ** tetris_get_pixmap (int idx, int
 	return pixmap;
 }
 
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/towers.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/towers.c
@@ -412,3 +412,7 @@ void towers_get_render (Pos *pos, byte *
 	*rp++ = -1;
 	*rmovp = rmove;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/ui.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/ui.c
@@ -27,6 +27,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include <getopt.h>
 
 #include <glib.h>
 
@@ -667,7 +668,25 @@ static void parse_opts (int argc, char *
 {
 	char *wheur = NULL, *bheur = NULL;
 	int c, i;
-	while ((c = getopt (argc, argv, "g:G:d:f:l:p:w:b:Hqvh")) != -1)
+	int option_index = 0;
+	static struct option long_options[] = {
+	  {"game",1,0,'g'},
+	  {"plugin",1,0,'G'},
+	  {"delay",1,0,'d'},
+	  {"file",1,0,'f'},
+	  {"log",1,0,'l'},
+	  {"players",1,0,'p'},
+	  {"w-heuristic",1,0,'w'},
+	  {"b-heuristic",1,0,'b'},
+	  {"html-help",0,0,'H'},
+	  {"hide-board",0,0,'q'},
+	  {"verbose",0,0,'v'},
+	  {"help",0,0,'h'},
+	  {"version",0,0,'V'},
+	  {0, 0, 0, 0}
+	};
+	while ((c = getopt_long (argc, argv, "g:G:d:f:l:p:w:b:HqvhV",
+							 long_options, &option_index)) != -1)
 	{
 		switch (c)
 		{
@@ -787,22 +806,27 @@ static void parse_opts (int argc, char *
 			case 'v':
 				opt_verbose = 1;
 				break;
+			case 'V':
+				printf("gtkboard %s\n", GTKBOARD_VERSION);
+				exit(0);
 			case 'h':
-				printf ("Usage: gtkboard \t[-qvh] "
-						"[-g game] [-G file] [-f file] [-l logfile] [-d msec]\n"
-						"\t\t\t[-p XX] [-w wheur -b bheur] "
+				printf ("Usage: gtkboard \t[-qvhV]"
+						" [-g game] [-G file] [-f file] [-l logfile] [-d msec]"
+						" [-p XX] [-w wheur -b bheur]"
+						"\n"
 						"\n"
-						"\t-g\tname of the game\n"
-						"\t-G\tplugin file to load game from\n"
-						"\t-f\tfile to load game from\n"
-						"\t-l\tlog file to record game\n"
-						"\t-q\tdon't show board\n"
-						"\t-d\tdelay in milliseconds\n"
-						"\t-p\thuman or machine players. Each X must be 'h' or 'm'\n"
-						"\t-w\tname of heuristic function for white\n"
-						"\t-b\tname of heuristic function for black\n"
-						"\t-v\tbe verbose\n"
-						"\t-h\tprint this help\n"
+						"\t-g, --game\tname of the game\n"
+						"\t-G, --plugin\tplugin file to load game from\n"
+						"\t-f, --file\tfile to load game from\n"
+						"\t-l, --log\tlog file to record game\n"
+						"\t-q, --hide-board\tdon't show board\n"
+						"\t-d, --delay\tdelay in milliseconds\n"
+						"\t-p, --players\thuman or machine players. Each X must be 'h' or 'm'\n"
+						"\t-w, --w-heuristic\tname of heuristic function for white\n"
+						"\t-b, --b-heuristic\tname of heuristic function for black\n"
+						"\t-v, --verbose\tbe verbose\n"
+						"\t-V, --version\tprint version and exit\n"
+						"\t-h, --help\tprint this help and exit\n"
 					   );
 				exit (0);
 			default:
@@ -1199,7 +1223,7 @@ void html_help_gen_format (FILE *fout, g
 		perror (NULL);
 		exit(1);
 	}
-	fprintf (ftmp, string);
+	fprintf (ftmp, "%s", string);
 	fclose (ftmp);
 	fprintf (fout, "<h2> %s </h2>\n\n <pre>", title);
 	fflush (fout);
@@ -1304,8 +1328,7 @@ void html_help_gen ()
 {
 	int i;
 	char dirbuf[1024];
-	getcwd (dirbuf, 1024);
-	if (strcmp (basename (dirbuf), "games"))
+	if (getcwd (dirbuf, 1024) && strcmp (basename (dirbuf), "games"))
 	{
 		fprintf (stderr, "To generate html help, you must be in the \"games\" directory.\n");
 		exit (1);
@@ -1379,3 +1402,7 @@ int main (int argc, char **argv)
 	}
 	return 0;
 }
+
+// Local Variables:
+// tab-width: 4
+// End:
--- gtkboard-0.11pre0+cvs.2003.11.02.orig/src/wordtris.c
+++ gtkboard-0.11pre0+cvs.2003.11.02/src/wordtris.c
@@ -122,7 +122,7 @@ static char **wordtris_pixmaps [] =
 
 // TODO: change this so that we only need to specify pixmaps for individual squares
 
-static const int lava_xpm_header_size = 253+1;
+#define lava_xpm_header_size (253+1)
 static char * lava_xpm_header[] = 
 {
 "144 504 253 2",
@@ -783,5 +783,6 @@ int wordtris_animate (Pos *pos, byte **m
 	return 1;
 }
 
-
-
+// Local Variables:
+// tab-width: 4
+// End:
