X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmisc.cpp;h=ba6f24f83909031b3262b395257920c6a9f11cb3;hp=ed6f8f47abe60a195ae30043c193462f2298a00a;hb=6b49d509a1824a09c21d1d9f5e7e991ef2638db5;hpb=a1c02815ccc5824fe8737d1d6fab8aef09874a07 diff --git a/src/misc.cpp b/src/misc.cpp index ed6f8f47..ba6f24f8 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -67,8 +67,8 @@ static const string AppTag = ""; //// Variables //// -uint64_t dbg_cnt0 = 0; -uint64_t dbg_cnt1 = 0; +static uint64_t dbg_cnt0 = 0; +static uint64_t dbg_cnt1 = 0; bool dbg_show_mean = false; bool dbg_show_hit_rate = false; @@ -127,42 +127,29 @@ void dbg_print_mean() { << (float)dbg_cnt1 / (dbg_cnt0 ? dbg_cnt0 : 1) << endl; } -void dbg_print_hit_rate(ofstream& logFile) { - - logFile << "Total " << dbg_cnt0 << " Hit " << dbg_cnt1 - << " hit rate (%) " << (dbg_cnt1*100)/(dbg_cnt0 ? dbg_cnt0 : 1) << endl; -} - -void dbg_print_mean(ofstream& logFile) { - - logFile << "Total " << dbg_cnt0 << " Mean " - << (float)dbg_cnt1 / (dbg_cnt0 ? dbg_cnt0 : 1) << endl; -} /// engine_name() returns the full name of the current Stockfish version. -/// This will be either "Stockfish YYMMDD" (where YYMMDD is the date when the -/// program was compiled) or "Stockfish ", depending on whether -/// the constant EngineVersion (defined in misc.h) is empty. +/// This will be either "Stockfish YYMMDD" (where YYMMDD is the date when +/// the program was compiled) or "Stockfish ", depending +/// on whether the constant EngineVersion (defined in misc.h) is empty. const string engine_name() { + const string months("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"); const string cpu64(CpuIs64Bit ? " 64bit" : ""); if (!EngineVersion.empty()) return AppName + " " + EngineVersion + cpu64; - string date(__DATE__); // From compiler, format is "Sep 21 2008" - string months("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"); - - size_t mon = 1 + months.find(date.substr(0, 3)) / 4; + stringstream s, date(__DATE__); // From compiler, format is "Sep 21 2008" + string month, day, year; - stringstream s; - string day = (date[4] == ' ' ? date.substr(5, 1) : date.substr(4, 2)); + date >> month >> day >> year; - string name = AppName + " " + AppTag + " "; - - s << name << date.substr(date.length() - 2) << setfill('0') - << setw(2) << mon << setw(2) << day << cpu64; + s << setfill('0') << AppName + " " + AppTag + " " + << year.substr(2, 2) << setw(2) + << (1 + months.find(month) / 4) << setw(2) + << day << cpu64; return s.str(); } @@ -218,7 +205,7 @@ int cpu_count() { #endif -/// Check for console input. Original code from Beowulf and Olithink +/// Check for console input. Original code from Beowulf, Olithink and Greko #ifndef _WIN32 @@ -238,35 +225,46 @@ int data_available() #else -int data_available() +int input_available() { static HANDLE inh = NULL; - static bool usePipe; + static bool usePipe = false; INPUT_RECORD rec[256]; - DWORD dw, recCnt; + DWORD nchars, recCnt; if (!inh) { inh = GetStdHandle(STD_INPUT_HANDLE); - usePipe = !GetConsoleMode(inh, &dw); - if (!usePipe) + if (GetConsoleMode(inh, &nchars)) { - SetConsoleMode(inh, dw & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT)); + SetConsoleMode(inh, nchars & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT)); FlushConsoleInputBuffer(inh); - } + } else + usePipe = true; } - // If we're running under XBoard then we can't use PeekConsoleInput() as - // the input commands are sent to us directly over the internal pipe. + // When using Standard C input functions, also check if there + // is anything in the buffer. After a call to such functions, + // the input waiting in the pipe will be copied to the buffer, + // and the call to PeekNamedPipe can indicate no input available. + // Setting stdin to unbuffered was not enough. [from Greko] + if (stdin->_cnt > 0) + return 1; + + // When running under a GUI the input commands are sent to us + // directly over the internal pipe. If PeekNamedPipe() returns 0 + // then something went wrong. Probably the parent program exited. + // Returning 1 will make the next call to the input function + // return EOF, where this should be catched then. if (usePipe) - return PeekNamedPipe(inh, NULL, 0, NULL, &dw, NULL) ? dw : 1; + return PeekNamedPipe(inh, NULL, 0, NULL, &nchars, NULL) ? nchars : 1; // Count the number of unread input records, including keyboard, // mouse, and window-resizing input records. - GetNumberOfConsoleInputEvents(inh, &dw); + GetNumberOfConsoleInputEvents(inh, &nchars); // Read data from console without removing it from the buffer - if (dw <= 0 || !PeekConsoleInput(inh, rec, Min(dw, 256), &recCnt)) + if (nchars <= 0 || !PeekConsoleInput(inh, rec, Min(nchars, 256), &recCnt)) return 0; // Search for at least one keyboard event