src/chess/game-info.h

Fri, 17 Apr 2026 12:00:18 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 17 Apr 2026 12:00:18 +0200
changeset 102
463c648e6a9b
parent 98
9cb41383540f
permissions
-rw-r--r--

change return type of write_pgn to void

The return value was always unused and zero.
Then intention apparently was to return the number
of written bytes, but that never happened.

78
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2016 Mike Becker. All rights reserved.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 *
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 */
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #ifndef GAME_INFO_H
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #define GAME_INFO_H
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 #include <stdint.h>
80
b980a7192b5a replace _Bool with bool from C23 and/or stdbool.h
Mike Becker <universe@uap-core.de>
parents: 78
diff changeset
34 #include <stdbool.h>
78
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 #define WHITE 0x10
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 #define BLACK 0x20
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 #define opponent_color(color) ((color)==WHITE?BLACK:WHITE)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 #define PIECE_MASK 0x0F
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 #define COLOR_MASK 0x30
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 #define PAWN 0x01
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 #define ROOK 0x02
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 #define KNIGHT 0x03
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 #define BISHOP 0x04
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 #define QUEEN 0x05
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48 #define KING 0x06
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 #define WPAWN (WHITE|PAWN)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 #define WROOK (WHITE|ROOK)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 #define WKNIGHT (WHITE|KNIGHT)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 #define WBISHOP (WHITE|BISHOP)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 #define WQUEEN (WHITE|QUEEN)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 #define WKING (WHITE|KING)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 #define BPAWN (BLACK|PAWN)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 #define BROOK (BLACK|ROOK)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 #define BKNIGHT (BLACK|KNIGHT)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 #define BBISHOP (BLACK|BISHOP)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 #define BQUEEN (BLACK|QUEEN)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 #define BKING (BLACK|KING)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 typedef uint8_t Board[8][8];
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 struct movetimeval {
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 uint64_t tv_sec;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 int32_t tv_usec;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 };
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 typedef struct {
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 uint8_t piece;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 uint8_t fromfile;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 uint8_t fromrow;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 uint8_t tofile;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 uint8_t torow;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 uint8_t promotion;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 uint8_t check;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 uint8_t capture;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 struct movetimeval timestamp;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 struct movetimeval movetime;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 char string[8];
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 } Move;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 typedef struct {
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 uint8_t servercolor;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 uint8_t timecontrol;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 uint16_t time;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 uint16_t addtime;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 } GameInfo;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 typedef struct {
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92 Board board;
98
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
93 Move* moves;
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
94 /** capacity of the move array */
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
95 unsigned movecapacity;
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
96 /** number of (half-)moves (counting BOTH colors) */
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
97 unsigned int movecount;
80
b980a7192b5a replace _Bool with bool from C23 and/or stdbool.h
Mike Becker <universe@uap-core.de>
parents: 78
diff changeset
98 bool checkmate;
b980a7192b5a replace _Bool with bool from C23 and/or stdbool.h
Mike Becker <universe@uap-core.de>
parents: 78
diff changeset
99 bool stalemate;
b980a7192b5a replace _Bool with bool from C23 and/or stdbool.h
Mike Becker <universe@uap-core.de>
parents: 78
diff changeset
100 bool remis;
b980a7192b5a replace _Bool with bool from C23 and/or stdbool.h
Mike Becker <universe@uap-core.de>
parents: 78
diff changeset
101 bool resign;
78
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102 } GameState;
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
103
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
104
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 #define is_game_running(gamestate) !((gamestate)->checkmate || \
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 (gamestate)->resign || (gamestate)->stalemate || (gamestate)->remis)
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107
98
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
108 #define last_move(gamestate) \
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
109 ((gamestate)->moves[(gamestate)->movecount-1])
9cb41383540f change move list from linked list to array (prepares game replays)
Mike Becker <universe@uap-core.de>
parents: 80
diff changeset
110
78
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111 /**
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 * Initializes a game state and prepares the chess board.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113 * @param gamestate the game state to initialize
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 */
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115 void gamestate_init(GameState *gamestate);
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
117 /**
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
118 * Cleans up a game state and frees the memory for the movement list.
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119 * @param gamestate the game state to clean up
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120 */
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121 void gamestate_cleanup(GameState *gamestate);
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122
ceb9197b3c6d improve code structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123 #endif

mercurial