/* Intercept a check to the white king with a white piece * @param dir_from_rider direction from rider giving check to white king * @param go_on what to do after each successful interception? */ static void white_piece(slice_index si, int dir_from_rider, void (*go_on)(slice_index si)) { square where_to_intercept; TraceFunctionEntry(__func__); TraceFunctionParam("%d",dir_from_rider); TraceFunctionParamListEnd(); for (where_to_intercept = being_solved.king_square[White]-dir_from_rider; is_square_empty(where_to_intercept); where_to_intercept -= dir_from_rider) if (nr_reasons_for_staying_empty[where_to_intercept]==0) white_piece_on(si,where_to_intercept,go_on); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
/* Intercept with a white piece * @param target guard of what square * @param dir_from_rider direction from rider giving check to black king * @param go_on what to do after each successful interception? */ static void white_piece(square target, int dir_from_rider, void (*go_on)(void)) { square const start = target-dir_from_rider; boolean const is_diagonal = SquareCol(start)==SquareCol(target); square where_to_intercept; TraceFunctionEntry(__func__); TraceSquare(target); TraceFunctionParam("%d",dir_from_rider); TraceFunctionParamListEnd(); for (where_to_intercept = start; is_square_empty(where_to_intercept); where_to_intercept -= dir_from_rider) if (nr_reasons_for_staying_empty[where_to_intercept]==0) white_piece_on(where_to_intercept,is_diagonal,go_on); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }