X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=book.c;h=3650b0192fa5491b9fed5db4f69001feecea381b;hb=444104622a627bfee533f8828b35f2acc68c8579;hp=3a764b9dde63ff61f8b4ebddc7f24b3a244413c1;hpb=0d4aa8b0a16c1ee2bcaf4120ef37ba4d1492206e;p=xboard.git diff --git a/book.c b/book.c index 3a764b9..3650b01 100644 --- a/book.c +++ b/book.c @@ -36,6 +36,7 @@ #include "common.h" #include "backend.h" +#include "moves.h" #ifdef _MSC_VER typedef unsigned __int64 uint64; @@ -579,13 +580,14 @@ int TextToMoves(char *text, int moveNum, entry_t *entries) float dummy; int width = BOARD_RGHT - BOARD_LEFT; + entries[0].key = hashKey; // make sure key is returned even if no moves while((i=sscanf(text, "%f%%%d", &dummy, &w))==2 || (i=sscanf(text, "%d", &w))==1) { if(i == 2) text = strchr(text, '%') + 1; // skip percentage if(w == 1) text = strstr(text, "1 ") + 2; // skip weight that could be recognized as move number one valid = ParseOneMove(text, moveNum, &moveType, &fromX, &fromY, &toX, &toY, &promoChar); text = strstr(text, yy_textstr) + strlen(yy_textstr); // skip what we parsed if(!valid || moveType != NormalMove) continue; - if(*text == ' ' && sscanf(text+1, "{%d/%d}", &entries[count].learnPoints, &entries[count].learnCount) == 2) { + if(*text == ' ' && sscanf(text+1, "{%hd/%hd}", &entries[count].learnPoints, &entries[count].learnCount) == 2) { text = strchr(text+1, '}') + 1; } else { entries[count].learnPoints = 0; @@ -650,11 +652,11 @@ void SaveToBook(char *text) int count = TextToMoves(text, currentMove, entries); int offset, i, len1=0, len2, readpos=0, writepos=0; FILE *f; - if(!count) return; + if(!count && !currentCount) return; f=fopen(appData.polyglotBook, "rb+"); if(!f){ DisplayError("Polyglot book not valid", 0); return; } offset=find_key(f, entries[0].key, &entry); - if(entries[0].key != entry.key) { + if(entries[0].key != entry.key && currentCount) { DisplayError("Hash keys are different", 0); fclose(f); return; @@ -679,3 +681,4 @@ void SaveToBook(char *text) } fclose(f); } +