Belofte version 2.1.9
A promising chess program using the UCI or Winboard interface
usercmd.cpp
Go to the documentation of this file.
1/*---------------------------------------------------------------------+
2 * File: usercmd.cpp
3 * Project: part of belofte - A Promising Chess Program
4 * Author: yves
5 * SPDX-License-Identifier: GPL-2.0-only
6+----------------------------------------------------------------------*/
7
8#include "belofte.h"
9
10//-----------------------------------------------------------------------
11
12void engineUserCommand::execute(std::string const& args)
13{
14 AppEI()->sendError("unimplemented command, not executing",
15 m_name + (args.size() ? " <" + args + ">" : ""));
16}
17
18//-----------------------------------------------------------------------
19// command implementation
20
21void cmd_help::execute(std::string const& args)
22{
23 AppEI()->sendHelp(args);
24}
25
26void cmd_quit::execute(std::string const& args UNUSED)
27{
28 App().bout << "Bye";
29 App().bout.endl();
31}
32
33void cmd_about::execute(std::string const& args UNUSED)
34{
35 App().bout << App().getConfig("enginename", "") << '\n'
36 << App().getConfig("author", "");
37 App().bout.endl();
38}
39
40void cmd_usage::execute(std::string const& args)
41{
42 App().bout << "Usage: " << args << " [options] [@script]\n"
43 << "\t--help\t\tThis help message\n"
44 << "\t--version\tShow version information\n"
45 << "\t--uci\t\tUse UCI interface\n"
46 << "\t-xboard\t\tUse Xboard/Winboard/CECP interface\n"
47 << "\t@script\t\tcontaining commands to execute.";
48 App().bout.endl();
49}
50
51void cmd_uci::execute(std::string const& args UNUSED)
52{
53 App().setMode("uci");
54 AppEI()->sendResponse("");
55 AppEI()->sendResponse("id name " MYFULLNAME " (u)");
56 AppEI()->sendResponse("id author " MYAUTHOR);
57 AppEI()->sendResponse("");
58 AppEI()->sendResponse("option name alg type combo default AB "
59 "var Random var StaticEval var BruteForce "
60 "var SearchIterativeBF var AB var ABFS var ABFH");
61 AppEI()->sendResponse("option name evaltype type combo default PositionalBoard "
62 "var None var PiecesOnly var StaticBoard var PositionalBoard");
63 AppEI()->sendResponse("option name UCI_Variant type combo default normal "
64 "var normal");
65 AppEI()->sendResponse("option name UCI_EngineAbout type string default "
66 + App().getConfig("about", ""));
67 AppEI()->sendResponse("option name UCI_Opponent type string default <empty>");
68 // option name x type string default <empty>
69 /// @todo option name UCI_Chess960 type check default false
70 // setoption name UCI_Chess960 value true
71 // setoption name UCI_Variant value fischerandom
72 /// @todo option name UCI_AnalyseMode
73 AppEI()->sendResponse("uciok");
74}
75
76void cmd_xboard::execute(std::string const& args UNUSED)
77{
78 App().setMode("xboard");
79 App().bout.endl();
80}
81
82void cmd_belofte::execute(std::string const& args UNUSED)
83{
84 App().setMode("belofte");
85}
86
87/**
88 * execute command file with @ command
89 * @warning command will do noting but change mode
90 * @see commandReader::runner() for actual parsing
91 */
92void cmd_execat::execute(std::string const& args)
93{
94 if (args.substr(0,1) == "@") {
95 App().m_reader.attach(args.substr(1));
96 } else {
97 App().m_reader.attach(args);
98 }
99}
100
101/**
102 * execute command file with exec command
103 * @warning command will do noting but change mode
104 * @see commandReader::runner() for actual parsing
105 */
106void cmd_exec::execute(std::string const& args)
107{
108 App().m_reader.attach(args);
109}
110
111void cmd_echo::execute(std::string const& args)
112{
113 AppEI()->sendResponse(args);
114}
115
116/**
117 * check if engine still alive, doing delayed constructors
118 */
119void cmd_isready::execute(std::string const& args UNUSED)
120{
121 // readyok to be sent only after newgame has finished
122 AppEI()->sendResponse("readyok");
123}
124
125/**
126 * check if engine still alive, doing delayed constructors
127 */
128void cmd_ping::execute(std::string const& args)
129{
130 AppEI()->sendResponse("pong " + args);
131}
132
133void cmd_ucinewgame::execute(std::string const& args UNUSED)
134{
135 if (App().getMode() != "uci") App().setMode("uci");
136 Game()->newGame();
138}
139
140void cmd_debug::execute(std::string const& args)
141{
143}
144
145/**
146 * Read setoption command
147 * @todo allow value parameter with space in it
148 */
149void cmd_setoption::execute(std::string const& args)
150{
151 belofte::stringList sOptions = belofte::stringSplit(args, " ");
152 if (sOptions.size() && sOptions[0] == "name") {
153 // if first element is 'name', suppress it (arena compatibility)
154 sOptions.erase(sOptions.begin());
155 }
156 if (sOptions.size() >= 2) {
157 /// @todo get array from initialisation
158 std::string const opt[] = {"alg", "evaltype", "UCI_Opponent",
159 "UCI_EngineAbout", "UCI_Variant"};
160 if (std::find(std::begin(opt), std::end(opt), sOptions[0])
161 != std::end(opt)) {
162 /// @todo change to specific setoption function
163 if (sOptions.size() == 2) {
164 AppEI()->execute(sOptions[0], "");
165 } else {
166 std::string sParams = std::accumulate(sOptions.begin() + 2, sOptions.end(), std::string(),
167 [](std::string result, std::string sElem) {
168 return std::move(result) + std::move(sElem) + " ";
169 });
170 AppEI()->execute(sOptions[0], belofte::alltrim(sParams));
171 }
172 } else {
173 AppEI()->sendError("command not understood", args);
174 }
175 } else {
176 AppEI()->sendError("bad command parameters", args);
177 }
178}
179
180/**
181 * set start position, alternatives
182 * args = [fen 'fenstring' | startpos ] moves 'move1' .... 'movei'
183 * attention: should do noting if position set is identical to actual position
184 */
185void cmd_position::execute(std::string const& args)
186{
187 std::string startorfen = args.substr(0, args.find(' '));
188 std::size_t iMoves = args.find("moves ");
189 if (startorfen == "startpos" || startorfen == "") {
191 if (iMoves != std::string::npos) {
192 if (!Game()->playGameMoveSeries(args.substr(static_cast<unsigned long>(iMoves) + 6)))
193 AppEI()->sendInvalidMove(args.substr(static_cast<unsigned long>(iMoves) + 6), "");
194 }
195 } else if (startorfen == "fen") {
196 if (iMoves != std::string::npos) {
197 Game()->setFEN(args.substr(4, static_cast<unsigned long>(iMoves) - 4));
198 if (!Game()->playGameMoveSeries(args.substr(static_cast<unsigned long>(iMoves) + 6)))
199 AppEI()->sendInvalidMove(args.substr(static_cast<unsigned long>(iMoves) + 6), "");
200 } else {
201 Game()->setFEN(args.substr(4));
202 }
203 } else {
204 AppEI()->sendError("invalid parameter for position", args);
205 }
206}
207
208void cmd_bench::execute(std::string const& args)
209{
210 depth_t nDepth = 5;
211
212 if (args.size()) {
213 belofte::stringList goOptions = belofte::stringSplit(args, " ");
214 if (atoi(goOptions[0].c_str()) > 0) nDepth = static_cast<depth_t>(atoi(goOptions[0].c_str()));
215 }
216
217 { SearchPerft search; bel_debug::run_bench(search, nDepth); }
218 { SearchBruteForce search; bel_debug::run_bench(search, nDepth); }
219 { SearchAlphaBeta search; bel_debug::run_bench(search, nDepth); }
220
221 Game()->newGame();
223}
224
225void cmd_perft::execute(std::string const& args)
226{
227 belofte::stringList const goOptions = belofte::stringSplit(args, " ");
228 depth_t perftdepth = 0;
229 if (!goOptions.empty()) perftdepth = static_cast<depth_t>(atoi(goOptions[0].c_str()));
230
231 SearchPerft search;
232 int64_t nNodes = Game()->DoPerft(search, perftdepth);
233 int64_t nNonLeafNodes = search.getNonLeafNodes();
234
235 std::string sNodes = belofte::to_string(nNodes);
236 std::string sTotalNodes = belofte::to_string(nNodes + nNonLeafNodes);
237#if defined(NPS_LOG)
238 std::string sNPS = "0";
239 if ((nNodes + nNonLeafNodes) > 0LL) {
240 sNPS = belofte::to_string(static_cast<int64_t>(
241 (nNodes + nNonLeafNodes) * 1000000LL / search.getDurationMicroSec()));
242 }
243#endif
244
245 if (Game()->isExpecting(sNodes)) {
246 std::stringstream ss;
247 ss << "perft " << args << " -> " << sNodes
248 << " (Total: " << sTotalNodes
249 << ") <- Execution time = " << search.getDuration()
250#if defined(NPS_LOG)
251 << " NPS " << sNPS
252#endif
253 ;
254 App().bout(-1) << ss.str();
255 App().bout.endl();
256 } else {
257 AppEI()->sendError("Expectation missed",
258 "perft " + args + " -> " + sNodes + " instead of <- "
259 + Game()->getExpecting());
260 }
261 // clear expect flag
262 Game()->setExpecting("");
263}
264
265/**
266 * Parse epd position or epd file
267 * e.g. epd pos fen-epd fen-params
268 * epd [file] 'filename'
269 */
270void cmd_epd::execute(std::string const& args)
271{
272 belofte::stringList sParams = belofte::stringSplit(args, " ");
274
275 // remove any modifier flags, -sts overrides -perf
276 if (std::any_of(sParams.begin(), sParams.end(),
277 [](std::string const& s)
278 { return s == "-perf"; })) {
279 sParams.erase(sParams.begin() + 1);
280 typeOfTest = tEpdTestType::EPD_PERF;
281 } else if (std::any_of(sParams.begin(), sParams.end(),
282 [](std::string const& s)
283 { return s == "-sts"; })) {
284 sParams.erase(sParams.begin() + 1);
285 typeOfTest = tEpdTestType::EPD_STS;
286 }
287
288 if (sParams.empty()) {
289 AppEI()->sendError("Parameter missing", "");
290 } else if (sParams[0] == "pos") {
291 sParams.erase(sParams.begin());
292 bEpdPos epd(sParams, typeOfTest);
293 epd.parse();
294 } else if (sParams[0] == "file") {
295 sParams.erase(sParams.begin());
296 bEpdFile epd(sParams, typeOfTest);
297 epd.parse();
298 } else {
299 // same as epd file
300 bEpdFile epd(args, typeOfTest);
301 epd.parse();
302 }
303}
304
305/**
306 * Parse epd position
307 * e.g. epdpos fen-epd fen-params
308 * @note use `epd pos` instead (with space)
309 */
310void cmd_epdpos::execute(std::string const& args)
311{
313 epd.parse();
314}
315
316void cmd_go::execute(std::string const& args)
317{
318 belofte::stringList const goOptions = belofte::stringSplit(args, " ");
319 bLevel level;
320 int nDepth, nInf, nTime, nInc, nMoves, nMoveTime, nMate, nPonder;
321 int64_t nNodes;
322
323 nDepth = belofte::positionParamValue(goOptions, "depth", 1);
324 nInf = belofte::positionParamIndex(goOptions, "infinite");
325
326 if (Game()->getCurrentPosition().whiteToMove()) {
327 nTime = belofte::positionParamValue(goOptions, "wtime", 1);
328 nInc = belofte::positionParamValue(goOptions, "winc", 1);
329 } else {
330 nTime = belofte::positionParamValue(goOptions, "btime", 1);
331 nInc = belofte::positionParamValue(goOptions, "binc", 1);
332 }
333
334 nMoves = belofte::positionParamValue(goOptions, "movestogo", 1);
335 nMoveTime = belofte::positionParamValue(goOptions, "movetime", 1);
336
337 nNodes = belofte::positionParamValue(goOptions, "nodes", 1);
338 nMate = belofte::positionParamValue(goOptions, "mate", 1);
339 nPonder = belofte::positionParamIndex(goOptions, "ponder");
340
341 if (belofte::positionParamIndex(goOptions, "searchmoves") != -1) {
342 /// @todo add searchmoves
343 }
344
345 if (nDepth != -1) {
346 level.setDepthCommand(static_cast<depth_t>(nDepth));
347 } else if (nInf != -1) {
348 level.setInfinite();
349 } else if (nMoveTime != -1) {
350 level.setMoveTime(nMoveTime);
351 } else if (nTime != -1) {
352 if (nInc != -1) {
353 if (nMoves != -1) level.setMoveTime(nTime, nMoves, nInc);
354 else level.setGameTime(nTime, nInc);
355 } else {
356 if (nMoves != -1) level.setMoveTime(nTime, nMoves);
357 else level.setGameTime(nTime);
358 }
359 } else if (nMate != -1) {
360 level.setMateSearch(static_cast<depth_t>(nMate));
361 }
362
363 if (nNodes != -1) level.setNodes(nNodes);
364 if (nPonder != -1) level.setPondering();
365
366 if (args != "") Game()->setLevel(level);
367 AppEI()->setRunning(true);
368 Game()->DoSearch();
369}
370
371void cmd_again::execute(std::string const& args UNUSED)
372{
373 Game()->revertGameMove("again");
374 AppEI()->execute("go", "");
375}
376
377void cmd_usermove::execute(std::string const& args)
378{
379 if (!Game()->playGameMoveSeries(args)) {
380 AppEI()->sendInvalidMove(args, "");
381 return;
382 }
383 bBoard const& b = Game()->getCurrentPosition();
384 AppEI()->sendResult(b, Game()->getResult());
385
386 if (App().getMode() == "xboard") {
387 // xboard requires an update to number of moves remaining
388 if (AppEI()->isRunning()) {
389 // only decrease moves when about to move
391 AppEI()->execute("go", "");
392 } else if (b.whiteToMove()) {
393 // or decrease moves when white to move
395 }
396 }
397}
398
399void cmd_questionmark::execute(std::string const& args UNUSED)
400{
401 Game()->AbortSearch();
402}
403
404void cmd_stop::execute(std::string const& args UNUSED)
405{
406 Game()->AbortSearch();
407}
408
409void cmd_save::execute(std::string const& args UNUSED)
410{
411 App().bout << Game()->operator std::string();
412 App().bout.endl();
413}
414
415void cmd_game::execute(std::string const& args UNUSED)
416{
417 App().bout << Game()->operator std::string();
418 App().bout.endl();
419}
420
421void cmd_bd::execute(std::string const& args UNUSED)
422{
423 bBoard const& b = Game()->getCurrentPosition();
424 App().bout << b.operator std::string();
425 App().bout.endl();
426}
427
428void cmd_undo::execute(std::string const& args UNUSED)
429{
430 Game()->revertGameMove("undo");
431}
432
433void cmd_easy::execute(std::string const& args UNUSED)
434{
436}
437
438void cmd_hard::execute(std::string const& args UNUSED)
439{
441}
442
443void cmd_ls::execute(std::string const& args)
444{
445 DIR *hDir;
446 std::string curdir = ".";
447 if (args.length()) curdir = args + ".";
448
449 hDir = opendir(curdir.c_str());
450 if (hDir) {
451 const struct dirent *hFile;
452 while ((hFile = readdir(hDir)) != nullptr) {
453 std::string sFile(hFile->d_name);
454 if (sFile[0] == '.') continue;
455 App().bout << sFile
456#if !defined(NODIRENT)
457 << (hFile->d_type == DT_DIR ? "/" : "")
458#endif
459 << std::endl;
460 }
461 closedir(hDir);
462 }
463}
464
465void cmd_expect::execute(std::string const& args)
466{
467 Game()->setExpecting(args);
468}
469
470void cmd_new::execute(std::string const& args UNUSED)
471{
472 Game()->newGame();
474 AppEI()->setRunning(true);
475}
476
477void cmd_setboard::execute(std::string const& args)
478{
479 Game()->setFEN(args);
480}
481
482void cmd_random::execute(std::string const& args UNUSED)
483{
484 // toggle random setting, off by default
485 App().setConfig("random", App().getConfig("random", 0) ? 0 : 1);
486}
487
488void cmd_computer::execute(std::string const& args UNUSED)
489{
490 App().setConfig("computer", "computer");
491}
492
493void cmd_remove::execute(std::string const& args UNUSED)
494{
495 Game()->revertGameMove("remove");
496 Game()->revertGameMove("remove");
497}
498
499void cmd_protover::execute(std::string const& args UNUSED)
500{
501 if (App().getMode() != "xboard") {
502 AppEI()->execute("xboard", "");
503 }
504 AppEI()->sendResponse("feature done=0");
505 AppEI()->sendResponse("feature ping=1 setboard=1");
506 AppEI()->sendResponse("feature usermove=1 playother=1 colors=0 time=1");
507 AppEI()->sendResponse("feature draw=0 nps=0 memory=0 smp=0");
508 AppEI()->sendResponse("feature variants=\"normal\"");
509#if defined(BELOFTE_NOSIGNALS)
510 AppEI()->sendResponse("feature sigint=0 sigterm=0");
511#else
512 AppEI()->sendResponse("feature sigint=1 sigterm=1");
513#endif
514 AppEI()->sendResponse("feature analyze=0 debug=1 reuse=0 pause=0");
515 AppEI()->sendResponse("feature name=1");
516 AppEI()->sendResponse("feature myname=\"" MYFULLNAME " (wb)\"");
517 AppEI()->sendResponse("feature option=\"alg -combo AB /// Random /// StaticEval /// "
518 "BruteForce /// SearchIterativeBF /// ABFS /// ABFH\"");
519 AppEI()->sendResponse("feature option=\"evaltype -combo "
520 "PositionalBoard /// None /// PiecesOnly /// StaticBoard\"");
521 AppEI()->sendResponse("feature done=1");
522}
523
524void cmd_playother::execute(std::string const& args UNUSED)
525{
526 AppEI()->setRunning(true);
527}
528
529void cmd_force::execute(std::string const& args UNUSED)
530{
531 AppEI()->setRunning(false);
532}
533
534void cmd_alg::execute(std::string const& args)
535{
536 Game()->setAlgorithm(args);
537}
538
539void cmd_evaltype::execute(std::string const& args)
540{
541 Game()->setEval(args);
542}
543
544void cmd_UCI_EngineAbout::execute(std::string const& args UNUSED)
545{
546}
547
548void cmd_UCI_Opponent::execute(std::string const& args)
549{
550 App().setConfig("opponent", args);
551 Game()->setPlayerName(args);
552}
553
554void cmd_name::execute(std::string const& args)
555{
556 App().setConfig("opponent", args);
557 Game()->setPlayerName(args);
558}
559
560void cmd_option::execute(std::string const& args)
561{
562 belofte::stringList const options = belofte::stringSplit(args, "=");
563 if (options.size() == 2) {
564 /// @todo get array from initialisation
565 std::string const opt[] = {"alg", "evaltype"};
566 if (std::find(std::begin(opt), std::end(opt), options[0])
567 != std::end(opt)) {
568 /// @todo change to specific setoption function
569 AppEI()->execute(options[0], options[1]);
570 } else {
571 AppEI()->sendError("option not understood", args);
572 }
573 } else {
574 AppEI()->sendError("bad option parameters", args);
575 }
576}
577
578void cmd_info::execute(std::string const& args UNUSED)
579{
581}
582
583void cmd_eval::execute(std::string const& args UNUSED)
584{
585 std::stringstream ss;
587
588 ss << "# Eval: (" << (b.minimizing() == 1 ? "maximizing) white" : "minimizing) black")
589 << " to move - " << Game()->getEval()->operator std::string();
590 #if !defined(BELOFTE_NORANDOM)
591 if (App().getConfig("random", 0)) ss << " +-Rnd";
592 #endif
593
594 if (b.getGameStageName() != "") ss << " - " << b.getGameStageName();
595
596 b.calcMinorPieces(true);
598 if (gr != GR_UNKNOWN) {
600 ss << "\ninfo cp 0 string " << AppEI()->engineGameResultString(gr);
601 } else {
602 ss << "\ninfo string " << AppEI()->engineGameResultString(gr);
603 }
604 } else {
605 bScore sc = Game()->EvalForPlayer(b);
606 ss << "\ninfo cp " << engineInterface::scoreAsString(sc);
607
608 #if !defined(BELOFTE_NORANDOM)
609 if (!App().getConfig("random", 0)) {
610 #endif
611 // either random defined or not disabled
612 b.invertColours();
613 bScore isc = Game()->EvalForPlayer(b);
614 if (isc != sc) {
615 ss << " (inbalanced eval: "
617 << ")";
618 }
619 b.invertColours();
620 #if !defined(BELOFTE_NORANDOM)
621 }
622 #endif
623 }
624
625 App().bout << ss.str();
626 App().bout.endl();
627}
628
629//-----------------------------------------------------------------------
630// xboard implementation
631
632void cmd_sd::execute(std::string const& args)
633{
634 Game()->getLevel().setDepthCommand(static_cast<depth_t>(atoi(args.c_str())));
635}
636
637void cmd_fd::execute(std::string const& args)
638{
639 Game()->getLevel().setMateSearch(static_cast<depth_t>(atoi(args.c_str())));
640}
641
642void cmd_level::execute(std::string const& args)
643{
644 belofte::stringList const levelOptions = belofte::stringSplit(args, " ");
645 int nMovesPerPeriod = 0;
646 int nTimePerPeriod = 0;
647 int nIncrement = 0;
649 if (levelOptions.size() == 3) {
650 nMovesPerPeriod = atoi(levelOptions[0].c_str());
651 nIncrement = atoi(levelOptions[2].c_str());
652 belofte::stringList sPeriods = belofte::stringSplit(levelOptions[1], ":");
653 if (sPeriods.size() == 2) {
654 nTimePerPeriod = atoi(sPeriods[0].c_str()) * 60
655 + atoi(sPeriods[1].c_str());
656 } else {
657 nTimePerPeriod = atoi(levelOptions[1].c_str()) * 60;
658 }
659 }
660 /// @todo keep initial game time so that after move 35, all increment time is
661 /// used, currently, it is flapping around 10s left
662 if (nMovesPerPeriod == 0) {
663 if (nIncrement == 0) {
664 Game()->getLevel().setGameTime(nTimePerPeriod * 1000);
665 } else {
666 Game()->getLevel().setGameTime(nTimePerPeriod * 1000,
667 nIncrement * 1000);
668 }
669 } else {
670 if (nIncrement == 0) {
671 Game()->getLevel().setMoveTime(nTimePerPeriod * 1000,
672 nMovesPerPeriod);
673 } else {
674 Game()->getLevel().setMoveTime(nTimePerPeriod * 1000,
675 nMovesPerPeriod, nIncrement * 1000);
676 }
677 }
678}
679
680void cmd_st::execute(std::string const& args)
681{
682 Game()->getLevel().setMoveTime(atoi(args.c_str())*1000);
683}
684
685void cmd_time::execute(std::string const& args)
686{
687 // centiseconds to milliseconds conversion
688 Game()->getLevel().setRemainingTime(atoi(args.c_str())*10);
689}
690
691void cmd_post::execute(std::string const& args UNUSED)
692{
693 App().sout.setLevel(0);
694}
695
696void cmd_nopost::execute(std::string const& args UNUSED)
697{
698 App().sout.setLevel(-1);
699}
700
701// eof
appInstance & App()
Definition belofte.cpp:225
engineInterface * AppEI()
Definition belofte.cpp:231
bGame * Game()
Definition belofte.cpp:236
This is the main include file, needs to be included before any other include.
#define MYAUTHOR
Definition belofte.h:37
#define MYFULLNAME
Definition belofte.h:49
int_fast8_t depth_t
Definition belofte.h:103
std::string getDuration() const
Definition util.cpp:47
long long getDurationMicroSec() const
Definition util.cpp:61
outputWriter sout
normal output
Definition belofte.h:174
bel_debug m_debuginterface
Definition belofte.h:177
void setConfig(std::string const &s, int64_t v)
Definition belofte.cpp:178
outputWriter bout
Definition belofte.h:173
int64_t getConfig(std::string const &s, int64_t v)
Definition belofte.cpp:183
std::string const setMode(std::string const &iName)
Definition belofte.cpp:170
commandReader m_reader
searching output
Definition belofte.h:175
constexpr bool whiteToMove() const
Definition basicboard.h:156
constexpr bScore minimizing() const
Definition basicboard.h:166
board
Definition board.h:45
void invertColours()
invert colours update kingpos, update colour to move, castle rights, ...
Definition board.cpp:183
void calcMinorPieces(bool const bForceRecalc=false)
Recalculate minor pieces, used for evaluation and end of game condition in case of less than 5 pieces...
Definition board.cpp:68
std::string getGameStageName() const
Definition board.cpp:167
void setAlgorithm(std::string const &alg)
void setEval(std::string const &e)
bPositionEvaluation * getEval() const
virtual bEpdResult parse() override
Main epd parser for multiple lines of epd file Will calculate a total score and some statistics.
virtual bEpdResult parse()
parse any epd position
bScore EvalForPlayer(bBoard const &b)
Definition game.cpp:166
void setPlayerName(std::string const &n)
Definition game.cpp:58
int64_t DoPerft(bSearchAlgorithm &sa, depth_t const d)
do perft search at depth in case of Perft algorithm, temporarily set evaltype to None
Definition game.cpp:131
void setExpecting(std::string const &s)
Definition game.h:47
void AbortSearch()
Definition game.cpp:90
void newGame()
Definition game.cpp:24
void revertGameMove(std::string const &reason)
required for Winboard protocol, not supported in UCI (except debug)
Definition game.cpp:237
bLevel & getLevel()
Definition game.h:59
void DoSearch()
Start search thread and exit in case of batch mode, will wait until end of search.
Definition game.cpp:71
void setFEN(std::string const &fenstr)
Definition game.cpp:50
bBoard & getCurrentPosition()
Definition game.h:54
void setLevel(bLevel const &l)
Definition game.h:57
void setFENInitialPos()
Definition game.cpp:42
Definition level.h:48
void clearPondering()
Definition level.h:89
void flagLevelChanged()
Definition level.h:68
void setGameTime(int const msPerGame)
Definition level.cpp:23
void setInfinite()
Definition level.cpp:12
void setRemainingTime(int const msPerGame)
xboard issues time command to update available time
Definition level.cpp:133
void setNodes(int64_t const n)
Definition level.h:85
void setMovePlayed()
Definition level.cpp:143
void setMoveTime(int const msPerMove)
Definition level.cpp:59
void setMateSearch(depth_t const d)
Definition level.cpp:119
void setPondering()
Definition level.h:87
void setDepthCommand(depth_t const d)
Definition level.cpp:226
static gameResult_t gameEndedResult(bBoard const &b)
Class static function See if board is in finite state, meaning game is ended.
Definition eval.cpp:42
static bool isDrawResult(gameResult_t const gr)
Definition eval.h:70
constexpr int64_t getNonLeafNodes() const
Definition search.h:93
void info() const
Definition bel_debug.cpp:81
static void run_bench(bSearchAlgorithm &search, depth_t const nDepth)
void execute(std::string const &args)
Definition bel_debug.cpp:12
void execute(std::string const &args) override
Definition usercmd.cpp:544
void execute(std::string const &args) override
Definition usercmd.cpp:548
void execute(std::string const &args) override
Definition usercmd.cpp:33
void execute(std::string const &args) override
Definition usercmd.cpp:371
void execute(std::string const &args) override
Definition usercmd.cpp:534
void execute(std::string const &args) override
Definition usercmd.cpp:421
void execute(std::string const &args) override
Definition usercmd.cpp:82
void execute(std::string const &args) override
Definition usercmd.cpp:208
void execute(std::string const &args) override
Definition usercmd.cpp:488
void execute(std::string const &args) override
Definition usercmd.cpp:140
void execute(std::string const &args) override
Definition usercmd.cpp:433
void execute(std::string const &args) override
Definition usercmd.cpp:111
void execute(std::string const &args) override
Parse epd position or epd file e.g.
Definition usercmd.cpp:270
void execute(std::string const &args) override
Parse epd position e.g.
Definition usercmd.cpp:310
void execute(std::string const &args) override
Definition usercmd.cpp:583
void execute(std::string const &args) override
Definition usercmd.cpp:539
void execute(std::string const &args) override
execute command file with exec command
Definition usercmd.cpp:106
void execute(std::string const &args) override
execute command file with @ command
Definition usercmd.cpp:92
void execute(std::string const &args) override
Definition usercmd.cpp:465
void execute(std::string const &args) override
Definition usercmd.cpp:637
void execute(std::string const &args) override
Definition usercmd.cpp:529
void execute(std::string const &args) override
Definition usercmd.cpp:415
void execute(std::string const &args) override
Definition usercmd.cpp:316
void execute(std::string const &args) override
Definition usercmd.cpp:438
void execute(std::string const &args) override
Definition usercmd.cpp:21
void execute(std::string const &args) override
Definition usercmd.cpp:578
void execute(std::string const &args) override
check if engine still alive, doing delayed constructors
Definition usercmd.cpp:119
void execute(std::string const &args) override
Definition usercmd.cpp:642
void execute(std::string const &args) override
Definition usercmd.cpp:443
void execute(std::string const &args) override
Definition usercmd.cpp:554
void execute(std::string const &args) override
Definition usercmd.cpp:470
void execute(std::string const &args) override
Definition usercmd.cpp:696
void execute(std::string const &args) override
Definition usercmd.cpp:560
void execute(std::string const &args) override
Definition usercmd.cpp:225
void execute(std::string const &args) override
check if engine still alive, doing delayed constructors
Definition usercmd.cpp:128
void execute(std::string const &args) override
Definition usercmd.cpp:524
void execute(std::string const &args) override
set start position, alternatives args = [fen 'fenstring' | startpos ] moves 'move1' ....
Definition usercmd.cpp:185
void execute(std::string const &args) override
Definition usercmd.cpp:691
void execute(std::string const &args) override
Definition usercmd.cpp:499
void execute(std::string const &args) override
Definition usercmd.cpp:399
void execute(std::string const &args) override
Definition usercmd.cpp:26
void execute(std::string const &args) override
Definition usercmd.cpp:482
void execute(std::string const &args) override
Definition usercmd.cpp:493
void execute(std::string const &args) override
Definition usercmd.cpp:409
void execute(std::string const &args) override
Definition usercmd.cpp:632
void execute(std::string const &args) override
Definition usercmd.cpp:477
void execute(std::string const &args) override
Read setoption command.
Definition usercmd.cpp:149
void execute(std::string const &args) override
Definition usercmd.cpp:680
void execute(std::string const &args) override
Definition usercmd.cpp:404
void execute(std::string const &args) override
Definition usercmd.cpp:685
void execute(std::string const &args) override
Definition usercmd.cpp:51
void execute(std::string const &args) override
Definition usercmd.cpp:133
void execute(std::string const &args) override
Definition usercmd.cpp:428
void execute(std::string const &args) override
Definition usercmd.cpp:40
void execute(std::string const &args) override
Definition usercmd.cpp:377
void execute(std::string const &args) override
Definition usercmd.cpp:76
bool attach(std::string const &ifile)
virtual void sendResult(bBoard const &b, gameResult_t const gr) const
virtual void sendResponse(std::string const &response)
virtual void sendInvalidMove(std::string const &info, std::string const &reason)
virtual void setRunning(bool const r)
virtual void sendHelp(std::string const &args)
Send help on command or all commands.
virtual std::string engineGameResultString(gameResult_t const gr) const
void execute(std::string const &command, std::string const &params)
virtual void sendError(std::string const &error, std::string const &description)
static std::string scoreAsString(bScore const score)
virtual void execute(std::string const &args)
Definition usercmd.cpp:12
std::string m_name
Definition usercmd.h:32
outputWriter & endl()
Definition bel_debug.h:68
void setLevel(int const l)
Definition bel_debug.h:49
enum tEpdTestType epdTest_t
@ EPD_STS
@ EPD_GENERIC
@ EPD_PERF
@ GR_UNKNOWN
Definition eval.h:36
enum gameResult gameResult_t
Definition eval.h:43
int16_t bScore
Definition eval.h:11
int positionParamValue(stringList const &param, std::string const &find, unsigned long const nOffSet=0)
Definition util.cpp:268
std::string alltrim(std::string s, std::string const &delim=" ")
trim left and right spaces or delim from string
Definition util.cpp:195
std::string to_string(int16_t value)
std::to_string not compatible on Mac OS (Apple LLVM version 5.0) provide generic utility function
Definition util.cpp:171
stringList const stringSplit(std::string src, std::string const &delim)
Split delimited long string into a vector.
Definition util.cpp:133
std::vector< std::string > stringList
Definition util.h:46
int positionParamIndex(stringList const &param, std::string const &find)
find position in which param has been found
Definition util.cpp:259