X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=main.c;h=b3d7e66a37de76f50764b6b6003301108b9aab0a;hp=1568951af1e1e1e96334de9100d7539e3d60db39;hb=6ebff74ad242d4c56fb7762965b19cee14fd2daa;hpb=4668fff7aad8730d22a18d17a420ed1654de61bb diff --git a/main.c b/main.c index 1568951..b3d7e66 100644 --- a/main.c +++ b/main.c @@ -1,47 +1,42 @@ /* + * Copyright notice from original mutt: * Copyright (C) 1996-2002 Michael R. Elkins * Copyright (C) 1999-2002 Thomas Roessler * Copyright (C) 2004 g10 Code GmbH - * - * This program 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 2 of the License, or - * (at your option) any later version. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. - */ + * + * Parts written/modified by: + * Nico Golde + * Andreas Krennmair + * + * This file is part of mutt-ng, see http://www.muttng.org/. + * It's licensed under the GNU General Public License, + * please see the file GPL in the top level source directory. + */ #define MAIN_C 1 -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include + +#include + +#include +#include +#include +#include +#include #include "mutt.h" -#include "mutt_curses.h" +#include "alias.h" +#include "buffy.h" +#include "sort.h" #include "keymap.h" -#include "mailbox.h" -#include "url.h" -#include "mutt_crypt.h" #include "mutt_idna.h" -#include -#include -#include -#include -#include -#include -#include - #ifdef HAVE_GETOPT_H #include +#else +extern char *optarg; +extern int optind; #endif #ifdef HAVE_LIBIDN @@ -49,46 +44,42 @@ #endif #ifdef USE_NNTP -#include +#include +#endif + +#ifdef USE_LIBESMTP +#include #endif -static const char *ReachingUs = N_("\ -To contact the developers, please mail to .\n\ -To report a bug, please use the fleang(1) utility.\n"); +#ifdef USE_HCACHE +#if defined(HAVE_QDBM) +#include +#elif defined(HAVE_GDBM) +#include +#elif defined(HAVE_DB4) +#include +#endif +#endif + +#ifdef USE_GNUTLS +#include +#endif + +#ifdef CRYPT_BACKEND_GPGME +#include +#endif + +#ifdef USE_SSL +#include +#endif static const char *Notice = N_("\ Copyright (C) 1996-2002 Michael R. Elkins and others.\n\ -Mutt-ng comes with ABSOLUTELY NO WARRANTY; for details type `muttng -vv'.\n\ -Mutt is free software, and you are welcome to redistribute it\n\ -under certain conditions; type `muttng -vv' for details.\n"); - -static const char *Copyright = N_("\ -Copyright (C) 1996-2002 Michael R. Elkins \n\ -Copyright (C) 1996-2002 Brandon Long \n\ -Copyright (C) 1997-2002 Thomas Roessler \n\ -Copyright (C) 1998-2002 Werner Koch \n\ -Copyright (C) 1999-2002 Brendan Cully \n\ -Copyright (C) 1999-2002 Tommi Komulainen \n\ -Copyright (C) 2000-2002 Edmund Grimley Evans \n\ -Copyright (C) 2004-2005 Andreas Krennmair \n\ -\n\ -Lots of others not mentioned here contributed lots of code,\n\ -fixes, and suggestions.\n\ -\n\ - This program is free software; you can redistribute it and/or modify\n\ - it under the terms of the GNU General Public License as published by\n\ - the Free Software Foundation; either version 2 of the License, or\n\ - (at your option) any later version.\n\ -\n\ - This program is distributed in the hope that it will be useful,\n\ - but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ - GNU General Public License for more details.\n\ -\n\ - You should have received a copy of the GNU General Public License\n\ - along with this program; if not, write to the Free Software\n\ - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n\ -"); +Copyright (C) 2005 The Mutt-ng Team\n\ +Copyright (C) 2006 Pierre Habouzit undation, Inc.\n\ +This is free software. You may redistribute copies of it under the terms of\n\ +the GNU General Public License .\n\ +There is NO WARRANTY, to the extent permitted by law.\n"); void mutt_exit (int code) { @@ -98,36 +89,45 @@ void mutt_exit (int code) static void mutt_usage (void) { - puts (mutt_make_version ()); - - puts _( -"usage: muttng [ -nRyzZ ] [ -e ] [ -F ] [ -m ] [ -f ]\n\ - muttng [ -nR ] [ -e ] [ -F ] -Q [ -Q ] [...]\n\ - muttng [ -nR ] [ -e ] [ -F ] -A [ -A ] [...]\n\ - muttng [ -nx ] [ -e ] [ -a ] [ -F ] [ -H ] [ -i ] [ -s ] [ -b ] [ -c ] [ ... ]\n\ - muttng [ -n ] [ -e ] [ -F ] -p\n\ - muttng -v[v]\n\ + puts (mutt_make_version (1)); + + puts + _("usage: madmutt [ -nRyzZ ] [ -e ] [ -F ] [ -m ] [ -f ]\n\ + madmutt [ -nR ] [ -e ] [ -F ] -Q [ -Q ] [...]\n\ + madmutt [ -nR ] [ -e ] [ -F ] -A [ -A ] [...]\n\ + madmutt [ -nR ] [ -e ] [ -F ] -t"); + puts + _("\ + madmutt [ -nR ] [ -e ] [ -F ] -T\n\ + madmutt [ -nx ] [ -e ] [ -a ] [ -F ] [ -H ] [ -i ] [ -s ] [ -b ] [ -c ] [ ... ]\n\ + madmutt [ -n ] [ -e ] [ -F ] -p\n\ + madmutt -v\n\ \n\ options:\n\ -A \texpand the given alias\n\ -a \tattach a file to the message\n\ -b
\tspecify a blind carbon-copy (BCC) address\n\ - -c
\tspecify a carbon-copy (CC) address\n\ + -c
\tspecify a carbon-copy (CC) address"); + puts _("\ -e \tspecify a command to be executed after initialization\n\ -f \tspecify which mailbox to read\n\ - -F \tspecify an alternate muttrc file\n\ + -F \tspecify an alternate muttrngc file\n\ -g \tspecify a newsserver (if compiled with NNTP)\n\ -G\t\tselect a newsgroup (if compiled with NNTP)\n\ -H \tspecify a draft file to read header and body from\n\ - -i \tspecify a file which Mutt-ng should include in the body\n\ + -i \tspecify a file which Madmutt should include in the body"); + puts _("\ + -d \t specify debugging level of Madmutt\n\ -m \tspecify a default mailbox type\n\ - -n\t\tcauses Mutt-ng not to read the system Muttngrc\n\ + -n\t\tcauses Madmutt not to read the system Madmuttrc\n\ -p\t\trecall a postponed message\n\ -Q \tquery a configuration variable\n\ -R\t\topen mailbox in read-only mode\n\ - -s \tspecify a subject (must be in quotes if it has spaces)\n\ + -s \tspecify a subject (must be in quotes if it has spaces)"); + puts _("\ + -t\t\tprint the value of all variables to stdout\n\ + -T\t\tprint the value of all changed variables to stdout\n\ -v\t\tshow version and compile-time definitions\n\ - -x\t\tsimulate the mailx send mode\n\ -y\t\tselect a mailbox specified in your `mailboxes' list\n\ -z\t\texit immediately if there are no messages in the mailbox\n\ -Z\t\topen the first folder with new message, exit immediately if none\n\ @@ -139,411 +139,286 @@ options:\n\ static void show_version (void) { struct utsname uts; +#ifdef USE_LIBESMTP + char buf[STRING]; +#endif - puts (mutt_make_version()); + puts (mutt_make_version (1)); puts (_(Notice)); uname (&uts); #ifdef _AIX - printf ("System: %s %s.%s", uts.sysname, uts.version, uts.release); + printf ("System:\n %s %s.%s", uts.sysname, uts.version, uts.release); #elif defined (SCO) - printf ("System: SCO %s", uts.release); + printf ("System:\n SCO %s", uts.release); #else - printf ("System: %s %s", uts.sysname, uts.release); + printf ("System:\n %s %s", uts.sysname, uts.release); #endif - printf (" (%s)", uts.machine); + printf (" (%s)\nExternal Libraries:\n", uts.machine); #ifdef NCURSES_VERSION - printf (" [using ncurses %s]", NCURSES_VERSION); + printf (" ncurses %s\n", NCURSES_VERSION); #elif defined(USE_SLANG_CURSES) - printf (" [using slang %d]", SLANG_VERSION); + printf (" slang %d\n", SLANG_VERSION); #endif #ifdef _LIBICONV_VERSION - printf (" [using libiconv %d.%d]", _LIBICONV_VERSION >> 8, - _LIBICONV_VERSION & 0xff); + printf (" libiconv %d.%d\n", _LIBICONV_VERSION >> 8, + _LIBICONV_VERSION & 0xff); #endif #ifdef HAVE_LIBIDN - printf (" [using libidn %s (compiled with %s)]", stringprep_check_version (NULL), - STRINGPREP_VERSION); + printf (" libidn %s (compiled with %s)\n", + stringprep_check_version (NULL), STRINGPREP_VERSION); #endif - - puts (_("\nCompile options:")); -#ifdef DOMAIN - printf ("DOMAIN=\"%s\"\n", DOMAIN); -#else - puts ("-DOMAIN"); +#ifdef USE_LIBESMTP + smtp_version (buf, sizeof (buf), 0); + printf (" libESMTP %s\n", buf); #endif -#ifdef DEBUG - puts ("+DEBUG"); -#else - puts ("-DEBUG"); +#ifdef USE_HCACHE +#if defined(HAVE_QDBM) + printf (" qdbm %s\n", dpversion); +#elif defined(HAVE_GDBM) + printf (" gdbm %s\n", gdbm_version); +#elif defined(HAVE_DB4) + printf (" DB4 %d.%d.%d\n", DB_VERSION_MAJOR, DB_VERSION_MINOR, + DB_VERSION_PATCH); +#endif #endif - - - puts ( +#ifdef USE_GNUTLS + printf (" gnutls %s\n", LIBGNUTLS_VERSION); +#endif -#ifdef HOMESPOOL - "+HOMESPOOL " -#else - "-HOMESPOOL " +#ifdef USE_SSL + printf (" %s\n",OPENSSL_VERSION_TEXT); #endif -#ifdef USE_SETGID - "+USE_SETGID " -#else - "-USE_SETGID " +#ifdef CRYPT_BACKEND_GPGME + printf (" gpgme %s\n", GPGME_VERSION); #endif -#ifdef USE_DOTLOCK - "+USE_DOTLOCK " + puts (_("Compile Options:")); + + puts ( +#ifdef HOMESPOOL + " +HOMESPOOL " #else - "-USE_DOTLOCK " + " -HOMESPOOL " #endif - -#ifdef DL_STANDALONE - "+DL_STANDALONE " +#ifdef USE_SETGID + "+USE_SETGID " #else - "-DL_STANDALONE " + "-USE_SETGID " #endif - - "\n" - #ifdef USE_FCNTL - "+USE_FCNTL " + "+USE_FCNTL " #else - "-USE_FCNTL " + "-USE_FCNTL " #endif - #ifdef USE_FLOCK - "+USE_FLOCK " + "+USE_FLOCK " #else - "-USE_FLOCK " + "-USE_FLOCK " #endif - -#ifdef USE_INODESORT - "+USE_INODESORT " +#ifdef USE_HCACHE + "+USE_HCACHE " #else - "-USE_INODESORT " + "-USE_HCACHE " #endif - ); + ); puts ( -#ifdef USE_POP - "+USE_POP " -#else - "-USE_POP " -#endif - #ifdef USE_NNTP - "+USE_NNTP " -#else - "-USE_NNTP " -#endif - -#ifdef USE_IMAP - "+USE_IMAP " + "+USE_NNTP " #else - "-USE_IMAP " + "-USE_NNTP " #endif - -#ifdef IMAP_EDIT_THREADS - "+IMAP_EDIT_THREADS " -#else - "-IMAP_EDIT_THREADS " -#endif - #ifdef USE_GSS - "+USE_GSS " + "+USE_GSS " #else - "-USE_GSS " + "-USE_GSS " #endif - - #ifdef USE_SSL - "+USE_SSL " + "+USE_SSL " #else - "-USE_SSL " + "-USE_SSL " #endif - #ifdef USE_GNUTLS - "+USE_GNUTLS " + "+USE_GNUTLS " #else - "-USE_GNUTLS " + "-USE_GNUTLS " #endif - -#ifdef USE_GNUTLS - "+USE_GNUTLS " -#else - "-USE_GNUTLS " -#endif - #ifdef USE_SASL - "+USE_SASL " -#else - "-USE_SASL " -#endif -#ifdef USE_SASL2 - "+USE_SASL2 " + "+USE_SASL " #else - "-USE_SASL2 " + "-USE_SASL " #endif - #ifdef USE_LIBESMTP - "+USE_LIBESMTP " + "+USE_LIBESMTP " #else - "-USE_LIBESMTP " + "-USE_LIBESMTP " #endif - "\n" - + "\n " #ifdef HAVE_REGCOMP - "+HAVE_REGCOMP " -#else - "-HAVE_REGCOMP " -#endif - -#ifdef USE_GNU_REGEX - "+USE_GNU_REGEX " -#else - "-USE_GNU_REGEX " -#endif - -#ifdef USE_COMPRESSED - "+COMPRESSED " + "+HAVE_REGCOMP " #else - "-COMPRESSED " + "-HAVE_REGCOMP " #endif - - "\n" - + "\n " #ifdef HAVE_COLOR - "+HAVE_COLOR " + "+HAVE_COLOR " #else - "-HAVE_COLOR " + "-HAVE_COLOR " #endif - #ifdef HAVE_START_COLOR - "+HAVE_START_COLOR " + "+HAVE_START_COLOR " #else - "-HAVE_START_COLOR " + "-HAVE_START_COLOR " #endif - #ifdef HAVE_TYPEAHEAD - "+HAVE_TYPEAHEAD " + "+HAVE_TYPEAHEAD " #else - "-HAVE_TYPEAHEAD " + "-HAVE_TYPEAHEAD " #endif - #ifdef HAVE_BKGDSET - "+HAVE_BKGDSET " + "+HAVE_BKGDSET " #else - "-HAVE_BKGDSET " + "-HAVE_BKGDSET " #endif - - "\n" - + "\n " #ifdef HAVE_CURS_SET - "+HAVE_CURS_SET " + "+HAVE_CURS_SET " #else - "-HAVE_CURS_SET " + "-HAVE_CURS_SET " #endif - #ifdef HAVE_META - "+HAVE_META " + "+HAVE_META " #else - "-HAVE_META " + "-HAVE_META " #endif - #ifdef HAVE_RESIZETERM - "+HAVE_RESIZETERM " + "+HAVE_RESIZETERM " #else - "-HAVE_RESIZETERM " + "-HAVE_RESIZETERM " #endif - ); - + ); + puts ( -#ifdef CRYPT_BACKEND_CLASSIC_PGP - "+CRYPT_BACKEND_CLASSIC_PGP " -#else - "-CRYPT_BACKEND_CLASSIC_PGP " -#endif -#ifdef CRYPT_BACKEND_CLASSIC_SMIME - "+CRYPT_BACKEND_CLASSIC_SMIME " -#else - "-CRYPT_BACKEND_CLASSIC_SMIME " -#endif #ifdef CRYPT_BACKEND_GPGME - "+CRYPT_BACKEND_GPGME " -#else - "-CRYPT_BACKEND_GPGME " -#endif - -#ifdef BUFFY_SIZE - "+BUFFY_SIZE " -#else - "-BUFFY_SIZE " -#endif -#ifdef EXACT_ADDRESS - "+EXACT_ADDRESS " -#else - "-EXACT_ADDRESS " -#endif - -#ifdef SUN_ATTACHMENT - "+SUN_ATTACHMENT " + "+CRYPT_BACKEND_GPGME " #else - "-SUN_ATTACHMENT " + "-CRYPT_BACKEND_GPGME " #endif - - "\n" - + "\n " #ifdef ENABLE_NLS - "+ENABLE_NLS " -#else - "-ENABLE_NLS " -#endif - -#ifdef LOCALES_HACK - "+LOCALES_HACK " + "+ENABLE_NLS " #else - "-LOCALES_HACK " + "-ENABLE_NLS " #endif - #ifdef HAVE_WC_FUNCS - "+HAVE_WC_FUNCS " + "+HAVE_WC_FUNCS " #else - "-HAVE_WC_FUNCS " + "-HAVE_WC_FUNCS " #endif - #ifdef HAVE_LANGINFO_CODESET - "+HAVE_LANGINFO_CODESET " + "+HAVE_LANGINFO_CODESET " #else - "-HAVE_LANGINFO_CODESET " + "-HAVE_LANGINFO_CODESET " #endif - - #ifdef HAVE_LANGINFO_YESEXPR - "+HAVE_LANGINFO_YESEXPR " -#else - "-HAVE_LANGINFO_YESEXPR " -#endif - - "\n" - -#if HAVE_ICONV - "+HAVE_ICONV " -#else - "-HAVE_ICONV " -#endif - -#if ICONV_NONTRANS - "+ICONV_NONTRANS " + "+HAVE_LANGINFO_YESEXPR " #else - "-ICONV_NONTRANS " + "-HAVE_LANGINFO_YESEXPR " #endif - -#if HAVE_LIBIDN - "+HAVE_LIBIDN " + "\n " +#ifdef HAVE_ICONV + "+HAVE_ICONV " #else - "-HAVE_LIBIDN " + "-HAVE_ICONV " #endif - -#if HAVE_GETSID - "+HAVE_GETSID " -#else - "-HAVE_GETSID " -#endif - -#if HAVE_GETADDRINFO - "+HAVE_GETADDRINFO " +#ifdef HAVE_LIBIDN + "+HAVE_LIBIDN " #else - "-HAVE_GETADDRINFO " + "-HAVE_LIBIDN " #endif - -#if USE_HCACHE - "+USE_HCACHE " +#ifdef HAVE_GETSID + "+HAVE_GETSID " #else - "-USE_HCACHE " + "-HAVE_GETSID " #endif - -#if USE_HCACHE - "+USE_HCACHE " +#ifdef HAVE_GETADDRINFO + "+HAVE_GETADDRINFO " #else - "-USE_HCACHE " + "-HAVE_GETADDRINFO " #endif + ); - ); + puts (_("Built-In Defaults:")); #ifdef ISPELL - printf ("ISPELL=\"%s\"\n", ISPELL); + printf (" +ISPELL=\"%s\"\n", ISPELL); #else - puts ("-ISPELL"); + puts (" -ISPELL"); #endif - printf ("SENDMAIL=\"%s\"\n", SENDMAIL); - printf ("MAILPATH=\"%s\"\n", MAILPATH); - printf ("PKGDATADIR=\"%s\"\n", PKGDATADIR); - printf ("SYSCONFDIR=\"%s\"\n", SYSCONFDIR); - printf ("EXECSHELL=\"%s\"\n", EXECSHELL); + printf (" +SENDMAIL=\"%s\"\n", SENDMAIL); + printf (" +MAILPATH=\"%s\"\n", MAILPATH); + printf (" +PKGDATADIR=\"%s\"\n", PKGDATADIR); + printf (" +PKGDOCDIR=\"%s\"\n", PKGDOCDIR); + printf (" +SYSCONFDIR=\"%s\"\n", SYSCONFDIR); #ifdef MIXMASTER - printf ("MIXMASTER=\"%s\"\n", MIXMASTER); + printf (" +MIXMASTER=\"%s\"\n\n", MIXMASTER); #else - puts ("-MIXMASTER"); + puts (" -MIXMASTER\n"); #endif - puts(_(ReachingUs)); + puts (_("MadMutt is based on Madmutt wich was based on Mutt before\n")); - mutt_print_patchlist(); - exit (0); } static void start_curses (void) { - km_init (); /* must come before mutt_init */ + km_init (); /* must come before mutt_init */ #ifdef USE_SLANG_CURSES - SLtt_Ignore_Beep = 1; /* don't do that #*$@^! annoying visual beep! */ - SLsmg_Display_Eight_Bit = 128; /* characters above this are printable */ - SLtt_set_color(0, NULL, "default", "default"); + SLtt_Ignore_Beep = 1; /* don't do that #*$@^! annoying visual beep! */ + SLsmg_Display_Eight_Bit = 128; /* characters above this are printable */ + SLtt_set_color (0, NULL, "default", "default"); #else /* should come before initscr() so that ncurses 4.2 doesn't try to install its own SIGWINCH handler */ - mutt_signal_init (); + mutt_signal_initialize (); #endif - if (initscr () == NULL) - { + if (initscr () == NULL) { puts _("Error initializing terminal."); + exit (1); } -#if 1 /* USE_SLANG_CURSES - commenting out suggested in #455. */ - /* slang requires the signal handlers to be set after initializing */ - mutt_signal_init (); -#endif + mutt_signal_initialize (); ci_start_color (); keypad (stdscr, TRUE); cbreak (); noecho (); -#if HAVE_TYPEAHEAD - typeahead (-1); /* simulate smooth scrolling */ +#ifdef HAVE_TYPEAHEAD + typeahead (-1); /* simulate smooth scrolling */ #endif -#if HAVE_META +#ifdef HAVE_META meta (stdscr, TRUE); #endif } -#define M_IGNORE (1<<0) /* -z */ -#define M_BUFFY (1<<1) /* -Z */ -#define M_NOSYSRC (1<<2) /* -n */ -#define M_RO (1<<3) /* -R */ -#define M_SELECT (1<<4) /* -y */ +#define M_IGNORE (1<<0) /* -z */ +#define M_BUFFY (1<<1) /* -Z */ +#define M_NOSYSRC (1<<2) /* -n */ +#define M_RO (1<<3) /* -R */ +#define M_SELECT (1<<4) /* -y */ #ifdef USE_NNTP -#define M_NEWS (1<<5) /* -g and -G */ +#define M_NEWS (1<<5) /* -g and -G */ #endif int main (int argc, char **argv) @@ -554,25 +429,25 @@ int main (int argc, char **argv) char *draftFile = NULL; char *newMagic = NULL; HEADER *msg = NULL; - LIST *attach = NULL; - LIST *commands = NULL; - LIST *queries = NULL; - LIST *alias_queries = NULL; + string_list_t *attach = NULL; + string_list_t *commands = NULL; + string_list_t *queries = NULL; + string_list_t *alias_queries = NULL; int sendflags = 0; int flags = 0; int version = 0; int i; int explicit_folder = 0; - extern char *optarg; - extern int optind; + int dump_variables = -1; + /* initialize random number for tmp file creation */ + srand48((unsigned int) time (NULL)); + /* sanity check against stupid administrators */ - if(getegid() != getgid()) - { - fprintf(stderr, "%s: I don't want to run with privileges!\n", - argv[0]); - exit(1); + if (getegid () != getgid ()) { + fprintf (stderr, "%s: I don't want to run with privileges!\n", argv[0]); + exit (1); } #ifdef ENABLE_NLS @@ -586,148 +461,136 @@ int main (int argc, char **argv) mutt_error = mutt_nocurses_error; mutt_message = mutt_nocurses_error; - SRAND (time (NULL)); + srand48 (time (NULL)); umask (077); - memset (Options, 0, sizeof (Options)); - memset (QuadOptions, 0, sizeof (QuadOptions)); - + p_clear(Options, countof(Options)); + p_clear(QuadOptions, countof(QuadOptions)); + + while ((i = getopt(argc, argv, "A:a:b:F:f:c:e:H:s:i:hm:npQ:RTtvyzZ" #ifdef USE_NNTP - while ((i = getopt (argc, argv, "A:a:b:F:f:c:d:e:g:GH:s:i:hm:npQ:RvxyzZ")) != EOF) -#else - while ((i = getopt (argc, argv, "A:a:b:F:f:c:d:e:H:s:i:hm:npQ:RvxyzZ")) != EOF) -#endif - switch (i) - { - case 'A': - alias_queries = mutt_add_list (alias_queries, optarg); - break; - case 'a': - attach = mutt_add_list (attach, optarg); - break; - - case 'F': - mutt_str_replace (&Muttrc, optarg); - break; - - case 'f': - strfcpy (folder, optarg, sizeof (folder)); - explicit_folder = 1; - break; - - case 'b': - case 'c': - if (!msg) - msg = mutt_new_header (); - if (!msg->env) - msg->env = mutt_new_envelope (); - if (i == 'b') - msg->env->bcc = rfc822_parse_adrlist (msg->env->bcc, optarg); - else - msg->env->cc = rfc822_parse_adrlist (msg->env->cc, optarg); - break; - - case 'd': -#ifdef DEBUG - debuglevel = atoi (optarg); - printf (_("Debugging at level %d.\n"), debuglevel); -#else - printf _("DEBUG was not defined during compilation. Ignored.\n"); + "g:G" #endif - break; + )) >= 0) + switch (i) { + case 'A': + alias_queries = mutt_add_list (alias_queries, optarg); + break; + case 'a': + if (strlen(optarg)<=512) + attach = mutt_add_list (attach, optarg); + else{ + printf("too long arguments. exiting ...\n"); + exit(1); + } + break; - case 'e': - commands = mutt_add_list (commands, optarg); - break; + case 'F': + m_strreplace(&Muttrc, optarg); + break; - case 'H': - draftFile = optarg; - break; + case 'f': + m_strcpy(folder, sizeof(folder), optarg); + explicit_folder = 1; + break; - case 'i': - includeFile = optarg; - break; + case 'b': + case 'c': + if (!msg) + msg = header_new(); + if (!msg->env) + msg->env = envelope_new(); + if (i == 'b') + msg->env->bcc = rfc822_parse_adrlist (msg->env->bcc, optarg); + else + msg->env->cc = rfc822_parse_adrlist (msg->env->cc, optarg); + break; - case 'm': - /* should take precedence over .muttrc setting, so save it for later */ - newMagic = optarg; - break; + case 't': + dump_variables = 2; + break; - case 'n': - flags |= M_NOSYSRC; - break; + case 'T': + dump_variables = 1; + break; - case 'p': - sendflags |= SENDPOSTPONED; - break; + case 'e': + commands = mutt_add_list (commands, optarg); + break; - case 'Q': - queries = mutt_add_list (queries, optarg); - break; - - case 'R': - flags |= M_RO; /* read-only mode */ - break; + case 'H': + draftFile = optarg; + break; - case 's': - subject = optarg; - break; + case 'i': + includeFile = optarg; + break; - case 'v': - version++; - break; + case 'm': + /* should take precedence over .muttrc setting, so save it for later */ + newMagic = optarg; + break; - case 'x': /* mailx compatible send mode */ - sendflags |= SENDMAILX; - break; + case 'n': + flags |= M_NOSYSRC; + break; - case 'y': /* My special hack mode */ - flags |= M_SELECT; - break; + case 'p': + sendflags |= SENDPOSTPONED; + break; -#ifdef USE_NNTP - case 'g': /* Specify a newsserver */ - { - char buf[LONG_STRING]; + case 'Q': + queries = mutt_add_list (queries, optarg); + break; + + case 'R': + flags |= M_RO; /* read-only mode */ + break; - snprintf (buf, sizeof (buf), "set news_server=%s", optarg); - commands = mutt_add_list (commands, buf); - } + case 's': + subject = optarg; + break; - case 'G': /* List of newsgroups */ - flags |= M_SELECT | M_NEWS; - break; -#endif + case 'v': + version++; + break; - case 'z': - flags |= M_IGNORE; - break; + case 'y': /* My special hack mode */ + flags |= M_SELECT; + break; - case 'Z': - flags |= M_BUFFY | M_IGNORE; - break; +#ifdef USE_NNTP + case 'g': /* Specify a newsserver */ + { + char buf[LONG_STRING]; - default: - mutt_usage (); - } + snprintf (buf, sizeof (buf), "set nntp_host=%s", optarg); + commands = mutt_add_list (commands, buf); + } - switch (version) - { - case 0: + case 'G': /* List of newsgroups */ + flags |= M_SELECT | M_NEWS; break; - case 1: - show_version (); +#endif + + case 'z': + flags |= M_IGNORE; + break; + + case 'Z': + flags |= M_BUFFY | M_IGNORE; break; + default: - puts (mutt_make_version ()); - puts (_(Copyright)); - puts (_(ReachingUs)); - exit (0); + mutt_usage (); + } + + if (version) { + show_version (); } /* Check for a batch send. */ - if (!isatty (0) || queries || alias_queries) - { + if (!isatty (0) || queries || alias_queries || dump_variables > 0) { set_option (OPTNOCURSES); sendflags = SENDBATCH; } @@ -739,40 +602,38 @@ int main (int argc, char **argv) /* set defaults and read init files */ mutt_init (flags & M_NOSYSRC, commands); - mutt_free_list (&commands); + string_list_wipe(&commands); - /* Initialize crypto backends. */ + /* Initialize crypto */ crypt_init (); if (queries) return mutt_query_variables (queries); + if (dump_variables > 0) + return (mutt_dump_variables (dump_variables-1)); - if (alias_queries) - { + if (alias_queries) { int rv = 0; - ADDRESS *a; - for (; alias_queries; alias_queries = alias_queries->next) - { - if ((a = mutt_lookup_alias (alias_queries->data))) - { - /* output in machine-readable form */ - mutt_addrlist_to_idna (a, NULL); - mutt_write_address_list (a, stdout, 0, 0); - } - else - { - rv = 1; - printf ("%s\n", alias_queries->data); + address_t *a; + + for (; alias_queries; alias_queries = alias_queries->next) { + if ((a = address_list_dup(alias_lookup(alias_queries->data)))) { + /* output in machine-readable form */ + mutt_addrlist_to_idna (a, NULL); + mutt_write_address_list (a, stdout, 0, 0); + address_list_wipe(&a); + } else { + rv = 1; + printf ("%s\n", alias_queries->data); } } return rv; } - + if (newMagic) mx_set_magic (newMagic); - if (!option (OPTNOCURSES)) - { + if (!option (OPTNOCURSES)) { SETCOLOR (MT_COLOR_NORMAL); clear (); mutt_error = mutt_curses_error; @@ -780,162 +641,143 @@ int main (int argc, char **argv) } /* Create the Maildir directory if it doesn't exist. */ - if (!option (OPTNOCURSES) && Maildir) - { + if (!option (OPTNOCURSES) && Maildir) { struct stat sb; char fpath[_POSIX_PATH_MAX]; - char msg[STRING]; + char mesg[STRING]; - strfcpy (fpath, Maildir, sizeof (fpath)); + m_strcpy(fpath, sizeof(fpath), Maildir); mutt_expand_path (fpath, sizeof (fpath)); -#ifdef USE_IMAP /* we're not connected yet - skip mail folder creation */ - if (!mx_is_imap (fpath)) -#endif - if (stat (fpath, &sb) == -1 && errno == ENOENT) - { - snprintf (msg, sizeof (msg), _("%s does not exist. Create it?"), Maildir); - if (mutt_yesorno (msg, M_YES) == M_YES) - { - if (mkdir (fpath, 0700) == -1 && errno != EEXIST) - mutt_error ( _("Can't create %s: %s."), Maildir, strerror (errno)); + if (mx_get_magic (fpath) != M_IMAP) + if (stat (fpath, &sb) == -1 && errno == ENOENT) { + snprintf (mesg, sizeof (mesg), _("%s does not exist. Create it?"), + Maildir); + if (mutt_yesorno (mesg, M_YES) == M_YES) { + if (mkdir (fpath, 0700) == -1 && errno != EEXIST) + mutt_error (_("Can't create %s: %s."), Maildir, strerror (errno)); + } } - } } - if (sendflags & SENDPOSTPONED) - { + if (sendflags & SENDPOSTPONED) { if (!option (OPTNOCURSES)) mutt_flushinp (); ci_send_message (SENDPOSTPONED, NULL, NULL, NULL, NULL); mutt_endwin (NULL); } - else if (subject || msg || sendflags || draftFile || includeFile || attach || - optind < argc) - { + else if (subject || msg || sendflags || draftFile || includeFile || attach + || optind < argc) { FILE *fin = NULL; char buf[LONG_STRING]; char *tempfile = NULL, *infile = NULL; char *bodytext = NULL; - + if (!option (OPTNOCURSES)) mutt_flushinp (); if (!msg) - msg = mutt_new_header (); + msg = header_new(); if (draftFile) infile = draftFile; - else - { + else { if (!msg->env) - msg->env = mutt_new_envelope (); + msg->env = envelope_new(); - for (i = optind; i < argc; i++) - { - if (url_check_scheme (argv[i]) == U_MAILTO) - url_parse_mailto (msg->env, &bodytext, argv[i]); - else - msg->env->to = rfc822_parse_adrlist (msg->env->to, argv[i]); + for (i = optind; i < argc; i++) { + if (url_check_scheme (argv[i]) == U_MAILTO) + url_parse_mailto (msg->env, &bodytext, argv[i]); + else + msg->env->to = rfc822_parse_adrlist (msg->env->to, argv[i]); } - if (option (OPTAUTOEDIT) && !msg->env->to && !msg->env->cc) - { - if (!option (OPTNOCURSES)) - mutt_endwin (NULL); - fputs (_("No recipients specified.\n"), stderr); - exit (1); + if (option (OPTAUTOEDIT) && !msg->env->to && !msg->env->cc) { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + fputs (_("No recipients specified.\n"), stderr); + exit (1); } if (subject) - msg->env->subject = safe_strdup (subject); + msg->env->subject = m_strdup(subject); if (includeFile) - infile = includeFile; + infile = includeFile; } - if (infile || bodytext) - { - if (infile) - { - if (mutt_strcmp ("-", infile) == 0) - fin = stdin; - else - { - char path[_POSIX_PATH_MAX]; - - strfcpy (path, infile, sizeof (path)); - mutt_expand_path (path, sizeof (path)); - if ((fin = fopen (path, "r")) == NULL) - { - if (!option (OPTNOCURSES)) - mutt_endwin (NULL); - perror (path); - exit (1); - } - } + if (infile || bodytext) { + if (infile) { + if (m_strcmp("-", infile) == 0) + fin = stdin; + else { + char path[_POSIX_PATH_MAX]; + + m_strcpy(path, sizeof(path), infile); + mutt_expand_path (path, sizeof (path)); + if ((fin = fopen (path, "r")) == NULL) { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + perror (path); + exit (1); + } + } } else - fin = NULL; + fin = NULL; mutt_mktemp (buf); - tempfile = safe_strdup (buf); + tempfile = m_strdup(buf); if (draftFile) - msg->env = mutt_read_rfc822_header (fin, NULL, 1, 0); + msg->env = mutt_read_rfc822_header (fin, NULL, 1, 0); /* is the following if still needed? */ - - if (tempfile) - { - FILE *fout; - - if ((fout = safe_fopen (tempfile, "w")) == NULL) - { - if (!option (OPTNOCURSES)) - mutt_endwin (NULL); - perror (tempfile); - fclose (fin); - FREE (&tempfile); - exit (1); - } - if (fin) - mutt_copy_stream (fin, fout); - else if (bodytext) - fputs (bodytext, fout); - fclose (fout); - if (fin && fin != stdin) - fclose (fin); + + if (tempfile) { + FILE *fout; + + if ((fout = safe_fopen (tempfile, "w")) == NULL) { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + perror (tempfile); + m_fclose(&fin); + p_delete(&tempfile); + exit (1); + } + if (fin) + mutt_copy_stream (fin, fout); + else if (bodytext) + fputs (bodytext, fout); + m_fclose(&fout); + if (fin && fin != stdin) + m_fclose(&fin); } } - FREE (&bodytext); - - if (attach) - { - LIST *t = attach; + p_delete(&bodytext); + + if (attach) { + string_list_t *t = attach; BODY *a = NULL; - while (t) - { - if (a) - { - a->next = mutt_make_file_attach (t->data); - a = a->next; - } - else - msg->content = a = mutt_make_file_attach (t->data); - if (!a) - { - if (!option (OPTNOCURSES)) - mutt_endwin (NULL); - fprintf (stderr, _("%s: unable to attach file.\n"), t->data); - mutt_free_list (&attach); - exit (1); - } - t = t->next; + while (t) { + if (a) { + a->next = mutt_make_file_attach (t->data); + a = a->next; + } + else + msg->content = a = mutt_make_file_attach (t->data); + if (!a) { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + fprintf (stderr, _("%s: unable to attach file.\n"), t->data); + string_list_wipe(&attach); + exit (1); + } + t = t->next; } - mutt_free_list (&attach); + string_list_wipe(&attach); } ci_send_message (sendflags, msg, tempfile, NULL, NULL); @@ -943,82 +785,77 @@ int main (int argc, char **argv) if (!option (OPTNOCURSES)) mutt_endwin (NULL); } - else - { - if (flags & M_BUFFY) - { - if (!mutt_buffy_check (0)) - { - mutt_endwin _("No mailbox with new mail."); - exit (1); + else { + if (flags & M_BUFFY) { + if (!buffy_check (0)) { + mutt_endwin _("No mailbox with new mail."); + + exit (1); } folder[0] = 0; - mutt_buffy (folder, sizeof (folder)); + buffy_next (folder, sizeof (folder)); } - else if (flags & M_SELECT) - { + else if (flags & M_SELECT) { #ifdef USE_NNTP - if (flags & M_NEWS) - { - set_option (OPTNEWS); - if(!(CurrentNewsSrv = mutt_select_newsserver (NewsServer))) - { - mutt_endwin (Errorbuf); - exit (1); - } - } - else -#endif - if (!Incoming) { - mutt_endwin _("No incoming mailboxes defined."); - exit (1); + if (flags & M_NEWS) { + set_option (OPTNEWS); + if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer))) { + mutt_endwin (Errorbuf); + exit (1); + } + } else +#endif + if (!Incoming.len) { + mutt_endwin _("No incoming mailboxes defined."); + + exit (1); } folder[0] = 0; mutt_select_file (folder, sizeof (folder), M_SEL_FOLDER | M_SEL_BUFFY); - if (!folder[0]) - { - mutt_endwin (NULL); - exit (0); + if (!folder[0]) { + mutt_endwin (NULL); + exit (0); } } if (!folder[0]) - strfcpy (folder, NONULL(Spoolfile), sizeof (folder)); + m_strcpy(folder, sizeof(folder), NONULL(Spoolfile)); #ifdef USE_NNTP - if (option (OPTNEWS)) - { + if (option (OPTNEWS)) { unset_option (OPTNEWS); - nntp_expand_path (folder, sizeof (folder), &CurrentNewsSrv->conn->account); - } - else + nntp_expand_path (folder, sizeof (folder), + &CurrentNewsSrv->conn->account); + } else #endif - mutt_expand_path (folder, sizeof (folder)); + mutt_expand_path (folder, sizeof (folder)); - mutt_str_replace (&LastFolder, folder); + m_strreplace(&CurrentFolder, folder); + m_strreplace(&LastFolder, folder); - if (flags & M_IGNORE) - { + if (flags & M_IGNORE) { /* check to see if there are any messages in the folder */ - switch (mx_check_empty (folder)) - { - case -1: - mutt_endwin (strerror (errno)); - exit (1); - case 1: - mutt_endwin _("Mailbox is empty."); - exit (1); + switch (mx_check_empty (folder)) { + case -1: + mutt_endwin (strerror (errno)); + exit (1); + case 1: + mutt_endwin _("Mailbox is empty."); + exit (1); } } mutt_folder_hook (folder); - if((Context = mx_open_mailbox (folder, ((flags & M_RO) || option (OPTREADONLY)) ? M_READONLY : 0, NULL)) - || !explicit_folder) - { + if ((Context = mx_open_mailbox (folder, ((flags & M_RO) + || option (OPTREADONLY)) ? + M_READONLY : 0, NULL)) + || !explicit_folder) { mutt_index_menu (); + if (option (OPTXTERMSETTITLES)) + printf("\033]2;%s\007", NONULL(XtermLeave)); if (Context) - FREE (&Context); + p_delete(&Context); } mutt_endwin (Errorbuf); }