From: Yann Dirson Date: Mon, 17 Feb 2014 22:01:48 +0000 (+0100) Subject: Merge branch 'maint' into HEAD X-Git-Url: http://winboard.nl/cgi-bin?p=gnushogi.git;a=commitdiff_plain;h=7496586755298a8115a3988a8b52b32d41a4dcb7;hp=cc242a46a66fc6579360f3257f9b7f295a7e7996 Merge branch 'maint' into HEAD Conflicts: NEWS configure.ac gnushogi/cursesdsp.c --- diff --git a/ChangeLog b/ChangeLog index d9ab26a..a54db49 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,312 @@ +2014-02-16 Yann Dirson + + * TODO: Note remaining known bugs + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/commondsp.c: Ensure the player names are refreshed + after a switch (impacts Curses mode). + +2014-02-16 Yann Dirson + + * gnushogi/rawdsp.c: EditBoard: use printf for conciseness + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c: Curses: parametrize hardcoded values + for captures pieces, fixing minishogi display. + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c: Curses: shift board one char to the + right to leave enough space for captures. There was not really enough space to display top player's captures + correctly. + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c, gnushogi/rawdsp.c: EditBoard: display + message on wrong input. + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c, gnushogi/rawdsp.c: EditBoard: fix + error handling in piece setting. On invalid piece name, the code was anyway destroying any piece in + the target location, and the whole logic was diluted. + +2014-02-16 Yann Dirson + + * gnushogi/cursesdsp.c: Curses: move things around in EditBoard to + free the message line. + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c: Curses: fix position of lower clock + for minishogi. The hunt for hardcoded values goes on... + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c: Curses: avoid getting out of 80 + columns when editing board. Now print user-provided chars on line following the long prompt. + +2014-02-16 Yann Dirson + + * NEWS, gnushogi/cursesdsp.c: Curses: fix inverted column numbers + display for minishogi. + +2014-02-16 Yann Dirson + + * gnushogi/cursesdsp.c: Curses: use a macro for left margin of + display + +2014-02-15 Yann Dirson + + * gnushogi/cursesdsp.c, gnushogi/rawdsp.c: EditBoard: simplify loop + logic by ending iterations early. + +2014-02-15 Yann Dirson + + * gnushogi/cursesdsp.c, gnushogi/rawdsp.c: EditBoard: restructure + loop for consistency. + +2014-02-16 Yann Dirson + + * gnushogi/cursesdsp.c: EditBoard: resync Curses implementation with + the Raw one. + +2014-02-15 Yann Dirson + + * NEWS, gnushogi/commondsp.c, gnushogi/cursesdsp.c, + gnushogi/gnushogi.h, gnushogi/rawdsp.c, gnushogi/util.c: Fix use of + (COL|ROW)_NAME macros to compute numbers from names. The formula is reversible for the somewhat-standard default position + notation, but that does not mean we should write silly things. As a + proof, if that was needed, the formula necessary to support the + xboard protocol is not reversible. + +2014-02-05 Yann Dirson + + * doc/gnushogi.texi: Remove XShogi doc from the manual, and add + information about available GUIs. + +2014-02-05 Yann Dirson + + * Makefile.in, NEWS, configure.ac, doc/xshogi.6, xshogi/BUGS, + xshogi/Makefile.in, xshogi/NEWS, xshogi/README, + xshogi/README.xboard, xshogi/REMOTEHOSTS, xshogi/bitmaps.h, + xshogi/eastern_bitmaps/bigblank.xbm, + xshogi/eastern_bitmaps/bigblankR.xbm, + xshogi/eastern_bitmaps/biglight.xbm, + xshogi/eastern_bitmaps/bigsolid.xbm, + xshogi/eastern_bitmaps/bigsolidR.xbm, + xshogi/eastern_bitmaps/bigsolidR_l.xbm, + xshogi/eastern_bitmaps/bigsolidR_m.xbm, + xshogi/eastern_bitmaps/bigsolid_l.xbm, + xshogi/eastern_bitmaps/bigsolid_m.xbm, + xshogi/eastern_bitmaps/bishop.xbm, + xshogi/eastern_bitmaps/bishopP.top.xbm, + xshogi/eastern_bitmaps/bishopP.xbm, + xshogi/eastern_bitmaps/bishopPR.top.xbm, + xshogi/eastern_bitmaps/bishopPR.xbm, + xshogi/eastern_bitmaps/bishopPR_l.top.xbm, + xshogi/eastern_bitmaps/bishopPR_l.xbm, + xshogi/eastern_bitmaps/bishopPR_m.top.xbm, + xshogi/eastern_bitmaps/bishopPR_m.xbm, + xshogi/eastern_bitmaps/bishopP_l.top.xbm, + xshogi/eastern_bitmaps/bishopP_l.xbm, + xshogi/eastern_bitmaps/bishopP_m.top.xbm, + xshogi/eastern_bitmaps/bishopP_m.xbm, + xshogi/eastern_bitmaps/bishopR.xbm, + xshogi/eastern_bitmaps/bishopR_l.xbm, + xshogi/eastern_bitmaps/bishopR_m.xbm, + xshogi/eastern_bitmaps/bishop_l.xbm, + xshogi/eastern_bitmaps/bishop_m.xbm, + xshogi/eastern_bitmaps/gold.xbm, xshogi/eastern_bitmaps/goldR.xbm, + xshogi/eastern_bitmaps/goldR_l.xbm, + xshogi/eastern_bitmaps/goldR_m.xbm, + xshogi/eastern_bitmaps/gold_l.xbm, + xshogi/eastern_bitmaps/gold_m.xbm, xshogi/eastern_bitmaps/icon.xbm, + xshogi/eastern_bitmaps/king.xbm, xshogi/eastern_bitmaps/kingR.xbm, + xshogi/eastern_bitmaps/kingR_l.xbm, + xshogi/eastern_bitmaps/kingR_m.xbm, + xshogi/eastern_bitmaps/king_l.xbm, + xshogi/eastern_bitmaps/king_m.xbm, + xshogi/eastern_bitmaps/knight.xbm, + xshogi/eastern_bitmaps/knightP.xbm, + xshogi/eastern_bitmaps/knightPR.xbm, + xshogi/eastern_bitmaps/knightPR_l.xbm, + xshogi/eastern_bitmaps/knightPR_m.xbm, + xshogi/eastern_bitmaps/knightP_l.xbm, + xshogi/eastern_bitmaps/knightP_m.xbm, + xshogi/eastern_bitmaps/knightR.xbm, + xshogi/eastern_bitmaps/knightR_l.xbm, + xshogi/eastern_bitmaps/knightR_m.xbm, + xshogi/eastern_bitmaps/knight_l.xbm, + xshogi/eastern_bitmaps/knight_m.xbm, + xshogi/eastern_bitmaps/lance.xbm, + xshogi/eastern_bitmaps/lanceP.xbm, + xshogi/eastern_bitmaps/lancePR.xbm, + xshogi/eastern_bitmaps/lancePR_l.xbm, + xshogi/eastern_bitmaps/lancePR_m.xbm, + xshogi/eastern_bitmaps/lanceP_l.xbm, + xshogi/eastern_bitmaps/lanceP_m.xbm, + xshogi/eastern_bitmaps/lanceR.xbm, + xshogi/eastern_bitmaps/lanceR_l.xbm, + xshogi/eastern_bitmaps/lanceR_m.xbm, + xshogi/eastern_bitmaps/lance_l.xbm, + xshogi/eastern_bitmaps/lance_m.xbm, + xshogi/eastern_bitmaps/none.xbm, xshogi/eastern_bitmaps/none_l.xbm, + xshogi/eastern_bitmaps/none_m.xbm, xshogi/eastern_bitmaps/pawn.xbm, + xshogi/eastern_bitmaps/pawnP.xbm, + xshogi/eastern_bitmaps/pawnPR.xbm, + xshogi/eastern_bitmaps/pawnPR_l.xbm, + xshogi/eastern_bitmaps/pawnPR_m.xbm, + xshogi/eastern_bitmaps/pawnP_l.xbm, + xshogi/eastern_bitmaps/pawnP_m.xbm, + xshogi/eastern_bitmaps/pawnR.xbm, + xshogi/eastern_bitmaps/pawnR_l.xbm, + xshogi/eastern_bitmaps/pawnR_m.xbm, + xshogi/eastern_bitmaps/pawn_l.xbm, + xshogi/eastern_bitmaps/pawn_m.xbm, xshogi/eastern_bitmaps/rook.xbm, + xshogi/eastern_bitmaps/rookP.top.xbm, + xshogi/eastern_bitmaps/rookP.xbm, + xshogi/eastern_bitmaps/rookPR.top.xbm, + xshogi/eastern_bitmaps/rookPR.xbm, + xshogi/eastern_bitmaps/rookPR_l.top.xbm, + xshogi/eastern_bitmaps/rookPR_l.xbm, + xshogi/eastern_bitmaps/rookPR_m.top.xbm, + xshogi/eastern_bitmaps/rookPR_m.xbm, + xshogi/eastern_bitmaps/rookP_l.top.xbm, + xshogi/eastern_bitmaps/rookP_l.xbm, + xshogi/eastern_bitmaps/rookP_m.top.xbm, + xshogi/eastern_bitmaps/rookP_m.xbm, + xshogi/eastern_bitmaps/rookR.xbm, + xshogi/eastern_bitmaps/rookR_l.xbm, + xshogi/eastern_bitmaps/rookR_m.xbm, + xshogi/eastern_bitmaps/rook_l.xbm, + xshogi/eastern_bitmaps/rook_m.xbm, + xshogi/eastern_bitmaps/silver.xbm, + xshogi/eastern_bitmaps/silverP.xbm, + xshogi/eastern_bitmaps/silverPR.xbm, + xshogi/eastern_bitmaps/silverPR_l.xbm, + xshogi/eastern_bitmaps/silverPR_m.xbm, + xshogi/eastern_bitmaps/silverP_l.xbm, + xshogi/eastern_bitmaps/silverP_m.xbm, + xshogi/eastern_bitmaps/silverR.xbm, + xshogi/eastern_bitmaps/silverR_l.xbm, + xshogi/eastern_bitmaps/silverR_m.xbm, + xshogi/eastern_bitmaps/silver_l.xbm, + xshogi/eastern_bitmaps/silver_m.xbm, + xshogi/eastern_bitmaps/smallblank.xbm, + xshogi/eastern_bitmaps/smallblankR.xbm, + xshogi/eastern_bitmaps/smalllight.xbm, + xshogi/eastern_bitmaps/smallsolid.xbm, + xshogi/eastern_bitmaps/smallsolidR.xbm, + xshogi/eastern_bitmaps/smallsolidR_l.xbm, + xshogi/eastern_bitmaps/smallsolidR_m.xbm, + xshogi/eastern_bitmaps/smallsolid_l.xbm, + xshogi/eastern_bitmaps/smallsolid_m.xbm, + xshogi/new_eastern_bitmaps/bigsolidR_l.xbm, + xshogi/new_eastern_bitmaps/bigsolid_l.xbm, + xshogi/new_eastern_bitmaps/bishopPR_l.xbm, + xshogi/new_eastern_bitmaps/bishopP_l.xbm, + xshogi/new_eastern_bitmaps/bishopR_l.xbm, + xshogi/new_eastern_bitmaps/bishop_l.xbm, + xshogi/new_eastern_bitmaps/goldR_l.xbm, + xshogi/new_eastern_bitmaps/gold_l.xbm, + xshogi/new_eastern_bitmaps/kingR_l.xbm, + xshogi/new_eastern_bitmaps/king_l.xbm, + xshogi/new_eastern_bitmaps/knightPR_l.xbm, + xshogi/new_eastern_bitmaps/knightP_l.xbm, + xshogi/new_eastern_bitmaps/knightR_l.xbm, + xshogi/new_eastern_bitmaps/knight_l.xbm, + xshogi/new_eastern_bitmaps/lancePR_l.xbm, + xshogi/new_eastern_bitmaps/lanceP_l.xbm, + xshogi/new_eastern_bitmaps/lanceR_l.xbm, + xshogi/new_eastern_bitmaps/lance_l.xbm, + xshogi/new_eastern_bitmaps/none_l.xbm, + xshogi/new_eastern_bitmaps/pawnPR_l.xbm, + xshogi/new_eastern_bitmaps/pawnP_l.xbm, + xshogi/new_eastern_bitmaps/pawnR_l.xbm, + xshogi/new_eastern_bitmaps/pawn_l.xbm, + xshogi/new_eastern_bitmaps/rookPR_l.xbm, + xshogi/new_eastern_bitmaps/rookP_l.xbm, + xshogi/new_eastern_bitmaps/rookR_l.xbm, + xshogi/new_eastern_bitmaps/rook_l.xbm, + xshogi/new_eastern_bitmaps/silverPR_l.xbm, + xshogi/new_eastern_bitmaps/silverP_l.xbm, + xshogi/new_eastern_bitmaps/silverR_l.xbm, + xshogi/new_eastern_bitmaps/silver_l.xbm, + xshogi/new_eastern_bitmaps/smallsolidR_l.xbm, + xshogi/new_eastern_bitmaps/smallsolid_l.xbm, + xshogi/new_western_bitmaps/bishopPRW.xbm, + xshogi/new_western_bitmaps/bishopPW.xbm, + xshogi/new_western_bitmaps/bishopRW.xbm, + xshogi/new_western_bitmaps/bishopW.xbm, + xshogi/new_western_bitmaps/goldRW.xbm, + xshogi/new_western_bitmaps/goldW.xbm, + xshogi/new_western_bitmaps/kingRW.xbm, + xshogi/new_western_bitmaps/kingW.xbm, + xshogi/new_western_bitmaps/knightPRW.xbm, + xshogi/new_western_bitmaps/knightPW.xbm, + xshogi/new_western_bitmaps/knightRW.xbm, + xshogi/new_western_bitmaps/knightW.xbm, + xshogi/new_western_bitmaps/lancePRW.xbm, + xshogi/new_western_bitmaps/lancePW.xbm, + xshogi/new_western_bitmaps/lanceRW.xbm, + xshogi/new_western_bitmaps/lanceW.xbm, + xshogi/new_western_bitmaps/noneW.xbm, + xshogi/new_western_bitmaps/pawnPRW.xbm, + xshogi/new_western_bitmaps/pawnPW.xbm, + xshogi/new_western_bitmaps/pawnRW.xbm, + xshogi/new_western_bitmaps/pawnW.xbm, + xshogi/new_western_bitmaps/rookPRW.xbm, + xshogi/new_western_bitmaps/rookPW.xbm, + xshogi/new_western_bitmaps/rookRW.xbm, + xshogi/new_western_bitmaps/rookW.xbm, + xshogi/new_western_bitmaps/silverPRW.xbm, + xshogi/new_western_bitmaps/silverPW.xbm, + xshogi/new_western_bitmaps/silverRW.xbm, + xshogi/new_western_bitmaps/silverW.xbm, xshogi/parser.y, + xshogi/scanner.l, xshogi/sysdeps.h, + xshogi/western_bitmaps/bishopPRW.xbm, + xshogi/western_bitmaps/bishopPW.xbm, + xshogi/western_bitmaps/bishopRW.xbm, + xshogi/western_bitmaps/bishopW.xbm, + xshogi/western_bitmaps/goldRW.xbm, + xshogi/western_bitmaps/goldW.xbm, + xshogi/western_bitmaps/kingRW.xbm, + xshogi/western_bitmaps/kingW.xbm, + xshogi/western_bitmaps/knightPRW.xbm, + xshogi/western_bitmaps/knightPW.xbm, + xshogi/western_bitmaps/knightRW.xbm, + xshogi/western_bitmaps/knightW.xbm, + xshogi/western_bitmaps/lancePRW.xbm, + xshogi/western_bitmaps/lancePW.xbm, + xshogi/western_bitmaps/lanceRW.xbm, + xshogi/western_bitmaps/lanceW.xbm, + xshogi/western_bitmaps/noneW.xbm, + xshogi/western_bitmaps/pawnPRW.xbm, + xshogi/western_bitmaps/pawnPW.xbm, + xshogi/western_bitmaps/pawnRW.xbm, + xshogi/western_bitmaps/pawnW.xbm, + xshogi/western_bitmaps/rookPRW.xbm, + xshogi/western_bitmaps/rookPW.xbm, + xshogi/western_bitmaps/rookRW.xbm, + xshogi/western_bitmaps/rookW.xbm, + xshogi/western_bitmaps/silverPRW.xbm, + xshogi/western_bitmaps/silverPW.xbm, + xshogi/western_bitmaps/silverRW.xbm, + xshogi/western_bitmaps/silverW.xbm, xshogi/xshogi.c, + xshogi/xshogi.h, xshogi/xshogifn.h: Remove XShogi from the source + tree + +2014-01-16 Yann Dirson + + * configure.ac: Bump version to "1.4.1+". + +2014-01-14 Yann Dirson + + * ChangeLog, NEWS, README, configure.ac: Prepare v1.4.1 + 2014-01-14 Yann Dirson * AUTHORS: Update maintainership info in AUTHORS. diff --git a/NEWS b/NEWS index b32a839..05e43f8 100644 --- a/NEWS +++ b/NEWS @@ -8,10 +8,19 @@ Changes in version 1.5.0 (unreleased): 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. +* Fixes for edit mode: + - fixed clobbering of board on invalid input + - display a message on wrong input +* Fixed Curses mode display: + - reversed column number for MiniShogi + - clock and captures position for MiniShogi + - refresh display after "switch" to get player names updated + - layout fixes, notably when using only 80 columns +* Minor code cleanups. Changes in version 1.4.1 (01/2014): diff --git a/README b/README index 918b108..a50c2dc 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ -GNU Shogi, release 1.4.1 +GNU Shogi, release 1.4.2 ------------------------ -This is release 1.4.1 of GNU shogi, a program which plays shogi +This is release 1.4.2 of GNU shogi, a program which plays shogi (Japanese chess), as well as xshogi, the graphical interface to GNU shogi. diff --git a/README.maint b/README.maint index 7d69bb6..8d2e600 100644 --- a/README.maint +++ b/README.maint @@ -10,3 +10,11 @@ Profiling --------- Build with "-g -pg -fprofile-arcs -ftest-coverage" + +Announcing new releases +----------------------- + +* gnushogi-devel@gnu.org +* info-gnu@gnu.org +* https://savannah.gnu.org/news/submit.php?group=gnushogi +* https://freecode.com/projects/gnu-shogi diff --git a/TODO b/TODO index 054e46a..8a41e7b 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,10 @@ +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: - integrate H.G.Muller's work on the xboard protocol on top of new driver-like diff --git a/configure.ac b/configure.ac index 60dac7a..bdfde4e 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ 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) diff --git a/gnushogi/commondsp.c b/gnushogi/commondsp.c index 90a3ca0..e5efc17 100644 --- a/gnushogi/commondsp.c +++ b/gnushogi/commondsp.c @@ -384,17 +384,17 @@ parser(char *f, short *fpiece) if (f[1] == '*' || f[1] == '\'') { - c2 = COL_NAME(f[2]); - r2 = ROW_NAME(f[3]); + c2 = COL_NUM(f[2]); + r2 = ROW_NUM(f[3]); return ((NO_SQUARES + *fpiece) << 8) | locn(r2, c2); } else { - c1 = COL_NAME(f[1]); - r1 = ROW_NAME(f[2]); - c2 = COL_NAME(f[3]); - r2 = ROW_NAME(f[4]); + c1 = COL_NUM(f[1]); + r1 = ROW_NUM(f[2]); + c2 = COL_NUM(f[3]); + r2 = ROW_NUM(f[4]); p = (f[5] == '+') ? 0x80 : 0; return (locn(r1, c1) << 8) | locn(r2, c2) | p; @@ -1755,6 +1755,7 @@ InputCommand(char *command) flag.force = false; Sdepth = 0; ok = true; + dsp->UpdateDisplay(0, 0, 1, 0); } else if (strcmp(s, "black") == 0) { diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index bf37999..2ee21ae 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -62,6 +62,7 @@ #define FLUSH_SCANW fflush(stdout), scanw +#define MARGIN (5) #define TAB (58) #define VIR_C(s) ((flag.reverse) ? (NO_COLS - 1 - column(s)) : column(s)) @@ -107,6 +108,13 @@ gotoXY(short x, short y) static void +ClearMessage(void) +{ + gotoXY(TAB, 6); + ClearEoln(); +} + +static void Curses_ShowCurrentMove(short pnt, short f, short t) { algbr(f, t, false); @@ -442,8 +450,8 @@ Curses_help(void) } -static const short x0[2] = { 54, 2 }; -static const short y0[2] = { 20, 4 }; +static const short x0[2] = { MARGIN + 5*NO_COLS + 4, 2 }; +static const short y0[2] = { 4 + 2 * (NO_ROWS - 1), 4 }; /* @@ -455,7 +463,7 @@ static const short y0[2] = { 20, 4 }; static void Curses_EditBoard(void) { - short a, c, sq, i; + short a, c, sq, i, found; short r = 0; char s[80]; @@ -463,23 +471,28 @@ Curses_EditBoard(void) Book = BOOKFAIL; Curses_ClearScreen(); Curses_UpdateDisplay(0, 0, 1, 0); - gotoXY(TAB, 3); + gotoXY(TAB, 11); printw(". Exit to main\n"); - gotoXY(TAB, 4); + gotoXY(TAB, 12); printw("# Clear board\n"); - gotoXY(TAB, 5); + gotoXY(TAB, 13); printw("c Change sides\n"); gotoXY(TAB, 7); printw("Enter piece & location: "); a = black; - do + while(1) { - gotoXY(TAB, 6); + gotoXY(TAB, 4); printw("Editing: %s", ColorStr[a]); - gotoXY(TAB + 24, 7); + gotoXY(TAB + 2, 8); ClearEoln(); FLUSH_SCANW("%s", s); + found = 0; + ClearMessage(); + + if (s[0] == '.') + break; if (s[0] == '#') { @@ -492,50 +505,61 @@ Curses_EditBoard(void) ClearCaptured(); UpdateCatched(); + continue; } - if (s[0] == 'c') + if (s[0] == 'c') { a = otherside[a]; + continue; + } if (s[1] == '*') { 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) + 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)) { + 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) + 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); @@ -706,9 +730,9 @@ Curses_UpdateClocks(void) s = 0; if (player == black) - gotoXY(20, (flag.reverse) ? 2 : 23); + gotoXY(20, (flag.reverse) ? 2 : (5 + 2*NO_ROWS)); else - gotoXY(20, (flag.reverse) ? 23 : 2); + gotoXY(20, (flag.reverse) ? (5 + 2*NO_ROWS) : 2); /* printw("%d:%02d %ld ", m, s, dt); */ printw("%d:%02d ", m, s); @@ -753,7 +777,7 @@ DrawPiece(short sq) y = pxx[(int)piece]; } - gotoXY(8 + 5 * VIR_C(sq), 4 + 2 * ((NO_ROWS - 1) - VIR_R(sq))); + gotoXY(MARGIN + 3 + 5 * VIR_C(sq), 4 + 2 * ((NO_ROWS - 1) - VIR_R(sq))); printw("%c%c%c%c", l, p, y, r); } @@ -816,42 +840,41 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) ShowPlayers(); i = 2; - gotoXY(3, ++i); + gotoXY(MARGIN, ++i); - printw(" +"); + printw(" +"); for (j=0; j= NO_COLS) || (r < 0) || (r >= NO_ROWS)) { + printf("# Out-of-board position '%c%c'\n", s[1], s[2]); + continue; } - if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS)) - { - sq = locn(r, c); - color[sq] = a; - board[sq] = no_piece; + sq = locn(r, c); - for (i = no_piece; i <= king; i++) + for (i = no_piece; i <= king; i++) + { + if ((s[0] == pxx[i]) || (s[0] == qxx[i])) { - if ((s[0] == pxx[i]) || (s[0] == qxx[i])) - { - if (s[3] == '+') - board[sq] = promoted[i]; - else - board[sq] = i; + color[sq] = a; + if (s[3] == '+') + board[sq] = promoted[i]; + else + board[sq] = i; - found = 1; - break; - } + found = 1; + break; } - - if (found == 0) - color[sq] = neutral; } + + if (!found) + printf("# Invalid piece type '%c'\n", s[0]); } - while (s[0] != '.'); for (sq = 0; sq < NO_SQUARES; sq++) Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0); diff --git a/gnushogi/util.c b/gnushogi/util.c index 927f3d8..96c702f 100644 --- a/gnushogi/util.c +++ b/gnushogi/util.c @@ -85,10 +85,10 @@ parse(FILE * fd, unsigned short *mv, char *opening) return 0; } - c1 = COL_NAME(s[0]); - r1 = ROW_NAME(s[1]); - c2 = COL_NAME(s[2]); - r2 = ROW_NAME(s[3]); + c1 = COL_NUM(s[0]); + r1 = ROW_NUM(s[1]); + c2 = COL_NUM(s[2]); + r2 = ROW_NUM(s[3]); *mv = (locn(r1, c1) << 8) | locn(r2, c2); if (c == '?')