diff options
Diffstat (limited to '')
| -rw-r--r-- | shell/shell.c | 38 |
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 *); | |||
| 62 | static int64_t solve_scramble_exec(args_t *); | 64 | static int64_t solve_scramble_exec(args_t *); |
| 63 | static int64_t countmoves_exec(args_t *); | 65 | static int64_t countmoves_exec(args_t *); |
| 64 | static int64_t comparemoves_exec(args_t *); | 66 | static int64_t comparemoves_exec(args_t *); |
| 67 | static int64_t variation_exec(args_t *); | ||
| 65 | static int64_t help_exec(args_t *); | 68 | static int64_t help_exec(args_t *); |
| 66 | 69 | ||
| 67 | static int parse_args(int, char **, args_t *); | 70 | static int parse_args(int, char **, args_t *); |
| @@ -75,6 +78,7 @@ static bool set_str_moves(int, char **, args_t *); | |||
| 75 | static bool set_str_moves2(int, char **, args_t *); | 78 | static bool set_str_moves2(int, char **, args_t *); |
| 76 | static bool set_str_trans(int, char **, args_t *); | 79 | static bool set_str_trans(int, char **, args_t *); |
| 77 | static bool set_str_solver(int, char **, args_t *); | 80 | static bool set_str_solver(int, char **, args_t *); |
| 81 | static bool set_str_variation(int, char **, args_t *); | ||
| 78 | static bool set_str_nisstype(int, char **, args_t *); | 82 | static bool set_str_nisstype(int, char **, args_t *); |
| 79 | static bool set_minmoves(int, char **, args_t *); | 83 | static bool set_minmoves(int, char **, args_t *); |
| 80 | static bool set_maxmoves(int, char **, args_t *); | 84 | static 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 | ||
| 513 | static int64_t | 524 | static int64_t |
| 525 | variation_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 | |||
| 540 | static int64_t | ||
| 514 | help_exec(args_t *args) | 541 | help_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 | ||
| 694 | static bool | 722 | static bool |
| 723 | set_str_variation(int argc, char **argv, args_t *args) | ||
| 724 | { | ||
| 725 | args->str_variation = argv[0]; | ||
| 726 | |||
| 727 | return true; | ||
| 728 | } | ||
| 729 | |||
| 730 | static bool | ||
| 695 | set_str_nisstype(int argc, char **argv, args_t *args) | 731 | set_str_nisstype(int argc, char **argv, args_t *args) |
| 696 | { | 732 | { |
| 697 | args->str_nisstype = argv[0]; | 733 | args->str_nisstype = argv[0]; |
