GNU shogi news
--------------
+Changes in version 1.5.0 (unreleased):
+
+* Build system switched from pure autoconf to automake
+* Support for cross-compilation using standard "./configure --host=...",
+ including building windows binaries (both 32bit and 64bit) using
+ the gcc-mingw toolchain
+
- Changes in version 1.4.2 (unreleased):
+ Changes in version 1.4.2 (02/2014):
* XShogi is no longer included in the GNU Shogi source, it is
available as a separate source archive.
+ Known bugs:
+
+ - some positions show problem in the evaluation algorithm
+ - minishogi repetition rule, different from standard shogi, is
+ not implemented
+ - with no piece on board, computer generates invalid move
+
Target for v1.5:
-- refactor dspwrappers into a driver-like structure
-- integrate H.G.Muller's work on the xboard protocol on top of that
+- integrate H.G.Muller's work on the xboard protocol on top of new driver-like
+ display handling
- deprecate xshogi in favor of xboard
+- use ~/.gnushogi for binary book and hash file
+
- make minishogi a run-time option rather than a compile-time one,
using the "variant" mechanism of the xboard protocol
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
- AC_INIT([gnushogi],[1.4.1+],[https://savannah.gnu.org/bugs/?group=gnushogi])
+ AC_INIT([gnushogi],[1.4.2+],[https://savannah.gnu.org/bugs/?group=gnushogi])
+AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([gnushogi/gnushogi.h])
AC_CONFIG_HEADER(config.h)
flag.force = false;
Sdepth = 0;
ok = true;
- UpdateDisplay(0, 0, 1, 0);
++ dsp->UpdateDisplay(0, 0, 1, 0);
}
else if (strcmp(s, "black") == 0)
{
#define FLUSH_SCANW fflush(stdout), scanw
-int mycnt1, mycnt2;
-
+ #define MARGIN (5)
#define TAB (58)
#define VIR_C(s) ((flag.reverse) ? (NO_COLS - 1 - column(s)) : column(s))
static void
+ ClearMessage(void)
+ {
+ gotoXY(TAB, 6);
+ ClearEoln();
+ }
+
-
-void
++static void
Curses_ShowCurrentMove(short pnt, short f, short t)
{
algbr(f, t, false);
* P* will put a pawn to the captured pieces.
*/
-void
+static void
Curses_EditBoard(void)
{
- short a, c, sq, i;
+ short a, c, sq, i, found;
short r = 0;
char s[80];
for (i = NO_PIECES; i > no_piece; i--)
{
if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
+ {
+ Captured[a][unpromoted[i]]++;
+ UpdateCatched();
+ found = 1;
break;
+ }
}
-
- Captured[a][unpromoted[i]]++;
- UpdateCatched();
- c = -1;
+ if (!found)
- AlwaysShowMessage("Invalid piece type '%c'", s[0]);
++ dsp->AlwaysShowMessage("Invalid piece type '%c'", s[0]);
+ continue;
}
- else
- {
- c = COL_NAME(s[1]);
- r = ROW_NAME(s[2]);
+
+ c = COL_NUM(s[1]);
+ r = ROW_NUM(s[2]);
+
+ if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) {
- AlwaysShowMessage("Out-of-board '%c%c'", s[1], s[2]);
++ dsp->AlwaysShowMessage("Out-of-board '%c%c'", s[1], s[2]);
+ continue;
}
- if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS))
- {
- sq = locn(r, c);
+ sq = locn(r, c);
- for (i = NO_PIECES; i > no_piece; i--)
+ for (i = NO_PIECES; i > no_piece; i--)
+ {
+ if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
{
- if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
- break;
+ color[sq] = a;
+ if (s[3] == '+')
+ board[sq] = promoted[i];
+ else
+ board[sq] = unpromoted[i];
+
+ found = 1;
+ break;
}
+ }
- if (s[3] == '+')
- i = promoted[i];
- else
- i = unpromoted[i];
+ if (!found)
- AlwaysShowMessage("Invalid piece type '%c'", s[0]);
++ dsp->AlwaysShowMessage("Invalid piece type '%c'", s[0]);
- board[sq] = i;
- color[sq] = ((board[sq] == no_piece) ? neutral : a);
- DrawPiece(sq);
- }
+ DrawPiece(sq);
}
- while (s[0] != '.');
for (sq = 0; sq < NO_SQUARES; sq++)
Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);