15 m_name + (args.size() ?
" <" + args +
">" :
""));
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.";
59 "var Random var StaticEval var BruteForce "
60 "var SearchIterativeBF var AB var ABFS var ABFH");
62 "var None var PiecesOnly var StaticBoard var PositionalBoard");
66 +
App().getConfig(
"about",
""));
94 if (args.substr(0,1) ==
"@") {
152 if (sOptions.size() && sOptions[0] ==
"name") {
154 sOptions.erase(sOptions.begin());
156 if (sOptions.size() >= 2) {
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])
163 if (sOptions.size() == 2) {
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) +
" ";
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)))
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)))
214 if (atoi(goOptions[0].c_str()) > 0) nDepth =
static_cast<depth_t>(atoi(goOptions[0].c_str()));
229 if (!goOptions.empty()) perftdepth =
static_cast<depth_t>(atoi(goOptions[0].c_str()));
232 int64_t nNodes =
Game()->
DoPerft(search, perftdepth);
238 std::string sNPS =
"0";
239 if ((nNodes + nNonLeafNodes) > 0LL) {
245 if (
Game()->isExpecting(sNodes)) {
246 std::stringstream ss;
247 ss <<
"perft " << args <<
" -> " << sNodes
248 <<
" (Total: " << sTotalNodes
249 <<
") <- Execution time = " << search.
getDuration()
258 "perft " + args +
" -> " + sNodes +
" instead of <- "
259 +
Game()->getExpecting());
276 if (std::any_of(sParams.begin(), sParams.end(),
277 [](std::string
const& s)
278 { return s ==
"-perf"; })) {
279 sParams.erase(sParams.begin() + 1);
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);
288 if (sParams.empty()) {
290 }
else if (sParams[0] ==
"pos") {
291 sParams.erase(sParams.begin());
292 bEpdPos epd(sParams, typeOfTest);
294 }
else if (sParams[0] ==
"file") {
295 sParams.erase(sParams.begin());
320 int nDepth, nInf, nTime, nInc, nMoves, nMoveTime, nMate, nPonder;
326 if (
Game()->getCurrentPosition().whiteToMove()) {
347 }
else if (nInf != -1) {
349 }
else if (nMoveTime != -1) {
351 }
else if (nTime != -1) {
353 if (nMoves != -1) level.
setMoveTime(nTime, nMoves, nInc);
356 if (nMoves != -1) level.
setMoveTime(nTime, nMoves);
359 }
else if (nMate != -1) {
363 if (nNodes != -1) level.
setNodes(nNodes);
379 if (!
Game()->playGameMoveSeries(args)) {
386 if (
App().getMode() ==
"xboard") {
388 if (
AppEI()->isRunning()) {
424 App().
bout << b.operator std::string();
446 std::string curdir =
".";
447 if (args.length()) curdir = args +
".";
449 hDir = opendir(curdir.c_str());
451 const struct dirent *hFile;
452 while ((hFile = readdir(hDir)) !=
nullptr) {
453 std::string sFile(hFile->d_name);
454 if (sFile[0] ==
'.')
continue;
456#if !defined(NODIRENT)
457 << (hFile->d_type == DT_DIR ?
"/" :
"")
501 if (
App().getMode() !=
"xboard") {
509#if defined(BELOFTE_NOSIGNALS)
517 AppEI()->
sendResponse(
"feature option=\"alg -combo AB /// Random /// StaticEval /// "
518 "BruteForce /// SearchIterativeBF /// ABFS /// ABFH\"");
520 "PositionalBoard /// None /// PiecesOnly /// StaticBoard\"");
563 if (options.size() == 2) {
565 std::string
const opt[] = {
"alg",
"evaltype"};
566 if (std::find(std::begin(opt), std::end(opt), options[0])
585 std::stringstream ss;
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";
608 #if !defined(BELOFTE_NORANDOM)
609 if (!
App().getConfig(
"random", 0)) {
615 ss <<
" (inbalanced eval: "
620 #if !defined(BELOFTE_NORANDOM)
645 int nMovesPerPeriod = 0;
646 int nTimePerPeriod = 0;
649 if (levelOptions.size() == 3) {
650 nMovesPerPeriod = atoi(levelOptions[0].c_str());
651 nIncrement = atoi(levelOptions[2].c_str());
653 if (sPeriods.size() == 2) {
654 nTimePerPeriod = atoi(sPeriods[0].c_str()) * 60
655 + atoi(sPeriods[1].c_str());
657 nTimePerPeriod = atoi(levelOptions[1].c_str()) * 60;
662 if (nMovesPerPeriod == 0) {
663 if (nIncrement == 0) {
670 if (nIncrement == 0) {
675 nMovesPerPeriod, nIncrement * 1000);
engineInterface * AppEI()
This is the main include file, needs to be included before any other include.
std::string getDuration() const
long long getDurationMicroSec() const
outputWriter sout
normal output
bel_debug m_debuginterface
void setConfig(std::string const &s, int64_t v)
int64_t getConfig(std::string const &s, int64_t v)
std::string const setMode(std::string const &iName)
commandReader m_reader
searching output
constexpr bool whiteToMove() const
constexpr bScore minimizing() const
void invertColours()
invert colours update kingpos, update colour to move, castle rights, ...
void calcMinorPieces(bool const bForceRecalc=false)
Recalculate minor pieces, used for evaluation and end of game condition in case of less than 5 pieces...
std::string getGameStageName() const
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)
void setPlayerName(std::string const &n)
int64_t DoPerft(bSearchAlgorithm &sa, depth_t const d)
do perft search at depth in case of Perft algorithm, temporarily set evaltype to None
void setExpecting(std::string const &s)
void revertGameMove(std::string const &reason)
required for Winboard protocol, not supported in UCI (except debug)
void DoSearch()
Start search thread and exit in case of batch mode, will wait until end of search.
void setFEN(std::string const &fenstr)
bBoard & getCurrentPosition()
void setLevel(bLevel const &l)
void setGameTime(int const msPerGame)
void setRemainingTime(int const msPerGame)
xboard issues time command to update available time
void setNodes(int64_t const n)
void setMoveTime(int const msPerMove)
void setMateSearch(depth_t const d)
void setDepthCommand(depth_t const d)
static gameResult_t gameEndedResult(bBoard const &b)
Class static function See if board is in finite state, meaning game is ended.
static bool isDrawResult(gameResult_t const gr)
constexpr int64_t getNonLeafNodes() const
static void run_bench(bSearchAlgorithm &search, depth_t const nDepth)
void execute(std::string const &args)
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
Parse epd position or epd file e.g.
void execute(std::string const &args) override
Parse epd position e.g.
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
execute command file with exec command
void execute(std::string const &args) override
execute command file with @ command
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
check if engine still alive, doing delayed constructors
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
check if engine still alive, doing delayed constructors
void execute(std::string const &args) override
void execute(std::string const &args) override
set start position, alternatives args = [fen 'fenstring' | startpos ] moves 'move1' ....
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
Read setoption command.
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
void execute(std::string const &args) override
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 ¶ms)
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)
void setLevel(int const l)
enum tEpdTestType epdTest_t
enum gameResult gameResult_t
int positionParamValue(stringList const ¶m, std::string const &find, unsigned long const nOffSet=0)
std::string alltrim(std::string s, std::string const &delim=" ")
trim left and right spaces or delim from string
std::string to_string(int16_t value)
std::to_string not compatible on Mac OS (Apple LLVM version 5.0) provide generic utility function
stringList const stringSplit(std::string src, std::string const &delim)
Split delimited long string into a vector.
std::vector< std::string > stringList
int positionParamIndex(stringList const ¶m, std::string const &find)
find position in which param has been found