add option to not highlight the last played move or checks or checkmates - chess-puzzles - chess puzzle book generator
 (HTM) git clone git://git.codemadness.org/chess-puzzles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b157d49005e4d9fd2e5e979b72a1e222e21fdec3
 (DIR) parent 52d9636da4a82de476f21b1c61de8b7570f96c92
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Thu, 29 Feb 2024 19:02:30 +0100
       
       add option to not highlight the last played move or checks or checkmates
       
       This is better for puzzles/training. Sometimes the last played move gives a
       hint of a blunder etc.
       
       This adds an extra challenge to analyze more properties of the position.
       
       Diffstat:
         M fen.1                               |       8 ++++++--
         M fen.c                               |      20 +++++++++++++-------
       
       2 files changed, 19 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/fen.1 b/fen.1
       @@ -1,4 +1,4 @@
       -.Dd January 14, 2024
       +.Dd February 29, 2024
        .Dt FEN 1
        .Os
        .Sh NAME
       @@ -6,7 +6,7 @@
        .Nd parses chess FEN, plays moves and writes output
        .Sh SYNOPSIS
        .Nm
       -.Op Fl cCfF
       +.Op Fl cCfFhH
        .Op Fl l
        .Op Fl m mapping
        .Op Fl o Ar ascii | fen | pgn | speak | svg | tty
       @@ -34,6 +34,10 @@ Disable board coordinates.
        Flip the board, default is off.
        .It Fl F
        Do not flip the board.
       +.It Fl h
       +Highlight the last played move and checks or checkmates.
       +.It Fl H
       +Do not highlight the last played move and checks or checkmates.
        .It Fl l
        For PGN and speak mode only output the last move.
        For PGN this will not prefix the move number.
 (DIR) diff --git a/fen.c b/fen.c
       @@ -100,6 +100,7 @@ struct board {
        
                int flipboard;           /* flip board ? default: 0 */
                int showcoords;          /* board coordinates? default: 1 */
       +        int highlights;          /* highlight moves and checks? default: 1 */
                struct theme *theme;     /* board theme */
        };
        
       @@ -129,6 +130,7 @@ board_init(struct board *b)
                b->movenumber = 1;
                b->flipboard = 0;
                b->showcoords = 1;
       +        b->highlights = 1;
                b->theme = &themes[0]; /* use first theme as default */
        }
        
       @@ -1388,13 +1390,15 @@ board_playmoves(struct board *b, const char *moves)
                }
        
                /* highlight last move */
       -        highlightmove(b, x, y);
       -        highlightmove(b, x2, y2);
       -
       -        /* highlight king in check or mate */
       -        if (isincheck(b, b->side_to_move) &&
       -            findking(b, b->side_to_move, &x, &y))
       -                highlightcheck(b, x, y);
       +        if (b->highlights) {
       +                highlightmove(b, x, y);
       +                highlightmove(b, x2, y2);
       +
       +                /* highlight king in check or mate */
       +                if (isincheck(b, b->side_to_move) &&
       +                    findking(b, b->side_to_move, &x, &y))
       +                        highlightcheck(b, x, y);
       +        }
        }
        
        void
       @@ -1600,6 +1604,8 @@ main(int argc, char *argv[])
                                case 'd': dutchmode = 1; break; /* top secret dutch mode for "speak" */
                                case 'f': board.flipboard = 1; break;
                                case 'F': board.flipboard = 0; break;
       +                        case 'h': board.highlights = 1; break;
       +                        case 'H': board.highlights = 0; break;
                                case 'l': onlylastmove = 1; silent = 1; break;
                                case 'm': /* remap PGN */
                                        if (i + 1 >= argc)