54 |
55 |
55 _Bool pawn_isblocked(Board board, Move *move) { |
56 _Bool pawn_isblocked(Board board, Move *move) { |
56 return mdst(board,move) && !move->capture; |
57 return mdst(board,move) && !move->capture; |
57 } |
58 } |
58 |
59 |
59 _Bool pawn_getlocation(Board board, Move *move) { |
60 int pawn_getlocation(Board board, Move *move) { |
60 int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); |
61 int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); |
61 |
62 |
62 if (move->fromfile == POS_UNSPECIFIED) { |
63 if (move->fromfile == POS_UNSPECIFIED) { |
63 move->fromfile = move->tofile; |
64 move->fromfile = move->tofile; |
64 } |
65 } |
65 move->fromrow = move->torow + d; |
66 move->fromrow = move->torow + d; |
66 if (move->fromrow > 6) { |
67 if (move->fromrow > 6) { |
67 return FALSE; |
68 return INVALID_POSITION; |
68 } else { |
69 } else { |
69 /* advanced first move */ |
70 /* advanced first move */ |
70 if (move->fromrow == (d < 0 ? 2 : 5) && |
71 if (move->fromrow == (d < 0 ? 2 : 5) && |
71 msrc(board,move) != move->piece) { |
72 msrc(board,move) != move->piece) { |
72 |
73 |
73 move->fromrow += d; |
74 move->fromrow += d; |
74 if (move->fromrow > 6) { |
75 if (move->fromrow > 6) { |
75 return FALSE; |
76 return INVALID_POSITION; |
76 } |
77 } |
77 } |
78 } |
78 } |
79 } |
79 return TRUE; |
80 return VALID_MOVE_SYNTAX; |
80 } |
81 } |