X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=main.c;h=54899d85b667f6c28def0c8dc96e0ccb267487de;hp=95c3ddf6a09085232c224fde0ccdbfc661fd82f8;hb=5e6273c09929249ee7a850934bf12fd03439d923;hpb=74a2265af51ce89bca845adc1d68f273c9933c13 diff --git a/main.c b/main.c index 95c3ddf..54899d8 100644 --- a/main.c +++ b/main.c @@ -19,17 +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/mem.h" -#include "lib/intl.h" -#include "lib/str.h" +#include "lib/debug.h" #include #include @@ -41,6 +47,9 @@ #ifdef HAVE_GETOPT_H #include +#else +extern char *optarg; +extern int optind; #endif #ifdef HAVE_LIBIDN @@ -48,7 +57,33 @@ #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_("\ @@ -62,35 +97,42 @@ 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\n\ -Parts were written/modified by:\n\ -Andreas Krennmair \n\ -Nico Golde \n\ -Rocco Rutte \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) @@ -101,13 +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\ + _("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\ @@ -116,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-ng 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-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\ @@ -143,59 +197,82 @@ 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, + printf (" libiconv %d.%d\n", _LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 0xff); #endif #ifdef HAVE_LIBIDN - printf (" [using libidn %s (compiled with %s)]", + printf (" libidn %s (compiled with %s)\n", stringprep_check_version (NULL), STRINGPREP_VERSION); #endif - puts (_("\nCompile options:")); +#ifdef USE_LIBESMTP + smtp_version (buf, sizeof (buf), 0); + printf (" libESMTP %s\n", buf); +#endif -#ifdef DOMAIN - printf ("DOMAIN=\"%s\"\n", DOMAIN); -#else - puts ("-DOMAIN"); +#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 DEBUG - puts ("+DEBUG"); -#else - puts ("-DEBUG"); +#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"); +#else + puts (" -DEBUG"); +#endif puts ( #ifdef HOMESPOOL - "+HOMESPOOL " + " +HOMESPOOL " #else - "-HOMESPOOL " + " -HOMESPOOL " #endif #ifdef USE_SETGID "+USE_SETGID " @@ -212,7 +289,7 @@ static void show_version (void) #else "-DL_STANDALONE " #endif - "\n" + "\n " #ifdef USE_FCNTL "+USE_FCNTL " #else @@ -227,13 +304,18 @@ static void show_version (void) "+USE_INODESORT " #else "-USE_INODESORT " +#endif +#ifdef USE_HCACHE + "+USE_HCACHE " +#else + "-USE_HCACHE " #endif ); puts ( #ifdef USE_POP - "+USE_POP " + " +USE_POP " #else - "-USE_POP " + " -USE_POP " #endif #ifdef USE_NNTP "+USE_NNTP " @@ -245,11 +327,6 @@ static void show_version (void) #else "-USE_IMAP " #endif -#ifdef IMAP_EDIT_THREADS - "+IMAP_EDIT_THREADS " -#else - "-IMAP_EDIT_THREADS " -#endif #ifdef USE_GSS "+USE_GSS " #else @@ -265,27 +342,17 @@ static void show_version (void) #else "-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 " -#else - "-USE_SASL2 " -#endif #ifdef USE_LIBESMTP "+USE_LIBESMTP " #else "-USE_LIBESMTP " #endif - "\n" + "\n " #ifdef HAVE_REGCOMP "+HAVE_REGCOMP " #else @@ -301,7 +368,7 @@ static void show_version (void) #else "-COMPRESSED " #endif - "\n" + "\n " #ifdef HAVE_COLOR "+HAVE_COLOR " #else @@ -322,7 +389,7 @@ static void show_version (void) #else "-HAVE_BKGDSET " #endif - "\n" + "\n " #ifdef HAVE_CURS_SET "+HAVE_CURS_SET " #else @@ -342,9 +409,9 @@ static void show_version (void) puts ( #ifdef CRYPT_BACKEND_CLASSIC_PGP - "+CRYPT_BACKEND_CLASSIC_PGP " + " +CRYPT_BACKEND_CLASSIC_PGP " #else - "-CRYPT_BACKEND_CLASSIC_PGP " + " -CRYPT_BACKEND_CLASSIC_PGP " #endif #ifdef CRYPT_BACKEND_CLASSIC_SMIME "+CRYPT_BACKEND_CLASSIC_SMIME " @@ -361,17 +428,12 @@ static void show_version (void) #else "-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 " #else @@ -397,7 +459,7 @@ static void show_version (void) #else "-HAVE_LANGINFO_YESEXPR " #endif - "\n" + "\n " #if HAVE_ICONV "+HAVE_ICONV " #else @@ -423,38 +485,37 @@ static void show_version (void) #else "-HAVE_GETADDRINFO " #endif -#if USE_HCACHE - "+USE_HCACHE " -#else - "-USE_HCACHE " -#endif -#if USE_HCACHE - "+USE_HCACHE " + ); + + puts (_("Built-In Defaults:")); + +#ifdef DOMAIN + printf (" +DOMAIN=\"%s\"\n", DOMAIN); #else - "-USE_HCACHE " + puts (" -DOMAIN"); #endif - ); #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); + printf (" +EXECSHELL=\"%s\"\n", EXECSHELL); #ifdef MIXMASTER - printf ("MIXMASTER=\"%s\"\n", MIXMASTER); + printf (" +MIXMASTER=\"%s\"\n\n", MIXMASTER); #else - puts ("-MIXMASTER"); + puts (" -MIXMASTER\n"); #endif puts (_(ReachingUs)); - mutt_print_patchlist (); + puts (_("MadMutt is based on Mutt-ng wich was based on Mutt before\n")); exit (0); } @@ -519,11 +580,13 @@ 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); @@ -543,16 +606,16 @@ 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) + "A:a:b:F:f:c:d:e:g:GH:s:i:hm:npQ:RTtvxyzZ")) != EOF) #else while ((i = - getopt (argc, argv, "A:a:b:F:f:c:d:e:H:s:i:hm:npQ:RvxyzZ")) != EOF) + getopt (argc, argv, "A:a:b:F:f:c:d:e:H:s:i:hm:npQ:RTtvxyzZ")) != EOF) #endif switch (i) { case 'A': @@ -568,11 +631,11 @@ int main (int argc, char **argv) break; case 'F': - mutt_str_replace (&Muttrc, optarg); + str_replace (&Muttrc, optarg); break; case 'f': - strfcpy (folder, optarg, sizeof (folder)); + m_strcpy(folder, sizeof(folder), optarg); explicit_folder = 1; break; @@ -589,12 +652,22 @@ int main (int argc, char **argv) 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"); -#endif + { + char buf[LONG_STRING]; + int level = atoi (optarg); + + snprintf (buf, sizeof (buf), "set debug_level=%d", level); + commands = mutt_add_list (commands, buf); + debug_setlevel (level); + } + break; + + case 't': + dump_variables = 2; + break; + + case 'T': + dump_variables = 1; break; case 'e': @@ -651,7 +724,7 @@ int main (int argc, char **argv) { char buf[LONG_STRING]; - snprintf (buf, sizeof (buf), "set news_server=%s", optarg); + snprintf (buf, sizeof (buf), "set nntp_host=%s", optarg); commands = mutt_add_list (commands, buf); } @@ -679,14 +752,18 @@ int main (int argc, char **argv) show_version (); break; default: - puts (mutt_make_version ()); - puts (_(Copyright)); + 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; } @@ -697,14 +774,17 @@ 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) { int rv = 0; @@ -740,11 +820,11 @@ int main (int argc, char **argv) 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)) + 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?"), @@ -796,7 +876,7 @@ int main (int argc, char **argv) } if (subject) - msg->env->subject = safe_strdup (subject); + msg->env->subject = m_strdup(subject); if (includeFile) infile = includeFile; @@ -804,12 +884,12 @@ int main (int argc, char **argv) if (infile || bodytext) { if (infile) { - if (mutt_strcmp ("-", infile) == 0) + if (m_strcmp("-", infile) == 0) fin = stdin; else { char path[_POSIX_PATH_MAX]; - strfcpy (path, infile, sizeof (path)); + m_strcpy(path, sizeof(path), infile); mutt_expand_path (path, sizeof (path)); if ((fin = fopen (path, "r")) == NULL) { if (!option (OPTNOCURSES)) @@ -823,7 +903,7 @@ int main (int argc, char **argv) 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); @@ -838,7 +918,7 @@ int main (int argc, char **argv) mutt_endwin (NULL); perror (tempfile); fclose (fin); - FREE (&tempfile); + p_delete(&tempfile); exit (1); } if (fin) @@ -851,7 +931,7 @@ int main (int argc, char **argv) } } - FREE (&bodytext); + p_delete(&bodytext); if (attach) { LIST *t = attach; @@ -883,13 +963,13 @@ int main (int argc, char **argv) } else { if (flags & M_BUFFY) { - if (!mutt_buffy_check (0)) { + 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) { #ifdef USE_NNTP @@ -916,7 +996,7 @@ int main (int argc, char **argv) } if (!folder[0]) - strfcpy (folder, NONULL (Spoolfile), sizeof (folder)); + m_strcpy(folder, sizeof(folder), NONULL(Spoolfile)); #ifdef USE_NNTP if (option (OPTNEWS)) { @@ -928,8 +1008,8 @@ int main (int argc, char **argv) #endif mutt_expand_path (folder, sizeof (folder)); - mutt_str_replace (&CurrentFolder, folder); - mutt_str_replace (&LastFolder, folder); + str_replace (&CurrentFolder, folder); + str_replace (&LastFolder, folder); if (flags & M_IGNORE) { /* check to see if there are any messages in the folder */ @@ -950,8 +1030,10 @@ int main (int argc, char **argv) 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); }