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 var MiniMax "
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);
237#if !defined(NO_NPS_LOG)
238 std::string sNPS =
"0";
239 if ((nNodes + nNonLeafNodes) > 0LL) {
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)
256 "perft " + args +
" -> " + sNodes +
" instead of <- "
257 +
Game()->getExpecting());
274 if (std::any_of(sParams.begin(), sParams.end(),
275 [](std::string
const& s)
276 { return s ==
"-perf"; })) {
277 sParams.erase(sParams.begin() + 1);
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);
286 if (sParams.empty()) {
288 }
else if (sParams[0] ==
"pos") {
289 sParams.erase(sParams.begin());
290 bEpdPos epd(sParams, typeOfTest);
292 }
else if (sParams[0] ==
"file") {
293 sParams.erase(sParams.begin());
318 int nDepth, nInf, nTime, nInc, nMoves, nMoveTime, nMate, nPonder;
324 if (
Game()->getCurrentPosition().whiteToMove()) {
345 }
else if (nInf != -1) {
347 }
else if (nMoveTime != -1) {
349 }
else if (nTime != -1) {
351 if (nMoves != -1) level.
setMoveTime(nTime, nMoves, nInc);
354 if (nMoves != -1) level.
setMoveTime(nTime, nMoves);
357 }
else if (nMate != -1) {
361 if (nNodes != -1) level.
setNodes(nNodes);
377 if (!
Game()->playGameMoveSeries(args)) {
384 if (
App().getMode() ==
"xboard") {
386 if (
AppEI()->isRunning()) {
409 std::string sFileName =
App().
getName() +
".pgn";
410 if (!args.empty()) { sFileName = args; }
413 std::ofstream ofGameSave(sFileName);
414 ofGameSave <<
Game()->operator std::string() <<
"\n";
420 std::string sFileName =
App().
getName() +
".pgn";
421 if (!args.empty()) { sFileName = args; }
424 std::ofstream ofGameExport(sFileName);
425 ofGameExport <<
Game()->operator std::string() <<
"\n";
426 ofGameExport.close();
438 std::string sFileName =
App().
getName() +
".pgn";
439 if (!args.empty()) { sFileName = args; }
441 std::ifstream ifGameLoad(sFileName);
442 if (ifGameLoad.is_open()) {
443 std::string sPgnMoves;
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) ==
"//")) {
456 }
else if (line.substr(0,1) ==
"[") {
460 sPgnMoves += line +
" ";
473 App().
bout << b.operator std::string();
495 std::string curdir =
".";
496 if (args.length()) curdir = args +
".";
498 hDir = opendir(curdir.c_str());
500 const struct dirent *hFile;
501 while ((hFile = readdir(hDir)) !=
nullptr) {
502 std::string sFile(hFile->d_name);
503 if (sFile[0] ==
'.')
continue;
505#if !defined(NODIRENT)
506 App().
bout << (hFile->d_type == DT_DIR ?
"/" :
"");
550 if (
App().getMode() !=
"xboard") {
558#if defined(BELOFTE_NOSIGNALS)
566 AppEI()->
sendResponse(
"feature option=\"alg -combo AB /// Random /// StaticEval /// "
567 "BruteForce /// MiniMax /// SearchIterativeBF /// ABFS /// ABFH\"");
569 "PositionalBoard /// None /// PiecesOnly /// StaticBoard\"");
612 if (options.size() == 2) {
614 std::string
const opt[] = {
"alg",
"evaltype"};
615 if (std::find(std::begin(opt), std::end(opt), options[0])
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";
656 #if !defined(BELOFTE_NORANDOM)
657 if (!
App().getConfig(
"random", 0)) {
663 App().
bout <<
" (inbalanced eval: "
668 #if !defined(BELOFTE_NORANDOM)
692 int nMovesPerPeriod = 0;
693 int nTimePerPeriod = 0;
696 if (levelOptions.size() == 3) {
697 nMovesPerPeriod = atoi(levelOptions[0].c_str());
698 nIncrement = atoi(levelOptions[2].c_str());
700 if (sPeriods.size() == 2) {
701 nTimePerPeriod = atoi(sPeriods[0].c_str()) * 60
702 + atoi(sPeriods[1].c_str());
704 nTimePerPeriod = atoi(levelOptions[1].c_str()) * 60;
709 if (nMovesPerPeriod == 0) {
710 if (nIncrement == 0) {
717 if (nIncrement == 0) {
722 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
static std::string getName()
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)
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
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 setStandardPgn(bool const l)
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...
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)
bScore EvalForPlayer(bBoard const &b, gameResult_t gr)
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)
static 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
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
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 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 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)
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