aboutsummaryrefslogtreecommitdiff
path: root/shell/shell.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--shell/shell.c28
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 *);
79static bool set_cube_perm(int, char **, args_t *); 81static bool set_cube_perm(int, char **, args_t *);
80static bool set_str_command(int, char **, args_t *); 82static bool set_str_command(int, char **, args_t *);
81static bool set_str_cube(int, char **, args_t *); 83static bool set_str_cube(int, char **, args_t *);
84static bool set_str_options(int, char **, args_t *);
82static bool set_str_format(int, char **, args_t *); 85static bool set_str_format(int, char **, args_t *);
83static bool set_str_format_in(int, char **, args_t *); 86static bool set_str_format_in(int, char **, args_t *);
84static bool set_str_format_out(int, char **, args_t *); 87static 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
501solve_exec_error:
502 free(buf);
503 return -2;
494} 504}
495 505
496static int64_t 506static int64_t
@@ -655,6 +665,14 @@ set_str_cube(int argc, char **argv, args_t *args)
655} 665}
656 666
657static bool 667static bool
668set_str_options(int argc, char **argv, args_t *args)
669{
670 args->str_options = argv[0];
671
672 return true;
673}
674
675static bool
658set_str_format(int argc, char **argv, args_t *args) 676set_str_format(int argc, char **argv, args_t *args)
659{ 677{
660 args->str_format = argv[0]; 678 args->str_format = argv[0];

Generated with cgit - Back to sebastiano.tronto.net