aboutsummaryrefslogtreecommitdiff
path: root/src/core/moves.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/moves.h')
-rw-r--r--src/core/moves.h24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/core/moves.h b/src/core/moves.h
index f0d7646..28abc7f 100644
--- a/src/core/moves.h
+++ b/src/core/moves.h
@@ -18,7 +18,7 @@ STATIC cube_t applymoves(cube_t, const char *);
18STATIC cube_t frommoves(const char *); 18STATIC cube_t frommoves(const char *);
19 19
20#define FOREACH_READMOVE(ARG_BUF, ARG_MOVE, ARG_C, ARG_MAX, \ 20#define FOREACH_READMOVE(ARG_BUF, ARG_MOVE, ARG_C, ARG_MAX, \
21 LABEL_ERROR, ARG_ACTION) \ 21 RET_ERROR, ARG_ACTION) \
22 const char *VAR_B; \ 22 const char *VAR_B; \
23 uint8_t VAR_MOVE_NOMOD, VAR_MOD; \ 23 uint8_t VAR_MOVE_NOMOD, VAR_MOD; \
24 for (VAR_B = ARG_BUF, ARG_C = 0; *VAR_B != '\0'; VAR_B++, ARG_C++) { \ 24 for (VAR_B = ARG_BUF, ARG_C = 0; *VAR_B != '\0'; VAR_B++, ARG_C++) { \
@@ -26,8 +26,10 @@ STATIC cube_t frommoves(const char *);
26 VAR_B++; \ 26 VAR_B++; \
27 if (*VAR_B == '\0' || ARG_C == ARG_MAX) \ 27 if (*VAR_B == '\0' || ARG_C == ARG_MAX) \
28 break; \ 28 break; \
29 if ((VAR_MOVE_NOMOD = readmove(*VAR_B)) == UINT8_ERROR) \ 29 if ((VAR_MOVE_NOMOD = readmove(*VAR_B)) == UINT8_ERROR) { \
30 goto LABEL_ERROR; \ 30 LOG("Error: unknown move '%c'\n", *VAR_B); \
31 return RET_ERROR; \
32 } \
31 if ((VAR_MOD = readmodifier(*(VAR_B+1))) != 0) \ 33 if ((VAR_MOD = readmodifier(*(VAR_B+1))) != 0) \
32 VAR_B++; \ 34 VAR_B++; \
33 ARG_MOVE = VAR_MOVE_NOMOD + VAR_MOD; \ 35 ARG_MOVE = VAR_MOVE_NOMOD + VAR_MOD; \
@@ -124,7 +126,7 @@ move(cube_t c, uint8_t m)
124 case MOVE_B3: 126 case MOVE_B3:
125 return MOVE(B3, c); 127 return MOVE(B3, c);
126 default: 128 default:
127 LOG("move error, unknown move\n"); 129 LOG("move error: unknown move %" PRIu8 "\n", m);
128 return ZERO_CUBE; 130 return ZERO_CUBE;
129 } 131 }
130} 132}
@@ -171,7 +173,7 @@ premove(cube_t c, uint8_t m)
171 case MOVE_B3: 173 case MOVE_B3:
172 return PREMOVE(B, c); 174 return PREMOVE(B, c);
173 default: 175 default:
174 LOG("move error, unknown move\n"); 176 LOG("premove error: unknown move %" PRIu8 "\n", m);
175 return ZERO_CUBE; 177 return ZERO_CUBE;
176 } 178 }
177} 179}
@@ -222,15 +224,11 @@ readmoves(const char *buf, int max, uint8_t *ret)
222 uint8_t m; 224 uint8_t m;
223 int c; 225 int c;
224 226
225 FOREACH_READMOVE(buf, m, c, max, readmoves_error, 227 FOREACH_READMOVE(buf, m, c, max, -1,
226 ret[c] = m; 228 ret[c] = m;
227 ) 229 )
228 230
229 return c; 231 return c;
230
231readmoves_error:
232 LOG("readmoves error\n");
233 return -1;
234} 232}
235 233
236STATIC cube_t 234STATIC cube_t
@@ -242,15 +240,11 @@ applymoves(cube_t cube, const char *buf)
242 DBG_ASSERT(isconsistent(cube), ZERO_CUBE, 240 DBG_ASSERT(isconsistent(cube), ZERO_CUBE,
243 "move error: inconsistent cube\n"); 241 "move error: inconsistent cube\n");
244 242
245 FOREACH_READMOVE(buf, m, c, -1, applymoves_error, 243 FOREACH_READMOVE(buf, m, c, -1, ZERO_CUBE,
246 cube = move(cube, m); 244 cube = move(cube, m);
247 ) 245 )
248 246
249 return cube; 247 return cube;
250
251applymoves_error:
252 LOG("applymoves error\n");
253 return ZERO_CUBE;
254} 248}
255 249
256STATIC cube_t 250STATIC cube_t

Generated with cgit - Back to sebastiano.tronto.net