aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano.tronto@gmail.com>2021-12-25 20:29:22 +0100
committerSebastiano Tronto <sebastiano.tronto@gmail.com>2021-12-25 20:29:22 +0100
commit0f81a5a70be20a82ee8495f050366a28d0be21c7 (patch)
tree1d438ad2d3c9fd75ebd10f09d594a4a83fdd3fab /src
parent4d664cefcc8c5a852629b29d47eb39e628adac57 (diff)
downloadnissy-0f81a5a70be20a82ee8495f050366a28d0be21c7.tar.gz
nissy-0f81a5a70be20a82ee8495f050366a28d0be21c7.zip
Added the invert and unniss commands
Diffstat (limited to '')
-rw-r--r--src/commands.c51
-rw-r--r--src/commands.h2
2 files changed, 52 insertions, 1 deletions
diff --git a/src/commands.c b/src/commands.c
index 85b62ac..7d30c88 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -6,17 +6,20 @@ CommandArgs * solve_parse_args(int c, char **v);
6CommandArgs * gen_parse_args(int c, char **v); 6CommandArgs * gen_parse_args(int c, char **v);
7CommandArgs * help_parse_args(int c, char **v); 7CommandArgs * help_parse_args(int c, char **v);
8CommandArgs * print_parse_args(int c, char **v); 8CommandArgs * print_parse_args(int c, char **v);
9CommandArgs * parse_only_scramble(int c, char **v);
9CommandArgs * parse_no_arg(int c, char **v); 10CommandArgs * parse_no_arg(int c, char **v);
10 11
11/* Exec functions ************************************************************/ 12/* Exec functions ************************************************************/
12 13
13static void gen_exec(CommandArgs *args); 14static void gen_exec(CommandArgs *args);
15static void invert_exec(CommandArgs *args);
14static void solve_exec(CommandArgs *args); 16static void solve_exec(CommandArgs *args);
15static void steps_exec(CommandArgs *args); 17static void steps_exec(CommandArgs *args);
16static void commands_exec(CommandArgs *args); 18static void commands_exec(CommandArgs *args);
17static void print_exec(CommandArgs *args); 19static void print_exec(CommandArgs *args);
18static void help_exec(CommandArgs *args); 20static void help_exec(CommandArgs *args);
19static void quit_exec(CommandArgs *args); 21static void quit_exec(CommandArgs *args);
22static void unniss_exec(CommandArgs *args);
20static void version_exec(CommandArgs *args); 23static void version_exec(CommandArgs *args);
21 24
22/* Local functions ***********************************************************/ 25/* Local functions ***********************************************************/
@@ -45,6 +48,15 @@ gen_cmd = {
45}; 48};
46 49
47Command 50Command
51invert_cmd = {
52 .name = "invert",
53 .usage = "invert SCRAMBLE]",
54 .description = "Invert a scramble",
55 .parse_args = parse_only_scramble,
56 .exec = invert_exec,
57};
58
59Command
48steps_cmd = { 60steps_cmd = {
49 .name = "steps", 61 .name = "steps",
50 .usage = "steps", 62 .usage = "steps",
@@ -90,6 +102,15 @@ quit_cmd = {
90}; 102};
91 103
92Command 104Command
105unniss_cmd = {
106 .name = "unniss",
107 .usage = "unniss SCRAMBLE",
108 .description = "Rewrite a scramble without NISS",
109 .parse_args = parse_only_scramble,
110 .exec = unniss_exec,
111};
112
113Command
93version_cmd = { 114version_cmd = {
94 .name = "version", 115 .name = "version",
95 .usage = "version", 116 .usage = "version",
@@ -102,10 +123,12 @@ Command *commands[NCOMMANDS] = {
102 &commands_cmd, 123 &commands_cmd,
103 &gen_cmd, 124 &gen_cmd,
104 &help_cmd, 125 &help_cmd,
126 &invert_cmd,
105 &print_cmd, 127 &print_cmd,
106 &quit_cmd, 128 &quit_cmd,
107 &solve_cmd, 129 &solve_cmd,
108 &steps_cmd, 130 &steps_cmd,
131 &unniss_cmd,
109 &version_cmd, 132 &version_cmd,
110}; 133};
111 134
@@ -245,6 +268,16 @@ help_parse_args(int c, char **v)
245} 268}
246 269
247CommandArgs * 270CommandArgs *
271parse_only_scramble(int c, char **v)
272{
273 CommandArgs *a = new_args();
274
275 a->success = read_scramble(c, v, a);
276
277 return a;
278}
279
280CommandArgs *
248parse_no_arg(int c, char **v) 281parse_no_arg(int c, char **v)
249{ 282{
250 CommandArgs *a = new_args(); 283 CommandArgs *a = new_args();
@@ -303,6 +336,17 @@ gen_exec(CommandArgs *args)
303} 336}
304 337
305static void 338static void
339invert_exec(CommandArgs *args)
340{
341 Alg *inv;
342
343 inv = inverse_alg(args->scramble);
344 print_alg(inv, false);
345
346 free_alg(inv);
347}
348
349static void
306steps_exec(CommandArgs *args) 350steps_exec(CommandArgs *args)
307{ 351{
308 int i; 352 int i;
@@ -357,6 +401,13 @@ quit_exec(CommandArgs *args)
357} 401}
358 402
359static void 403static void
404unniss_exec(CommandArgs *args)
405{
406 unniss(args->scramble);
407 print_alg(args->scramble, false);
408}
409
410static void
360version_exec(CommandArgs *args) 411version_exec(CommandArgs *args)
361{ 412{
362 printf(VERSION"\n"); 413 printf(VERSION"\n");
diff --git a/src/commands.h b/src/commands.h
index 938a0bd..7773827 100644
--- a/src/commands.h
+++ b/src/commands.h
@@ -4,7 +4,7 @@
4#include "solve.h" 4#include "solve.h"
5#include "steps.h" 5#include "steps.h"
6 6
7#define NCOMMANDS 10 7#define NCOMMANDS 20
8 8
9void free_args(CommandArgs *args); 9void free_args(CommandArgs *args);
10CommandArgs * new_args(); 10CommandArgs * new_args();

Generated with cgit - Back to sebastiano.tronto.net