{
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 (f<gs->files) {
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);
}
}
}
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; f<gs->files; 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++;
}
}