Introduce --global-summary-format.
[adu.git] / interactive.c
index 8b27c0c79837c733b9f2c056e27ed7d5e5c7097a..35b9b48026f69023254acc938ced5fb9badd414a 100644 (file)
@@ -1,10 +1,8 @@
+#include "format.h"
 #include "adu.h"
 #include "string.h"
 #include "error.h"
 #include "cmdline.h"
-#include "select.cmdline.h"
-
-struct select_args_info select_conf;
 
 struct interactive_command {
        const char *name;
@@ -12,11 +10,15 @@ struct interactive_command {
        const char *desc;
 };
 
+static struct uid_range *admissible_uids;
+static struct select_format_info sfi;
+
 #define INTERACTIVE_COMMANDS \
        INTERACTIVE_COMMAND(dump, "dump the current configuration") \
        INTERACTIVE_COMMAND(set, "change the current configuration") \
        INTERACTIVE_COMMAND(reset, "reset configuration to defaults") \
        INTERACTIVE_COMMAND(help, "show list of commands and one-line descriptions") \
+       INTERACTIVE_COMMAND(run, "start the query according to the current options")
 
 
 #define INTERACTIVE_COMMAND(name, desc) \
@@ -45,6 +47,11 @@ static int read_input_line(char *line, size_t size)
        return fgets(line, size, stdin)? 1 : -1;
 }
 
+static int icom_run(__a_unused char *line)
+{
+       return run_select_query(admissible_uids, &sfi);
+}
+
 static int icom_help(__a_unused char *line)
 {
        struct interactive_command *c;
@@ -60,8 +67,6 @@ static int icom_reset(__a_unused char *line)
        return 1;
 }
 
-static struct uid_range *admissible_uids;
-
 static int icom_set(char *line)
 {
        struct select_cmdline_parser_params params = {
@@ -71,10 +76,7 @@ static int icom_set(char *line)
                .check_ambiguity = 0,
                .print_errors = 1
        };
-       if (select_cmdline_parser_string_ext(line, &select_conf, "select",
-               &params))
-               return -E_SYNTAX;
-       return parse_uid_arg(select_conf.uid_arg, &admissible_uids);
+       return parse_select_options(line, &params, &admissible_uids, &sfi);
 }
 
 static int icom_dump(__a_unused char *line)
@@ -111,6 +113,7 @@ int com_interactive(void)
        char line[255];
        int ret = 1;
 
+       select_cmdline_parser_init(&select_conf);
        while (read_input_line(line, sizeof(line)) >= 0) {
                size_t len = strlen(line);
                if (!len)