commit dab21427a28e5561843d56cb4de324cddd4c53c7
parent 30a2ab3dd2979115341beaedc6d4a4918541036a
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 20 Dec 2023 19:26:23 +0100
improve move number parsing
Diffstat:
1 file changed, 11 insertions(+), 4 deletions(-)
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,