src/chess/fen.c

changeset 133
c58ae152733e
parent 132
5762f2b5f87a
child 134
ce2d285d2ccb
--- a/src/chess/fen.c	Sun Jun 07 16:56:22 2026 +0200
+++ b/src/chess/fen.c	Fri Jun 12 13:34:35 2026 +0200
@@ -72,11 +72,7 @@
 }
 
 static size_t fen_color(char *str, GameState *gamestate) {
-    uint8_t color = opponent_color(gamestate->movecount > 0 ?
-        (last_move(gamestate).piece & COLOR_MASK) : BLACK);
-
-    str[0] = color == WHITE ? 'w' : 'b';
-
+    str[0] = current_color(gamestate) == WHITE ? 'w' : 'b';
     return 1;
 }
 
@@ -121,7 +117,7 @@
 
 static size_t fen_enpassant(char *str, GameState *gamestate) {
 
-    str[0] = '-'; str[1] = '\0';
+    str[0] = '-';
 
     for (int file = 0 ; file < 8 ; file++) {
         if (gamestate->board[3][file] & ENPASSANT_THREAT) {
@@ -155,17 +151,22 @@
     return sprintf(str, "%u", gamestate->movecount);
 }
 
+static size_t fen_space(char *str) {
+    *str = ' ';
+    return 1;
+}
+
 void fen_compute(char *str, GameState *gamestate) {
     str += fen_pieces(str, gamestate);
-    *str = ' '; str++;
+    str += fen_space(str);
     str += fen_color(str, gamestate);
-    *str = ' '; str++;
+    str += fen_space(str);
     str += fen_castling(str, gamestate);
-    *str = ' '; str++;
+    str += fen_space(str);
     str += fen_enpassant(str, gamestate);
-    *str = ' '; str++;
+    str += fen_space(str);
     str += fen_halfmove(str, gamestate);
-    *str = ' '; str++;
+    str += fen_space(str);
     str += fen_movenr(str, gamestate);
-    str[0] = '\0';
+    *str = '\0';
 }

mercurial