14 #include <boost/program_options.hpp>
22 int main(
int argc,
char **argv)
24 bool csa, generate_check, quiesce_check;
25 boost::program_options::options_description command_line_options;
26 command_line_options.add_options()
28 boost::program_options::value<bool>(&csa)->default_value(
false),
29 "Show legal moves in CSA format")
30 (
"input-file", boost::program_options::value< std::vector<std::string> >(),
31 "input files in kisen format")
33 boost::program_options::value<bool>(&generate_check)->default_value(
false),
34 "generate only check moves instead of all legal moves")
35 (
"generate-quiesce-check",
36 boost::program_options::value<bool>(&quiesce_check)->default_value(
false),
37 "generate only check moves used in quiescence search")
38 (
"help",
"Show help message");
39 boost::program_options::variables_map
vm;
40 boost::program_options::positional_options_description p;
41 p.add(
"input-file", -1);
46 boost::program_options::command_line_parser(
47 argc, argv).options(command_line_options).positional(p).
run(), vm);
48 boost::program_options::notify(vm);
51 std::cerr <<
"Usage: " << argv[0] <<
" [options] CSA_FILE1 CSA_FILE2 ..."
53 std::cout << command_line_options << std::endl;
57 catch (std::exception &e)
59 std::cerr <<
"error in parsing options" << std::endl
60 << e.what() << std::endl;
61 std::cerr <<
"Usage: " << argv[0] <<
" [options] CSA_FILE1 CSA_FILE2 ..."
63 std::cerr << command_line_options << std::endl;
67 const std::vector<std::string>
files =
68 vm[
"input-file"].as< std::vector<std::string> >();
70 for (
size_t i = 0; i < files.size(); ++i)
72 const Record record = CsaFile(files[i]).getRecord();
73 NumEffectState state(record.getInitialState());
74 const vector<Move>
moves=record.getMoves();
75 for (vector<Move>::const_iterator p=moves.begin(); p!=moves.end(); ++p)
79 MoveVector legal_moves;
83 move_generator::GenerateAddEffectWithEffect::generate<true>
84 (state.turn(), state, state.kingPiece(
alt(state.turn())).square(),
store);
86 else if (quiesce_check)
89 if (state.turn() ==
BLACK)
100 std::cout << std::endl;
104 for (
size_t i = 0; i < legal_moves.size(); ++i)
111 std::cout << legal_moves;