implement detecting castling for moves - 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 d1450a9bf4d9b009733094038420a82a6872a8ae
 (DIR) parent 09a541233ed6f1abf9f4498b37d1281a78f65ce8
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Tue, 19 Dec 2023 00:31:55 +0100
       
       implement detecting castling for moves
       
       Diffstat:
         M fen_to_svg.c                        |      33 ++++++++++++++++++++++++++++++-
       
       1 file changed, 32 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/fen_to_svg.c b/fen_to_svg.c
       @@ -286,7 +286,38 @@ main(int argc, char *argv[])
                                place(piece, x2, y2);
                                s += 2;
        
       -                        /* possible promotion? (queen, knight, bishop) */
       +                        /* castling */
       +                        if (piece == 'K' && y == 7 && y2 == 7 && x == 4) {
       +                                /* white: kingside castling: "e1g1" */
       +                                if (x2 == 6) {
       +                                        place('R', x2 - 1, y2);
       +                                        x2 = 7;
       +                                        y2 = 7;
       +                                        place(0, x2, y2); /* clear rook square */
       +                                } else if (x2 == 2) {
       +                                        /* white: queenside castling: "e1c1" */
       +                                        place('R', x2 + 1, y2);
       +                                        x2 = 0;
       +                                        y2 = 7;
       +                                        place(0, x2, y2);
       +                                }
       +                        } else if (piece == 'k' && y == 0 && y2 == 0 && x == 4) {
       +                                /* black: kingside castling: "e8g8" */
       +                                if (x2 == 6) {
       +                                        place('r', x2 - 1, y2);
       +                                        x2 = 7;
       +                                        y2 = 0;
       +                                        place(0, x2, y2); /* clear rook square */
       +                                } else if (x2 == 2) {
       +                                        /* black: queenside castling: "e8c8" */
       +                                        place('r', x2 + 1, y2);
       +                                        x2 = 0;
       +                                        y2 = 0;
       +                                        place(0, x2, y2); /* clear rook square */
       +                                }
       +                        }
       +
       +                        /* possible promotion: queen, knight, bishop */
                                if (*s == 'q' || *s == 'n' || *s == 'b') {
                                        if (side_to_move == 'w')
                                                piece = toupper(*s);