diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-03-09 07:43:37 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-03-09 07:43:37 +0100 |
| commit | 11e6aeeaf5f08839c6effb8f68710081acf491bf (patch) | |
| tree | 8aab442a637fd35bb457946926fd9bc749ee0467 /shell/shell.c | |
| parent | 110e079f81277b40ec76be0b86b074a632496109 (diff) | |
| download | nissy-core-11e6aeeaf5f08839c6effb8f68710081acf491bf.tar.gz nissy-core-11e6aeeaf5f08839c6effb8f68710081acf491bf.zip | |
Working (?) version of coordinate solver
Diffstat (limited to '')
| -rw-r--r-- | shell/shell.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/shell/shell.c b/shell/shell.c index 5a2d283..2853350 100644 --- a/shell/shell.c +++ b/shell/shell.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #define FLAG_PERM "-perm" | 17 | #define FLAG_PERM "-perm" |
| 18 | #define FLAG_COMMAND "-command" | 18 | #define FLAG_COMMAND "-command" |
| 19 | #define FLAG_STR_CUBE "-cubestr" | 19 | #define FLAG_STR_CUBE "-cubestr" |
| 20 | #define FLAG_SOLVE_OPTS "-options" | ||
| 20 | #define FLAG_FORMAT "-format" | 21 | #define FLAG_FORMAT "-format" |
| 21 | #define FLAG_FORMAT_IN "-fin" | 22 | #define FLAG_FORMAT_IN "-fin" |
| 22 | #define FLAG_FORMAT_OUT "-fout" | 23 | #define FLAG_FORMAT_OUT "-fout" |
| @@ -44,6 +45,7 @@ typedef struct { | |||
| 44 | char cube_perm[22]; | 45 | char cube_perm[22]; |
| 45 | char *str_command; | 46 | char *str_command; |
| 46 | char *str_cube; | 47 | char *str_cube; |
| 48 | char *str_options; | ||
| 47 | char *str_format; | 49 | char *str_format; |
| 48 | char *str_format_in; | 50 | char *str_format_in; |
| 49 | char *str_format_out; | 51 | char *str_format_out; |
| @@ -79,6 +81,7 @@ static bool set_cube(int, char **, args_t *); | |||
| 79 | static bool set_cube_perm(int, char **, args_t *); | 81 | static bool set_cube_perm(int, char **, args_t *); |
| 80 | static bool set_str_command(int, char **, args_t *); | 82 | static bool set_str_command(int, char **, args_t *); |
| 81 | static bool set_str_cube(int, char **, args_t *); | 83 | static bool set_str_cube(int, char **, args_t *); |
| 84 | static bool set_str_options(int, char **, args_t *); | ||
| 82 | static bool set_str_format(int, char **, args_t *); | 85 | static bool set_str_format(int, char **, args_t *); |
| 83 | static bool set_str_format_in(int, char **, args_t *); | 86 | static bool set_str_format_in(int, char **, args_t *); |
| 84 | static bool set_str_format_out(int, char **, args_t *); | 87 | static bool set_str_format_out(int, char **, args_t *); |
| @@ -105,6 +108,7 @@ struct { | |||
| 105 | OPTION(FLAG_PERM, 1, set_cube_perm), | 108 | OPTION(FLAG_PERM, 1, set_cube_perm), |
| 106 | OPTION(FLAG_COMMAND, 1, set_str_command), | 109 | OPTION(FLAG_COMMAND, 1, set_str_command), |
| 107 | OPTION(FLAG_STR_CUBE, 1, set_str_cube), | 110 | OPTION(FLAG_STR_CUBE, 1, set_str_cube), |
| 111 | OPTION(FLAG_SOLVE_OPTS, 1, set_str_options), | ||
| 108 | OPTION(FLAG_FORMAT, 1, set_str_format), | 112 | OPTION(FLAG_FORMAT, 1, set_str_format), |
| 109 | OPTION(FLAG_FORMAT_IN, 1, set_str_format_in), | 113 | OPTION(FLAG_FORMAT_IN, 1, set_str_format_in), |
| 110 | OPTION(FLAG_FORMAT_OUT, 1, set_str_format_out), | 114 | OPTION(FLAG_FORMAT_OUT, 1, set_str_format_out), |
| @@ -197,6 +201,7 @@ struct { | |||
| 197 | "solve", | 201 | "solve", |
| 198 | "solve " FLAG_SOLVER " SOLVER" | 202 | "solve " FLAG_SOLVER " SOLVER" |
| 199 | "[" FLAG_MINMOVES " n] [" FLAG_MAXMOVES " N] " | 203 | "[" FLAG_MINMOVES " n] [" FLAG_MAXMOVES " N] " |
| 204 | "[" FLAG_SOLVE_OPTS " options] " | ||
| 200 | FLAG_CUBE " CUBE" | 205 | FLAG_CUBE " CUBE" |
| 201 | FLAG_THREADS " T", | 206 | FLAG_THREADS " T", |
| 202 | "Solve the given CUBE using SOLVER, " | 207 | "Solve the given CUBE using SOLVER, " |
| @@ -208,6 +213,7 @@ struct { | |||
| 208 | "solve_scramble", | 213 | "solve_scramble", |
| 209 | "solve_scramble " FLAG_SOLVER " SOLVER" | 214 | "solve_scramble " FLAG_SOLVER " SOLVER" |
| 210 | "[" FLAG_MINMOVES " n] [" FLAG_MAXMOVES " N] " | 215 | "[" FLAG_MINMOVES " n] [" FLAG_MAXMOVES " N] " |
| 216 | "[" FLAG_SOLVE_OPTS " options] " | ||
| 211 | FLAG_MOVES " MOVES", | 217 | FLAG_MOVES " MOVES", |
| 212 | "Solve the given SCRAMBLE using SOLVER, " | 218 | "Solve the given SCRAMBLE using SOLVER, " |
| 213 | "using at least n and at most N moves. " | 219 | "using at least n and at most N moves. " |
| @@ -473,15 +479,15 @@ solve_exec(args_t *args) | |||
| 473 | fclose(file); | 479 | fclose(file); |
| 474 | if (read != 1) { | 480 | if (read != 1) { |
| 475 | fprintf(stderr, "Error reading data from file: " | 481 | fprintf(stderr, "Error reading data from file: " |
| 476 | "fread() returned %zu instead of 1 when attempting to" | 482 | "fread() returned %zu instead of 1 when attempting to " |
| 477 | "read %" PRId64 " bytes from file %s\n", read, size, path); | 483 | "read %" PRId64 " bytes from file %s\n", read, size, path); |
| 478 | return -2; | 484 | goto solve_exec_error; |
| 479 | } | 485 | } |
| 480 | 486 | ||
| 481 | ret = nissy_solve( | 487 | ret = nissy_solve( |
| 482 | args->cube, args->str_solver, nissflag, args->minmoves, | 488 | args->cube, args->str_solver, args->str_options, nissflag, |
| 483 | args->maxmoves, args->maxsolutions, args->optimal, args->threads, | 489 | args->minmoves, args->maxmoves, args->maxsolutions, args->optimal, |
| 484 | size, buf, SOLUTIONS_BUFFER_SIZE, solutions, stats); | 490 | args->threads, size, buf, SOLUTIONS_BUFFER_SIZE, solutions, stats); |
| 485 | 491 | ||
| 486 | free(buf); | 492 | free(buf); |
| 487 | 493 | ||
| @@ -491,6 +497,10 @@ solve_exec(args_t *args) | |||
| 491 | printf("%s", solutions); | 497 | printf("%s", solutions); |
| 492 | 498 | ||
| 493 | return 0; | 499 | return 0; |
| 500 | |||
| 501 | solve_exec_error: | ||
| 502 | free(buf); | ||
| 503 | return -2; | ||
| 494 | } | 504 | } |
| 495 | 505 | ||
| 496 | static int64_t | 506 | static int64_t |
| @@ -655,6 +665,14 @@ set_str_cube(int argc, char **argv, args_t *args) | |||
| 655 | } | 665 | } |
| 656 | 666 | ||
| 657 | static bool | 667 | static bool |
| 668 | set_str_options(int argc, char **argv, args_t *args) | ||
| 669 | { | ||
| 670 | args->str_options = argv[0]; | ||
| 671 | |||
| 672 | return true; | ||
| 673 | } | ||
| 674 | |||
| 675 | static bool | ||
| 658 | set_str_format(int argc, char **argv, args_t *args) | 676 | set_str_format(int argc, char **argv, args_t *args) |
| 659 | { | 677 | { |
| 660 | args->str_format = argv[0]; | 678 | args->str_format = argv[0]; |
