X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=book.c;h=893dee88ac84f2214549756623e47357af1478c4;hb=55bcdf9838f790e70d828225a2c008ea7eb2a662;hp=e42b9c6e5099e0a3560bcd28b384e2d26dca88fc;hpb=07a96d271c45508c7b628f77a88b6a4032bb0fd8;p=xboard.git diff --git a/book.c b/book.c index e42b9c6..893dee8 100644 --- a/book.c +++ b/book.c @@ -37,6 +37,15 @@ #include "common.h" #include "backend.h" #include "moves.h" +#include "gettext.h" + +#ifdef ENABLE_NLS +# define _(s) gettext (s) +# define N_(s) gettext_noop (s) +#else +# define _(s) (s) +# define N_(s) s +#endif #ifdef _MSC_VER typedef unsigned __int64 uint64; @@ -44,7 +53,6 @@ typedef unsigned long long int uint64; #endif - #ifdef _MSC_VER # define U64(u) (u##ui64) #else @@ -278,6 +286,23 @@ uint64 hash(int moveNr) { int r, f, p_enc, squareNr, pieceGroup; uint64 key=0, holdingsKey=0, Zobrist; + VariantClass v = gameInfo.variant; + + switch(v) { + case VariantNormal: + case VariantFischeRandom: // compatible with normal + case VariantNoCastle: + case VariantXiangqi: // for historic reasons; does never collide anyway because of other King type + break; + case VariantGiveaway: // in opening same as suicide + key += VariantSuicide; + break; + case VariantGothic: // these are special cases of CRC, and can share book + case VariantCapablanca: + v = VariantCapaRandom; + default: + key += v; // variant type incorporated in key to allow mixed books without collisions + } for(f=0; f j) break; } - if(i >= count) DisplayFatalError("Book Fault", 0, 1); // safety catch, cannot happen + if(i >= count) DisplayFatalError(_("Book Fault"), 0, 1); // safety catch, cannot happen move_to_string(move_s, entries[i].move); if(appData.debugMode) fprintf(debugFP, "book move field = %d\n", entries[i].move); @@ -658,10 +683,10 @@ void SaveToBook(char *text) FILE *f; if(!count && !currentCount) return; f=fopen(appData.polyglotBook, "rb+"); - if(!f){ DisplayError("Polyglot book not valid", 0); return; } + if(!f){ DisplayError(_("Polyglot book not valid"), 0); return; } offset=find_key(f, entries[0].key, &entry); if(entries[0].key != entry.key && currentCount) { - DisplayError("Hash keys are different", 0); + DisplayError(_("Hash keys are different"), 0); fclose(f); return; } @@ -676,8 +701,10 @@ void SaveToBook(char *text) if(count != currentCount) { do { for(i=0; i writepos) { + fseek(f, readpos, SEEK_SET); + readpos += len1 = fread(buf1, 1, 4096, f); + } else len1 = 0; // wrote already past old EOF fseek(f, writepos, SEEK_SET); fwrite(buf2, 1, len2, f); writepos += len2;