[comp.sources.misc] v19i074: gnuchess - gnuchess version 3.1+, Part02/07

mwm@hasler.ascom.ch (Mike McGann) (05/17/91)

Submitted-by: Mike McGann <mwm@hasler.ascom.ch>
Posting-number: Volume 19, Issue 74
Archive-name: gnuchess/part02

#!/bin/sh
# do not concatenate these parts, unpack them in order with /bin/sh
# file Makefile.dos continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 2; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping Makefile.dos'
else
echo 'x - continuing file Makefile.dos'
sed 's/^X//' << 'SHAR_EOF' >> 'Makefile.dos' &&
CFLAGS	= -AC -Oita -Gs -G2 -W3
X
# The `-Ol' flag (enable loop optimization) is not recommended:
# gnuchess.c(430) : fatal error C1001: Internal Compiler Error
#		  (compiler file '@(#)ctypes.c:1.107', line 474)
#		  Contact Microsoft Technical Support
X
sources	= gnuchess.c gnuchess.d gnuchess.h uxdsp.c nuxdsp.c nondsp.c version.h
X
# Commands
all: gnuchess.exe gnuchesr.exe gnucheso.exe
X
gnuchess.exe: gnuchess.obj nuxdsp.obj
X	$(CC) gnuchess.obj nuxdsp.obj -o gnuchess.exe -link /e /st:0x9000
X
gnuchesr.exe: gnuchess.obj nondsp.obj
X	$(CC) gnuchess.obj nondsp.obj -o gnuchesr.exe -link /e /st:0x9000
X
gnucheso.exe: gnuchess.obj uxdsp.obj
X	$(CC) gnuchess.obj uxdsp.obj -o gnucheso.exe -link /e /st:0x9000
X
gnuchess.obj: gnuchess.c gnuchess.h
X	$(CC) $(CFLAGS) $(HASH) $(BOOK) -c gnuchess.c
X
uxdsp.obj: uxdsp.c gnuchess.h
X	$(CC) $(CFLAGS) -c uxdsp.c
X
nuxdsp.obj: nuxdsp.c gnuchess.h
X	$(CC) $(CFLAGS) -c nuxdsp.c
X
nondsp.obj: nondsp.c gnuchess.h
X	$(CC) $(CFLAGS) -c nondsp.c
X
# Utilities
X
install:
X	cp gnuchess.exe $(BINDIR)/gnuchess.exe
X	cp gnuchess.book $(LIBDIR)/gnuchess.book
X
clean:
X	del *.obj
X	del *.exe
X
tags: $(sources)
X	etags -t $(sources)
X
zip:
X	pkzip -fpr chess-30
X
disk:
X	copy chess-30.zip b: /v
X	pkunzip -t b:chess-30 | grep -vw OK
X
SHAR_EOF
echo 'File Makefile.dos is complete' &&
chmod 0664 Makefile.dos ||
echo 'restore of Makefile.dos failed'
Wc_c="`wc -c < 'Makefile.dos'`"
test 3150 -eq "$Wc_c" ||
	echo 'Makefile.dos: original size 3150, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= README ==============
if test -f 'README' -a X"$1" != X"-c"; then
	echo 'x - skipping README (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting README (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'README' &&
