printf("\n");
}
typedef U32 Move;
#define move_encode(source, target, piece, promoted, capture, dbl, enpassant, \
castling) \
(source) | (target << 6) | (piece << 12) | (promoted << 16) | \
(capture << 20) | (dbl << 21) | (enpassant << 22) | (castling << 23)
#define move_source(move) (((move)&C32(0x00003f)))
#define move_target(move) (((move)&C32(0x000fc0)) >> 6)
#define move_piece(move) (((move)&C32(0x00f000)) >> 12)
#define move_promote(move) (((move)&C32(0x0f0000)) >> 16)
#define move_capture(move) (((move)&C32(0x100000)) >> 20)
#define move_double(move) (((move)&C32(0x200000)))
#define move_enpassant(move) (((move)&C32(0x400000)))
#define move_castle(move) (((move)&C32(0x800000)))
void move_print(Move move) {
printf("Move: %d: %.32b\n", move, move);
printf("From: %s; To: %s; Piece: %s; Promote: %s; Capture: %d; Double: %d; "
"Enpassant: %d; Castle: %d\n",
square_to_coordinates[move_source(move)],
square_to_coordinates[move_target(move)],
Piece_fromInex(move_piece(move))->unicode,
Piece_fromInex(move_promote(move))->unicode,
move_capture(move) ? 1 : 0, move_double(move) ? 1 : 0,
move_enpassant(move) ? 1 : 0, move_castle(move) ? 1 : 0);
}
void init_all() {
init_leapers_attacks();
init_sliders_attacks();