Seirawan gatings on castling
[capablanca.git] / lasker-2.2.3 / src / eco.c
index bc3a115..5f98267 100644 (file)
@@ -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 (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);
       }
     }
   }
@@ -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;  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++;
       }
     }