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;