* ----------------------------------------------------------------------
* Copyright (c) 1993, 1994, 1995 Matthias Mutz
* Copyright (c) 1999 Michael Vanier and the Free Software Foundation
+ * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
*
* GNU SHOGI is based on GNU CHESS
*
*
* GNU Shogi is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 1, or (at your option) any
- * later version.
+ * Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
*
* GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* for more details.
*
* You should have received a copy of the GNU General Public License along
- * with GNU Shogi; see the file COPYING. If not, write to the Free
- * Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * with GNU Shogi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
* ----------------------------------------------------------------------
*
*/
* Generate move strings in different formats.
*/
-void
+static void
Balgbr(short f, short t, short flag)
{
short promoted = false;
short piece = flag & pmask;
bmvstr[0][0] = pxx[piece];
bmvstr[0][1] = '*';
- bmvstr[0][2] = cxx[column(t)];
- bmvstr[0][3] = rxx[row(t)];
+ bmvstr[0][2] = COL_NAME(column(t));
+ bmvstr[0][3] = ROW_NAME(row(t));
bmvstr[0][4] = bmvstr[2][0] = '\0';
strcpy(bmvstr[1], bmvstr[0]);
bmvstr[1][1] = '\'';
/* algebraic notation */
/* bmvstr[0]: 7g7f bmvstr[1]:
* (+)P7g7f(+) bmvstr[2]: (+)P7f(+) */
- bmvstr[0][0] = cxx[column(f)];
- bmvstr[0][1] = rxx[row(f)];
- bmvstr[0][2] = cxx[column(t)];
- bmvstr[0][3] = rxx[row(t)];
+ bmvstr[0][0] = COL_NAME(column(f));
+ bmvstr[0][1] = ROW_NAME(row(f));
+ bmvstr[0][2] = COL_NAME(column(t));
+ bmvstr[0][3] = ROW_NAME(row(t));
bmvstr[0][4] = '\0';
if (promoted)
}
-
-
#ifndef QUIETBOOKGEN
-void
+static void
bkdisplay(char *s, int cnt, int moveno)
{
static short pnt;
}
#endif /* SEMIQUIETBOOKGEN */
}
-
#endif /* QUIETBOOKGEN */
-
/*
* BVerifyMove(s, mv, moveno)
*
* opponent. If a match is found, make the move on the board.
*/
-int
+static int
BVerifyMove(char *s, unsigned short *mv, int moveno)
{
static short pnt, tempb, tempc, tempsf, tempst, cnt;
UnmakeMove(opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
/* Illegal move in check */
#if !defined QUIETBOOKGEN
- /* 077: "Illegal move (in check) %s" */
- printf(CP[77]);
- printf("\n");
+ puts("Illegal move (in check): %s");
bkdisplay(s, cnt, moveno);
#endif
return false;
/* Illegal move */
#if !defined QUIETBOOKGEN
- /* 075: "Illegal move (no match)%s\n" */
- printf(CP[75], s);
+ printf("Illegal move (no match): %s\n", s);
bkdisplay(s, cnt, moveno);
#endif
return false;
}
-
-
/*
* RESET()
*
*
*/
-void
+static void
RESET(void)
{
short l;
- flag.illegal = flag.mate = flag.post = flag.quit
+ flag.illegal = flag.mate = flag.quit
= flag.reverse = flag.bothsides = flag.onemove = flag.force
= false;
+ flag.post &= xboard; /* [HGM] xboard: do not clear in XBoard mode */
+
flag.material = flag.coords = flag.hash = flag.easy
= flag.beep = flag.rcptr
= true;
}
-
-static
-int
-Vparse (FILE * fd, USHORT *mv, USHORT *flags, USHORT side, int moveno)
+static int
+Vparse (FILE * fd, USHORT *mv, USHORT *flags, int moveno)
{
int c, i;
char s[255];
#define WriteAdmin() \
{ \
- lseek(gfd, 0, 0); \
+ lseek(gfd, 0, SEEK_SET); \
write(gfd, (char *)&ADMIN, sizeof_gdxadmin); \
}
{ \
if (mustwrite ) \
{ \
- lseek(gfd, currentoffset, 0); \
+ lseek(gfd, currentoffset, SEEK_SET); \
write(gfd, (char *)&DATA, sizeof_gdxdata); \
mustwrite = false; \
} \
static int ReadAdmin(void)
{
- lseek(gfd, 0, 0);
+ lseek(gfd, 0, SEEK_SET);
return (sizeof_gdxadmin == read(gfd, (char *)&ADMIN, sizeof_gdxadmin));
}
static int ReadData(struct gdxdata *DATA)
{
- lseek(gfd, currentoffset, 0);
+ lseek(gfd, currentoffset, SEEK_SET);
return (sizeof_gdxdata == read(gfd, (char *)DATA, sizeof_gdxdata));
}
{
short i;
int mustwrite = false, first;
- unsigned short xside, side;
+ unsigned short side;
short c;
USHORT mv, flags;
unsigned int x;
{
/* setvbuf(fd, buffr, _IOFBF, 2048); */
side = black;
- xside = white;
hashbd = hashkey = 0;
i = 0;
- while ((c = Vparse(fd, &mv, &flags, side, i)) >= 0)
+ while ((c = Vparse(fd, &mv, &flags, i)) >= 0)
{
if (c == 1)
{
computer = opponent;
opponent = computer ^ 1;
- xside = side;
side = side ^ 1;
}
else if (i > 0)
RESET();
i = 0;
side = black;
- xside = white;
-
}
}
}
- /* 213: "Book used %d(%d)." */
- sprintf(msg, CP[213], B.bookcount, B.booksize);
- ShowMessage(msg);
+ sprintf(msg, "Book used %lu(%lu).", B.bookcount, B.booksize);
+ dsp->ShowMessage(msg);
}
/* Set everything back to start the game. */
/* Now get ready to play .*/
if (!B.bookcount)
{
- /* 212: "Can't find book." */
- ShowMessage(CP[212]);
+ dsp->ShowMessage("Can't find book.");
Book = 0;
}
}
-
/*
- * OpeningBook(hint, side)
+ * OpeningBook(hint)
*
* Go through each of the opening lines of play and check for a match with
* the current game listing. If a match occurs, generate a random
*/
int
-OpeningBook(unsigned short *hint, short side)
+OpeningBook(unsigned short *hint)
{
unsigned short r, m;
int possibles = TrPnt[2] - TrPnt[1];
Book--;
return false;
}
-
-
-