X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=main.c;h=06a8a6f2789108d13ab57e267234c4d92e1abc56;hp=c08122935a44f5dbcf6b54659e63bce2fe0fa335;hb=766fd6928123218aca635827248299ceeeb1d170;hpb=16ff93bd19515d67ea15468b4adb35395970a559 diff --git a/main.c b/main.c index c081229..06a8a6f 100644 --- a/main.c +++ b/main.c @@ -1,22 +1,17 @@ /* + * 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 @@ -24,13 +19,23 @@ # include "config.h" #endif +#include +#include +#include +#include + #include "mutt.h" +#include "mx.h" +#include "buffy.h" +#include "sort.h" +#include "mutt_crypt.h" #include "mutt_curses.h" #include "keymap.h" -#include "mailbox.h" #include "url.h" -#include "mutt_crypt.h" #include "mutt_idna.h" +#include "xterm.h" + +#include "lib/debug.h" #include #include @@ -42,6 +47,9 @@ #ifdef HAVE_GETOPT_H #include +#else +extern char *optarg; +extern int optind; #endif #ifdef HAVE_LIBIDN @@ -49,45 +57,82 @@ #endif #ifdef USE_NNTP -#include +#include "nntp/nntp.h" +#endif + +#ifdef USE_LIBESMTP +#include +#endif + +#ifdef USE_HCACHE +#if HAVE_QDBM +#include +#elif HAVE_GDBM +#include +#elif HAVE_DB4 +#include +#endif +#endif + +#ifdef USE_GNUTLS +#include +#endif + +#ifdef CRYPT_BACKEND_GPGME +#include +#endif + +#ifdef USE_SSL +#include #endif static const char *ReachingUs = N_("\ To contact the developers, please mail to .\n\ +To visit the Mutt-ng homepage go to http://www.muttng.org.\n\ To report a bug, please use the fleang(1) utility.\n"); static const char *Notice = N_("\ Copyright (C) 1996-2002 Michael R. Elkins and others.\n\ -Mutt comes with ABSOLUTELY NO WARRANTY; for details type `muttng -vv'.\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\ +static const char *Copyright_Mutt = N_("\ +Copyright (C) 1996-2004 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) 1997-2005 Thomas Roessler \n\ +Copyright (C) 1998-2005 Werner Koch \n\ +Copyright (C) 1999-2005 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\ +Copyright (C) 2000-2002 Edmund Grimley Evans \n"); + +static const char *Copyright_Mutt_NG = N_("\ +Copyright (C) 2005:\n\ + Parts were written/modified by:\n\ + Andreas Krennmair \n\ + Nico Golde \n\ + Rocco Rutte \n\ \n\ Lots of others not mentioned here contributed lots of code,\n\ -fixes, and suggestions.\n\ +fixes, and suggestions."); + +static const char* Copyright_GPL_1 = 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\ + (at your option) any later version.\n"); + +static const char* Copyright_GPL_2 = 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\ + GNU General Public License for more details.\n"); + +static const char* Copyright_GPL_3 = 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\ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\ "); void mutt_exit (int code) @@ -98,12 +143,16 @@ void mutt_exit (int code) static void mutt_usage (void) { - puts (mutt_make_version ()); + puts (mutt_make_version (1)); - puts _( -"usage: muttng [ -nRyzZ ] [ -e ] [ -F ] [ -m ] [ -f ]\n\ + puts + _("usage: muttng [ -nRyzZ ] [ -e ] [ -F ] [ -m ] [ -f ]\n\ muttng [ -nR ] [ -e ] [ -F ] -Q [ -Q ] [...]\n\ muttng [ -nR ] [ -e ] [ -F ] -A [ -A ] [...]\n\ + muttng [ -nR ] [ -e ] [ -F ] -t"); + puts + _("\ + muttng [ -nR ] [ -e ] [ -F ] -T\n\ muttng [ -nx ] [ -e ] [ -a ] [ -F ] [ -H ] [ -i ] [ -s ] [ -b ] [ -c ] [ ... ]\n\ muttng [ -n ] [ -e ] [ -F ] -p\n\ muttng -v[v]\n\ @@ -112,20 +161,29 @@ 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"); +#if DEBUG + puts _(" -d \tlog debugging output to ~/.muttngdebug0"); +#endif + 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 should include in the body\n\ + -i \tspecify a file which Mutt-ng should include in the body"); + puts _("\ + -d \t specify debugging level of Mutt-ng\n\ -m \tspecify a default mailbox type\n\ - -n\t\tcauses Mutt not to read the system Muttrc\n\ + -n\t\tcauses Mutt-ng not to read the system Muttngrc\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\ @@ -139,389 +197,305 @@ 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 USE_HCACHE +#if HAVE_QDBM + printf (" qdbm %s\n", dpversion); +#elif HAVE_GDBM + printf (" gdbm %s\n", gdbm_version); +#elif HAVE_DB4 + printf (" DB4 %d.%d.%d\n", DB_VERSION_MAJOR, DB_VERSION_MINOR, + DB_VERSION_PATCH); +#endif #endif +#ifdef USE_GNUTLS + printf (" gnutls %s\n", LIBGNUTLS_VERSION); +#endif + +#ifdef USE_SSL + printf (" %s\n",OPENSSL_VERSION_TEXT); +#endif + +#ifdef CRYPT_BACKEND_GPGME + printf (" gpgme %s\n", GPGME_VERSION); +#endif + + puts (_("Compile Options:")); + #ifdef DEBUG - puts ("+DEBUG"); + puts (" +DEBUG"); #else - puts ("-DEBUG"); + puts (" -DEBUG"); #endif - - puts ( - #ifdef HOMESPOOL - "+HOMESPOOL " + " +HOMESPOOL " #else - "-HOMESPOOL " + " -HOMESPOOL " #endif - #ifdef USE_SETGID - "+USE_SETGID " + "+USE_SETGID " #else - "-USE_SETGID " + "-USE_SETGID " #endif - #ifdef USE_DOTLOCK - "+USE_DOTLOCK " + "+USE_DOTLOCK " #else - "-USE_DOTLOCK " + "-USE_DOTLOCK " #endif - -#ifdef DL_STANDALONE - "+DL_STANDALONE " -#else - "-DL_STANDALONE " -#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 " + " +USE_POP " #else - "-USE_POP " + " -USE_POP " #endif - #ifdef USE_NNTP - "+USE_NNTP " + "+USE_NNTP " #else - "-USE_NNTP " + "-USE_NNTP " #endif - #ifdef USE_IMAP - "+USE_IMAP " + "+USE_IMAP " #else - "-USE_IMAP " + "-USE_IMAP " #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 " + "+USE_SASL " #else - "-USE_SASL " + "-USE_SASL " #endif -#ifdef USE_SASL2 - "+USE_SASL2 " -#else - "-USE_SASL2 " -#endif - #ifdef USE_LIBESMTP - "+USE_LIBESMTP " + "+USE_LIBESMTP " #else - "-USE_LIBESMTP " + "-USE_LIBESMTP " #endif - "\n" - + "\n " #ifdef HAVE_REGCOMP - "+HAVE_REGCOMP " + "+HAVE_REGCOMP " #else - "-HAVE_REGCOMP " + "-HAVE_REGCOMP " #endif - #ifdef USE_GNU_REGEX - "+USE_GNU_REGEX " + "+USE_GNU_REGEX " #else - "-USE_GNU_REGEX " + "-USE_GNU_REGEX " #endif - -#ifdef USE_COMPRESSED - "+COMPRESSED " -#else - "-COMPRESSED " -#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 " + "+CRYPT_BACKEND_GPGME " #else - "-CRYPT_BACKEND_GPGME " + "-CRYPT_BACKEND_GPGME " #endif - #ifdef BUFFY_SIZE - "+BUFFY_SIZE " + "+BUFFY_SIZE " #else - "-BUFFY_SIZE " + "-BUFFY_SIZE " #endif -#ifdef EXACT_ADDRESS - "+EXACT_ADDRESS " -#else - "-EXACT_ADDRESS " -#endif - -#ifdef SUN_ATTACHMENT - "+SUN_ATTACHMENT " -#else - "-SUN_ATTACHMENT " -#endif - - "\n" - + "\n " #ifdef ENABLE_NLS - "+ENABLE_NLS " + "+ENABLE_NLS " #else - "-ENABLE_NLS " + "-ENABLE_NLS " #endif - -#ifdef LOCALES_HACK - "+LOCALES_HACK " -#else - "-LOCALES_HACK " -#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 " + "+HAVE_LANGINFO_YESEXPR " #else - "-HAVE_LANGINFO_YESEXPR " + "-HAVE_LANGINFO_YESEXPR " #endif - - "\n" - + "\n " #if HAVE_ICONV - "+HAVE_ICONV " + "+HAVE_ICONV " #else - "-HAVE_ICONV " + "-HAVE_ICONV " #endif - #if ICONV_NONTRANS - "+ICONV_NONTRANS " + "+ICONV_NONTRANS " #else - "-ICONV_NONTRANS " + "-ICONV_NONTRANS " #endif - #if HAVE_LIBIDN - "+HAVE_LIBIDN " + "+HAVE_LIBIDN " #else - "-HAVE_LIBIDN " + "-HAVE_LIBIDN " #endif - #if HAVE_GETSID - "+HAVE_GETSID " + "+HAVE_GETSID " #else - "-HAVE_GETSID " + "-HAVE_GETSID " #endif - #if HAVE_GETADDRINFO - "+HAVE_GETADDRINFO " + "+HAVE_GETADDRINFO " #else - "-HAVE_GETADDRINFO " + "-HAVE_GETADDRINFO " #endif + ); -#if USE_HCACHE - "+USE_HCACHE " -#else - "-USE_HCACHE " -#endif - -#if USE_HCACHE - "+USE_HCACHE " -#else - "-USE_HCACHE " -#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 (_(ReachingUs)); + + puts (_("MadMutt is based on Mutt-ng 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 (); #endif - if (initscr () == NULL) - { + if (initscr () == NULL) { puts _("Error initializing terminal."); + exit (1); } -#if 1 /* USE_SLANG_CURSES - commenting out suggested in #455. */ +#if 1 /* USE_SLANG_CURSES - commenting out suggested in #455. */ /* slang requires the signal handlers to be set after initializing */ mutt_signal_init (); #endif @@ -530,20 +504,20 @@ static void start_curses (void) cbreak (); noecho (); #if HAVE_TYPEAHEAD - typeahead (-1); /* simulate smooth scrolling */ + typeahead (-1); /* simulate smooth scrolling */ #endif #if 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) @@ -563,16 +537,16 @@ int main (int argc, char **argv) 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 */ + srand ((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 @@ -589,145 +563,164 @@ int main (int argc, char **argv) SRAND (time (NULL)); umask (077); - memset (Options, 0, sizeof (Options)); - memset (QuadOptions, 0, sizeof (QuadOptions)); - + p_clear(Options, sizeof(Options)); + p_clear(QuadOptions, sizeof(QuadOptions)); + #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); + while ((i = + getopt (argc, argv, + "A:a:b:F:f:c:d:e:g:GH:s:i:hm:npQ:RTtvxyzZ")) != EOF) #else - printf _("DEBUG was not defined during compilation. Ignored.\n"); + while ((i = + getopt (argc, argv, "A:a:b:F:f:c:d:e:H:s:i:hm:npQ:RTtvxyzZ")) != EOF) #endif - break; + 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 = 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 'm': - /* should take precedence over .muttrc setting, so save it for later */ - newMagic = optarg; - break; + case 'd': + { + char buf[LONG_STRING]; + int level = atoi (optarg); - case 'n': - flags |= M_NOSYSRC; - break; + snprintf (buf, sizeof (buf), "set debug_level=%d", level); + commands = mutt_add_list (commands, buf); + debug_setlevel (level); + } + break; - case 'p': - sendflags |= SENDPOSTPONED; - break; + case 't': + dump_variables = 2; + break; - case 'Q': - queries = mutt_add_list (queries, optarg); - break; - - case 'R': - flags |= M_RO; /* read-only mode */ - break; + case 'T': + dump_variables = 1; + break; - case 's': - subject = optarg; - break; + case 'e': + commands = mutt_add_list (commands, optarg); + break; - case 'v': - version++; - break; + case 'H': + draftFile = optarg; + break; - case 'x': /* mailx compatible send mode */ - sendflags |= SENDMAILX; - break; + case 'i': + includeFile = optarg; + break; - case 'y': /* My special hack mode */ - flags |= M_SELECT; - break; + case 'm': + /* should take precedence over .muttrc setting, so save it for later */ + newMagic = optarg; + break; -#ifdef USE_NNTP - case 'g': /* Specify a newsserver */ - { - char buf[LONG_STRING]; + case 'n': + flags |= M_NOSYSRC; + break; - snprintf (buf, sizeof (buf), "set news_server=%s", optarg); - commands = mutt_add_list (commands, buf); - } + case 'p': + sendflags |= SENDPOSTPONED; + break; - case 'G': /* List of newsgroups */ - flags |= M_SELECT | M_NEWS; - break; -#endif + case 'Q': + queries = mutt_add_list (queries, optarg); + break; - case 'z': - flags |= M_IGNORE; - break; + case 'R': + flags |= M_RO; /* read-only mode */ + break; - case 'Z': - flags |= M_BUFFY | M_IGNORE; - break; + case 's': + subject = optarg; + break; - default: - mutt_usage (); - } + case 'v': + version++; + break; + + case 'x': /* mailx compatible send mode */ + sendflags |= SENDMAILX; + break; + + case 'y': /* My special hack mode */ + flags |= M_SELECT; + break; + +#ifdef USE_NNTP + case 'g': /* Specify a newsserver */ + { + char buf[LONG_STRING]; - switch (version) - { - case 0: + snprintf (buf, sizeof (buf), "set nntp_host=%s", optarg); + commands = mutt_add_list (commands, buf); + } + + case 'G': /* List of newsgroups */ + flags |= M_SELECT | M_NEWS; + break; +#endif + + case 'z': + flags |= M_IGNORE; break; - case 1: - show_version (); + + case 'Z': + flags |= M_BUFFY | M_IGNORE; break; + default: - puts (mutt_make_version ()); - puts (_(Copyright)); - puts (_(ReachingUs)); - exit (0); + mutt_usage (); + } + + switch (version) { + case 0: + break; + case 1: + show_version (); + break; + default: + puts (mutt_make_version (1)); + puts (_(Copyright_Mutt)); + puts (_(Copyright_Mutt_NG)); + puts (_(Copyright_GPL_1)); + puts (_(Copyright_GPL_2)); + puts (_(Copyright_GPL_3)); + puts (_(ReachingUs)); + exit (0); } /* 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; } @@ -738,41 +731,40 @@ int main (int argc, char **argv) start_curses (); /* set defaults and read init files */ + mx_init (); mutt_init (flags & M_NOSYSRC, commands); mutt_free_list (&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); + address_t *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); + 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,44 +772,40 @@ 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]; - 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) +#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 (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 (); @@ -826,114 +814,101 @@ int main (int argc, char **argv) if (draftFile) infile = draftFile; - else - { + else { if (!msg->env) - msg->env = mutt_new_envelope (); + msg->env = mutt_new_envelope (); - 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); + fclose (fin); + p_delete(&tempfile); + exit (1); + } + if (fin) + mutt_copy_stream (fin, fout); + else if (bodytext) + fputs (bodytext, fout); + fclose (fout); + if (fin && fin != stdin) + fclose (fin); } } - FREE (&bodytext); - - if (attach) - { + p_delete(&bodytext); + + if (attach) { LIST *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); + mutt_free_list (&attach); + exit (1); + } + t = t->next; } mutt_free_list (&attach); } @@ -943,82 +918,79 @@ 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); - } + 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); + 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); + 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)) + mutt_xterm_set_title (NONULL (XtermLeave)); if (Context) - FREE (&Context); + p_delete(&Context); } mutt_endwin (Errorbuf); }