version 1.4.36b
authorH.G. Muller <h.g.muller@hccnet.nl>
Thu, 9 Jun 2011 07:59:21 +0000 (09:59 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Thu, 9 Jun 2011 07:59:21 +0000 (09:59 +0200)
16 files changed:
ChangeLog
README
board.c
config.h
configure
configure.ac
main.c
option.c
pipex_win32.c
polyglot.man
polyglot.pod
polyglot.spec
uci.c
util.c
util.h
xboard2uci.c

index ea9082b..9bae4d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+=========1.4.36b================\r
+- Bugfix: option = 0/1 was translated incorrectly.\r
+- Default node count is 1.\r
+- EOF received from the engine should now be logged correctly (i.e. after the buffer is empty).\r
+- Bugfix: Nasty buffer overflow in the macro CONSTRUCT_ARG_STRING.\r
+- Bugfix: pipex_writeln (win32) was logging at the wrong spot. \r
+- Log board when an illegal move is received. \r
 =========1.4.35b================\r
 - New WbWorkAround for silly bug in WB. Depth <=1 clears the engine output window. Why should an engine not be allowed to send info at depth one?\r
 =========1.4.34b================\r
diff --git a/README b/README
index df31a94..b523a6d 100644 (file)
--- a/README
+++ b/README
@@ -440,15 +440,20 @@ CONFIG FILE FORMAT
            case.
 
        WbWorkArounds (default: true)
-           The intention of this option is to provide work arounds for
-           xboard/winboard bugs should they arise.  Currently it decapitalizes
-           the word Draw in options that contain this word. Some versions of
+           The intention of these options is to provide work arounds for
+           xboard/winboard bugs should they arise.  This one decapitalizes the
+           word Draw in options that contain this word. Some versions of
            xboard/winboard contain a bug which causes such options to be
            interpreted as draw claims by the engine.
 
            Engines that send options with "Draw" in their name are Rybka and
            HIARCS.
 
+       WbWorkArounds2 (default: false)
+           Old version of Winboard clear the engine output window at depth 1.
+           With this work around PG will send info lines at depth >=2. This
+           may or may not improve the display.
+
        [Engine] section
 
        This section contains engine UCI options.  PolyGlot does not understand
@@ -521,4 +526,4 @@ SEE ALSO
 
 
 
-                                  2009-08-07                       POLYGLOT(6)
+                                  2009-08-11                       POLYGLOT(6)
diff --git a/board.c b/board.c
index b17d354..8c51a88 100644 (file)
--- a/board.c
+++ b/board.c
@@ -459,31 +459,31 @@ void board_disp(const board_t * board) {
    int file, rank, sq;\r
    int piece, c;\r
    char fen[256];\r
+   char row[9];\r
+   char line[256];\r
 \r
    ASSERT(board!=NULL);\r
 \r
    if (!board_to_fen(board,fen,256)) ASSERT(FALSE);\r
-   my_log("POLYGLOT %s\n",fen);\r
-   my_log("POLYGLOT\n");\r
+   my_log("POLYGLOT FEN %s\n",fen);\r
+   my_log("POLYGLOT *** CURRENT BOARD ***\n");\r
 \r
    for (rank = 7; rank >= 0; rank--) {\r
 \r
-      my_log("POLYGLOT ");\r
-\r
       for (file = 0; file < 8; file++) {\r
 \r
          sq = square_make(file,rank);\r
          piece = board->square[sq];\r
 \r
          c = (piece != Empty) ? piece_to_char(piece) : '-';\r
-         my_log("%c ",c);\r
+         row[file]=c;\r
       }\r
-\r
-      my_log("\n");\r
+      row[8]='\0';\r
+      snprintf(line,sizeof(line),"POLYGLOT %s\n",row);\r
+      line[sizeof(line)-1]='\0';\r
+      my_log(line);\r
    }\r
 \r
-   my_log("POLYGLOT\n");\r
-\r
    my_log("POLYGLOT %s to play\n",(colour_is_black(board->turn))?"black":"white");\r
    my_log("POLYGLOT\n");\r
 }\r
index 4d18e66..5076fe9 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.4.35b"
+#define PACKAGE_STRING "polyglot 1.4.36b"
 
 /* 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.4.35b"
+#define PACKAGE_VERSION "1.4.36b"
 
 /* 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.4.35b"
+#define VERSION "1.4.36b"
 
 /* Define like PROTOTYPES; this can be used by system headers. */
 #define __PROTOTYPES 1
index 62d838e..df485e1 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.4.35b.
+# Generated by GNU Autoconf 2.61 for polyglot 1.4.36b.
 #
 # 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.4.35b'
-PACKAGE_STRING='polyglot 1.4.35b'
+PACKAGE_VERSION='1.4.36b'
+PACKAGE_STRING='polyglot 1.4.36b'
 PACKAGE_BUGREPORT='michel.vandenbergh@uhasselt.be'
 
 ac_unique_file="mainloop.c"
@@ -1207,7 +1207,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.4.35b to adapt to many kinds of systems.
+\`configure' configures polyglot 1.4.36b to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1273,7 +1273,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of polyglot 1.4.35b:";;
+     short | recursive ) echo "Configuration of polyglot 1.4.36b:";;
    esac
   cat <<\_ACEOF
 
@@ -1357,7 +1357,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-polyglot configure 1.4.35b
+polyglot configure 1.4.36b
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1371,7 +1371,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.4.35b, which was
+It was created by polyglot $as_me 1.4.36b, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -2061,7 +2061,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='polyglot'
- VERSION='1.4.35b'
+ VERSION='1.4.36b'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -6848,7 +6848,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.4.35b, which was
+This file was extended by polyglot $as_me 1.4.36b, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6901,7 +6901,7 @@ Report bugs to <bug-autoconf@gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-polyglot config.status 1.4.35b
+polyglot config.status 1.4.36b
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
index 42efee9..fa15e53 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.61)
-AC_INIT([polyglot], [1.4.35b], [michel.vandenbergh@uhasselt.be])
+AC_INIT([polyglot], [1.4.36b], [michel.vandenbergh@uhasselt.be])
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([mainloop.c])
 AC_CONFIG_HEADER([config.h])
diff --git a/main.c b/main.c
index e34fb05..e49f51d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -35,7 +35,7 @@
 // constants\r
 \r
 \r
-static const char * const Version = "1.4.35b";\r
+static const char * const Version = "1.4.36b";\r
 static const char * const HelpMessage = "\\r
 SYNTAX\n\\r
 * polyglot [configfile]\n\\r
index 8d067b8..cb2b5a8 100644 (file)
--- a/option.c
+++ b/option.c
@@ -71,6 +71,7 @@ option_t DefaultOptions[] = {
     { "PromoteWorkAround","check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
     { "WbWorkArounds",    "check","0","0",      "true"     , NULL,0,NNB,  PG|XBOARD}, \r
+    { "WbWorkArounds2",   "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
     { NULL,               NULL,"0","0",         NULL        , NULL,0,NNB,  0},\r
 \r
 };\r
index 3f9ed90..24199b7 100644 (file)
@@ -219,10 +219,7 @@ static void pipex_set_eof_input(pipex_t *pipex){
     EnterCriticalSection(&(pipex->CriticalSection));
     (pipex->state)|=PIPEX_EOF;
     LeaveCriticalSection(&(pipex->CriticalSection));
-        // not quit the right place
-    my_log("%s->Adapter: EOF\n",pipex->name);
-
-}
+ }
 
 // pipex_active()
 
@@ -395,6 +392,7 @@ bool pipex_readln(pipex_t *pipex, char *szLineStr) {
           WaitForSingleObject(pipex->hEvent,INFINITE);
       }
   }
+  my_log("%s->Adapter: EOF\n",pipex->name);
   szLineStr[0]='\0';
   return FALSE;
 }
@@ -474,8 +472,8 @@ void pipex_write(pipex_t *pipex, const char *szLineStr) {
 void pipex_writeln(pipex_t *pipex, const char *szLineStr) {
   DWORD dwBytes;
   DWORD dwLengthWriteBuffer;
-  my_log("Adapter->%s: %s\n",pipex->name,pipex->szWriteBuffer);
   pipex_write(pipex, szLineStr);
+  my_log("Adapter->%s: %s\n",pipex->name,pipex->szWriteBuffer);
   if(pipex->bPipe){
       dwLengthWriteBuffer = strlen(pipex->szWriteBuffer);
       if(dwLengthWriteBuffer>=sizeof(pipex->szWriteBuffer)-3){
index c6f8e49..58d1753 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "POLYGLOT 6"
-.TH POLYGLOT 6 "2009-08-07" "" ""
+.TH POLYGLOT 6 "2009-08-11" "" ""
 .SH "NAME"
 PolyGlot \-  Winboard protocol to UCI protocol adapter
          \-  book engine for Polyglot books 
@@ -554,13 +554,18 @@ 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. 
 .IP "\fBWbWorkArounds\fR (default: true)" 4
 .IX Item "WbWorkArounds (default: true)"
-The intention of this option is to provide work arounds for
-xboard/winboard bugs should they arise.  Currently it decapitalizes
+The intention of these options is to provide work arounds for
+xboard/winboard bugs should they arise.  This one decapitalizes
 the word Draw in options that contain this word. Some versions of
 xboard/winboard contain a bug which causes such options to be
 interpreted as draw claims by the engine.
 .Sp
 Engines that send options with \*(L"Draw\*(R" in their name are Rybka and \s-1HIARCS\s0. 
+.IP "\fBWbWorkArounds2\fR (default: false)" 4
+.IX Item "WbWorkArounds2 (default: false)"
+Old version of Winboard clear the engine output window at depth 1. With this
+work around \s-1PG\s0 will send info lines at depth >=2. This may or may not improve
+the display. 
 .Sh "[Engine] section"
 .IX Subsection "[Engine] section"
 This section contains engine \s-1UCI\s0 options.  PolyGlot does not
index 285e9b1..45287d2 100644 (file)
@@ -520,14 +520,20 @@ Due to the way kibitzing is implemented, KibitzMove is disabled in that case.
 
 =item B<WbWorkArounds> (default: true)
 
-The intention of this option is to provide work arounds for
-xboard/winboard bugs should they arise.  Currently it decapitalizes
+The intention of these options is to provide work arounds for
+xboard/winboard bugs should they arise.  This one decapitalizes
 the word Draw in options that contain this word. Some versions of
 xboard/winboard contain a bug which causes such options to be
 interpreted as draw claims by the engine.
 
 Engines that send options with "Draw" in their name are Rybka and HIARCS. 
 
+=item B<WbWorkArounds2> (default: false)
+
+Old version of Winboard clear the engine output window at depth 1. With this
+work around PG will send info lines at depth >=2. This may or may not improve
+the display. 
+
 =back
 
 
index 3a823ab..2c9413d 100644 (file)
@@ -1,6 +1,6 @@
 Summary: A Winboard protocol to UCI protocol adapter
 Name: polyglot
-Version: 1.4.35b
+Version: 1.4.36b
 Release: 1
 License: GPL
 Group: Amusement/Games
diff --git a/uci.c b/uci.c
index f8537e2..e44fa34 100644 (file)
--- a/uci.c
+++ b/uci.c
@@ -162,8 +162,8 @@ void uci_clear(uci_t * uci) {
    uci->best_depth = 0;\r
    uci->best_sel_depth = 0;\r
    line_clear(uci->best_pv);\r
-\r
-   uci->node_nb = 0;\r
+// make the default 1 instead of 0 so that info lines can be recognized by their node number 0\r
+   uci->node_nb = 1;\r
    uci->time = 0.0;\r
    uci->speed = 0.0;\r
    uci->cpu = 0.0;\r
@@ -666,7 +666,8 @@ static int parse_info(uci_t * uci, const char string[]) {
           }else if(my_string_case_equal(argument,"Resign")){\r
                          event |= EVENT_RESIGN;\r
           }else{\r
-              strcpy(uci->info,argument);\r
+              snprintf(uci->info,sizeof(uci->info),"%s",argument);\r
+              uci->info[sizeof(uci->info)-1]='\0';\r
               event|=EVENT_INFO;\r
           }\r
          // TODO: argument to EOS\r
@@ -692,11 +693,10 @@ static int parse_info(uci_t * uci, const char string[]) {
       } else {\r
 \r
          my_log("POLYGLOT unknown option \"%s\" for command \"%s\"\n",option,command);\r
-             // this is for buggy engines; it should probably be protected\r
+             // This should probably be protected\r
              // by a "WorkAround" option.\r
-         strcpy(uci->info,option);\r
-         strcat(uci->info," ");\r
-         strcat(uci->info,argument);\r
+         snprintf(uci->info,sizeof(uci->info),"%s %s",option,argument);\r
+         uci->info[sizeof(uci->info)-1]='\0';\r
          event|=EVENT_INFO;\r
       }\r
    }\r
diff --git a/util.c b/util.c
index 0d75adf..5e6e4f3 100644 (file)
--- a/util.c
+++ b/util.c
@@ -187,8 +187,8 @@ void my_fatal(const char format[], ...) {
 \r
     CONSTRUCT_ARG_STRING(format,string);\r
     \r
-    fprintf(stderr,format,string);\r
-    if (LogFile != NULL) fprintf(LogFile,format,&string);\r
+    fprintf(stderr,"%s",string);\r
+    if (LogFile != NULL) fprintf(LogFile,"%s",string);\r
 \r
     if (Error) { // recursive error\r
         my_log("POLYGLOT *** RECURSIVE ERROR ***\n");\r
diff --git a/util.h b/util.h
index 2b0886c..99fa6ac 100644 (file)
--- a/util.h
+++ b/util.h
@@ -77,7 +77,7 @@
                           format,                                        \\r
                           arg_list);                                     \\r
         va_end(arg_list);                                                \\r
-        buf[sizeof(buf)]='\0';                                           \\r
+        buf[sizeof(buf)-1]='\0';                                         \\r
         if(written>=sizeof(buf) || written<0){                           \\r
            my_fatal("write_buffer overflow: file \"%s\", line %d\n",     \\r
                    __FILE__,__LINE__);                                   \\r
index 529f041..d026096 100644 (file)
@@ -454,11 +454,17 @@ void xboard2uci_gui_step(char string[]) {
                 char *pg_name=Star[0];\r
                 polyglot_set_option(pg_name,value);\r
             }else{\r
-                start_protected_command();\r
-                if(!uci_send_option(Uci, name, "%s", value)){\r
+                option_t *opt=option_find(Uci->option,name);\r
+                if(opt){\r
+                    if(my_string_case_equal(opt->type,"check")){\r
+                       value=my_string_equal(value,"1")?"true":"false";\r
+                    }\r
+                    start_protected_command();\r
+                    uci_send_option(Uci, name, "%s", value);\r
+                    end_protected_command();\r
+                }else{\r
                     gui_send(GUI,"Error (unknown option): %s",name); \r
                 }\r
-                end_protected_command();\r
             }\r
         } else if (match(string,"option *")){\r
             char *name=Star[0];\r
@@ -740,6 +746,7 @@ void xboard2uci_engine_step(char string[]) {
                 gui_send(GUI,"1-0 {polyglot: resign"\r
                          " (illegal engine move black)}");\r
             }\r
+            board_disp(board);\r
             XB->result = TRUE;\r
             mess();\r
         }\r
@@ -1463,7 +1470,7 @@ static void send_board(int extra_move) {
 \r
 static void send_info() {\r
     int min_depth;\r
-    if(option_get_bool(Option,"WbWorkArounds")){\r
+    if(option_get_bool(Option,"WbWorkArounds2")){\r
             // Silly bug in some versions of WinBoard.\r
             // depth <=1 clears the engine output window.\r
             // Why shouldn't an engine be allowed to send info at depth 1?\r