X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=interactive.c;h=b3254157d6785403573252876624c026ed912ed4;hb=2a25a55b0cf6d30c8024a1cff8633c0dbe120285;hp=28ef74a4b81cc873a3b6e4fa90a8fe15a6ebda0d;hpb=33b09d214c4b694c7e58db22e9fc39be0b8d09c8;p=adu.git diff --git a/interactive.c b/interactive.c index 28ef74a..b325415 100644 --- a/interactive.c +++ b/interactive.c @@ -7,9 +7,18 @@ #include "error.h" #include "cmdline.h" +/** + * Describes one valid command for interactive mode. + * + * When invoked in interactive mode, adu reads commands from stdin. There's a + * static array of all such commands. + */ struct interactive_command { + /** The name of the command. */ const char *name; + /** Pointer to The function that is being executed. */ int (*handler)(char *); + /** Help text. */ const char *desc; }; @@ -65,11 +74,17 @@ static int icom_help(__a_unused char *line) void print_interactive_help(void) { - icom_help(NULL); + struct interactive_command *c; + FOR_EACH_COMMAND(c) + fprintf(stdout, "\t%s\t%s\n", c->name, c->desc); } static int icom_reset(__a_unused char *line) { + free_format_info(fi); + fi = NULL; + free(admissible_uids); + admissible_uids = NULL; select_cmdline_parser_init(&select_conf); return 1; } @@ -88,6 +103,10 @@ static int icom_set(char *line) return 1; } + free_format_info(fi); + fi = NULL; + free(admissible_uids); + admissible_uids = NULL; return parse_select_options(line, ¶ms, &admissible_uids, &fi); } @@ -113,6 +132,8 @@ static int exec_interactive_command(char *line) if (!*line) return 1; /* OK, we have a non-empty line */ + if (*line == '#') + return 1; cmd = adu_strdup(line); args = cmd + strcspn(cmd, delim); if (!*args)