aboutsummaryrefslogtreecommitdiff
path: root/shell/shell.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--shell/shell.c97
1 files changed, 14 insertions, 83 deletions
diff --git a/shell/shell.c b/shell/shell.c
index 104e7e0..ecd39f2 100644
--- a/shell/shell.c
+++ b/shell/shell.c
@@ -18,9 +18,6 @@
18#define FLAG_PERM "-perm" 18#define FLAG_PERM "-perm"
19#define FLAG_COMMAND "-command" 19#define FLAG_COMMAND "-command"
20#define FLAG_STR_CUBE "-cubestr" 20#define FLAG_STR_CUBE "-cubestr"
21#define FLAG_FORMAT "-format"
22#define FLAG_FORMAT_IN "-fin"
23#define FLAG_FORMAT_OUT "-fout"
24#define FLAG_MOVES "-moves" 21#define FLAG_MOVES "-moves"
25#define FLAG_TRANS "-trans" 22#define FLAG_TRANS "-trans"
26#define FLAG_SOLVER "-solver" 23#define FLAG_SOLVER "-solver"
@@ -31,23 +28,18 @@
31#define FLAG_MAXSOLUTIONS "-n" 28#define FLAG_MAXSOLUTIONS "-n"
32#define FLAG_THREADS "-t" 29#define FLAG_THREADS "-t"
33 30
34#define INFO_CUBEFORMAT(cube) cube " must be given in B32 format."
35#define INFO_MOVESFORMAT "The accepted moves are U, D, R, L, F and B, " \ 31#define INFO_MOVESFORMAT "The accepted moves are U, D, R, L, F and B, " \
36 "optionally followed by a 2, a ' or a 3." 32 "optionally followed by a 2, a ' or a 3."
37#define INFO_TRANSFORMAT "The transformation must be given in the format " \ 33#define INFO_TRANSFORMAT "The transformation must be given in the format " \
38 "(rotation|mirrored) (2 letters), for exmple " \ 34 "(rotation|mirrored) (2 letters), for exmple " \
39 "'rotation UF' or 'mirrored BL'." 35 "'rotation UF' or 'mirrored BL'."
40#define INFO_FORMATS "The available formats are H48, B32 and SRC."
41 36
42typedef struct { 37typedef struct {
43 int command_index; 38 int command_index;
44 char cube[22]; 39 char cube[NISSY_SIZE_CUBE];
45 char cube_perm[22]; 40 char cube_perm[NISSY_SIZE_CUBE];
46 char *str_command; 41 char *str_command;
47 char *str_cube; 42 char *str_cube;
48 char *str_format;
49 char *str_format_in;
50 char *str_format_out;
51 char *str_moves; 43 char *str_moves;
52 char *str_trans; 44 char *str_trans;
53 char *str_solver; 45 char *str_solver;
@@ -64,7 +56,6 @@ static int64_t inverse_exec(args_t *);
64static int64_t applymoves_exec(args_t *); 56static int64_t applymoves_exec(args_t *);
65static int64_t applytrans_exec(args_t *); 57static int64_t applytrans_exec(args_t *);
66static int64_t frommoves_exec(args_t *); 58static int64_t frommoves_exec(args_t *);
67static int64_t convert_exec(args_t *);
68static int64_t randomcube_exec(args_t *); 59static int64_t randomcube_exec(args_t *);
69static int64_t solverinfo_exec(args_t *); 60static int64_t solverinfo_exec(args_t *);
70static int64_t gendata_exec(args_t *); 61static int64_t gendata_exec(args_t *);
@@ -81,9 +72,6 @@ static bool set_cube(int, char **, args_t *);
81static bool set_cube_perm(int, char **, args_t *); 72static bool set_cube_perm(int, char **, args_t *);
82static bool set_str_command(int, char **, args_t *); 73static bool set_str_command(int, char **, args_t *);
83static bool set_str_cube(int, char **, args_t *); 74static bool set_str_cube(int, char **, args_t *);
84static bool set_str_format(int, char **, args_t *);
85static bool set_str_format_in(int, char **, args_t *);
86static bool set_str_format_out(int, char **, args_t *);
87static bool set_str_moves(int, char **, args_t *); 75static bool set_str_moves(int, char **, args_t *);
88static bool set_str_trans(int, char **, args_t *); 76static bool set_str_trans(int, char **, args_t *);
89static bool set_str_solver(int, char **, args_t *); 77static bool set_str_solver(int, char **, args_t *);
@@ -107,9 +95,6 @@ struct {
107 OPTION(FLAG_PERM, 1, set_cube_perm), 95 OPTION(FLAG_PERM, 1, set_cube_perm),
108 OPTION(FLAG_COMMAND, 1, set_str_command), 96 OPTION(FLAG_COMMAND, 1, set_str_command),
109 OPTION(FLAG_STR_CUBE, 1, set_str_cube), 97 OPTION(FLAG_STR_CUBE, 1, set_str_cube),
110 OPTION(FLAG_FORMAT, 1, set_str_format),
111 OPTION(FLAG_FORMAT_IN, 1, set_str_format_in),
112 OPTION(FLAG_FORMAT_OUT, 1, set_str_format_out),
113 OPTION(FLAG_MOVES, 1, set_str_moves), 98 OPTION(FLAG_MOVES, 1, set_str_moves),
114 OPTION(FLAG_TRANS, 1, set_str_trans), 99 OPTION(FLAG_TRANS, 1, set_str_trans),
115 OPTION(FLAG_SOLVER, 1, set_str_solver), 100 OPTION(FLAG_SOLVER, 1, set_str_solver),
@@ -133,29 +118,27 @@ struct {
133 COMMAND( 118 COMMAND(
134 "compose", 119 "compose",
135 "compose " FLAG_CUBE " CUBE " FLAG_PERM " PERM", 120 "compose " FLAG_CUBE " CUBE " FLAG_PERM " PERM",
136 "Apply on CUBE the permutation defined by PERM. " 121 "Apply on CUBE the permutation defined by PERM.",
137 INFO_CUBEFORMAT("CUBE and PERM"),
138 compose_exec 122 compose_exec
139 ), 123 ),
140 COMMAND( 124 COMMAND(
141 "inverse", 125 "inverse",
142 "inverse " FLAG_CUBE " CUBE ", 126 "inverse " FLAG_CUBE " CUBE ",
143 "Compute the inverse of the given CUBE. " 127 "Compute the inverse of the given CUBE.",
144 INFO_CUBEFORMAT("CUBE"),
145 inverse_exec 128 inverse_exec
146 ), 129 ),
147 COMMAND( 130 COMMAND(
148 "applymoves", 131 "applymoves",
149 "applymoves " FLAG_CUBE " CUBE " FLAG_MOVES " MOVES", 132 "applymoves " FLAG_CUBE " CUBE " FLAG_MOVES " MOVES",
150 "Apply the given MOVES to the given CUBE. " 133 "Apply the given MOVES to the given CUBE. "
151 INFO_CUBEFORMAT("CUBE") " " INFO_MOVESFORMAT, 134 INFO_MOVESFORMAT,
152 applymoves_exec 135 applymoves_exec
153 ), 136 ),
154 COMMAND( 137 COMMAND(
155 "applytrans", 138 "applytrans",
156 "applytrans " FLAG_CUBE " CUBE " FLAG_TRANS " TRANS", 139 "applytrans " FLAG_CUBE " CUBE " FLAG_TRANS " TRANS",
157 "Apply the single transformation TRANS to the given CUBE. " 140 "Apply the single transformation TRANS to the given CUBE. "
158 INFO_CUBEFORMAT("CUBE") " " INFO_TRANSFORMAT, 141 INFO_TRANSFORMAT,
159 applytrans_exec 142 applytrans_exec
160 ), 143 ),
161 COMMAND( 144 COMMAND(
@@ -166,19 +149,9 @@ struct {
166 frommoves_exec 149 frommoves_exec
167 ), 150 ),
168 COMMAND( 151 COMMAND(
169 "convert",
170 "convert " FLAG_STR_CUBE " CUBESTR "
171 FLAG_FORMAT_IN " FORMAT_IN " FLAG_FORMAT_OUT " FORMAT_OUT",
172 "Convert the cube described by CUBESTR from FORMAT_IN to "
173 "FORMAT_OUT."
174 INFO_FORMATS " "
175 "CUBESTR must be a valid cube in the FORMAT_IN format.",
176 convert_exec
177 ),
178 COMMAND(
179 "randomcube", 152 "randomcube",
180 "randomcube", 153 "randomcube",
181 "Returns a random cube in B32 format.", 154 "Returns a random.",
182 randomcube_exec 155 randomcube_exec
183 ), 156 ),
184 COMMAND( 157 COMMAND(
@@ -202,8 +175,7 @@ struct {
202 FLAG_CUBE " CUBE" 175 FLAG_CUBE " CUBE"
203 FLAG_THREADS " T", 176 FLAG_THREADS " T",
204 "Solve the given CUBE using SOLVER, " 177 "Solve the given CUBE using SOLVER, "
205 "using at least n and at most N moves, and T threads. " 178 "using at least n and at most N moves, and T threads.",
206 INFO_CUBEFORMAT("CUBE"),
207 solve_exec 179 solve_exec
208 ), 180 ),
209 COMMAND( 181 COMMAND(
@@ -254,7 +226,7 @@ rand64(void)
254static int64_t 226static int64_t
255compose_exec(args_t *args) 227compose_exec(args_t *args)
256{ 228{
257 char result[22]; 229 char result[NISSY_SIZE_CUBE];
258 int64_t ret; 230 int64_t ret;
259 231
260 ret = nissy_compose(args->cube, args->cube_perm, result); 232 ret = nissy_compose(args->cube, args->cube_perm, result);
@@ -267,7 +239,7 @@ compose_exec(args_t *args)
267static int64_t 239static int64_t
268inverse_exec(args_t *args) 240inverse_exec(args_t *args)
269{ 241{
270 char result[22]; 242 char result[NISSY_SIZE_CUBE];
271 int64_t ret; 243 int64_t ret;
272 244
273 ret = nissy_inverse(args->cube, result); 245 ret = nissy_inverse(args->cube, result);
@@ -280,7 +252,7 @@ inverse_exec(args_t *args)
280static int64_t 252static int64_t
281applymoves_exec(args_t *args) 253applymoves_exec(args_t *args)
282{ 254{
283 char result[22]; 255 char result[NISSY_SIZE_CUBE];
284 int64_t ret; 256 int64_t ret;
285 257
286 ret = nissy_applymoves(args->cube, args->str_moves, result); 258 ret = nissy_applymoves(args->cube, args->str_moves, result);
@@ -293,7 +265,7 @@ applymoves_exec(args_t *args)
293static int64_t 265static int64_t
294applytrans_exec(args_t *args) 266applytrans_exec(args_t *args)
295{ 267{
296 char result[22]; 268 char result[NISSY_SIZE_CUBE];
297 int64_t ret; 269 int64_t ret;
298 270
299 ret = nissy_applytrans(args->cube, args->str_trans, result); 271 ret = nissy_applytrans(args->cube, args->str_trans, result);
@@ -311,20 +283,6 @@ frommoves_exec(args_t *args)
311} 283}
312 284
313static int64_t 285static int64_t
314convert_exec(args_t *args)
315{
316 char result[PRINTCUBE_BUFFER_SIZE];
317 int64_t ret;
318
319 ret = nissy_convert(args->str_format_in, args->str_format_out,
320 args->str_cube, PRINTCUBE_BUFFER_SIZE, result);
321 if (ret == NISSY_OK || ret == NISSY_WARNING_UNSOLVABLE)
322 printf("%s\n", result);
323
324 return ret;
325}
326
327static int64_t
328randomcube_exec(args_t *args) 286randomcube_exec(args_t *args)
329{ 287{
330 char result[PRINTCUBE_BUFFER_SIZE]; 288 char result[PRINTCUBE_BUFFER_SIZE];
@@ -575,9 +533,6 @@ parse_args(int argc, char **argv, args_t *args)
575 .cube = "", 533 .cube = "",
576 .cube_perm = "", 534 .cube_perm = "",
577 .str_cube = "", 535 .str_cube = "",
578 .str_format = "",
579 .str_format_in = "",
580 .str_format_out = "",
581 .str_moves = "", 536 .str_moves = "",
582 .str_trans = "", 537 .str_trans = "",
583 .str_solver = "", 538 .str_solver = "",
@@ -668,7 +623,7 @@ parse_nisstype(const char *arg)
668static bool 623static bool
669set_cube(int argc, char **argv, args_t *args) 624set_cube(int argc, char **argv, args_t *args)
670{ 625{
671 memcpy(args->cube, argv[0], 22); 626 memcpy(args->cube, argv[0], NISSY_SIZE_CUBE);
672 args->cube[21] = 0; 627 args->cube[21] = 0;
673 628
674 return true; 629 return true;
@@ -677,7 +632,7 @@ set_cube(int argc, char **argv, args_t *args)
677static bool 632static bool
678set_cube_perm(int argc, char **argv, args_t *args) 633set_cube_perm(int argc, char **argv, args_t *args)
679{ 634{
680 memcpy(args->cube_perm, argv[0], 22); 635 memcpy(args->cube_perm, argv[0], NISSY_SIZE_CUBE);
681 args->cube_perm[21] = 0; 636 args->cube_perm[21] = 0;
682 637
683 return true; 638 return true;
@@ -700,30 +655,6 @@ set_str_cube(int argc, char **argv, args_t *args)
700} 655}
701 656
702static bool 657static bool
703set_str_format(int argc, char **argv, args_t *args)
704{
705 args->str_format = argv[0];
706
707 return true;
708}
709
710static bool
711set_str_format_in(int argc, char **argv, args_t *args)
712{
713 args->str_format_in = argv[0];
714
715 return true;
716}
717
718static bool
719set_str_format_out(int argc, char **argv, args_t *args)
720{
721 args->str_format_out = argv[0];
722
723 return true;
724}
725
726static bool
727set_str_moves(int argc, char **argv, args_t *args) 658set_str_moves(int argc, char **argv, args_t *args)
728{ 659{
729 args->str_moves = argv[0]; 660 args->str_moves = argv[0];

Generated with cgit - Back to sebastiano.tronto.net