improve move number parsing - chess-puzzles - chess puzzle book generator
(HTM) git clone git://git.codemadness.org/chess-puzzles
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit dab21427a28e5561843d56cb4de324cddd4c53c7
(DIR) parent 30a2ab3dd2979115341beaedc6d4a4918541036a
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 20 Dec 2023 19:26:23 +0100
improve move number parsing
Diffstat:
M fen_to_svg.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
---
(DIR) diff --git a/fen_to_svg.c b/fen_to_svg.c
@@ -1,3 +1,4 @@
+/* TODO: write some test-cases for parsing and output FEN */
/* TODO: option to flip board? */
#include <ctype.h>
@@ -420,7 +421,7 @@ main(int argc, char *argv[])
/* initial board state, FEN format */
x = y = field = 0;
- for (s = fen; *s; s++) {
+ for (s = fen; *s && field < 6; s++) {
switch (field) {
case 0: /* piece placement data */
/* skip square */
@@ -478,7 +479,9 @@ main(int argc, char *argv[])
l = strtol(s, NULL, 10);
if (l >= 0 && l < 32767) {
halfmove = l;
- s += strspn(s, "0123456789");
+
+ for (; *s && isdigit((unsigned char)*s); s++)
+ ;
}
break;
case 5: /* move number */
@@ -487,11 +490,15 @@ main(int argc, char *argv[])
l = strtol(s, NULL, 10);
if (l >= 0 && l < 32767) {
- movenumber = l;
- s += strspn(s, "0123456789");
+ movenumber = (int)l;
+ for (; *s && isdigit((unsigned char)*s); s++)
+ ;
}
break;
}
+ if (!*s)
+ break;
+
/* TODO: parse which side to move, en-passant, etc */
/* next field, fields are: piece placement data, active color,