/* opt.h -- general-purpose command line option parser
Copyright (C) 2016-2019 Free Software Foundation, Inc.
GNU Mailutils is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 3, or (at
your option) any later version.
GNU Mailutils is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Mailutils. If not, see .
*/
#ifndef _MAILUTILS_CLI_H
#define _MAILUTILS_CLI_H
#include
#include
#include
#include
typedef void (*mu_cli_capa_commit_fp) (void *);
struct mu_cli_capa
{
char *name;
struct mu_option *opt;
struct mu_cfg_param *cfg;
mu_cfg_section_fp parser;
mu_cli_capa_commit_fp commit;
};
void mu_cli_capa_init (void);
void mu_cli_capa_register (struct mu_cli_capa *capa);
void mu_cli_capa_extend_settings (char const *name, mu_list_t opts,
mu_list_t commits);
struct mu_cli_setup
{
struct mu_option **optv; /* Command-line options */
struct mu_cfg_param *cfg; /* Configuration parameters */
char *prog_doc; /* Program documentation string */
char *prog_args; /* Program arguments string */
char const **prog_alt_args; /* Alternative arguments string */
char *prog_extra_doc; /* Extra documentation. This will be
displayed after options. */
int ex_usage; /* If not 0, exit code on usage errors */
int ex_config; /* If not 0, exit code on configuration
errors */
int inorder:1; /* Don't permute options and arguments */
int server:1; /* This is a server: don't read per-user
configuration files */
void (*prog_doc_hook) (mu_stream_t);
};
extern const char mu_version_copyright[];
extern const char mu_general_help_text[];
void mu_version_hook (struct mu_parseopt *po, mu_stream_t stream);
void mu_cli (int argc, char **argv, struct mu_cli_setup *setup,
char **capa, void *data,
int *ret_argc, char ***ret_argv);
void mu_cli_ext (int argc, char **argv,
struct mu_cli_setup *setup,
struct mu_parseopt *pohint,
struct mu_cfg_parse_hints *cfhint,
char **capa,
void *data,
int *ret_argc, char ***ret_argv);
char *mu_site_config_file (void);
void mu_acl_cfg_init (void);
#endif