X-Git-Url: http://winboard.nl/cgi-bin?p=capablanca.git;a=blobdiff_plain;f=lasker-2.2.3%2Fsrc%2Feco.c;h=5f9826739a60f4fc20b6b737c93e10a49a5f4c55;hp=bc3a1155c74c6ffecc5cc0bc0eaa98b49bc08c75;hb=5317b80b41045bd23473faf4748a9539a06e5f52;hpb=76f1e81b3426b94e1d80c9daa309f78045e5335b diff --git a/lasker-2.2.3/src/eco.c b/lasker-2.2.3/src/eco.c index bc3a115..5f98267 100644 --- a/lasker-2.2.3/src/eco.c +++ b/lasker-2.2.3/src/eco.c @@ -50,19 +50,20 @@ void FEN_to_board(char* FENpos, struct game_state_t* gs) { int f,r; char next; - - - for (r=7; r >=0; r--) { +printf("FEN='%s', var='%s'\n", FENpos, gs->variant); + for (r=gs->ranks-1; r >=0; r--) { f=0; - while (f<8) { + while (ffiles) { next = *(FENpos++); if (isalpha(next)) - gs->board[f++][r] = CharToPiece(next); + gs->board[f++][r] = CharToPiece(next, gs->variant); else if (next != '/') { int t = (next - '0'); + if(*FENpos >= '0' && *FENpos <= '9') // [HGM] can be double-digit + t = 10*t + *(FENpos++) - '0'; do gs->board[f++][r] = NOPIECE; - while (--t); + while (--t && f < gs->files); } } } @@ -79,19 +80,21 @@ static void board_to_FEN(char* FENpos, struct game_state_t* gs) int f,r,count; char piece; - for (r=7; r>=0; r--) { + for (r=gs->ranks-1; r>=0; r--) { count = 0; - for (f=0; f<8; f++) { + for (f=0; ffiles; f++) { if ((piece = PieceToChar(gs->board[f][r])) != ' ') { if (count) { + if(count > 9) { count -= 10; *(FENpos++) = '1'; } *(FENpos++) = count + '0'; count = 0; } *(FENpos++) = piece; } else { - if (f == 7) + if (f == gs->files-1) { + if(count > 8) { count -= 10; *(FENpos++) = '1'; } *(FENpos++) = count + '0' + 1; - else + } else count++; } }