diff options
Diffstat (limited to '')
| -rw-r--r-- | shell/shell.c | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/shell/shell.c b/shell/shell.c index de03656..41af972 100644 --- a/shell/shell.c +++ b/shell/shell.c | |||
| @@ -50,10 +50,10 @@ typedef struct { | |||
| 50 | char *str_trans; | 50 | char *str_trans; |
| 51 | char *str_solver; | 51 | char *str_solver; |
| 52 | char *str_nisstype; | 52 | char *str_nisstype; |
| 53 | int8_t minmoves; | 53 | unsigned int minmoves; |
| 54 | int8_t maxmoves; | 54 | unsigned int maxmoves; |
| 55 | int8_t optimal; | 55 | unsigned int optimal; |
| 56 | int64_t maxsolutions; | 56 | unsigned int maxsolutions; |
| 57 | } args_t; | 57 | } args_t; |
| 58 | 58 | ||
| 59 | static int64_t compose_exec(args_t *); | 59 | static int64_t compose_exec(args_t *); |
| @@ -70,8 +70,7 @@ static int64_t solve_scramble_exec(args_t *); | |||
| 70 | static int64_t help_exec(args_t *); | 70 | static int64_t help_exec(args_t *); |
| 71 | 71 | ||
| 72 | static int parse_args(int, char **, args_t *); | 72 | static int parse_args(int, char **, args_t *); |
| 73 | static bool parse_int8(char *, int8_t *); | 73 | static bool parse_uint(char *, unsigned int *); |
| 74 | static bool parse_int64(char *, int64_t *); | ||
| 75 | 74 | ||
| 76 | static bool set_cube(int, char **, args_t *); | 75 | static bool set_cube(int, char **, args_t *); |
| 77 | static bool set_cube_perm(int, char **, args_t *); | 76 | static bool set_cube_perm(int, char **, args_t *); |
| @@ -292,14 +291,8 @@ applytrans_exec(args_t *args) | |||
| 292 | static int64_t | 291 | static int64_t |
| 293 | frommoves_exec(args_t *args) | 292 | frommoves_exec(args_t *args) |
| 294 | { | 293 | { |
| 295 | char result[22]; | 294 | sprintf(args->cube, NISSY_SOLVED_CUBE); |
| 296 | int64_t ret; | 295 | return applymoves_exec(args); |
| 297 | |||
| 298 | ret = nissy_frommoves(args->str_moves, result); | ||
| 299 | if (ret == NISSY_OK || ret == NISSY_WARNING_UNSOLVABLE) | ||
| 300 | printf("%s\n", result); | ||
| 301 | |||
| 302 | return ret; | ||
| 303 | } | 296 | } |
| 304 | 297 | ||
| 305 | static int64_t | 298 | static int64_t |
| @@ -591,21 +584,9 @@ parse_args(int argc, char **argv, args_t *args) | |||
| 591 | } | 584 | } |
| 592 | 585 | ||
| 593 | bool | 586 | bool |
| 594 | parse_int8(char *argv, int8_t *result) | 587 | parse_uint(char *argv, int8_t *result) |
| 595 | { | ||
| 596 | bool noerror; | ||
| 597 | int64_t n; | ||
| 598 | |||
| 599 | noerror = parse_int64(argv, &n); | ||
| 600 | *result = (int8_t)n; | ||
| 601 | |||
| 602 | return noerror && n >= INT8_MIN && n <= INT8_MAX; | ||
| 603 | } | ||
| 604 | |||
| 605 | bool | ||
| 606 | parse_int64(char *argv, int64_t *result) | ||
| 607 | { | 588 | { |
| 608 | *result = strtoll(argv, NULL, 10); | 589 | *result = strtol(argv, NULL, 10); |
| 609 | 590 | ||
| 610 | /* TODO: figure out how errno works and use it */ | 591 | /* TODO: figure out how errno works and use it */ |
| 611 | return true; | 592 | return true; |
| @@ -704,25 +685,25 @@ set_str_nisstype(int argc, char **argv, args_t *args) | |||
| 704 | static bool | 685 | static bool |
| 705 | set_minmoves(int argc, char **argv, args_t *args) | 686 | set_minmoves(int argc, char **argv, args_t *args) |
| 706 | { | 687 | { |
| 707 | return parse_int8(argv[0], &args->minmoves); | 688 | return parse_uint(argv[0], &args->minmoves); |
| 708 | } | 689 | } |
| 709 | 690 | ||
| 710 | static bool | 691 | static bool |
| 711 | set_maxmoves(int argc, char **argv, args_t *args) | 692 | set_maxmoves(int argc, char **argv, args_t *args) |
| 712 | { | 693 | { |
| 713 | return parse_int8(argv[0], &args->maxmoves); | 694 | return parse_uint(argv[0], &args->maxmoves); |
| 714 | } | 695 | } |
| 715 | 696 | ||
| 716 | static bool | 697 | static bool |
| 717 | set_optimal(int argc, char **argv, args_t *args) | 698 | set_optimal(int argc, char **argv, args_t *args) |
| 718 | { | 699 | { |
| 719 | return parse_int8(argv[0], &args->optimal); | 700 | return parse_uint(argv[0], &args->optimal); |
| 720 | } | 701 | } |
| 721 | 702 | ||
| 722 | static bool | 703 | static bool |
| 723 | set_maxsolutions(int argc, char **argv, args_t *args) | 704 | set_maxsolutions(int argc, char **argv, args_t *args) |
| 724 | { | 705 | { |
| 725 | return parse_int64(argv[0], &args->maxsolutions); | 706 | return parse_uint(argv[0], &args->maxsolutions); |
| 726 | } | 707 | } |
| 727 | 708 | ||
| 728 | void | 709 | void |
