Belofte version 2.2.0
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 var MiniMax "
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(NO_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 App().bout(-1) << "perft " << args << " -> " << sNodes
247 << " (Total: " << sTotalNodes
248 << ") <- Execution time = " << search.getDuration()
249#if !defined(NO_NPS_LOG)
250 << " NPS " << sNPS
251#endif
252 ;
253 App().bout.endl();
254 } else {
255 AppEI()->sendError("Expectation missed",
256 "perft " + args + " -> " + sNodes + " instead of <- "
257 + Game()->getExpecting());
258 }
259 // clear expect flag
260 Game()->setExpecting("");
261}
262
263/**
264 * Parse epd position or epd file
265 * e.g. epd pos fen-epd fen-params
266 * epd [file] 'filename'
267 */
268void cmd_epd::execute(std::string const& args)
269{
270 belofte::stringList sParams = belofte::stringSplit(args, " ");
272
273 // remove any modifier flags, -sts overrides -perf
274 if (std::any_of(sParams.begin(), sParams.end(),
275 [](std::string const& s)
276 { return s == "-perf"; })) {
277 sParams.erase(sParams.begin() + 1);
278 typeOfTest = tEpdTestType::EPD_PERF;
279 } else if (std::any_of(sParams.begin(), sParams.end(),
280 [](std::string const& s)
281 { return s == "-sts"; })) {
282 sParams.erase(sParams.begin() + 1);
283 typeOfTest = tEpdTestType::EPD_STS;
284 }
285
286 if (sParams.empty()) {
287 AppEI()->sendError("Parameter missing", "");
288 } else if (sParams[0] == "pos") {
289 sParams.erase(sParams.begin());
290 bEpdPos epd(sParams, typeOfTest);
291 epd.parse();
292 } else if (sParams[0] == "file") {
293 sParams.erase(sParams.begin());
294 bEpdFile epd(sParams, typeOfTest);
295 epd.parse();
296 } else {
297 // same as epd file
298 bEpdFile epd(args, typeOfTest);
299 epd.parse();
300 }
301}
302
303/**
304 * Parse epd position
305 * e.g. epdpos fen-epd fen-params
306 * @note use `epd pos` instead (with space)
307 */
308void cmd_epdpos::execute(std::string const& args)
309{
311 epd.parse();
312}
313
314void cmd_go::execute(std::string const& args)
315{
316 belofte::stringList const goOptions = belofte::stringSplit(args, " ");
317 bLevel level(Game()->getLevel());
318 int nDepth, nInf, nTime, nInc, nMoves, nMoveTime, nMate, nPonder;
319 int64_t nNodes;
320
321 nDepth = belofte::positionParamValue(goOptions, "depth", 1);
322 nInf = belofte::positionParamIndex(goOptions, "infinite");
323
324 if (Game()->getCurrentPosition().whiteToMove()) {
325 nTime = belofte::positionParamValue(goOptions, "wtime", 1);
326 nInc = belofte::positionParamValue(goOptions, "winc", 1);
327 } else {
328 nTime = belofte::positionParamValue(goOptions, "btime", 1);
329 nInc = belofte::positionParamValue(goOptions, "binc", 1);
330 }
331
332 nMoves = belofte::positionParamValue(goOptions, "movestogo", 1);
333 nMoveTime = belofte::positionParamValue(goOptions, "movetime", 1);
334
335 nNodes = belofte::positionParamValue(goOptions, "nodes", 1);
336 nMate = belofte::positionParamValue(goOptions, "mate", 1);
337 nPonder = belofte::positionParamIndex(goOptions, "ponder");
338
339 if (belofte::positionParamIndex(goOptions, "searchmoves") != -1) {
340 /// @todo add searchmoves
341 }
342
343 if (nDepth != -1) {
344 level.setDepthCommand(static_cast<depth_t>(nDepth));
345 } else if (nInf != -1) {
346 level.setInfinite();
347 } else if (nMoveTime != -1) {
348 level.setMoveTime(nMoveTime);
349 } else if (nTime != -1) {
350 if (nInc != -1) {
351 if (nMoves != -1) level.setMoveTime(nTime, nMoves, nInc);
352 else level.setGameTime(nTime, nInc);
353 } else {
354 if (nMoves != -1) level.setMoveTime(nTime, nMoves);
355 else level.setGameTime(nTime);
356 }
357 } else if (nMate != -1) {
358 level.setMateSearch(static_cast<depth_t>(nMate));
359 }
360
361 if (nNodes != -1) level.setNodes(nNodes);
362 if (nPonder != -1) level.setPondering();
363
364 if (args != "") Game()->setLevel(level);
365 AppEI()->setRunning(true);
366 Game()->DoSearch();
367}
368
369void cmd_again::execute(std::string const& args UNUSED)
370{
371 Game()->revertGameMove("again");
372 AppEI()->execute("go", "");
373}
374
375void cmd_usermove::execute(std::string const& args)
376{
377 if (!Game()->playGameMoveSeries(args)) {
378 AppEI()->sendInvalidMove(args, "");
379 return;
380 }
381 bBoard const& b = Game()->getCurrentPosition();
382 AppEI()->sendResult(b, Game()->getResult());
383
384 if (App().getMode() == "xboard") {
385 // xboard requires an update to number of moves remaining
386 if (AppEI()->isRunning()) {
387 // only decrease moves when about to move
389 AppEI()->execute("go", "");
390 } else if (b.whiteToMove()) {
391 // or decrease moves when white to move
393 }
394 }
395}
396
397void cmd_questionmark::execute(std::string const& args UNUSED)
398{
399 Game()->AbortSearch();
400}
401
402void cmd_stop::execute(std::string const& args UNUSED)
403{
404 Game()->AbortSearch();
405}
406
407void cmd_save::execute(std::string const& args)
408{
409 std::string sFileName = App().getName() + ".pgn";
410 if (!args.empty()) { sFileName = args; }
411
412 Game()->setStandardPgn(false);
413 std::ofstream ofGameSave(sFileName);
414 ofGameSave << Game()->operator std::string() << "\n";
415 ofGameSave.close();
416}
417
418void cmd_export::execute(std::string const& args)
419{
420 std::string sFileName = App().getName() + ".pgn";
421 if (!args.empty()) { sFileName = args; }
422
423 Game()->setStandardPgn(true);
424 std::ofstream ofGameExport(sFileName);
425 ofGameExport << Game()->operator std::string() << "\n";
426 ofGameExport.close();
427}
428
429void cmd_game::execute(std::string const& args)
430{
431 Game()->setStandardPgn(!args.empty());
432 App().bout << Game()->operator std::string();
433 App().bout.endl();
434}
435
436void cmd_load::execute(std::string const& args)
437{
438 std::string sFileName = App().getName() + ".pgn";
439 if (!args.empty()) { sFileName = args; }
440
441 std::ifstream ifGameLoad(sFileName);
442 if (ifGameLoad.is_open()) {
443 std::string sPgnMoves;
444 Game()->newGame();
446 AppEI()->setRunning(false);
447 std::string line;
448 while(getline(ifGameLoad,line)) {
449 if ((line.length() < 2)
450 || (line.substr(0,1) == ";")
451 || (line.substr(0,1) == "%")
452 || (line.substr(0,1) == "#")
453 || (line.substr(0,2) == "//")) {
454 // skip, 0 or 1 character lines or lines starting with
455 // any of ; # % //
456 } else if (line.substr(0,1) == "[") {
457 /// process a pgn tag
458 } else {
459 /// add a single line to movelist
460 sPgnMoves += line + " ";
461 }
462 }
463 ifGameLoad.close();
464 Game()->playPGNMoves(sPgnMoves);
465 } else {
466 AppEI()->sendError("cannot load game in file", args);
467 }
468}
469
470void cmd_bd::execute(std::string const& args UNUSED)
471{
472 bBoard const& b = Game()->getCurrentPosition();
473 App().bout << b.operator std::string();
474 App().bout.endl();
475}
476
477void cmd_undo::execute(std::string const& args UNUSED)
478{
479 Game()->revertGameMove("undo");
480}
481
482void cmd_easy::execute(std::string const& args UNUSED)
483{
485}
486
487void cmd_hard::execute(std::string const& args UNUSED)
488{
490}
491
492void cmd_ls::execute(std::string const& args)
493{
494 DIR *hDir;
495 std::string curdir = ".";
496 if (args.length()) curdir = args + ".";
497
498 hDir = opendir(curdir.c_str());
499 if (hDir) {
500 const struct dirent *hFile;
501 while ((hFile = readdir(hDir)) != nullptr) {
502 std::string sFile(hFile->d_name);
503 if (sFile[0] == '.') continue;
504 App().bout << sFile;
505#if !defined(NODIRENT)
506 App().bout << (hFile->d_type == DT_DIR ? "/" : "");
507#endif
508 App().bout.endl();
509 }
510 closedir(hDir);
511 }
512}
513
514void cmd_expect::execute(std::string const& args)
515{
516 Game()->setExpecting(args);
517}
518
519void cmd_new::execute(std::string const& args UNUSED)
520{
521 Game()->newGame();
523 AppEI()->setRunning(true);
524}
525
526void cmd_setboard::execute(std::string const& args)
527{
528 Game()->setFEN(args);
529}
530
531void cmd_random::execute(std::string const& args UNUSED)
532{
533 // toggle random setting, off by default
534 App().setConfig("random", App().getConfig("random", 0) ? 0 : 1);
535}
536
537void cmd_computer::execute(std::string const& args UNUSED)
538{
539 App().setConfig("computer", "computer");
540}
541
542void cmd_remove::execute(std::string const& args UNUSED)
543{
544 Game()->revertGameMove("remove");
545 Game()->revertGameMove("remove");
546}
547
548void cmd_protover::execute(std::string const& args UNUSED)
549{
550 if (App().getMode() != "xboard") {
551 App().setMode("xboard");
552 }
553 AppEI()->sendResponse("feature done=0");
554 AppEI()->sendResponse("feature ping=1 setboard=1");
555 AppEI()->sendResponse("feature usermove=1 playother=1 colors=0 time=1");
556 AppEI()->sendResponse("feature draw=0 nps=0 memory=0 smp=0");
557 AppEI()->sendResponse("feature variants=\"normal\"");
558#if defined(BELOFTE_NOSIGNALS)
559 AppEI()->sendResponse("feature sigint=0 sigterm=0");
560#else
561 AppEI()->sendResponse("feature sigint=1 sigterm=1");
562#endif
563 AppEI()->sendResponse("feature analyze=0 debug=1 reuse=0 pause=0");
564 AppEI()->sendResponse("feature name=1");
565 AppEI()->sendResponse("feature myname=\"" MYFULLNAME " (wb)\"");
566 AppEI()->sendResponse("feature option=\"alg -combo AB /// Random /// StaticEval /// "
567 "BruteForce /// MiniMax /// SearchIterativeBF /// ABFS /// ABFH\"");
568 AppEI()->sendResponse("feature option=\"evaltype -combo "
569 "PositionalBoard /// None /// PiecesOnly /// StaticBoard\"");
570 AppEI()->sendResponse("feature done=1");
571}
572
573void cmd_playother::execute(std::string const& args UNUSED)
574{
575 AppEI()->setRunning(true);
576}
577
578void cmd_force::execute(std::string const& args UNUSED)
579{
580 AppEI()->setRunning(false);
581}
582
583void cmd_alg::execute(std::string const& args)
584{
585 Game()->setAlgorithm(args);
586}
587
588void cmd_evaltype::execute(std::string const& args)
589{
590 Game()->setEval(args);
591}
592
593void cmd_UCI_EngineAbout::execute(std::string const& args UNUSED)
594{
595}
596
597void cmd_UCI_Opponent::execute(std::string const& args)
598{
599 App().setConfig("opponent", args);
600 Game()->setPlayerName(args);
601}
602
603void cmd_name::execute(std::string const& args)
604{
605 App().setConfig("opponent", args);
606 Game()->setPlayerName(args);
607}
608
609void cmd_option::execute(std::string const& args)
610{
611 belofte::stringList const options = belofte::stringSplit(args, "=");
612 if (options.size() == 2) {
613 /// @todo get array from initialisation
614 std::string const opt[] = {"alg", "evaltype"};
615 if (std::find(std::begin(opt), std::end(opt), options[0])
616 != std::end(opt)) {
617 /// @todo change to specific setoption function
618 AppEI()->execute(options[0], options[1]);
619 } else {
620 AppEI()->sendError("option not understood", args);
621 }
622 } else {
623 AppEI()->sendError("bad option parameters", args);
624 }
625}
626
627void cmd_info::execute(std::string const& args UNUSED)
628{
630}
631
632void cmd_eval::execute(std::string const& args UNUSED)
633{
635
636 App().bout << "# Eval: (" << (b.minimizing() == 1 ? "maximizing) white" : "minimizing) black")
637 << " to move - " << Game()->getEval()->operator std::string();
638 #if !defined(BELOFTE_NORANDOM)
639 if (App().getConfig("random", 0)) App().bout << " +-Rnd";
640 #endif
641
642 if (b.getGameStageName() != "") App().bout << " - " << b.getGameStageName();
643
644 b.calcMinorPieces(true);
646 if (gr != GR_UNKNOWN) {
648 App().bout << "\ninfo cp 0 string " << AppEI()->engineGameResultString(gr);
649 } else {
650 App().bout << "\ninfo string " << AppEI()->engineGameResultString(gr);
651 }
652 } else {
653 bScore sc = Game()->EvalForPlayer(b, gr);
654 App().bout << "\ninfo cp " << engineInterface::scoreAsString(sc);
655
656 #if !defined(BELOFTE_NORANDOM)
657 if (!App().getConfig("random", 0)) {
658 #endif
659 // either random defined or not disabled
660 b.invertColours();
661 bScore isc = Game()->EvalForPlayer(b, GR_UNSET);
662 if (isc != sc) {
663 App().bout << " (inbalanced eval: "
665 << ")";
666 }
667 b.invertColours();
668 #if !defined(BELOFTE_NORANDOM)
669 }
670 #endif
671 }
672
673 App().bout.endl();
674}
675
676//-----------------------------------------------------------------------
677// xboard implementation
678
679void cmd_sd::execute(std::string const& args)
680{
681 Game()->getLevel().setDepthCommand(static_cast<depth_t>(atoi(args.c_str())));
682}
683
684void cmd_fd::execute(std::string const& args)
685{
686 Game()->getLevel().setMateSearch(static_cast<depth_t>(atoi(args.c_str())));
687}
688
689void cmd_level::execute(std::string const& args)
690{
691 belofte::stringList const levelOptions = belofte::stringSplit(args, " ");
692 int nMovesPerPeriod = 0;
693 int nTimePerPeriod = 0;
694 int nIncrement = 0;
696 if (levelOptions.size() == 3) {
697 nMovesPerPeriod = atoi(levelOptions[0].c_str());
698 nIncrement = atoi(levelOptions[2].c_str());
699 belofte::stringList sPeriods = belofte::stringSplit(levelOptions[1], ":");
700 if (sPeriods.size() == 2) {
701 nTimePerPeriod = atoi(sPeriods[0].c_str()) * 60
702 + atoi(sPeriods[1].c_str());
703 } else {
704 nTimePerPeriod = atoi(levelOptions[1].c_str()) * 60;
705 }
706 }
707 /// @todo keep initial game time so that after move 35, all increment time is
708 /// used, currently, it is flapping around 10s left
709 if (nMovesPerPeriod == 0) {
710 if (nIncrement == 0) {
711 Game()->getLevel().setGameTime(nTimePerPeriod * 1000);
712 } else {
713 Game()->getLevel().setGameTime(nTimePerPeriod * 1000,
714 nIncrement * 1000);
715 }
716 } else {
717 if (nIncrement == 0) {
718 Game()->getLevel().setMoveTime(nTimePerPeriod * 1000,
719 nMovesPerPeriod);
720 } else {
721 Game()->getLevel().setMoveTime(nTimePerPeriod * 1000,
722 nMovesPerPeriod, nIncrement * 1000);
723 }
724 }
725}
726
727void cmd_st::execute(std::string const& args)
728{
729 Game()->getLevel().setMoveTime(atoi(args.c_str())*1000);
730}
731
732void cmd_time::execute(std::string const& args)
733{
734 // centiseconds to milliseconds conversion
735 Game()->getLevel().setRemainingTime(atoi(args.c_str())*10);
736}
737
738void cmd_post::execute(std::string const& args UNUSED)
739{
740 App().sout.setLevel(0);
741}
742
743void cmd_nopost::execute(std::string const& args UNUSED)
744{
745 App().sout.setLevel(-1);
746}
747
748// eof
appInstance & App()
Definition belofte.cpp:242
engineInterface * AppEI()
Definition belofte.cpp:248
bGame * Game()
Definition belofte.cpp:253
This is the main include file, needs to be included before any other include.
#define MYAUTHOR
Definition belofte.h:38
#define MYFULLNAME
Definition belofte.h:50
int_fast8_t depth_t
Definition belofte.h:106
std::string getDuration() const
Definition util.cpp:47
long long getDurationMicroSec() const
Definition util.cpp:61
outputWriter sout
normal output
Definition belofte.h:179
bel_debug m_debuginterface
Definition belofte.h:182
static std::string getName()
Definition belofte.cpp:235
void setConfig(std::string const &s, int64_t v)
Definition belofte.cpp:194
outputWriter bout
Definition belofte.h:178
int64_t getConfig(std::string const &s, int64_t v)
Definition belofte.cpp:199
std::string const setMode(std::string const &iName)
Definition belofte.cpp:186
commandReader m_reader
searching output
Definition belofte.h:180
constexpr bool whiteToMove() const
Definition basicboard.h:162
constexpr bScore minimizing() const
Definition basicboard.h:172
board
Definition board.h:45
void invertColours()
invert colours update kingpos, update colour to move, castle rights, ...
Definition board.cpp:181
void calcMinorPieces(bool const bForceRecalc)
Recalculate minor pieces, used for evaluation and end of game condition in case of less than 5 pieces...
Definition board.cpp:66
std::string getGameStageName() const
Definition board.cpp:165
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
void setPlayerName(std::string const &n)
Definition game.cpp:62
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:139
void setExpecting(std::string const &s)
Definition game.h:47
void setStandardPgn(bool const l)
Definition game.h:76
bool playPGNMoves(std::string const &sPGNMoveList)
apply move, it will change the current board by updating the move played it will also add the new boa...
Definition game.cpp:248
void AbortSearch()
Definition game.cpp:98
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:286
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:75
void setFEN(std::string const &fenstr)
Definition game.cpp:54
bScore EvalForPlayer(bBoard const &b, gameResult_t gr)
Definition game.cpp:174
bBoard & getCurrentPosition()
Definition game.h:54
void setLevel(bLevel const &l)
Definition game.h:57
void setFENInitialPos()
Definition game.cpp:46
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:67
constexpr int64_t getNonLeafNodes() const
Definition search.h:111
void info() const
Definition bel_debug.cpp:90
static void run_bench(bSearchAlgorithm &search, depth_t const nDepth)
static void execute(std::string const &args)
Definition bel_debug.cpp:13
void execute(std::string const &args) override
Definition usercmd.cpp:593
void execute(std::string const &args) override
Definition usercmd.cpp:597
void execute(std::string const &args) override
Definition usercmd.cpp:33
void execute(std::string const &args) override
Definition usercmd.cpp:369
void execute(std::string const &args) override
Definition usercmd.cpp:583
void execute(std::string const &args) override
Definition usercmd.cpp:470
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:537
void execute(std::string const &args) override
Definition usercmd.cpp:140
void execute(std::string const &args) override
Definition usercmd.cpp:482
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:268
void execute(std::string const &args) override
Parse epd position e.g.
Definition usercmd.cpp:308
void execute(std::string const &args) override
Definition usercmd.cpp:632
void execute(std::string const &args) override
Definition usercmd.cpp:588
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:514
void execute(std::string const &args) override
Definition usercmd.cpp:418
void execute(std::string const &args) override
Definition usercmd.cpp:684
void execute(std::string const &args) override
Definition usercmd.cpp:578
void execute(std::string const &args) override
Definition usercmd.cpp:429
void execute(std::string const &args) override
Definition usercmd.cpp:314
void execute(std::string const &args) override
Definition usercmd.cpp:487
void execute(std::string const &args) override
Definition usercmd.cpp:21
void execute(std::string const &args) override
Definition usercmd.cpp:627
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:689
void execute(std::string const &args) override
Definition usercmd.cpp:436
void execute(std::string const &args) override
Definition usercmd.cpp:492
void execute(std::string const &args) override
Definition usercmd.cpp:603
void execute(std::string const &args) override
Definition usercmd.cpp:519
void execute(std::string const &args) override
Definition usercmd.cpp:743
void execute(std::string const &args) override
Definition usercmd.cpp:609
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:573
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:738
void execute(std::string const &args) override
Definition usercmd.cpp:548
void execute(std::string const &args) override
Definition usercmd.cpp:397
void execute(std::string const &args) override
Definition usercmd.cpp:26
void execute(std::string const &args) override
Definition usercmd.cpp:531
void execute(std::string const &args) override
Definition usercmd.cpp:542
void execute(std::string const &args) override
Definition usercmd.cpp:407
void execute(std::string const &args) override
Definition usercmd.cpp:679
void execute(std::string const &args) override
Definition usercmd.cpp:526
void execute(std::string const &args) override
Read setoption command.
Definition usercmd.cpp:149
void execute(std::string const &args) override
Definition usercmd.cpp:727
void execute(std::string const &args) override
Definition usercmd.cpp:402
void execute(std::string const &args) override
Definition usercmd.cpp:732
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:477
void execute(std::string const &args) override
Definition usercmd.cpp:40
void execute(std::string const &args) override
Definition usercmd.cpp:375
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 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 sendInvalidMove(std::string const &mv, std::string const &reason)
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()
void setLevel(int const l)
enum tEpdTestType epdTest_t
@ EPD_STS
@ EPD_GENERIC
@ EPD_PERF
@ GR_UNSET
Definition eval.h:32
@ GR_UNKNOWN
Definition eval.h:33
enum gameResult gameResult_t
Definition eval.h:40
int16_t bScore
Definition eval.h:11
int positionParamValue(stringList const &param, std::string const &find, unsigned long const nOffSet=0)
Definition util.cpp:281
std::string alltrim(std::string s, std::string const &delim=" ")
trim left and right spaces or delim from string
Definition util.cpp:210
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:186
stringList const stringSplit(std::string src, std::string const &delim)
Split delimited long string into a vector.
Definition util.cpp:148
std::vector< std::string > stringList
Definition util.h:48
int positionParamIndex(stringList const &param, std::string const &find)
find position in which param has been found
Definition util.cpp:274