diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-10 19:49:48 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-10 19:49:48 +0200 |
| commit | 5e291466fbbc45aed74f67a1b2e555d1f0c44d8f (patch) | |
| tree | ebe96c88599d55ee1b986412f1d0456f55f950a9 /src/core/moves.h | |
| parent | d4fadc24ee1993104bac7fd854ed6ca83f60ee66 (diff) | |
| download | nissy-core-5e291466fbbc45aed74f67a1b2e555d1f0c44d8f.tar.gz nissy-core-5e291466fbbc45aed74f67a1b2e555d1f0c44d8f.zip | |
Improved error messages and add some comments in nissy.h
Diffstat (limited to 'src/core/moves.h')
| -rw-r--r-- | src/core/moves.h | 24 |
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 *); | |||
| 18 | STATIC cube_t frommoves(const char *); | 18 | STATIC 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 | |||
| 231 | readmoves_error: | ||
| 232 | LOG("readmoves error\n"); | ||
| 233 | return -1; | ||
| 234 | } | 232 | } |
| 235 | 233 | ||
| 236 | STATIC cube_t | 234 | STATIC 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 | |||
| 251 | applymoves_error: | ||
| 252 | LOG("applymoves error\n"); | ||
| 253 | return ZERO_CUBE; | ||
| 254 | } | 248 | } |
| 255 | 249 | ||
| 256 | STATIC cube_t | 250 | STATIC cube_t |