This is an update of gnuchess version 3.1.
X
It fixes all known bugs with pawn promotion, undo, and win/draw determination.
X
It adds the capability of reading xboard position files (xget).
X
It adds specification of save and load files on the command line (gnuchessr).
X
Save file format is now human readable.
X
'white' and 'black' no longer start play but only set the players. If the 
computer is to move first use the 'go' command.
X
X
New commands are xget and hashlevel.
X	
X	xget reads an xboard position file.
X
X	hashlevel allows you to specify parameters for using the hashfile.
X
New Programs -
X
X	postprint - allows printing of hashfile contents on a postscript printer
X		for each position it prints tha board and the recommended move
X		flags and depth.
X		To run: just execute the program (pathname for hashfile is
X			build in. Output comes out stdout. Then cat it with 
X			ChessFonts and sent it to the printer. It prints 16
X			positions per page.
X
X			postprint >t
X			cat ChessFonts t >p
X			lpr p
X
X	gnuan - a modified version of Truman Collins gnuan program with fixes
X                for the gnuchess bugs. In addition it shows the best line for
X                each move instead of just the next move. It will accept input
X	        files produced by xboard (xboard.game.save) or from gnuchess
X	        (chess.lst) files directly. 
X		
X		Output looks like this:
X
Move White Black      Score Depth     Best Line
------------------------------------------------------------------
X  1   e2e4              13    5    g1f3  g8f6  b1c3  b8c6  e2e3 
X            c7c5        -2    5    e7e6  b1c3  b8c6  d2d4  f8b4 
X  2   b1c3              37    5    b1c3  b8c6  g1f3  g8f6  f1c4 
X            b8c6       -34    5    b8c6  g1f3  g8f6  f1b5  c6b4 
X  3   g1f3              44    5    g1f3  g8f6  f1b5  h7h6  d2d3 
X            g8f6       -38    5    g8f6  f1b5  a7a6  b5c6  d7c6 
X  4   f1c4              38    5    f1b5  c6d4  d2d3  d4b5  c3b5 
X            d7d6       -20    5    d7d6  d2d3  c8g4  h2h3  g4h5 
X
X           White's percentage was 50.00%.     Black's percentage was 75.00%.
X
X           Elapsed time was 128 seconds.
SHAR_EOF
chmod 0664 README ||
echo 'restore of README failed'
Wc_c="`wc -c < 'README'`"
test 2119 -eq "$Wc_c" ||
	echo 'README: original size 2119, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= gnuan.c ==============
if test -f 'gnuan.c' -a X"$1" != X"-c"; then
	echo 'x - skipping gnuan.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting gnuan.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'gnuan.c' &&
/*
X  gnuan.c - Analysis interface for gnuchess.
X
X  Revision: 1991-04-15
X
X  Copyright (C) 1986, 1987, 1988, 1989, 1990 Free Software Foundation, Inc.
X  Copyright (c) 1988, 1989, 1990  John Stanback
X
X  This file is part of CHESS.
X
X  CHESS is distributed in the hope that it will be useful, but WITHOUT ANY
X  WARRANTY.  No author or distributor accepts responsibility to anyone for
X  the consequences of using it or for whether it serves any particular
X  purpose or works at all, unless he says so in writing.  Refer to the CHESS
X  General Public License for full details.
X
X  Everyone is granted permission to copy, modify and redistribute CHESS, but
X  only under the conditions described in the CHESS General Public License.
X  A copy of this license is supposed to have been given to you along with
X  CHESS so you can know your rights and responsibilities.  It should be in a
X  file named COPYING.  Among other things, the copyright notice and this
X  notice must be preserved on all copies.
*/
X
/*
X  This is a front end for a chess analysis program.  It takes a file of moves
X  in algebraic notation and creates a file containing each move that was
X  made, the move it would have made, the score it would give itself after
X  making the move it recommended, and the depth it searched for the move.
X
X  This is a modification of nondsp.c.  I have cut out code that was not needed
X  for this application such as the help and edit functions.  Most of the
X  modifications were done in InputCommand.
*/
X
/*
X  This file will generate two different analysis programs.  One is meant to
X  be run as a background process inwhich the in and out files are predefined.
X  The other is meant to be run in the foreground where it will prompt you for
X  the name of the file with the game in it, the maximum depth the search should
X  be conducted to and the time limit per move.  It would be nice to be able to
X  give these parameters on the command line, but that would mean changing main
X  which is in the gnuchess.c file.
X
X  For each move it will analyse the move until either it has run out of time
X  or it has reached the maximum depth.
X
X  To build the version for background processing define BACKGROUND_ANALYSIS
X  either at the top of this file, or in compilation.  The files and depth
X  used are defined below.  They are MAX_DEPTH, MAX_TIME, OUT_FILE, IN_FILE
X  and PROG_FILE.  The PROG_FILE is a file that will be updated as each move is
X  analysed so you can check its progress.  This is only updated when running
X  the BACKGROUND_ANALYSIS version.  In the version where the filename and
X  depth are entered at runtime, the output goes to stdout.
*/
X
/* #define BACKGROUND_ANALYSIS 1 */
X
#define MAX_DEPTH  15
#define MAX_TIME   20
#define OUT_FILE   "/pad/gnuan.out"
#define IN_FILE    "/pad/gnuan.in"
#define PROG_FILE  "/pad/gnuan.prog"
X
X
#include <ctype.h>
#include <signal.h>
#ifdef MSDOS
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#else
#include <sys/param.h>
#include <sys/types.h>
#include <sys/file.h>
#include <sys/ioctl.h>
void TerminateSearch (int), Die (int);
#endif /* MSDOS */
X
#include "gnuchess.h"
X
#define pxx " PNBRQK"
#define qxx " pnbrqk"
#define rxx "12345678"
#define cxx "abcdefgh"
#define printz printf
#define scanz scanf
X
static char mvstr[4][6];
static char* ColorStr[2] = {"White", "Black"};
static long evrate;
static int mycnt1, mycnt2;
static int ahead;
X
static FILE *fpin;
static FILE *fpout;
char *DRAW;
unsigned short int MV[30];
enum {XBOARD, GNUCHESS, OTHER} InFileType;
char InBuf[256];
X
#ifdef BACKGROUND_ANALYSIS
static FILE *fpprog;
#endif
static char white_actual_move[20];
static char black_actual_move[20];
static char white_suggest_move[20];
static char black_suggest_move[20];
static int  white_score;
static int  black_score;
static int  white_moving;
static int  current_depth;
static int  current_score;
static int  enable_update_display = 0;
X
X
void
Initialize (void)
{
X  mycnt1 = mycnt2 = 0;
}
X
void
ExitChess (void)
{
X  ListGame ();
X  exit (0);
}
X
#ifndef MSDOS                           /* never called!!! */
void
Die (int sig)
{
X    ExitChess ();
}
#endif /* MSDOS */
X
void
TerminateSearch (int sig)
{
#ifdef MSDOS
X  sig++;                                /* shut up the compiler */
#endif /* MSDOS */
X  flag.timeout   = true;
X  flag.bothsides = false;
}
X
void
algbr (short int f, short int t, short int flag)
X
/*
X   Generate move strings in different formats.
*/
X
{
X  int m3p;
X
X  if (f != t)
X    {
X      /* algebraic notation */
X      mvstr[0][0] = cxx[column (f)];
X      mvstr[0][1] = rxx[row (f)];
X      mvstr[0][2] = cxx[column (t)];
X      mvstr[0][3] = rxx[row (t)];
X      mvstr[0][4] = mvstr[3][0] = '\0';
X      if (((mvstr[1][0] = pxx[board[f]]) == 'P') || (flag & promote))
X        {
X          if (mvstr[0][0] == mvstr[0][2])       /* pawn did not eat */
X            {
X              mvstr[2][0] = mvstr[1][0] = mvstr[0][2];  /* to column */
X              mvstr[2][1] = mvstr[1][1] = mvstr[0][3];  /* to row */
X              m3p = 2;
X            }
X          else
X            /* pawn ate */
X            {
X              mvstr[2][0] = mvstr[1][0] = mvstr[0][0];  /* from column */
X              mvstr[2][1] = mvstr[1][1] = mvstr[0][2];  /* to column */
X              mvstr[2][2] = mvstr[0][3];
X              m3p = 3;          /* to row */
X            }
X          mvstr[2][m3p] = mvstr[1][2] = '\0';
X          if (flag & promote)
X            {
X              mvstr[0][4] = mvstr[1][2] = mvstr[2][m3p] = qxx[flag & pmask];
X              mvstr[1][3] = mvstr[2][m3p + 1] = mvstr[0][5] = '\0';
X            }
X        }
X      else
X        /* not a pawn */
X        {
X          mvstr[2][0] = mvstr[1][0];
X          mvstr[2][1] = mvstr[0][1];
X          mvstr[2][2] = mvstr[1][1] = mvstr[0][2];      /* to column */
X          mvstr[2][3] = mvstr[1][2] = mvstr[0][3];      /* to row */
X          mvstr[2][4] = mvstr[1][3] = '\0';
X          strcpy (mvstr[3], mvstr[2]);
X          mvstr[3][1] = mvstr[0][0];
X          if (flag & cstlmask)
X            {
X              if (t > f)
X                {
X                  strcpy (mvstr[1], "o-o");
X                  strcpy (mvstr[2], "O-O");
X                }
X              else
X                {
X                  strcpy (mvstr[1], "o-o-o");
X                  strcpy (mvstr[2], "O-O-O");
X                }
X            }
X        }
X    }
X  else
X    mvstr[0][0] = mvstr[1][0] = mvstr[2][0] = mvstr[3][0] = '\0';
}
X
X
int
VerifyMove (char *s, short int iop, unsigned short int *mv)
X
/*
X   Compare the string 's' to the list of legal moves available for the
X   opponent. If a match is found, make the move on the board.
*/
X
{
X  static short pnt, tempb, tempc, tempsf, tempst, cnt;
X  static struct leaf xnode;
X  struct leaf *node;
X
X  *mv = 0;
X  if (iop == 2)
X    {
X      UnmakeMove (opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
X      return (false);
X    }
X  cnt = 0;
X  MoveList (opponent, 2);
X  pnt = TrPnt[2];
X  while (pnt < TrPnt[3])
X    {
X      node = &Tree[pnt++];
X      algbr (node->f, node->t, (short) node->flags);
X      if (strcmp (s, mvstr[0]) == 0 || strcmp (s, mvstr[1]) == 0 ||
X          strcmp (s, mvstr[2]) == 0 || strcmp (s, mvstr[3]) == 0)
X        {
X          cnt++;
X          xnode = *node;
X        }
X    }
X  if (cnt == 1)
X    {
X      MakeMove (opponent, &xnode, &tempb, &tempc, &tempsf, &tempst, &INCscore);
X      if (SqAtakd (PieceList[opponent][0], computer))
X        {
X          UnmakeMove (opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
X          printz ("Illegal move\n");
X          return (false);
X        }
X      else
X        {
X          if (iop == 1)
X            return (true);
/*        UpdateDisplay (xnode.f, xnode.t, 0, (short) xnode.flags); */
X          if ((board[xnode.t] == pawn)
X              || (xnode.flags & capture)
X              || (xnode.flags & cstlmask))
X            {
X              Game50 = GameCnt;
X              ZeroRPT ();
X            }
X          GameList[GameCnt].depth = GameList[GameCnt].score = 0;
X          GameList[GameCnt].nodes = 0;
X          ElapsedTime (1);
X          GameList[GameCnt].time = (short) et;
X          TimeControl.clock[opponent] -= et;
X          --TimeControl.moves[opponent];
X          *mv = (xnode.f << 8) | xnode.t;
X          algbr (xnode.f, xnode.t, false);
X          return (true);
X        }
X    }
#ifdef CHESSTOOL
X  printz ("Illegal move\n");
#else
X  if (cnt > 1)
X    ShowMessage ("Ambiguous Move!");
#endif
X  return (false);
}
X
void
help (void)
{
}
X
void
EditBoard (void)
/*
X   Set up a board position. Pieces are entered by typing the piece followed
X   by the location. For example, Nf3 will place a knight on square f3.
*/
X
{
}
X
void
SetupBoard (void)
X
/*
X   Compatibility with Unix chess and the nchesstool.
X   Set up a board position. Eight lines of eight characters are used
X   to setup the board. a8-h8 is the first line.
X   Black pieces are  represented  by  uppercase characters.
*/
X
{
}
X
void
ShowDepth (char ch)
{
#ifdef MSDOS
X  ch++;                                 /* shut up the compiler */
#endif /* MSDOS */
}
X
void
ShowResults (short int score, unsigned short int *bstline, char ch)
{
X	int i;
X    current_score = score;
X    current_depth = Sdepth;
X      for (i = 1; bstline[i] > 0; i++) { MV[i] = bstline[i];} MV[i] = 0;
}
X
void
SearchStartStuff (short int side)
{ 	
X  signal (SIGINT, TerminateSearch);
#ifndef MSDOS
X  signal (SIGQUIT, TerminateSearch);
#endif /* MSDOS */
X  if (flag.post)
X    {
X      fprintf (stderr, "\nMove# %d    Target= %ld    Clock: %ld\n",
X               TCmoves - TimeControl.moves[side] + 1,
X               ResponseTime, TimeControl.clock[side]);
X    }
}
X
void
OutputMove (void)
{
X    if(white_moving) {
X        strcpy(white_suggest_move, mvstr[0]);
X        white_score = current_score;
X    } else {
X        strcpy(black_suggest_move, mvstr[0]);
X        black_score = current_score;
X    }
}
X
void
ElapsedTime (short int iop)
/*
X   Determine the time that has passed since the search was started. If the
X   elapsed time exceeds the target (ResponseTime+ExtraTime) then set timeout
X   to true which will terminate the search.
*/
{
X  if (ahead)
X    {
#ifndef MSDOS
X      long nchar;
X      ioctl(0, FIONREAD, &nchar);
X      if (nchar)
#else
X      if (kbhit())
#endif /* MSDOS */
X        {
X          flag.timeout = true;
X          flag.bothsides = false;
X        }
X    }
X  et = time ((long *) 0) - time0;
X  if (et < 0)
X    et = 0;
X  ETnodes += 50;
X  if (et > et0 || iop == 1)
X    {
X      if (et > ResponseTime + ExtraTime && Sdepth > 1)
X        flag.timeout = true;
X      et0 = et;
X      if (iop == 1)
X        {
X          time0 = time ((long *) 0);
X          et0 = 0;
X        }
X      if (et > 0)
X        /* evrate used to be Nodes / cputime I dont` know why */
X        evrate = NodeCnt / (et + ft);
X      else
X        evrate = 0;
X      ETnodes = NodeCnt + 50;
X    }
}
X
void
SetTimeControl (void)
{
X  if (TCflag)
X    {
X      TimeControl.moves[white] = TimeControl.moves[black] = TCmoves;
X      TimeControl.clock[white] = TimeControl.clock[black] = 60L * TCminutes;
X    }
X  else
X    {
X      TimeControl.moves[white] = TimeControl.moves[black] = 0;
X      TimeControl.clock[white] = TimeControl.clock[black] = 0;
X      Level = 60L * TCminutes;
X    }
X  et = 0;
X  ElapsedTime (1);
}
X
void
ClrScreen (void)
{
#ifndef CHESSTOOL
X  printz ("\n");
#endif
}
X
void
UpdateDisplay (short int f, short int t, short int redraw, short int isspec)
{
#ifndef CHESSTOOL
X  short r, c, l;
X  if(!enable_update_display) return;
X  if (redraw)
X    {
X      fprintf(fpout, "\n");
X      for (r = 7; r >= 0; r--)
X        {
X          for (c = 0; c <= 7; c++)
X            {
X              if (flag.reverse)
X                l = locn (7 - r, 7 - c);
X              else
X                l = locn (r, c);
X              if (color[l] == neutral)
X                fprintf (fpout, " -");
X              else if (color[l] == white)
X                fprintf (fpout, " %c", qxx[board[l]]);
X              else
X                fprintf (fpout, " %c", pxx[board[l]]);
X            }
X          fprintf(fpout, "\n");
X        }
X      fprintf(fpout, "\n");
X    }
#endif /* CHESSTOOL */
#ifdef MSDOS
X  f++; t++; isspec++;                   /* shut up the compiler */
#endif /* MSDOS */
}
X
void
GetGame (void)
{
}
X
void
SaveGame (void)
{
}
X
void
ListGame (void)
{
}
X
X
X
void
Undo (void)
/*
X   Undo the most recent half-move.
*/
X
{
X  short f, t;
X  f = GameList[GameCnt].gmove >> 8;
X  t = GameList[GameCnt].gmove & 0xFF;
X  if (board[t] == king && distance (t, f) > 1) (void) castle (GameList[GameCnt].color, f, t, 2);
X  else
X    {
X      /* Check for promotion: */
X      if(GameList[GameCnt].flags & promote){board[t] = pawn; }
X      board[f] = board[t];
X      color[f] = color[t];
X      board[t] = GameList[GameCnt].piece;
X      color[t] = GameList[GameCnt].color;
X      if (color[t] != neutral) Mvboard[t]--;
X      Mvboard[f]--;
X    }
X  if(GameList[GameCnt].flags & epmask)EnPassant(color[t],f,t,2);
X  if (TCflag) ++TimeControl.moves[color[f]];
X  GameCnt--;
X  computer = otherside[computer];
X  opponent = otherside[opponent];
X  flag.mate = false;
X  Sdepth = 0;
X  InitializeStats ();
}
X
void
ShowMessage (char *s)
{
X  fprintf (stderr, "%s\n", s);
}
X
void
ShowSidetoMove (void)
{
}
X
void
PromptForMove (void)
{
#ifndef CHESSTOOL
X  printz ("\nYour move is? ");
#endif /* CHESSTOOL */
}
X
X
void
ShowCurrentMove (short int pnt, short int f, short int t)
{
#ifdef MSDOS
X  f++; t++; pnt++;                      /* shut up the compiler */
#endif /* MSDOS */
}
X
void
ChangeAlphaWindow (void)
{
X  printz ("window: ");
X  scanz ("%hd", &Awindow);
}
X
void
ChangeBetaWindow (void)
{
X  printz ("window: ");
X  scanz ("%hd", &Bwindow);
}
X
void
GiveHint (void)
{
X  algbr ((short) (hint >> 8), (short) (hint & 0xFF), false);
X  fprintf (stderr, "Hint: %s\n", mvstr[0]);
}
X
void
SelectLevel (void)
{
}
X
void
ChangeSearchDepth (void)
{
X  printz ("depth= ");
X  scanz ("%hd", &MaxSearchDepth);
}
X
void
SetContempt (void)
{
X  printz ("contempt= ");
X  scanz ("%hd", &contempt);
}
X
void
ChangeXwindow (void)
{
X  printz ("xwndw= ");
X  scanz ("%hd", &xwndw);
}
X
void
TestSpeed(void (*f) (short int side, short int ply))
{
X  short i;
X  long cnt, rate, t1, t2;
X
X  t1 = time (0);
X  for (i = 0; i < 10000; i++)
X    {
X      f (opponent, 2);
X    }
X  t2 = time (0);
X  cnt = 10000L * (TrPnt[3] - TrPnt[2]);
X  rate = cnt / (t2 - t1);
X  printz ("Nodes= %ld Nodes/sec= %ld\n", cnt, rate);
}
X
X
int GetNextMove(char *buffer)
X    {
X        char current;
X        
X     while(true){
X	while((current = fgetc(fpin) ) == ' ' || current == '\n');
X	if ((current != EOF) && (isdigit(current) || current == '-'))
X		{ while((current = fgetc(fpin) ) != ' ' && current != EOF); 
X			if(current == EOF)return 0; else continue;}
X        if(current == EOF) return(0);
X        while(current != ' ' && current != '\n' && current != EOF) {
X            if(!(current == '-' || current == 'x' || current == 'X')) { *buffer++ = current; }
X            current = fgetc(fpin);
X        }
X        *buffer = '\0';
X        return(1);
X      }
X    }
X
void InputCommand(void)
/*
X    Open the file of moves to analyse.  Go through the file move by move
X    and do the following for each move.  See what gnuchess would have done
X    in that position.  Record the move it would have made along with the
X    score it would have given and the search depth.  Take back its move.
X    Force the move that was actually made.  Keep track of statistics such
X    as how many moves agreed.
*/
X
{
X    int i;
X    short ok,tmp;
X    int search_depth, max_minutes;
X    long cnt,rate,t1,t2;
X    unsigned short mv;
X    char s[80];
X    char infilename[255];
X    char outfilename[255];
X    char progfilename[255];
X    int move_number = 1;
X    long start_time, end_time, elapsed_time;
X    int total_black_moves, total_white_moves;
X    int same_black_moves, same_white_moves;
X    float white_percent, black_percent;
X
X    /* Initialize necessary variables. */
X
X    flag.quit = false;
X    flag.beep = false;
X    player = opponent;
X    enable_update_display = 1;
X    ft = 0;
X    Book = NULL;
X    total_black_moves = 0;
X    total_white_moves = 0;
X    same_black_moves  = 0;
X    same_white_moves  = 0;
X
#ifdef BACKGROUND_ANALYSIS
X
X    /* Set the in files to standard ones for analysis if background processing selected. */
X
X    strcpy(infilename,   IN_FILE);
X    strcpy(outfilename,  OUT_FILE);
X    strcpy(progfilename, PROG_FILE);
X    fpout = fopen(outfilename, "w");
X    if(fpout == NULL) {
X        fprintf(fpout,"This file does not exist : %s\n", outfilename);
X        flag.quit = 1;
X        return;
X    }
X
X    MaxSearchDepth = MAX_DEPTH;
X    TCminutes = MAX_TIME;
X
#else
X
X    /* Request information on where the file is and the depth an time. */
X
X    fpout = stderr;
X    fprintf(fpout, "Input the file with the algebraic moves of the game.\n");
X    scanf("%s", infilename);
X
X    fprintf(fpout, "\n");
X    do {
X        fprintf(fpout, "Input the search depth you want to use.  (1 to 29)\n");
X        scanf("%d", &search_depth);
X    } while(search_depth < 1 || search_depth > 29);
X    MaxSearchDepth = search_depth;
X
X    fprintf(fpout, "\n");
X    do {
X        fprintf(fpout, "Input the maximun number of minutes per move you want to use.\n");
X        scanf("%d", &max_minutes);
X    } while(max_minutes < 1);
X    TCminutes = max_minutes;
X
X    fprintf(fpout, "\n\n");
X
#endif
X
X    fpin  = fopen(infilename, "r");
X    if(fpin == NULL) {
X        fprintf(fpout,"This file does not exist : %s\n", infilename);
X        flag.quit = 1;
X        return;
X    }
/* lets find out about this file */
X	fgets(InBuf,256,fpin);
X	InFileType = OTHER;
X	if(strncmp(InBuf,"xboard",6)){InFileType = XBOARD; fgets(InBuf,256,fpin); fgets(InBuf,256,fpin);}
X	else if(strncmp(InBuf,"gnuchess",6)){InFileType = GNUCHESS; fgets(InBuf,256,fpin); fgets(InBuf,256,fpin);}
X	else rewind(fpin);
X    TCmoves = 1;
X    TCflag = (TCmoves > 1);
X    OperatorTime = 0;
X    SetTimeControl();
X
X    fpout = stdout;
X
X    fprintf(fpout, "Move White Black      Score Depth     Best Line\n");
X    fprintf(fpout, "------------------------------------------------------------------\n");
X
#ifdef BACKGROUND_ANALYSIS
X
X    /* Update progress in the progress file if this is running in the background. */
X
X    fpprog = fopen(progfilename, "w");
X    fprintf(fpprog, "Done with move #%d.\n", move_number-1);
X    fclose(fpprog);
X
#endif
X
X    time(&start_time);
X    while(1) {
X        opponent = black;
X        computer = white;
X        player = computer;
X        white_moving = 1;
X        if(!GetNextMove(s)) {
X            flag.quit = 1;
X            break;
X        }
X        flag.force = 0;
X        SelectMove(computer,1);
X        Undo();
X        flag.force = 1;
X        opponent = white;
X        computer = black;
X        player = opponent;
X        ok = VerifyMove(s,0,&mv);
X        if(!ok) {
X            fprintf(fpout, "\nBad move.  %s  Board position is: \n",s);
X            UpdateDisplay(0, 0, 1, 0);
X            flag.quit = 1;
X            break;
X        } else {
X            strcpy(white_actual_move, s);
X            fprintf(fpout, "%3d   %-9s      %5d%5d   ",move_number, white_actual_move, white_score, current_depth);
X            for (i = 1; MV[i] > 0; i++)
X		{ algbr ((short) (MV[i] >> 8), (short) (MV[i] & 0xFF), false);
X	  	printf ("%5s ", mvstr[0]); }
X	    printf("\n");
X            fflush(fpout);
X            move_number++;
X            total_white_moves++;
X            if(!strcmp(white_actual_move, white_suggest_move)) same_white_moves++;
X            Sdepth = 0;
X            ft = 0;
X        }
X        player = computer;
X        white_moving = 0;
X        if(!GetNextMove(s)) {
X            flag.quit = 1;
X            break;
X        }
X        flag.force = 0;
X        SelectMove(computer,1);
X        Undo();
X        flag.force = 1;
X        opponent = black;
X        computer = white;
X        player = opponent;
X        ok = VerifyMove(s,0,&mv);
X        if(!ok) {
X            fprintf(fpout, "\nBad move.  %s  Board position is: \n",s);
X            UpdateDisplay(0, 0, 1, 0);
X            flag.quit = 1;
X            break;
X        } else {
X            strcpy(black_actual_move, s);
X            fprintf(fpout, "            %-9s%5d%5d   ", black_actual_move, black_score, current_depth);
X            for (i = 1; MV[i] > 0; i++)
X		{ algbr ((short) (MV[i] >> 8), (short) (MV[i] & 0xFF), false);
X	  	printf ("%5s ", mvstr[0]); }
X	    printf("\n");
X            fflush(fpout);
X
#ifdef BACKGROUND_ANALYSIS
X
X            /* Update progress in the progress file if this is running in the background. */
X
X            fpprog = fopen(progfilename, "w");
X            fprintf(fpprog, "Done with move #%d.\n", move_number-1);
X            fclose(fpprog);
#else
/*            fprintf(stderr, "Done with move #%d.\n", move_number-1); */
X
#endif
X
X            total_black_moves++;
X            if(!strcmp(black_actual_move, black_suggest_move)) same_black_moves++;
X            Sdepth = 0;
X            ft = 0;
X        }
X    }
X
X    white_percent = ((float) same_white_moves) * 100 / (float) total_white_moves;
X    black_percent = ((float) same_black_moves) * 100 / (float) total_black_moves;
X    fprintf(fpout, "\n           White's percentage was %5.2f%%.     Black's percentage was %5.2f%%.\n",  white_percent, black_percent);
X    time(&end_time);
X    elapsed_time = end_time - start_time;
X    fprintf(fpout, "\n           Elapsed time was %d seconds.\n", elapsed_time);
X    fclose(fpin);
X    fclose(fpout);
X    return;
}
X
SHAR_EOF
chmod 0664 gnuan.c ||
echo 'restore of gnuan.c failed'
Wc_c="`wc -c < 'gnuan.c'`"
test 21324 -eq "$Wc_c" ||
	echo 'gnuan.c: original size 21324, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= gnuan.hlp ==============
if test -f 'gnuan.hlp' -a X"$1" != X"-c"; then
	echo 'x - skipping gnuan.hlp (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting gnuan.hlp (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'gnuan.hlp' &&
X    Gnuan is a program which takes as input a file contianing all of
the moves of a chess game in algebraic notation in the following way:
X
e2e4 c7c5
g1f3 d7d6
d2d4 c5d4
etc...
X
Run gnuan and it will ask you for the path to the source file, the
maximum depth it should analyse a move to and a maximum time per
move.  The output will go to standard out, but you can always
redirect it to a file.
X
The depth that you specify is in plys or half moves.  The time is in
minutes.
X
The file gnuan.c is based on nondsp.c which came with gnuchess.  The
modifications for gnuan.c were made by:
X
X   Truman Collins
X   July 1990
X   CIS 71121,3343
X   tcollins@pdx.mentor.com
X
If anyone makes any improvements to this, I would appreciate hearing
about them.
SHAR_EOF
chmod 0664 gnuan.hlp ||
echo 'restore of gnuan.hlp failed'
Wc_c="`wc -c < 'gnuan.hlp'`"
test 743 -eq "$Wc_c" ||
	echo 'gnuan.hlp: original size 743, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= gnuchess.book ==============
if test -f 'gnuchess.book' -a X"$1" != X"-c"; then
	echo 'x - skipping gnuchess.book (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting gnuchess.book (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'gnuchess.book' &&
!
! Opening Library for CHESS
!
! Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
! Copyright (c) 1987 by Stuart Cracraft and John Stanback
!
! This file is part of CHESS.
!
! CHESS is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the CHESS General Public
! License for full details.
!
! Everyone is granted permission to copy, modify and redistribute
! CHESS, but only under the conditions described in the
! CHESS General Public License.   A copy of this license is
! supposed to have been given to you along with CHESS so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.
!
!
!
! Four Knight's Game
e2e4  e7e5
g1f3  b8c6
b1c3  g8f6
f1b5  f8b4
o-o   o-o
d2d3  b4c3
b2c3  d7d6
c1g5  d8e7
f1e1  c6d8
d3d4  d8e6
! Giuoco Piano
e2e4  e7e5
g1f3  b8c6
f1c4  f8c5
d2d3  g8f6
b1c3  d7d6
c1g5  h7h6
g5f6  d8f6
c3d5  f6d8
! Two Knights Defence
e2e4  e7e5
g1f3  b8c6
f1c4  g8f6
f3g5  d7d5
e4d5  c6a5
c4b5  c7c6
d5c6  b7c6
b5e2  h7h6
! Two Knights Defence -- Max Lange Attack
e2e4  e7e5
g1f3  b8c6
f1c4  g8f6
d2d4  e5d4
o-o   f8c5
e4e5  d7d5
e5f6  d5c4
f6g7  h8g8
! Petrov's Defence
e2e4  e7e5
g1f3  g8f6
f3e5  d7d6
e5f3  f6e4
d2d4  d6d5
f1d3  f8d6
o-o   o-o
c2c4  c8g4
c4d5  f7f5
b1c3  b8d7
! Petrov's Defence
e2e4  e7e5
g1f3  g8f6
d2d4  e5d4
e4e5  f6e4
d1d4  d7d5
!
! Vienna Game
e2e4 e7e5
b1c3 f8c5
g1f3 d7d6
d2d4 e5d4
f3d4 g8f6
c1g5 h7h6
g5h4 b1c3
!
e2e4 e7e5
b1c3 b8c6
g1f3 g7g6
d2d4 e5d4
c3d5 f8g7
c1g5 c6e7
f3d4 c7c6
d5c3 h7h6
! - - - - - -
! ECO C25/1-2
e2e4 e7e5
b1c3 f8c5
f1c4 d7d6
d2d3 c8e6
c4e6 f7f6
d1h5 e7d7
c1e3 c5b6
g1e2 b8c6
o-o  g8f6
h5h3 d8e8
!
e2e4 e7e5
b1c3 f8c5
g1f3 d7d6
d2d4 e5d4
f3d4 g8f6
c1g5 h7h6
g5h4 b8c6
d4c6 b7c6
f1d3 e8e7
o-o  g7g5
! ECO C25/3-9
e2e4 e7e5
b1c3 b8c6
f2f4 e5f4
g1f3 g7g5
h2h4 g5g4
f3g5 h7h6
g5f7 e7f7
d2d4 d7d5
c1f4 f8b4
f1e2 b4c3
b2c3 g8f6
!
e2e4 e7e5
b1c3 b8c6
f2f4 e5f4
g1f3 g7g5
d2d4 g5g4
f1c4 g4f3
o-o  d7d5
e4d5 c8g4
d1d2 c6e7
d2f4 g8h6
!
e2e4 e7e5
b1c3 b8c6
f2f4 e5f4
d2d4 d8h4
e1e2 d7d5
e4d5 c8g4
g1f3 o-o-o
d5c6 f8c5
d1e1 h4h5
c6b7 e8b8
e2d2 g4f3
!
e2e4 e7e5
b1c3 b8c6
f2f4 e5f4
d2d4 d8h4
e1e2 d7d6
g1f3 c8g4
c1f4 o-o-o
e2e3 h4h5
f1e2 g7g5
f3g5 f7f5
h2h3 g4e2
!
e2e4 e7e5
b1c3 b8c6
g2g3 f8c5
f1g2 a7a6
g1e2 d7d6
d1d3 c8g4
h2h3 g4e6
o-o  g8e7
c3d5  o-o
c2c3 c5a7
g1h2 f7f6
!
e2e4 e7e5
b1c3 b8c6
g2g3 f8c5
f1g2 d7d6
c3a4 g8e7
a4c5 d6c5
d2d3 o-o 
g2e3 b7b6
d1d2 c8e6
g1e2 d8d7
o-o  a8d8
!
e2e4 e7e5
b1c3 b8c6
f1c4 f8c5
d1g4 g7g6
d4f3 g8f6
g1e2 d7d6
d2d3 c8g4
f3g3 h7h6
f2f4 d7e7
c3d5 f6d5
g3g4 d5e3
! ECO C26/1-10
e2e4 e7e5
b1c3 g8f6
g2g3 c7c6
f1g2 d7d6
g1e2 b7b5
o-o  b8d7
h2h3 d8c7
g3g4 b5b4
c3b1 a7a5
a2a3 c8a6
a3b4 a5b4
!
e2e4 e7e5
b1c3 g8f6
g2g3 d7d5
e4d5 f6d5
f1g2 c8e6
g1f3 b8c6
o-o  f8e7
f1e1 e7f6
c3e4  o-o
d2d3 f6e7
a2a3 d5b6
!
e2e4 e7e5
b1c3 g8f6
g2g3 d7d5
e4d5 f6d5
f1g2 d5c3
b2c3 f8d6
g1f3  o-o
o-o  b8d7
d2d3 a1b8
a2a4 b7b6
a4a5 c8b7
!
e2e4 e7e5
b1c3 g8f6
g2g3 f8b4
f1g2 c7c6
g1e2  o-o
o-o  d7d5
e4d5 c6d5
d2d4 e5d4
e2d4 b8c6
c1g5 b4e7
f1e1 h7h6
!
e2e4 e7e5
b1c3 g8f6
g2g3 f8c5
f1g2 b8c6
g1e2 d7d6
o-o   o-o
d2d3 c8e6
c3d5 e6d5
e4d5 c6e7
c1g5 f6d7
d3d4 e5d4
!
e2e4 e7e5
b1c3 g8f6
g2g3 f8c5
f1g2 b8c6
g1f3 d7d6
d2d3 a7a6
o-o   o-o
c1g5 h7h6
g5e3 c5e3
f2e3 d6d5
e4d5 f6d5
!
e2e4 e7e5
b1c3 g8f6
g2g3 f8c5
f1g2  o-o
d2d3 f8e8
g1e2 c7c6
o-o  d7d5
e5d5 f6d5
g1h1 c8g4
h2h3 g4e6
c3e4 c5e7
!
e2e4 e7e5
b1c3 g8f6
f1c4 f8b4
g1e2  o-o
d2d3 c7c6
o-o  d7d5
c4b3 d5e4
c3e4 b8d7
e2g3 f6e4
d3e4 d7c5
d1h5 c5b3
!
e2e4 e7e5
b1c3 g8f6
f1c4 f8c5
d2d3 d7d6
c1g5 c8e6
d1d2 b8d7
g1e2 e6c4
d3c4 h7h6
g5e3 d8e7
e2g3 c5e3
f2e3 g7g6
!
e2e4 e7e5
b1c3 g8f6
f1c4 f8c5
d2d3 d7d6
f2f4 b8c6
f4f5 b6d4
g1f3 c7c6
f3d4 c5d4
d1f3 b7b5
c4b3 a7a5
a2a3 a5a4
! ECO C27/1-2
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
h5e5 d8e7
e5e7 f8e7
c4b3 d6f5
c3d5 e7d8
d5e3 f5d4
b3c4 c7c6
g1e2 d4e2
c4e2 d7d5
!
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
c4b3 b8c6
c3b5 g7g6
h5f3 f7f6
b5c7 d8c7
f3f6 b7b6
g1f3 c8a6
f3e5 c6e5
f6e5 e8d8
! ECO C27/3-5
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
c4b3 b8c6
c3b5 g7g6
h5f3 f7f5
f3d5 d8e7
b5c7 e8d8
c7a8 b7b6
d2d3 c8b7
h2h4 f5f4
d5f3 f8h6
b3d5 b7a8
f3g4 h8f8
g1e2 e5e4
c1f4 h6f4
e2f4 e7e5
g4g5 e5g5
!
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
c4b3 b8c6
c3b5 g7g6
h5f3 f7f5
f3d5 d8e7
b5c7 e8d8
c7a8 b7b6
g1f3 c8b7
d3d4 c6d4
c1g5 d4f3
d5f3 e7g5
b3d5 e5e4
f3b3 b7a6
b3a4 f8h6
a4d4 h8e8
g2g3 g5g4
!
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
c4b3 b8c6
c3b5 g7g6
h5f3 f7f5
f3d5 d8e7
b5c7 e8d8
c7a8 b7b6
a8b6 a7b6
d5f3 c8b7
d2d3 c6d4
f3h3 e5e4
c1e3 e4d3
o-o-o d4c2
e3b6 d8e8
h3d3 f8h6
c1b1 b7e4
! ECO C27/6-7
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
c4b3 f8e7
g1f3 b8c6
f3e5  o-o
o-o  c6d4
c3d5 d4b3
a2b3 d6e8
h5e2 e8f6
e5c6 d7c6
d5e7 g8h8
e7c8 d8c8
!
e2e4 e7e5
b1c3 g8f6
f1c4 f6e4
d1h5 e4d6
c4b3 f8e7
g1f3  o-o
h2h4 b8c6
f3g5 h7h6
h5g6 e7g5
h4g5 d8g5
d2d3 d6f5
c1g5 c6d4
c3d5 d4b3
! ECO C28/1-7
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
f2f3 f6e4
g1f3 e4c3
d2c3 d8e7
b2b4 d7d6
o-o  c8e6
c4e6 e7e6
b4b5 c6d8
f4e5 d6e5
f3e5 f8d6
!
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
d2d3 c6a5
g1e2 a5c4
d3c4 d7d6
o-o  c8e6
b2b3 c7c6
e2g3 g7g6
h2h3 h7h5
d1d3 f8e7
c1e3 d8d7
!
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
d2d3 f8c5
c1g5 h7h6
g5h4 d7d6
c3a4 c8e6
a4c5 d6c5
b2b3 e6c4
b3c4 d8d6
g1e2 c6d4
h4f6
!
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
d2d3 f8b4
g1e2 d7d5
e4d5 f6d5
c4d5 d8d5
o-o  d5d8
f2f4 e5f4
c1f4  o-o
d1e1 b4d6
e1g3 b6f4
!
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
d2d3 f8b4
c1g5 d7d6
g1e2 c8e6
o-o  h7h6
g5f6 d8f6
c3d5 e6d5
c4d5 b4c5
c2c3  o-o
g1h1 c6e7
!
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
d2d3 f8b4
c1g5 h7h6
g5f6 b4c3
b2c3 d8f6
g1e2 d7d6
d1d2 c1e6
c4b5 f6g5
e2g3  o-o
b5c6 b7c6
!
e2e4 e7e5
b1c3 g8f6
f1c4 b8c6
d2d3 f8b4
g1f3 d7d6
o-o  b4c3
b2c3 c6a5
c4b3 a5b3
a2b3  o-o
c3c4 b7b6
d1e2 f6d7
c1g5 f7f6
! ECO C29/1
e2e4 e7e5
b1c3 g8f6
f1f4 d7d5
d2d3 e5f4
e4d5 f6d5
c3d5 d8d5
c1f4 f8d6
f4d6 d5d6
d1d2  o-o
g1f3 c8g4
f1e2 g4f3
! ECO C29/2-12
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
d1f3 b8c6
f1b5 e4c3
b2c3 f8e7
d2d4  o-o
b5d3 f7f6
f3h5 g7g6
d3g6 h7g6
h5g6 g8h8
g6h6 h8g8
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
d1f3 f7f5
d2d3 e4c3
b2c3 d5d4
f3g3 b8c6
f1e2 c8e6
e2f3 d8d7
g1e2 f8c5
c3c4  o-o
o-o  e6c4
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
d2d3 d8h4
g2g3 e4g3
g1f3 h4h5
c3d5 c8g4
f1g2 g3h1
d5c7 e8d7
c7h8 b8c6
c1e3 f7f6
d3d4 f6e5
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
d2d3 f1b4
d3e4 d8h4
e1e2 b8c6
g1f3 c8g4
c3d5 o-o-o
c2c3 f7f5
e5f6 h8e8
c3b4 e8e4
c1e3 g7f6
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
d2d3 e4c3
b2c3 d5d4
g1f3 b8c6
c3d4 f8b4
c1d2 b4d2
d1d2 c6d4
c2c3 d4f3
g2f3 d8h4
d2f2 h4f2
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
g1f3 f1b4
d1e2 b4c3
b2c3  o-o
e2e3 b8c6
f1d3 f7f5
o-o  c8e6
c1a3 f8e8
a1b1 a8b8
a3b5 e6d7
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
g1f3 b8c6
f1b5 f8c5
d2d4 c5b4
c1d2 b4c3
b2c3  o-o
o-o  c1g4
d1e1 f7f6
d2e3 g4d7
e5f6 d8f6
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
g1f3 f8c5
d1e2 c5f2
e1d1 e4c3
d2c3 f2b6
c3g5 d8d7
d1d2  o-o
a1d1 d7a4
a2a3 c7c5
d2c1 c8e6
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
g1f3 c8g4
d1e2 e4g5
h2h4 g5f3
g2f3 g4e6
d2d4 b8c6
c1e3 f8e7
e2f2 d8d7
o-o-o o-o-o
f1b5 a7a6
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
g1f3 f8e7
d1e2 e4c3
d2c3  o-o
c1f4 c7c5
o-o-o d8a5
c1b1 b8c6
a4b5 c8e6
b5a5 f3g5
!
e2e4 e7e5
b1c3 g8f6
f2f4 d7d5
f4e5 f6e4
g1f3 f8e7
d2d4  o-o
f1d3 f7f6
e5f6 e7f6
o-o  b8c6
c3e4 d5e4
d3e4 c6d4
f3g5 c8f5
c2c3 f7g5
!
! Vienna Game
e2e4  e7e5
b1c3  f8c5
g1f3  d7d6
d2d4  e5d4
f3d4  g8f6
c1g5  h7h6
g5h4  b1c3
! Three Knights Game
e2e4  e7e5
b1c3  b8c6
g1f3  g7g6
d2d4  e5d4
c3d5  f8g7
c1g5  c6e7
f3d4  c7c6
d5c3  h7h6
! Bishop's Opening
e2e4  e7e5
f1c4  g8f6
d2d4  e5d4
g1f3  f6e4
d1d4  e4c5
o-o   c5e6
f1e1  c7c6
b1c3  d7d5
c4d3  f8e7
! Ruy Lopez -- Classical Defence
e2e4  e7e5
g1f3  b8c6
f1b5  f8c5
c2c3  g8f6
d2d4  e5d4
e4e5  f6e4
o-o   d7d5
! Ruy Lopez -- Birds Defence
e2e4  e7e5
g1f3  b8c6
f1b5  c6d4
b5a4  f8c5
o-o   d4f3
d1f3  g8e7
d2d3  o-o
c1e3  c5b6
b1c3  d7d6
! Ruy Lopez -- Schliemann Defence
e2e4  e7e5
g1f3  b8c6
f1b5  f7f5
b1c3  f5e4
c3e4  d7d5
f3e5  d5e4
e5c6  d8d5
c2c4  d5d6
c6a7  c8d7
! Ruy Lopez -- Old Steinitz Defence
e2e4  e7e5
g1f3  b8c6
f1b5  d7d6
d2d4  c8d7
b1c3  g8f6
o-o   f8e7
f1e1  e5d4
f3d4  o-o
d4f5  f8e8
! Ruy Lopez -- Old Steinitz Defence
e2e4  e7e5
g1f3  b8c6
f1b5  d7d6
d2d4  c8d7
b1c3  g8f6
b5c6  d7c6
d1d3  e5d4
f3d4  f8e7
c1g5  c6d7
! Ruy Lopez -- Modern Steinitz Defence
e2e4  e7e5
g1f3  b8c6
f1b5  a7a6
b5a4  d7d6
d2d4  b7b5
a4b3  c6d4
f3d4  e5d4
c2c3  d4c3
b1c3  c8b7
! Ruy Lopez -- Open Defence
e2e4  e7e5
g1f3  b8c6
f1b5  a7a6
b5a4  g8f6
o-o   f6e4
d2d4  b7b5
a4b3  d7d5
d4e5  c8e6
c2c3  f8c5
b1d2  o-o
! Ruy Lopez -- Open Defence
e2e4  e7e5
g1f3  b8c6
f1b5  a7a6
b5a4  g8f6
o-o   f8e7
f1e1  b7b5
a4b3  d7d6
c2c3  o-o
h2h3  c6a5
b3c2  c2c4
d2d4  d8c7
! Ruy Lopez
e2e4  e7e5
g1f3  b8c6
f1b5  a7a6
b5c6  d7c6
d2d4  e5d4
d1d4  d8d4
f3d4  c8d7
c1e3  o-o-o
b1d2  g8e7
! Scotch Game
e2e4  e7e5
g1f3  b8c6
d2d4  e5d4
f3d4  f8c5
c1e3  d8f6
c2c3  g8e7
b1d2  d7d6
e3c5  d6c5
! Philidor's Defence
e2e4  e7e5
g1f3  d7d6
d2d4  g8f6
b8c6  b1d2
f8c5  f1e2
o-o   o-o
d1e2  c7c6
! Alekhine's Defence
e2e4  g8f6
e4e5  f6d5
c2c4  d5b6
d2d4  d7d6
f2f4  d6e5
f4e5  b8c6
c1e3  c8f5
b1c3  e7e6
g1f3  f8e7
! Alekhine's Defence
e2e4  g8f6
e4e5  f6d5
d2d4  d7d6
g1f3  c8g4
f1e2  e7e6
o-o   f8e7
h2h3  g4h5
c2c4  d5b6
! Kings Gambit Accepted
e2e4  e7e5
f2f4  e5f4
g1f3  d7d6
f1c4  h7h6
d2d4  g7g5
o-o   f8g7
c2c3  b8c6
d1b3  d8e7
! Ponziani's Opening
e2e4  e7e5
g1f3  b8c6
c2c3  d7d5
d1a4  g8f6
f3e5  f8d6
e5c6  b7c6
d2d3  o-o
c1g5  h7h6
! Caro-Kann Defence
e2e4  c7c6
d2d4  d7d5
e4d5  c6d5
c2c4  g8f6
b1c3  b8c6
c1g5  e7e6
c4c5  f8e7
f1b5  o-o
g1f3  f6e4
! Caro-Kann Defence
e2e4  c7c6
d2d4  d7d5
e4e5  c8f5
f1d3  f5d3
d1d3  e7e6
b1c3  d8b6
b1d2  c6c5
d4c5  f8c5
! Caro-Kann Defence
e2e4  c7c6
b1c3  d7d5
g1f3  c8g4
h2h3  g4f3
d1f3  e7e6
d2d4  g8f6
f1d3  d5e4
c3e4  d8d4
c2c3  d4d8
! French Defence -- Classical
e2e4  e7e6
d2d4  d7d5
b1c3  g8f6
c1g5  f8e7
e4e5  f6d7
g5e7  d8e7
d1d2  o-o
f2f4  c7c5
g1f3  b8c6
o-o-o c5c4
! French Defence -- MacCutcheon
e2e4  e7e6
d2d4  d7d5
b1c3  g8f6
c1g5  c8g4
e4e5  h7h6
g5d2  g4f3
g2f3  f6e4
d1g4  e8f8
h2h4  c7c5
! French Defence -- Rubenstein
e2e4  e7e6
d2d4  d7d5
b1c3  d5e4
c3e4  b8d7
g1f3  g8f6
e4f6  d7f6
f1d3  b7b6
d1e2  c8b7
c1g5  f8e7
! French Defence -- Winawer
e2e4  e7e6
d2d4  d7d5
b1c3  f8b4
e4e5  c7c5
a2a3  b4c3
b2c3  b8d7
d1g4  o-o
g1f3  b8c6
f1e3  f7f5
! French Defence -- Tarrasch
e2e4  e7e6
d2d4  d7d5
b1d2  b8c6
g1f3  g8f6
e4e5  f6d7
d2b3  f7f6
f1b5  f8e7
c1f4  o-o
! Sicilian Defence -- Dragon Variation
e2e4  c7c5
g1f3  b8c6
d2d4  c5d4
f3d4  g8f6
b1c3  d7d6
f1e2  g7g6
c1e3  f8g7
o-o   o-o
d4b3  c8e6
f2f4  c6a5
f4f5  e6c4
! Sicilian Defence -- Dragon Variation
e2e4  c7c5
g1f3  b8c6
d2d4  c5d4
f3d4  g7g6
b1c3  f8g7
c1e3  g8f6
f1c4  o-o
! Sicilian Defence -- Boleslavsky Variation
e2e4  c7c5
g1f3  b8c6
d2d4  c5d4
f3d4  g8f6
b1c3  d7d6
f1e2  e7e5
d4b3  f8e7
o-o   o-o
c1e3  c8e6
! Sicilian Defence -- Najdorf
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
d1d2  f8e7
o-o-o o-o
! Sicilian Defence -- Najdorf
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
f1e2  e7e5
d4b3  f8e7
o-o   o-o
f2f4  b7b5
a2a3  c8b7
! Sicilian Defence -- Najdorf
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
g2g3  e7e5
d4e2  c8e6
f1g2  b7b5
o-o   b8d7
! Sicilian Defence -- Closed
e2e4  c7c5
b1c3  b8c6
g2g3  g7g6
f1g2  f8g7
d2d3  e7e6
c1e3  d7d6
g1e2  c6d4
d1d2  d8h4
o-o   g8d7
! Nimzowitsch Defence
e2e4  b8c6
d2d4  d7d5
e4e5  f7f6
g1f3  c1g4
f1e2  e7e6
e5f6  g8f6
c2c3  f8d6
c1g5  d8d7
! Queens Gambit Accepted
d2d4  d7d5
c2c4  d5c4
g1f3  g8f6
e2e3  e7e6
f1c4  c7c5
o-o   a7a6
d1e2  b7b5
c4d3  c5d4
e3d4  b8c6
! Queens Gambit -- Catalan
d2d4  d7d5
c2c4  e7e6
g2g3  g8f6
g1f3  f8e7
f1g2  o-o
o-o   f6d7
d1c2  c7c6
b1d2  b7b6
e2e4  c8b7
b2b3  a8c8
! Queens Gambit Declined -- Orthodox
d2d4  d7d5
c2c4  e7e6
b1c3  g8f6
c1g5  f8e7
e2e3  o-o
g1f3  b8d7
a1c1  c7c6
f8d3  d5c4
f1c4  f6d5
! Queens Gambit Declined -- Cambridge Springs
d2d4  d7d5
c2c4  e7e6
b1c3  g8f6
c1g5  b8d7
e2e3  c7c6
g1f3  d8a5
f3d2  f8b4
d1c2  o-o
g5h4  c6c5
! Queens Gambit Declined -- Exchange Var.
d2d4  d7d5
c2c4  e7e6
b1c3  g8f6
c1g5  b8d7
c4d5  e6d5
e2e3  c7c6
f1d3  f8e7
d1c2  o-o
g1e2  f8e8
! Queens Gambit Declined -- Semi-Tarrasch
d2d4  d7d5
c2c4  e7e6
b1c3  g8f6
g1f3  c7c5
c4d5  c5d4
d1d4  e6d5
e2e4  b8c6
f1b5  f6e4
! Queens Gambit Declined -- Tarrasch
d2d4  d7d5
c2c4  e7e6
b1c3  c7c5
c4d5  e6d5
g1f3  b8c6
g2g3  g8f6
f1g2  f8e7
o-o   o-o
! Queens Gambit Declined -- Vienna
d2d4  d7d5
c2c4  e7e6
g1f3  g8f6
f1b5  f8b4
b1c3  d5c4
e2e4  c7c5
e4e5  c5d4
d1a4  b8c6
o-o-o c1d2
! Queens Gambit Declined -- Slav (Marshall Gambit)
d2d4  d7d5
c2c4  c7c6
b1c3  e7e6
e2e4  d4e4
c3e4  f8b4
c1d2  d8d4
d2b4  d4e4
f1e2  b8a6
b4d6  b7b6
! Queens Gambit --Slav (Krause)
d2d4  d7d5
c2c4  c7c6
g1f3  g8f6
b1c3  d5c4
a2a4  c8f5
f3e5  e7e6
f2f3  f8b4
c1g5  h7h6
g5f6  d8f6
e2e4  f5h7
! Mach 3 Opening. Var 1 (3. g5h4)
d2d4  g8f6
c1g5  f6e4
g5h4  g7g5
f2f3  g5h4
f3e4  c7c5
e2e3  d8b6
b2b3  b8c6
g1f3  f8h6
d1d3  c6b4
d3c3  c5d4
! Mach 3 Opening. Var 2 (3. g5f4)
d2d4  g8f6
c1g5  f6e4
g5f4  d7d5
f2f3  e4f6
e2e4  d5e4
b1c3  f6e4
c3e4  d8d5
c2c4  d5a5
f4d2  a5f5
f3f4  b8c6
! Mach 3 Opening. Var 2a (5. b1c3)
d2d4  g8f6
c1g5  f6e4
g5f4  d7d5
f2f3  e4f6
b1c3  e7e6
f4g5  f8g7
g1h3  o-o
e2e3  c7c5
h3f2  c5d4
e3d4  b8c6
! Mach 3 (Avoid Queen trap)
d2d4  g8f6
c1g5  f6e4
g5h4  g7g5
f2f3  g5h4
f3e4  c7c5
e2e3  d8b6
g1f3  b6b2
b1d2  f8g7
! Modern Benoni Counter Gambit
d2d4  g8f6
c2c4  c7c5
d4d5  e7e6
b1c3  e6d5
c4d5  d7d6
e2e4  g7g6
f1d3  f8g7
g1e2  o-o
o-o   a7a6
a2a4  d8c7
! Queens Pawn Game
d2d4  d7d5
g1f3  g8f6
c1f4  c7c5
e2e3  b8c6
c2c3  d8b6
d1c1  c8f5
d4c5  b6c5
b1d2  a8c8
f3d4  c6d4
e3d4  c5b6
! Pirc-Robatsch Defence
d2d4  d7d6
e2e4  g8f6
b1c3  g7g6
c1g5  f8g7
d1d2  b8d7
o-o-o e7e5
d4e5  d6e5
g1f3  h7h6
g5h4  g6g5
h4g3  d8e7
! Pirc-Robatsch Defence
d2d4  d7d6
e2e4  g8f6
b1c3  g7g6
f1c4  c7c6
d1e2  f8g7
g1f3  o-o
c1g5  b7b5
c4d3  d8c7
! Queens Indian Defence
d2d4  g8f6
c2c4  e7e6
g1f3  b7b6
g2g3  c8b7
f1g2  f8e7
o-o   o-o
b1c3  f6e4
d1c2  e4c3
c2c3  d7d6
c3c2  f7f5
! Queens Indian Defence
d2d4  g8f6
c2c4  e7e6
g1f3  b7b6
e2e3  c8b7
f1d3  f8e7
b1c3  d7d5
o-o   o-o
d1e2  b8d7
! Nimzo-Indian Defence
d2d4  g8f6
c2c4  e7e6
b1c3  f8b4
d1c2  d7d5
a2a3  b4c3
c2c3  b8c6
g1f3  f6e4
c3b3  c6a5
b3a4  c7c6
! Nimzo-Indian Defence (Rubenstein)
d2d4  g8f6
c2c4  e7e6
b1c3  f8b4
e2e3  o-o
f1d3  d7d5
g1f3  c7c5
o-o   b8c6
a2a3  b4c3
b2c3  d5c4
d3c4  d8c7
! Nimzo-Indian Defence -- Samisch 
d2d4  g8f6
c2c4  e7e6
b1c3  f8b4
a2a3  b4c3
b2c3  o-o
f2f3  d7d5
c4d5  e6d5
e2e3  c8f5
g1e2  b8d7
e2g3  f5g6
! Nimzo-Indian Defence
d2d4  g8f6
c2c4  e7e6
b1c3  f8b4
c1d2  o-o
e2e3  d7d5
g1f3  c7c5
a2a3  b4c3
d2c3  f6e4
a1c1  e4c3
c1c3  c5d4
! Grunfeld Defence
d2d4  g8f6
c2c4  g7g6
b1c3  d7d5
c4d5  f6d5
e2e4  d5c3
b2c3  c7c5
f1c4  f8g7
g1e2  o-o
o-o   c5d4
c3d4  b8c6
! Grunfeld Defence -- Smyslov
d2d4  g8f6
c2c4  g7g6
b1c3  d7d5
g1f3  f8g7
d1b3  d5c4
b3c4  o-o
e2e4  c8g4
c1e3  f6d7
o-o-o b8c6
! Grunfeld Defence
d2d4  g8f6
c2c4  g7g6
b1c3  d7d5
c1f4  f8g7
d2d3  o-o
c4d5  f6d5
c3d5  d8d5
f4c7  b8c6
! Kings Indian Defence -- Classical
d2d4  g8f6
c2c4  g7g6
b1c3  f8g7
e2e4  d7d6
g1f3  o-o
f1e2  e7e5
o-o   b8c6
c1e3  f8e8
d4e5  d6e5
! Kings Indian Defence -- 4 pawns attack
d2d4  g8f6
c2c4  g7g6
b1c3  f8g7
e2e4  d7d6
f2f4  c7c5
g1f3  o-o
d4d5  e7e6
f1d3  e6d5
c4d5  d8b6
! Kings Indian Defence -- Samisch
d2d4  g8f6
c2c4  g7g6
b1c3  f8g7
e2e4  d7d6
f2f3  o-o
c1e3  e7e5
d4d5  c7c6
g1e2  c6d5
c3d5  f6d5
! Kings Indian Defence -- Main Line
d2d4  g8f6
c2c4  g7g6
g2g3  f8g7
f1g2  o-o
b1c3  d7d6
g1f3  b8d7
o-o   e7e5
e2e4  c7c6
h2h3  d8b6
! Kings Indian Defence
d2d4  g8f6
c2c4  g7g6
b1c3  f8g7
g1f3  o-o
c1f4  d7d6
h2h3  b8d7
e2e3  c7c6
! Dutch Defence
d2d4  f7f5
g2g3  e7e6
f1g2  g8f6
g1f3  f8e7
o-o   o-o
c2c4  d7d6
b1c3  d8e8
d1c2  e8h5
b2b3  b8c6
c1a3  a7a5
! English Opening
c2c4  e7e5
b1c3  g8f6
g1f3  b8c6
e2e4  f8b4
d2d3  d7d6
f1e2  o-o
o-o   b4c3
b2c3  d8e7
! English Opening
c2c4  g8f6
b1c3  d7d5
c4d5  f6d5
e2e4  d5f4
f1c4  c8e6
c4e6  f7e6
! English Opening
c2c4  e7e5
b1c3  g8f6
g1f3  b8c6
g2g3  d7d5
c4d5  f6d5
f1g2  d5b6
o-o   f8e7
d2d3  o-o
c1e3  f7f5
! Reti -- Accepted
g1f3  d7d5
c2c4  d5c4
e2e3  c7c5
f1c4  e7e6
o-o   g8f6
b2b3  b8c6
c1b2  a7a6
a2a4  f8e7
! Reti -- Neo Catalan
g1f3  d7d5
c2c4  e7e6
g2g3  g8f6
f1g2  f8e7
o-o   o-o
b2b3  c7c5
c4d5  f6d5
c1b2  b8c6
d2d4  b7b6
b1c3  d5c3
! Reti -- Barcza
g1f3  d7d5
g2g3  g8f6
f1g2  g7g6
o-o   f8g7
d2d3  o-o
b1d2  b8c6
e2e4  e7e5
c2c3  a7a5
f1e1  d5e4
d3e4  f6d7
! Sicilian Najdorf
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
e4e5  d6e5
f4e5  f6d7
c3e4  h7h6
g5h4  a3a2
b1b3  b8c6
d4c6  b7c6
e4d6  f8d6
e5d6  a6a5
f1e2  a5a4
b3c3  a2a1
e2d1  a4a3
o-o   a3a2 
d2e3  o-o
! #  Sicilian Defense col. 2f p. 176 MCO 12.  (Incomplete game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
e4e5  d6e5
f4e5  f6d7
f1c4  f8b4
b1b3  a3a5
o-o   o-o
g5f6  d7f6
e5f6  f8d8
b3b4  a5b4
d2g5  g7g6
f1f4  b7b6
f4h4  b4f8
g1f1  a8a7 
! #  Sicilian Defense col. 3g p. 176 MCO (Incomplete Game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
e4e5  d6e5
f4e5  f6d7
f1c4  a3a5
c4e6  f7e6
d4e6  d7e5
c3d5  a5d2
e1d2  e8d7
e6c7  a8a7
h1e1  e5c4
! #  Parma vs. Fischer, Havana 1965.  Sicilian Defense col. 4j p. 176
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
g5f6  g7f6
f1e2  f8g7
o-o   f6f5
f1d1  b8c6
d4c6  g7c3
d2e3  b7c6
b1b3  a3c5
e3c5  d6c5
b3c3  f5e4
c3c5  c8d7
c5e5  f7f5
g2g4  h8g8
g1g2  f5g4
e5e4  h7h5
g2g3  e8e7
! #  Matanovic, Sicilian Defense col. 5k p. 176 MCO (partial game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
g5f6  g7f6
f1e2  b8c6
d4c6  b7c6
o-o   a3a5
g1h1  f8e7
f4f5  e6f5
e4f5  c8f5
e2a6  a5a6
f1f5  d6d5
b1e1  a6b7
d2h6  o-o-o
h6h3  b7d7
c3a4  
! #  col. 6a
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
f4f5  b8c6
f5e6  f7e6
d4c6  b7c6
e4e5  d6e5
g5f6  g7f6
c3e4  f8e7
f1e2  h7h6
c2c4  f6f5
b1b3  a3a4
o-o   f5e4
g1h1  c6c5
d2c3  a4c6
c3e5  h8f8
! #  col. 7d
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
a1b1  b2a3
f4f5  b8c6
f5e6  f7e6
d4c6  b7c6
e4e5  f6d5
c3d5  c6d5
f1e2  d6e5
o-o   a8a7
g1h1  a3c5
c2c4  d5d4
e2h5  g7g6
h5d1  f8e7
d1a4  e8d8
f1f7  h7h6
g5h6  e5e4
! #  col. 8
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
d4b3  b8d7
g5f6  g7f6
f1e2  h7h5
o-o   b2a3
a1d1  f8e7
g1h1  d7c5
e2f3  a8a7
b3c5  a3c5
! #  col. 9g; Minic-Barczay, Varna 1967 (partial game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
d4b3  b8c6
f1d3  d6d5
g5f6  g7f6
c3a4  b2a3
a4b6  d5d4
o-o   a8b8
f4f5  a3b4
d2b4  f8b4
b6c8  b8c8
f5e6  f7e6
f1f6  e8e7
a1f1  c6e5
! #  col. 10i; Matulovic-Kavalek, Sousse 1967
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d1d2  b6b2
d4b3  b8c6
a1b1  b2a3
g5f6  g7f6
f1d3  f8g7
o-o   o-o
f1f3  g8h8
f3h3  c6e7
f4f5  e6f5
e4f5  c8f5
d3f5  e7f5
c3d5
! #  col. 11b; Joppen-Bronstein, Belgrade 1954 (partial game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d4b3  b6e3
d1e2  e3e2
f1e2  b8d7
a2a4  f8e7
o-o-o h7h6
g5h4  e6e5
f4f5  b7b6
e2f3  c8b7
! #  col. 12e; Rajkovic-Udovcic, Yugoslav Chp. 1962 (partial game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  d8b6
d4b3  b8d7
d1f3  f8e7
o-o-o b6c7
f1d3  h7h6
g5h4  g7g5
f4g5  d7e5
f3e2  f6g4
b3d4  h6g5
h4g3  c8d7
d4f3  c7c5
! #  col. 13i; Fischer-Vukovic (partial game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  f8e7
d1f3  d8c7
o-o-o b8d7
g2g4  b7b5
g5f6  d7f6
g4g5  f6d7
a2a3  a8b8
h2h4  b5b4
a3b4  b8b4
f1h3  o-o
d4e6  f7e6
h3e6  g8h8
c3d5  c7c4
e6f5  f8f5
e4f5  c8b7
h1e1  e7f8
! #  col. 14m Parma-Tatai, Athens 1968 (partial game)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  b7b5
e4e5  d6e5
f4e5  d8c7
e5f6  c7e5
f1e2  e5g5
d1d3  a8a7
c3e4  g5e5
d4f3  e5b2
o-o   a7d7
d3e3  c8b7
a1b1  b2c2
f3g5  c2c6
f6g7  f8g7
! #  col. 15; slight advantage for white.
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
f2f4  h7h6
g5h4  d8b6
d1d3  b6b2
a1b1  b2a3
e4e5  f6d5
c3d5  a3d3
f1d3  e6d5
e5e6
! #  col. 16c; Fichtl-Dolezal, CSSR 1954
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
d1f3  b8d7
o-o-o d8c7
f3g3  b7b5
f1b5  a6b5
d4b5  c7b8
b5d6  f8d6
g3d6  b8d6
d1d6  h7h6
g5f6  d7f6
h1d1  c8b7
f2f3
! #  col. 17e; Vasyukov-Zukharov, USSR 1960
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  e7e6
d1d2  b8c6
o-o-o h7h6
g5h4  f6e4
d2f4  e4g5
d4c6  b7c6
f4a4  d8b6
f2f4  g5h7
f4f5  a8b8
f5e6  c8e6
f1c4
! #  col. 18g (somewhat questionable)
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
c1g5  b8d7
f1c4  d8a5
d1d2  e7e6
o-o-o b7b5
c4b3  c8b7
h1e1  a8c8
e4e5  d7e5
d4e6  f7e6
e1e5  d6e5
g5f6
! #  col. 19m; Yanofsky-Bolbochan, Stockholm 1962
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
f1e2  e7e5
d4b3  f8e7
o-o   o-o
f2f4  b7b5
a2a3  c8b7
e2f3  b8d7
g2g3  a8c8
d1e1  d7b6
g1h1  b6c4
b3d2  d8d7
d2c4  c8c4
c1d2  d6d5
! #  col. 20p
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
f1e2  e7e5
d4b3  f8e7
o-o   o-o
c1e3  b8d7
a2a4  b7b6
d1d2  c8b7
f2f3  d8c7
f1d1  f8c8
b3c1
! #  col. 21b
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
g2g3  e7e5
d4e2  f8e7
f1g2  o-o
o-o   b7b5
h2h3  c8b7
c3d5  f6d5
e4d5  b8d7
a2a4  d7c5
e2c3  d8d7
a4b5  a6b5
a1a8  f8a8
! #  col. 22
e2e4  c7c5
g1f3  d7d6
d2d4  c5d4
f3d4  g8f6
b1c3  a7a6
SHAR_EOF
true || echo 'restore of gnuchess.book failed'
fi
echo 'End of  part 2'
echo 'File gnuchess.book is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0
exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.