aboutsummaryrefslogtreecommitdiff
path: root/shell/shell.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--shell/shell.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/shell/shell.c b/shell/shell.c
index 8800094..0e624c9 100644
--- a/shell/shell.c
+++ b/shell/shell.c
@@ -21,6 +21,7 @@
21#define FLAG_MOVES2 "-moves2" 21#define FLAG_MOVES2 "-moves2"
22#define FLAG_TRANS "-trans" 22#define FLAG_TRANS "-trans"
23#define FLAG_SOLVER "-solver" 23#define FLAG_SOLVER "-solver"
24#define FLAG_VARIATION "-variation"
24#define FLAG_NISSTYPE "-nisstype" 25#define FLAG_NISSTYPE "-nisstype"
25#define FLAG_MINMOVES "-m" 26#define FLAG_MINMOVES "-m"
26#define FLAG_MAXMOVES "-M" 27#define FLAG_MAXMOVES "-M"
@@ -43,6 +44,7 @@ typedef struct {
43 char *str_moves2; 44 char *str_moves2;
44 char *str_trans; 45 char *str_trans;
45 char *str_solver; 46 char *str_solver;
47 char *str_variation;
46 char *str_nisstype; 48 char *str_nisstype;
47 unsigned minmoves; 49 unsigned minmoves;
48 unsigned maxmoves; 50 unsigned maxmoves;
@@ -62,6 +64,7 @@ static int64_t solve_exec(args_t *);
62static int64_t solve_scramble_exec(args_t *); 64static int64_t solve_scramble_exec(args_t *);
63static int64_t countmoves_exec(args_t *); 65static int64_t countmoves_exec(args_t *);
64static int64_t comparemoves_exec(args_t *); 66static int64_t comparemoves_exec(args_t *);
67static int64_t variation_exec(args_t *);
65static int64_t help_exec(args_t *); 68static int64_t help_exec(args_t *);
66 69
67static int parse_args(int, char **, args_t *); 70static int parse_args(int, char **, args_t *);
@@ -75,6 +78,7 @@ static bool set_str_moves(int, char **, args_t *);
75static bool set_str_moves2(int, char **, args_t *); 78static bool set_str_moves2(int, char **, args_t *);
76static bool set_str_trans(int, char **, args_t *); 79static bool set_str_trans(int, char **, args_t *);
77static bool set_str_solver(int, char **, args_t *); 80static bool set_str_solver(int, char **, args_t *);
81static bool set_str_variation(int, char **, args_t *);
78static bool set_str_nisstype(int, char **, args_t *); 82static bool set_str_nisstype(int, char **, args_t *);
79static bool set_minmoves(int, char **, args_t *); 83static bool set_minmoves(int, char **, args_t *);
80static bool set_maxmoves(int, char **, args_t *); 84static bool set_maxmoves(int, char **, args_t *);
@@ -98,6 +102,7 @@ struct {
98 OPTION(FLAG_MOVES2, 1, set_str_moves2), 102 OPTION(FLAG_MOVES2, 1, set_str_moves2),
99 OPTION(FLAG_TRANS, 1, set_str_trans), 103 OPTION(FLAG_TRANS, 1, set_str_trans),
100 OPTION(FLAG_SOLVER, 1, set_str_solver), 104 OPTION(FLAG_SOLVER, 1, set_str_solver),
105 OPTION(FLAG_VARIATION, 1, set_str_variation),
101 OPTION(FLAG_NISSTYPE, 1, set_str_nisstype), 106 OPTION(FLAG_NISSTYPE, 1, set_str_nisstype),
102 OPTION(FLAG_MINMOVES, 1, set_minmoves), 107 OPTION(FLAG_MINMOVES, 1, set_minmoves),
103 OPTION(FLAG_MAXMOVES, 1, set_maxmoves), 108 OPTION(FLAG_MAXMOVES, 1, set_maxmoves),
@@ -114,7 +119,6 @@ struct {
114 char *desc; 119 char *desc;
115 int64_t (*exec)(args_t *); 120 int64_t (*exec)(args_t *);
116} commands[] = { 121} commands[] = {
117/* TODO: add synopsis and description here */
118 COMMAND( 122 COMMAND(
119 "inverse", 123 "inverse",
120 "inverse " FLAG_CUBE " CUBE ", 124 "inverse " FLAG_CUBE " CUBE ",
@@ -197,6 +201,13 @@ struct {
197 comparemoves_exec 201 comparemoves_exec
198 ), 202 ),
199 COMMAND( 203 COMMAND(
204 "variations",
205 "variations " FLAG_MOVES " MOVES " FLAG_VARIATION " VARIATION",
206 "Find variations of a move sequence."
207 INFO_MOVESFORMAT,
208 variation_exec
209 ),
210 COMMAND(
200 "help", 211 "help",
201 "help [" FLAG_COMMAND " COMMAND]", 212 "help [" FLAG_COMMAND " COMMAND]",
202 "If no COMMAND is specified, prints some generic information " 213 "If no COMMAND is specified, prints some generic information "
@@ -511,6 +522,22 @@ comparemoves_exec(args_t *args)
511} 522}
512 523
513static int64_t 524static int64_t
525variation_exec(args_t *args)
526{
527 long long err;
528 char result[SOLUTIONS_BUFFER_SIZE];
529
530 err = nissy_variations(args->str_moves, args->str_variation,
531 SOLUTIONS_BUFFER_SIZE, result);
532
533 if (err < 0)
534 return err;
535 printf("%s", result);
536
537 return 0;
538}
539
540static int64_t
514help_exec(args_t *args) 541help_exec(args_t *args)
515{ 542{
516 int i; 543 int i;
@@ -550,6 +577,7 @@ parse_args(int argc, char **argv, args_t *args)
550 .str_moves2 = "", 577 .str_moves2 = "",
551 .str_trans = "", 578 .str_trans = "",
552 .str_solver = "", 579 .str_solver = "",
580 .str_variation = "",
553 .str_nisstype = "", 581 .str_nisstype = "",
554 .minmoves = 0, 582 .minmoves = 0,
555 .maxmoves = 20, 583 .maxmoves = 20,
@@ -692,6 +720,14 @@ set_str_solver(int argc, char **argv, args_t *args)
692} 720}
693 721
694static bool 722static bool
723set_str_variation(int argc, char **argv, args_t *args)
724{
725 args->str_variation = argv[0];
726
727 return true;
728}
729
730static bool
695set_str_nisstype(int argc, char **argv, args_t *args) 731set_str_nisstype(int argc, char **argv, args_t *args)
696{ 732{
697 args->str_nisstype = argv[0]; 733 args->str_nisstype = argv[0];

Generated with cgit - Back to sebastiano.tronto.net