Limit Hash setting to engine's maximum
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 25 Jan 2021 13:07:42 +0000 (14:07 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 25 Jan 2021 13:07:42 +0000 (14:07 +0100)
The hash-table size requested through the CECP 'memory' command will now
be reduced to the maximum the engine specified in its Hash option
command, if it was larger. Before it was just passed on 'as is'.

UCI2WB.c

index 58f4ab2..76997e9 100644 (file)
--- a/UCI2WB.c
+++ b/UCI2WB.c
@@ -348,7 +348,7 @@ HandleEngineOutput()
            if(!strcasecmp(name, "Threads")) { strcpy(threadOpt, name); continue; }\r
            if(!strcasecmp(name, "Ponder") || !strcasecmp(name, "USI_Ponder")) { strcpy(canPonder, name); continue; }\r
            if(!strcasecmp(name, "Hash") || !strcasecmp(name, "USI_Hash") || !strcasecmp(name, "hashsize")) {\r
-               memory = oldMem = atoi(val); hasHash = 1\r
+               memory = oldMem = atoi(val); hasHash = max\r
                strcpy(hashOpt, name);\r
                continue;\r
            }\r
@@ -398,7 +398,7 @@ HandleEngineOutput()
            if(!*varList) strcpy(varList, sc=='s' ? ",shogi,5x5+5_shogi" : VARIANTS); // without clue guess liberally\r
            printf("feature variants=\"%s\"\n", varList+1); // from UCI_Variant combo and/or UCI_Chess960 check options\r
            if(*egts) printf("feature egt=\"%s\"\n", egts+1);\r
-           printf("feature smp=1 memory=%d done=1\n", hasHash);\r
+           printf("feature smp=1 memory=%d done=1\n", hasHash > 0);\r
            if(unit == 2) { unit = 1; EPRINT((f, "# setoption usemillisec true\n")) }\r
            fflush(stdout); return; // done with options\r
        }\r
@@ -623,7 +623,7 @@ DoCommand ()
        else if(!strcmp(command, "force"))  computer = NONE;\r
        else if(!strcmp(command, "go"))     computer = stm;\r
        else if(!strcmp(command, "ping"))   { /* static int done; if(!done) pause = 1, fprintf(toE, "isready\n"), fflush(toE), printf("# send isready\n"), fflush(stdout), Sync(PAUSE); done = 1;*/ printf("po%s", line+2); }\r
-       else if(!strcmp(command, "memory")) sscanf(line, "memory %d", &memory);\r
+       else if(!strcmp(command, "memory")) { sscanf(line, "memory %d", &memory); if(memory > hasHash) memory = hasHash; }\r
        else if(!strcmp(command, "cores")&& !!*threadOpt) { sscanf(line, "cores %d", &cores); EPRINT((f, "# setoption %s%s %s%d\n", nameWord, threadOpt, valueWord, cores)) }\r
        else if(!strcmp(command, "egtpath")){\r
            sscanf(line+8, "%s %[^\n]", type, command);\r