diff -r 808a7324b467 -r ceb9197b3c6d src/chess/rules.h --- a/src/chess/rules.h Mon Jun 02 19:32:37 2025 +0200 +++ b/src/chess/rules.h Mon Jun 02 19:40:24 2025 +0200 @@ -30,8 +30,9 @@ #ifndef RULES_H #define RULES_H +#include "game-info.h" + #include -#include #define VALID_MOVE_SYNTAX 0 #define VALID_MOVE_SEMANTICS 0 /* use same code for a success */ @@ -44,83 +45,8 @@ #define KING_MOVES_INTO_CHECK 7 #define RULES_VIOLATED 10 - -#define PIECE_MASK 0x0F -#define COLOR_MASK 0x30 #define ENPASSANT_THREAT 0x40 -#define WHITE 0x10 -#define BLACK 0x20 - -#define PAWN 0x01 -#define ROOK 0x02 -#define KNIGHT 0x03 -#define BISHOP 0x04 -#define QUEEN 0x05 -#define KING 0x06 - -#define WPAWN (WHITE|PAWN) -#define WROOK (WHITE|ROOK) -#define WKNIGHT (WHITE|KNIGHT) -#define WBISHOP (WHITE|BISHOP) -#define WQUEEN (WHITE|QUEEN) -#define WKING (WHITE|KING) -#define BPAWN (BLACK|PAWN) -#define BROOK (BLACK|ROOK) -#define BKNIGHT (BLACK|KNIGHT) -#define BBISHOP (BLACK|BISHOP) -#define BQUEEN (BLACK|QUEEN) -#define BKING (BLACK|KING) - -typedef uint8_t Board[8][8]; - -struct movetimeval { - uint64_t tv_sec; - int32_t tv_usec; -}; - -typedef struct { - uint8_t piece; - uint8_t fromfile; - uint8_t fromrow; - uint8_t tofile; - uint8_t torow; - uint8_t promotion; - uint8_t check; - uint8_t capture; - struct movetimeval timestamp; - struct movetimeval movetime; - char string[8]; -} Move; - -typedef struct MoveList MoveList; - -struct MoveList { - Move move; - MoveList* next; -}; - - -typedef struct { - uint8_t servercolor; - uint8_t timecontrol; - uint16_t time; - uint16_t addtime; -} GameInfo; - -typedef struct { - Board board; - MoveList* movelist; - MoveList* lastmove; - unsigned int movecount; /* number of (half-)moves (counting BOTH colors) */ - _Bool checkmate; - _Bool stalemate; - _Bool remis; - _Bool resign; -} GameState; - -#define opponent_color(color) ((color)==WHITE?BLACK:WHITE) - #define POS_UNSPECIFIED UINT8_MAX #define mdst(b,m) b[(m)->torow][(m)->tofile] #define msrc(b,m) b[(m)->fromrow][(m)->fromfile] @@ -143,22 +69,6 @@ #define fileidx_s(c) (isfile(c)?fileidx(c):POS_UNSPECIFIED) #define rowidx_s(c) (isrow(c)?rowidx(c):POS_UNSPECIFIED) -#define is_game_running(gamestate) !((gamestate)->checkmate || \ - (gamestate)->resign || (gamestate)->stalemate || (gamestate)->remis) - - -/** - * Initializes a game state and prepares the chess board. - * @param gamestate the game state to initialize - */ -void gamestate_init(GameState *gamestate); - -/** - * Cleans up a game state and frees the memory for the movement list. - * @param gamestate the game state to clean up - */ -void gamestate_cleanup(GameState *gamestate); - /** * Maps a character to a piece. *