version 1.4w10UCIb24
authorH.G. Muller <h.g.muller@hccnet.nl>
Thu, 9 Jun 2011 07:50:06 +0000 (09:50 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Thu, 9 Jun 2011 07:50:06 +0000 (09:50 +0200)
16 files changed:
ChangeLog
README
config.h
configure
configure.ac
engine.cpp
epd.cpp
main.cpp
makefile.gcc
option.cpp
pipe.cpp
pipe.h
polyglot.man
polyglot.pod
polyglot.spec
xboard2uci.cpp

index b1562e2..1ce2f42 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+=========1.4w10UCIb24===========\r
+- Portability fixes for WIN9X (Eric Mullins).\r
+- Portability fixes for MSVC++ (Eric Mullins).\r
+- Default setting of RepeatPV is now true.\r
+- Do not read data if input buffer is full (Windows).\r
 =========1.4w10UCIb22===========\r
 - Polyglot now completely poll free...\r
 =========1.4w10UCIb21===========\r
diff --git a/README b/README
index 58c4006..7af6caf 100644 (file)
--- a/README
+++ b/README
@@ -427,9 +427,11 @@ CONFIG FILE FORMAT
        RepeatPV (default: true)
            When true, PolyGlot repeats the last pv string (which also contains
            score,depth and time usage) it got from the engine. Some engines
-           however do not send a new pv string just before sending the move
-           and the now old pv string might confuse debugtools that parse the
-           winboard debug files.
+           however do not send a new pv string just before sending the move.
+           In that case the output of PolyGlot would be inconsistent.  When
+           RepeatPV is false PolyGlot does not repeat the last pv string.  Due
+           to the way kibitzing is implemented, KibitzMove is disabled in that
+           case.
 
        [Engine] section
 
@@ -503,4 +505,4 @@ SEE ALSO
 
 
 
-                                  2009-01-16                       POLYGLOT(6)
+                                  2009-07-20                       POLYGLOT(6)
index f602e78..17b64ef 100644 (file)
--- a/config.h
+++ b/config.h
 #define PACKAGE_NAME "polyglot"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "polyglot 1.4w10UCIb22"
+#define PACKAGE_STRING "polyglot 1.4w10UCIb24"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "polyglot"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.4w10UCIb22"
+#define PACKAGE_VERSION "1.4w10UCIb24"
 
 /* Define to 1 if the C compiler supports function prototypes. */
 #define PROTOTYPES 1
 #define TIME_WITH_SYS_TIME 1
 
 /* Version number of package */
-#define VERSION "1.4w10UCIb22"
+#define VERSION "1.4w10UCIb24"
 
 /* Define like PROTOTYPES; this can be used by system headers. */
 #define __PROTOTYPES 1
index ebfd2d0..16d6bb9 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for polyglot 1.4w10UCIb22.
+# Generated by GNU Autoconf 2.61 for polyglot 1.4w10UCIb24.
 #
 # Report bugs to <michel.vandenbergh@uhasselt.be>.
 #
@@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='polyglot'
 PACKAGE_TARNAME='polyglot'
-PACKAGE_VERSION='1.4w10UCIb22'
-PACKAGE_STRING='polyglot 1.4w10UCIb22'
+PACKAGE_VERSION='1.4w10UCIb24'
+PACKAGE_STRING='polyglot 1.4w10UCIb24'
 PACKAGE_BUGREPORT='michel.vandenbergh@uhasselt.be'
 
 ac_unique_file="mainloop.cpp"
@@ -1216,7 +1216,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures polyglot 1.4w10UCIb22 to adapt to many kinds of systems.
+\`configure' configures polyglot 1.4w10UCIb24 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1282,7 +1282,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of polyglot 1.4w10UCIb22:";;
+     short | recursive ) echo "Configuration of polyglot 1.4w10UCIb24:";;
    esac
   cat <<\_ACEOF
 
@@ -1368,7 +1368,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-polyglot configure 1.4w10UCIb22
+polyglot configure 1.4w10UCIb24
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1382,7 +1382,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by polyglot $as_me 1.4w10UCIb22, which was
+It was created by polyglot $as_me 1.4w10UCIb24, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -2072,7 +2072,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='polyglot'
- VERSION='1.4w10UCIb22'
+ VERSION='1.4w10UCIb24'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -7344,7 +7344,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by polyglot $as_me 1.4w10UCIb22, which was
+This file was extended by polyglot $as_me 1.4w10UCIb24, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -7397,7 +7397,7 @@ Report bugs to <bug-autoconf@gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-polyglot config.status 1.4w10UCIb22
+polyglot config.status 1.4w10UCIb24
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
index 2875e95..3e195b8 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.61)
-AC_INIT([polyglot], [1.4w10UCIb22], [michel.vandenbergh@uhasselt.be])
+AC_INIT([polyglot], [1.4w10UCIb24], [michel.vandenbergh@uhasselt.be])
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([mainloop.cpp])
 AC_CONFIG_HEADER([config.h])
index f5c53c6..b6c0f4b 100644 (file)
@@ -321,6 +321,19 @@ engine_t Engine[1];
 \r
 // functions\r
 \r
+void set_affinity(engine_t *engine, int affin){\r
+       if(affin==-1) return;\r
+    {   typedef void (WINAPI *SPAM)(HANDLE, int);\r
+       SPAM pSPAM;\r
+\r
+       pSPAM = (SPAM) GetProcAddress(\r
+           GetModuleHandle(TEXT("kernel32.dll")), \r
+           "SetProcessAffinityMask");\r
+       if(NULL != pSPAM) // [HGM] avoid crash on Win95 by first checking if API call exists\r
+           pSPAM((engine->io).hProcess,affin);\r
+    }\r
+}\r
+\r
 DWORD GetWin32Priority(int nice)\r
 {\r
 /*\r
@@ -338,21 +351,11 @@ IDLE_PRIORITY_CLASS         0x00000040
        return 0x00000040;\r
 }\r
 \r
-\r
-\r
-void set_affinity(engine_t *engine, int affin){\r
-       if(affin==-1) return;\r
-    SetProcessAffinityMask((engine->io).hProcess,affin);\r
-}\r
-\r
-// Eric Mullins!\r
-\r
 void engine_set_nice_value(engine_t *engine, int value){\r
     SetPriorityClass((engine->io).hProcess,\r
                      GetWin32Priority(value));\r
 }\r
 \r
-\r
 void engine_send_queue(engine_t * engine,const char *szFormat, ...) {\r
     nQueuePtr += vsprintf(szQueueString + nQueuePtr, szFormat, (va_list) (&szFormat + 1));\r
 }\r
@@ -375,7 +378,6 @@ void engine_close(engine_t * engine){
     (engine->io).Kill();\r
 }\r
 \r
-\r
 void engine_open(engine_t * engine){\r
     int affinity;\r
     char *my_dir;\r
diff --git a/epd.cpp b/epd.cpp
index 75a229c..fab728a 100644 (file)
--- a/epd.cpp
+++ b/epd.cpp
@@ -282,7 +282,7 @@ static void epd_test_file(const char file_name[]) {
       if (correct) {\r
          depth_tot += double(FirstDepth);\r
          time_tot += FirstTime;\r
-         node_tot += double(FirstNodeNb);\r
+         node_tot += double(sint64(FirstNodeNb));\r
       }\r
 \r
       printf("%2d: %-15s %s %4d",tot,id,correct?"OK":"--",hit);\r
index 64ee304..a54aefe 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -35,7 +35,7 @@
 // constants\r
 \r
 \r
-static const char * const Version = "1.4W10UCIb22";\r
+static const char * const Version = "1.4W10UCIb24";\r
 static const char * const HelpMessage = "\\r
 SYNTAX\n\\r
 * polyglot [configfile]\n\\r
index 5e18172..56ced5f 100644 (file)
@@ -1,6 +1,29 @@
-# what's this??
-# This is not a makefile....
+EXE = polyglot.exe
 
-# Anyway here is the command for compiling polyglot under Mingw/Cygwin
+OBJS = attack.o board.o book.o book_make.o book_merge.o colour.o engine.o\
+ epd.o fen.o game.o gui.o hash.o io.o line.o list.o main.o mainloop.o\
+ move.o move_do.o move_gen.o move_legal.o option.o parse.o pgn.o piece.o\
+ pipe.o posix.o random.o san.o search.o square.o uci.o uci2uci.o util.o\
+ xboard2uci.o
 
-g++ -O2 -mno-cygwin -D_WIN32 *.cpp -opolyglot
+# set up for NO cygwin
+CYGF = -mno-cygwin
+CYGL = -lmsvcrt
+
+CC = g++
+DEFS = -DNDEBUG
+OPTS = -Os -frename-registers -funit-at-a-time -fstrict-aliasing -fstrength-reduce
+CFLAGS = -Wall -pipe $(DEFS) $(OPTS) $(CYGF)
+LFLAGS = -fpic -s $(CYGF)
+LIBS = $(CYGL)
+
+all: $(EXE)
+
+clean:
+       rm -rf $(OBJS) $(EXE)
+
+$(EXE): $(OBJS)
+       $(CC) $(LFLAGS) $(LIBS) $(OBJS) -o $(EXE)
+
+%.o: %.cpp
+       $(CC) $(CFLAGS) -c $<
index 5cb5024..979b715 100644 (file)
@@ -16,56 +16,57 @@ static const bool UseDebug = false;
 \r
 // variables\r
 \r
+#define NNB { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }\r
 option_t Option[] = {\r
 \r
-    { "OptionFile",       "string","0","0",     "polyglot.ini", NULL,0,{},  PG}, \r
+    { "OptionFile",       "string","0","0",     "polyglot.ini", NULL,0,NNB,  PG}, \r
 \r
    // options\r
 \r
-    { "EngineName",       "string","0","0",     "<empty>"   , NULL,0,{},  PG}, \r
-    { "EngineDir",        "string","0","0",     "."         , NULL,0,{},  PG}, \r
-    { "EngineCommand",    "string","0","0",     "<empty>"   , NULL,0,{},  PG}, \r
+    { "EngineName",       "string","0","0",     "<empty>"   , NULL,0,NNB,  PG}, \r
+    { "EngineDir",        "string","0","0",     "."         , NULL,0,NNB,  PG}, \r
+    { "EngineCommand",    "string","0","0",     "<empty>"   , NULL,0,NNB,  PG}, \r
 \r
-    { "Log",              "check","0","0",     "false"      , NULL,0,{},  PG|XBOARD|UCI}, \r
-    { "LogFile",          "string","0","0",     "polyglot.log", NULL,0,{},  PG|XBOARD|UCI}, \r
+    { "Log",              "check","0","0",     "false"      , NULL,0,NNB,  PG|XBOARD|UCI}, \r
+    { "LogFile",          "string","0","0",     "polyglot.log", NULL,0,NNB,  PG|XBOARD|UCI}, \r
 \r
-    { "UCI",              "string","0","0",     "false"     , NULL,0,{},  PG}, \r
+    { "UCI",              "string","0","0",     "false"     , NULL,0,NNB,  PG}, \r
 \r
-    { "UseNice",          "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD|UCI}, \r
-    { "NiceValue",        "spin", "0","20",     "5"         , NULL,0,{},  PG|XBOARD|UCI}, \r
+    { "UseNice",          "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD|UCI}, \r
+    { "NiceValue",        "spin", "0","20",     "5"         , NULL,0,NNB,  PG|XBOARD|UCI}, \r
 \r
-    { "Chess960",         "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
+    { "Chess960",         "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { "Resign",           "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
-    { "ResignMoves",      "spin","0","10000",    "3"        , NULL,0,{},  PG|XBOARD}, \r
-    { "ResignScore",      "spin","0","10000",   "600"       , NULL,0,{},  PG|XBOARD}, \r
+    { "Resign",           "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
+    { "ResignMoves",      "spin","0","10000",    "3"        , NULL,0,NNB,  PG|XBOARD}, \r
+    { "ResignScore",      "spin","0","10000",   "600"       , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { "MateScore",        "spin","0","1000000", "10000"     , NULL,0,{},  PG|XBOARD}, \r
+    { "MateScore",        "spin","0","1000000", "10000"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { "Book",             "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD|UCI}, \r
-    { "BookFile",         "string","0","0",     "book.bin"  , NULL,0,{},  PG|XBOARD|UCI}, \r
+    { "Book",             "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD|UCI}, \r
+    { "BookFile",         "string","0","0",     "book.bin"  , NULL,0,NNB,  PG|XBOARD|UCI}, \r
 \r
-    { "BookRandom",       "check","0","0",      "true"      , NULL,0,{},  PG|XBOARD|UCI}, \r
-    { "BookLearn",        "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
+    { "BookRandom",       "check","0","0",      "true"      , NULL,0,NNB,  PG|XBOARD|UCI}, \r
+    { "BookLearn",        "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { "KibitzMove",       "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
-    { "KibitzPV",         "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
+    { "KibitzMove",       "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
+    { "KibitzPV",         "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { "KibitzCommand",    "string","0","0",     "tellall"   , NULL,0,{},  PG|XBOARD}, \r
-    { "KibitzDelay",      "check","0","10000",  "5"         , NULL,0,{},  PG|XBOARD}, \r
+    { "KibitzCommand",    "string","0","0",     "tellall"   , NULL,0,NNB,  PG|XBOARD}, \r
+    { "KibitzDelay",      "check","0","10000",  "5"         , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { "ShowPonder",       "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
+    { "ShowPonder",       "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
    // work-arounds\r
 \r
-    { "UCIVersion",       "spin","1","2",       "2"         , NULL,0,{},  PG|XBOARD}, \r
-    { "CanPonder",        "check","1","2",      "false"     , NULL,0,{},  PG|XBOARD}, \r
-    { "SyncStop",         "check","1","2",      "false"     , NULL,0,{},  PG|XBOARD}, \r
-    { "Affinity",            "spin","-1","32",     "-1"        , NULL,0,{},  PG}, \r
-    { "RepeatPV",            "check","0","0",      "false"     , NULL,0,{},  PG|XBOARD},\r
-    { "PromoteWorkAround","check","0","0",      "false"     , NULL,0,{},  PG|XBOARD}, \r
+    { "UCIVersion",       "spin","1","2",       "2"         , NULL,0,NNB,  PG|XBOARD}, \r
+    { "CanPonder",        "check","1","2",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
+    { "SyncStop",         "check","1","2",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
+    { "Affinity",            "spin","-1","32",     "-1"        , NULL,0,NNB,  PG}, \r
+    { "RepeatPV",            "check","0","0",      "true"     , NULL,0,NNB,  PG|XBOARD},\r
+    { "PromoteWorkAround","check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
-    { NULL,               NULL,"0","0",         NULL        , NULL,0,{},  0},\r
+    { NULL,               NULL,"0","0",         NULL        , NULL,0,NNB,  0},\r
 };\r
 \r
 // prototypes\r
index 5d07844..48f0c72 100644 (file)
--- a/pipe.cpp
+++ b/pipe.cpp
@@ -4,10 +4,15 @@
 
 // functions
 
-DWORD WINAPI ThreadProc(LPVOID lpParam){
+DWORD WINAPI ThreadProc(LPVOID lpParam){ 
     PipeStruct *p=(PipeStruct *) lpParam;
     while(!p->EOF_()){
-        p->ReadInput();
+        if(p->nReadEnd<LINE_INPUT_MAX_CHAR-1){
+            p->ReadInput();
+        }else{
+                // wait until there is room in buffer
+            Sleep(10);
+        }
     }
     return 0;
 }
@@ -15,7 +20,7 @@ DWORD WINAPI ThreadProc(LPVOID lpParam){
 
 
 void PipeStruct::Open(const char *szProcFile) {
-    DWORD dwMode;
+    DWORD dwMode, dwThreadId;
     HANDLE hStdinRead, hStdinWrite, hStdoutRead, hStdoutWrite;
     SECURITY_ATTRIBUTES sa;
     STARTUPINFO si;
@@ -68,7 +73,7 @@ void PipeStruct::Open(const char *szProcFile) {
                        dwMode & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT));
         FlushConsoleInputBuffer(hInput);
     } 
-    fdInput=_open_osfhandle((intptr_t) hInput,_O_RDONLY);
+    fdInput=_open_osfhandle((long) hInput,_O_RDONLY);
     if(fdInput==-1){
         my_fatal("PipeStruct::Open(): %s",my_error());
     }
@@ -84,14 +89,19 @@ void PipeStruct::Open(const char *szProcFile) {
                        FALSE,          // not signaled
                        NULL            // nameless
                        );
+    if(!hEvent){
+        my_fatal("PipeStruct::Open(): %s",my_error());
+    }
     hThread=CreateThread(NULL,         // default security
                          0,            // default stacksize
                          ThreadProc,   // worker function
                          this,         // tell worker about ourselves
                          0,            // run immediately
-                         NULL          // nameless
+                         &dwThreadId   // dropped, but needed for the call to work in Win9x
                          );          
-    
+    if(!hThread){
+        my_fatal("PipeStruct::Open(): %s",my_error());
+    }
     set_Active();
 }
 
@@ -144,14 +154,16 @@ void PipeStruct::set_Active(void){
 int PipeStruct::ReadData(void){
     DWORD dwBytes;
     char * ret;
-    
-    ret=fgets(lpReadBuffer,LINE_INPUT_MAX_CHAR,fpInput);
-    dwBytes=strlen(lpReadBuffer);
+        // No protection. Access to nReadEnd is atomic.
+        // It is not a problem that nReadEnd becomes smaller after the call.
+        // This just means we have read less than we could have. 
+    ret=fgets(lpReadBuffer,LINE_INPUT_MAX_CHAR-nReadEnd,fpInput);
     if(!ret){
         set_EOF_();
         lpReadBuffer[0]='\0';
         return 0;
     }
+    dwBytes=strlen(lpReadBuffer);
     lpReadBuffer[dwBytes]='\0';
     return dwBytes;
 }
@@ -160,19 +172,23 @@ void PipeStruct::ReadInput(void) {
   DWORD dwBytes;
   int ret;
   BOOL bSetEvent=FALSE;
+      // ReadData is outside the critical section otherwise everything
+      // would block during the blocking read
   ret=ReadData();
   EnterCriticalSection(&CriticalSection);
   if(!EOF_()){
       if(ret+nReadEnd>=LINE_INPUT_MAX_CHAR){
-          my_fatal("PipeStruct::ReadInput(): buffer overflow\n");
+          my_fatal("PipeStruct::ReadInput(): Internal error: buffer overflow\n");
       }
-      memcpy(lpBuffer+nReadEnd,lpReadBuffer,ret);
+      memcpy(lpBuffer+nReadEnd,lpReadBuffer,ret+1);
       nReadEnd += ret;
       if(!lpFeedEnd){
           lpFeedEnd = (char *) memchr(lpBuffer, '\n', nReadEnd);
       }
       if(lpFeedEnd){
           bSetEvent=TRUE;
+      }else if(nReadEnd>=LINE_INPUT_MAX_CHAR-1){
+          my_fatal("PipeStruct::ReadInput(): LINE_INPUT_MAX_CHAR is equal to %d which is too small to contain a full line of engine output or GUI input.\n",LINE_INPUT_MAX_CHAR);
       }
   }
   LeaveCriticalSection(&CriticalSection);
diff --git a/pipe.h b/pipe.h
index a8b086b..ad01c18 100644 (file)
--- a/pipe.h
+++ b/pipe.h
@@ -10,7 +10,9 @@
 
 // constants
 
-const int LINE_INPUT_MAX_CHAR = 10*4096;
+// This should be bigger than the maximum length of an engine output or GUI
+// input line.
+const int LINE_INPUT_MAX_CHAR = 40960;
 
 // defines
 
index 4dda26b..e97f815 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "POLYGLOT 6"
-.TH POLYGLOT 6 "2009-01-16" "" ""
+.TH POLYGLOT 6 "2009-07-20" "" ""
 .SH "NAME"
 PolyGlot \-  Winboard protocol to UCI protocol adapter
          \-  book engine for Polyglot books 
@@ -542,9 +542,10 @@ incorrect form (and of course promotes into a queen).
 .IX Item "RepeatPV (default: true)"
 When true, PolyGlot repeats the last pv string (which also contains
 score,depth and time usage) it got from the engine. Some engines
-however do not send a new pv string just before sending the move and
-the now old pv string might confuse debugtools that parse the winboard
-debug files.
+however do not send a new pv string just before sending the move.
+In that case the output of PolyGlot would be inconsistent. 
+When RepeatPV is false PolyGlot does not repeat the last pv string.
+Due to the way kibitzing is implemented, KibitzMove is disabled in that case. 
 .Sh "[Engine] section"
 .IX Subsection "[Engine] section"
 This section contains engine \s-1UCI\s0 options.  PolyGlot does not
index 71fd17c..be5d260 100644 (file)
@@ -506,10 +506,10 @@ incorrect form (and of course promotes into a queen).
 
 When true, PolyGlot repeats the last pv string (which also contains
 score,depth and time usage) it got from the engine. Some engines
-however do not send a new pv string just before sending the move and
-the now old pv string might confuse debugtools that parse the winboard
-debug files.
-
+however do not send a new pv string just before sending the move.
+In that case the output of PolyGlot would be inconsistent. 
+When RepeatPV is false PolyGlot does not repeat the last pv string.
+Due to the way kibitzing is implemented, KibitzMove is disabled in that case. 
 
 =back
 
index 8ccf2f1..851557d 100644 (file)
@@ -1,6 +1,6 @@
 Summary: A Winboard protocol to UCI protocol adapter
 Name: polyglot
-Version: 1.4w10UCIb22
+Version: 1.4w10UCIb24
 Release: 1
 License: GPL
 Group: Amusement/Games
index 687d632..72e81e4 100644 (file)
@@ -839,7 +839,7 @@ static void comp_move(int move) {
    ASSERT(State->state==THINK);\r
    ASSERT(!XB->analyse);\r
 \r
-   if(option_get_bool("RepeatPV")==true)\r
+   if(option_get_bool("RepeatPV"))\r
           send_pv(); // to update time and nodes\r
 \r
    // send the move\r