Blame view

mu/mu.c 3.36 KB
Sergey Poznyakoff authored
1
/* GNU Mailutils -- a suite of utilities for electronic mail
2
   Copyright (C) 2010-2012, 2014-2016 Free Software Foundation, Inc.
Sergey Poznyakoff authored
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

   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 <http://www.gnu.org/licenses/>. */

#if defined(HAVE_CONFIG_H)
# include <config.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <mailutils/mailutils.h>
#include <mailutils/tls.h>
24
#include "mailutils/cli.h"
Sergey Poznyakoff authored
25 26
#include "mu.h"

27 28 29 30 31
struct mu_cli_setup cli = {
  .prog_doc = N_("GNU Mailutils multi-purpose tool."),
  .prog_args = N_("COMMAND [CMDOPTS]"),
  .inorder = 1,
  .prog_doc_hook = subcommand_help
Sergey Poznyakoff authored
32 33
};

34
static char *capa[] = {
Sergey Poznyakoff authored
35 36 37 38 39 40 41 42 43 44 45
  "debug",
  "locking",
  "mailbox",
  "auth",
  NULL 
};

int
main (int argc, char **argv)
{
  mutool_action_t action;
46 47 48 49 50 51 52 53 54 55 56 57 58 59
  static struct mu_parseopt pohint = {
    .po_flags = MU_PARSEOPT_PACKAGE_NAME
                | MU_PARSEOPT_PACKAGE_URL
                | MU_PARSEOPT_BUG_ADDRESS
                | MU_PARSEOPT_EXTRA_INFO
                | MU_PARSEOPT_VERSION_HOOK,
    .po_package_name = PACKAGE_NAME,
    .po_package_url = PACKAGE_URL,
    .po_bug_address = PACKAGE_BUGREPORT,
    .po_extra_info = mu_general_help_text,
    .po_version_hook = mu_version_hook,
  };
  struct mu_cfg_parse_hints cfhint = { .flags = 0 };

Sergey Poznyakoff authored
60 61 62
  /* Native Language Support */
  MU_APP_INIT_NLS ();
  MU_AUTH_REGISTER_ALL_MODULES ();
63

Sergey Poznyakoff authored
64 65 66
  /* Register the desired mailbox formats.  */
  mu_register_all_mbox_formats ();

67
  mu_cli_ext (argc, argv, &cli, &pohint, &cfhint, capa, NULL, &argc, &argv);
Sergey Poznyakoff authored
68 69 70 71 72 73 74

  if (argc < 1)
    {
      mu_error (_("what do you want me to do?"));
      exit (1);
    }
	
75
  action = dispatch_find_action (argv[0]);
Sergey Poznyakoff authored
76 77 78 79 80 81
  if (!action)
    {
      mu_error (_("don't know what %s is"), argv[0]);
      exit (1);
    }

82
  /* Run the action. */
Sergey Poznyakoff authored
83 84
  exit (action (argc, argv));
}
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135

int
mu_help (void)
{
  char *argv[3];
  argv[0] = mu_full_program_name;
  argv[1] = "--help";
  argv[2] = NULL;
  mu_cli (2, argv, &cli, capa, NULL, NULL, NULL);
  return 0;
} 

void
mu_action_getopt (int *pargc, char ***pargv, struct mu_option *opt,
		  char const *docstring, char const *argdoc)
{
  struct mu_parseopt po;
  int flags = MU_PARSEOPT_IMMEDIATE;
  struct mu_option *options[2];
  char const *prog_args[2];
  char *progname;
  
  options[0] = opt;
  options[1] = NULL;

  mu_asprintf (&progname, "%s %s", mu_program_name, (*pargv)[0]);
  po.po_prog_name = progname;
  flags |= MU_PARSEOPT_PROG_NAME;
  
  po.po_prog_doc = docstring;
  flags |= MU_PARSEOPT_PROG_DOC;

  if (argdoc)
    {
      prog_args[0] = argdoc;
      prog_args[1] = NULL;
      po.po_prog_args = prog_args;
      flags |= MU_PARSEOPT_PROG_ARGS;
    }
  
  po.po_bug_address = PACKAGE_BUGREPORT;
  flags |= MU_PARSEOPT_BUG_ADDRESS;

  if (mu_parseopt (&po, *pargc, *pargv, options, flags))
    exit (po.po_exit_error);

  *pargc -= po.po_arg_start;
  *pargv += po.po_arg_start;
  
  mu_parseopt_free (&po);  
}
Sergey Poznyakoff authored
136 137 138